Hangman (schon wieder...)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

PowerProgrammer

Betreff: Hangman (schon wieder...)

BeitragMi, Okt 04, 2006 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits!

Ich möchte gerne mein kleines Progrämmchen vorstellen: Hangman
Ich denke, eine Erklärung ist überflüssig.

Der Code ist aus meinen Programmieranfängen, daher keine absolute Meisterleistung! Aber ich finde ihn doch ganz nett...

Dateiversion

Hier ist der Code:
Code: [AUSKLAPPEN]
;*******************************************
;*** Hangman                             ***
;*******************************************
;*** Von:   PowerProgrammer (Xairro)     ***
;*** Datum: Unbekannt                    ***
;*******************************************
;*** Erklärung ist überflüssig           ***
;*******************************************


If Instr(CommandLine(),"\schummler") Then megahelp = 1


Graphics 800,600,16,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()

AppTitle "HangMan - by PowerProgrammer (Xairro)"

Dim Letter$(30)
Dim FarbeLetter(30)

J = 0
For I = 65 To 90
   J = J + 1
   Letter$(J) = Chr(I)
Next
Letter$(27) = "Ä"
Letter$(28) = "Ö"
Letter$(29) = "Ü"
Letter$(30) = "ß"

font1 = LoadFont("Arial Black",60,1,0,0)
SetFont font1
Text 400,300,"HangMan",1,1
Flip
figur = LoadImage("figur.bmp")
font2 = LoadFont("Arial Black",20,0,0,0)
font3 = LoadFont("Arial Black",25,0,0,0)

stream = ReadFile("worte.txt")
   anzahl = ReadLine(stream)
   Dim Worte$(anzahl)
   For I = 1 To anzahl
      Worte$(I) = ReadLine(stream)
   Next
CloseFile stream


snd_end  = LoadSound("end.wav")
;snd_main = LoadSound("song.mp3")
;LoopSound snd_main

Delay 1000

.start

AppTitle "HangMan - by PowerProgrammer (Xairro)"

;mainsound = PlaySound(snd_main)


wort$ = Worte$(Rand(anzahl))
wortklein$ = Lower(wort$)
wortlaenge = Len(wort$)
wortverlauf$ = ""
For I = 1 To wortlaenge
   wortverlauf$ = wortverlauf$ + "*"
Next

For I = 1 To 30
   FarbeLetter(I) = 0
Next

Name$ = ""
versuch = 1
megahilfe$ = ""
buchstaben_daneben$ = ""
Repeat
   If versuch = 13 Or Lower(wortverlauf$) = wortklein$ Then Exit
   Color 0,0,0
   Rect 0,0,800,600
   Color 50,50,50
   Oval 200,100,400,400
   AppTitle "HangMan - " + versuch + " - by PowerProgrammer (Xairro)"
   SetFont font2
   Color 255,0,0
   Text 400,250, wortverlauf$,1,1
   Text 400,275, megahilfe$,1,1
   DrawImageRect figur, 350,300, (versuch-1)*100,0, 100,120

   mouse_x = MouseX()
   mouse_y = MouseY()

   SetFont font3

   acegik = 0
   For I = 1 To 30
      If FarbeLetter(I) = 0 Then
         Color 0,0,255
      Else
         Color 80,80,80
      EndIf
      Text 400+Sin(I*12)*200, 300+Cos(I*12)*200, Letter$(I),1,1
      FlushMouse
      If RectsOverlap((400+Sin(I*12)*200)-15,(300+Cos(I*12)*200)-15,30,30,mouse_x,mouse_y,1,1) Then
         Color 255,255,255
         Text 400+Sin(I*12)*200,300+Cos(I*12)*200, Letter$(I),1,1
         If MouseDown(1) Then
            Name$ = Letter$(I)
            acegik = 1
            tata = 1
            FarbeLetter(I) = 1
            Repeat
            Until MouseDown(1) = 0
         EndIf
      EndIf
   Next

   SetFont font2
   Color 255,0,0

   If acegik = 0 Then
      A = GetKey()
      If A > 31 Then Name$ = Name$ + Chr$(A)
      If (A = 8) And Len(Name$) > 0 Then Name$ = Left$(Name$, Len(Name$) - 1)
   EndIf
      Text 400,550, ">" +  Name$ + "_",1,1

   If KeyHit(28) + KeyHit(156) > 0 Or tata = 1 Then
      tata = 0
      If megahelp = 1 And Name$ = "Hilfe!" Then megahilfe$ = wort$
      If Lower(Name$) = wortklein$ Then Exit
      Name$ = Lower(Left(Name$,1))

      If Name$ = "Ä" Then Name$ = "ä"
      If Name$ = "Ö" Then Name$ = "ö"
      If Name$ = "Ü" Then Name$ = "ü"

      I = 1
      ghj$ = ""
      setter = 0
      For I = 1 To wortlaenge
         ghj$ = Mid(wortklein$, I, 1)
         If ghj$ = Name$ Then
            wortverlauf$ = Left(wortverlauf$,I-1) + Upper(Name$) + Mid(wortverlauf$,I+1)
            setter = 1
         EndIf
      Next

      If Lower(wortverlauf$) = wortklein$ Then Exit
      If setter = 0 Then
         versuch = versuch + 1
      EndIf
      If Asc(Name$) > 96 And Asc(Name$) < 123 Then
         aem = Asc(Name$)-96
      Else
         If Name$ = "ä" Then aem = 27
         If Name$ = "ö" Then aem = 28
         If Name$ = "ü" Then aem = 29
         If Name$ = "ß" Then aem = 30
      EndIf
      FarbeLetter(aem) = 1
      Name$ = ""
   EndIf

   Flip
Forever

Color 0,0,0
Rect 0,0,800,600

If versuch < 13 Then
   ;StopChannel mainsound
   AppTitle "HangMan - Gewonnen - ML Soft"
   snd_end_won = PlaySound(snd_end)
   ChannelPitch snd_end_won, 22100
   Color 255,0,0
   SetFont font1
   Text 400,150,"Gewonnen",1,1
   SetFont font2
   Text 400,200,"Versuche: " + versuch,1,1
   SetFont font2
   Text 400,250,"Wort: " + wort$,1,1
Else
   ;StopChannel mainsound
   AppTitle "HangMan - Verloren - ML Soft"
   snd_end_lost = PlaySound(snd_end)
   ChannelPitch snd_end_lost, 8000
   Color 255,0,0
   SetFont font1
   Text 400,150,"Verloren",1,1
   SetFont font2
   Text 400,250,"Wort: " + wort$,1,1
EndIf

DrawImageRect figur, 350,300, (versuch-1)*100,0, 100,120

Color 255,255,255
SetFont font2
Text 400,550,"Weiter mit Tastendruck",1,1
Flip
WaitKey
FlushKeys
Goto start

Er benötigt noch ein Bild, eine Sounddatei und eine Worte-Datei. Dazu dem Link oben folgen.

Ich hoffe, die Goto-Anweisung könnt ihr mir verzeihen Wink

Ich weiß, dass der Code verbesserungsbedürftig ist. Das ist mir klar. Kritik ist natürlich trotzdem erwünscht Laughing

Ich hoffe, es gefällt euch wenigstens Ansatzweise!

Mfg PowerProgrammer

~edit~
Das Syntax-Highlighting brauchte so lange... Code-Tags sind schneller Very Happy
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!
  • Zuletzt bearbeitet von PowerProgrammer am Do, Okt 05, 2006 15:13, insgesamt 3-mal bearbeitet

TheMatrix

BeitragDo, Okt 05, 2006 8:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Scheint noch nicht so ganz zu funktionieren.

Bugs:
-Ich kann mehr als ein Buchstabe eingeben
-Wenn ich ausversehen Enter drücke, nimmt der auch an
-Wenn man Tot ist und eine Tastedrückt, dann bleibt man tot. Das Wort verändert sich nur

Fazit:
Arbeite nochmal n bischen dran Wink
°_° °.° °~° °v° .. -.-

PowerProgrammer

BeitragDo, Okt 05, 2006 8:54
Antworten mit Zitat
Benutzer-Profile anzeigen
TheMatrix hat Folgendes geschrieben:
-Ich kann mehr als ein Buchstabe eingeben

Das ist bewusst gemacht, damit man das ganze Wort, wenn man es schon weiß, eintippen kann. Ansonsten wird immer nur der erste Buchstabe genommen.

TheMatrix hat Folgendes geschrieben:
-Wenn ich ausversehen Enter drücke, nimmt der auch an

Warum sollte man ausversehen Enter drücken? Da muss man schon tollpatschig sein Wink Eigentlich hatte ich vorallem eine Mausbedienung vorgesehen, daher ist das mit dem Input unausgereift.

TheMatrix hat Folgendes geschrieben:
-Wenn man Tot ist und eine Tastedrückt, dann bleibt man tot. Das Wort verändert sich nur

Ist mir auch aufgefallen. Früher hatte ich das Problem auch, hatte es mit einem FlushKeys bewältigt. Jetzt gehts nichtmehr Sad Mal sehen, wie ich das verbessern kann...

~edit~
Code: [AUSKLAPPEN]
If Lower(Name$) = wortklein$ Then Exit

Das ist die Bedingung, die für den Abbruch der Hauptschleife verantwortlich ist. Aber warum wird die Bedingung erfüllt?
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

TheMatrix

BeitragDo, Okt 05, 2006 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

TheMatrix hat Folgendes geschrieben:
-Wenn ich ausversehen Enter drücke, nimmt der auch an

Warum sollte man ausversehen Enter drücken? Da muss man schon tollpatschig sein Wink Eigentlich hatte ich vorallem eine Mausbedienung vorgesehen, daher ist das mit dem Input unausgereift.


Wieso Tollpatschig? Das passiert wenn man zu hipelig ist und doppelt Enter drückt.


Zitat:

Das ist die Bedingung, die für den Abbruch der Hauptschleife verantwortlich ist. Aber warum wird die Bedingung erfüllt?


Was Soll der Absatz bedeuten? Wer ist name$? Wer Wortklein$?
°_° °.° °~° °v° .. -.-

SpionAtom

BeitragDo, Okt 05, 2006 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Lustig, auf QBasic.de gibts gerade nen Programmierwettbewerb, in dem man genau das Spiel schreiben soll. Läuft aber demnächst ab.

Auch mir sind die Bugs von TheMAtrix aufgefallen. Und ja, eine Maussteuerung würde ich begrüßen. Und das mit dem Enter-Bestätigen würde ich auch weglassen. Ist nur zusätzliche Arbeit, und wenn man das gesamte Wort eingeben möchte, muss man so oder so alle Buchstaben drücken. Von daher ist das überflüssig
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

PowerProgrammer

BeitragDo, Okt 05, 2006 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist ja kein Projekt von mir, "nur" ein kleiner Code für euch, den ihr nach Lust und Laune verbessern könnt.
Wenn ihr mit der Tastatursteuerung nicht zurecht kommt, könnt ihr ja die Maus nutzen! Die Inputroutine kann man ja ganz easy auskommentieren!

Ich sehe das Problem nicht ganz Wink

Nur der dritte Bug ist doof, ich finde den Fehler auf Anhieb auch nicht!


P.S.:
Zitat:
Und ja, eine Maussteuerung würde ich begrüßen.

Das hört sich so an, als gäbe es noch keine Wink
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

TheMatrix

BeitragDo, Okt 05, 2006 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick ma den Code und ich zeigt dir wo der Fehler steckt Wink
°_° °.° °~° °v° .. -.-

PowerProgrammer

BeitragDo, Okt 05, 2006 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versteh dich nicht ganz. Sollte das ein Scherz sein?
Was ist das oben denn?

~edit~
Ist das Spiel denn wirklich so schlecht?
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

TheMatrix

BeitragDo, Okt 05, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach uppala. Jetzt brauch ich wirklich schlaf^^. Ich hab gestern einfach zu lang SNES Soul Blazer gezockt Rolling Eyes

Das Game ist einfach zu geil Laughing
°_° °.° °~° °v° .. -.-

TheMatrix

BeitragDo, Okt 05, 2006 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wusst ichs doch, ganz kleiner Fehler:
Code: [AUSKLAPPEN]

...
SetFont font2
Text 400,550,"Weiter mit Tastendruck",1,1
Flip
WaitKey
FlushKeys : !NEU!--> versuch=0
...


So jetzt hab ich aber mein sinnlosen Beitrag von vorhin wieder gutgemacht Wink
°_° °.° °~° °v° .. -.-

SpionAtom

BeitragDo, Okt 05, 2006 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
PowerProgrammer hat Folgendes geschrieben:

Zitat:
Und ja, eine Maussteuerung würde ich begrüßen.

Das hört sich so an, als gäbe es noch keine Wink


Und ich war wohl auch zu übernächtigt. Hab gar nicht dran gedacht, die Maus auszuprobieren. Embarassed

Ich fänds schöner, wenn du die Bilder noch größer machen würdest.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group