Kein Befehl-Fehler,aber es funktioniert nicht richtig.
Übersicht

GoldDaveBetreff: Kein Befehl-Fehler,aber es funktioniert nicht richtig. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Morgen Leute,
ich bin es mal wieder. Hoffe ich nerve nicht. Ich habe mich nach meinem letzten Beitrag hingesetzt und in meiner Freizeit ein kleines Tic Tac Toe Spiel programmiert, (nur die Spieloberfläche ohne Menü und Features) mithilfe des Tutorials von Midimaster und vielen mehr. Nun stecke ich mal wieder an einem kniffligen Punkt fest. Code: [AUSKLAPPEN] ;Spieler 1 Sieg. If Feld(1) = 1 And Feld(2) = 1 And Feld(3) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf Dieser Text-Befehl malt nicht in die Spieleconsole den "Spieler 1 hat gewonnen!" Text. Mir kommt es so vor, als würde er einfach nicht reagieren. Außerdem fängt daraufhin das Spiel komischerweise von neu an, jedoch das der Spieler der gewonnen hat, dann automatisch dort hingemalt hat, wo er als letztes hinmalte um zu gewinnen. Wenn ich das ganze mit Print Befehlen machen, läuft es gut, jedoch möchte ich das der Text in der Spielekonsole angezeigt wird und nicht in der seperaten Konsole. Ist das überhaupt möglich? Würde mich auf eine schnelle Antwort freuen. (Wenn jemand den gesamt Code sehen möchte, einfach drunter schreiben) |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kanns sein, dass du danach vergessen hast, irgendeine Art Pause einzubauen? Verwendest du SetBuffer(Backbuffer())? In diesem Fall fehlt dir noch ein Flip(). Schreib mal einfach unter den Text-Befehl folgendes:
BlitzBasic: [AUSKLAPPEN] Flip() und schau, ob das hilft. Wie's klingt lässt du ihn direkt nach dem Text weiter zeichnen (und dabei wohl u.A. den Schirm leeren (CLS())). |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
GoldDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe alles schonmal getestet.
Evtl. würde dir mein ganzer Code weiterhelfen. SetPuffer Backpuffer() ist vorhanden. Der Flip-Befehl ist auch da, aber vill. an der falschen Stelle. Code: [AUSKLAPPEN] Graphics 900,600,32,2
;Variablen definieren.(Global = überall erreichbar & veränderbar) (Local = innerhalb einer Funktion) ;x% Variable für Zahlen : x$ Variable für Zeichenketten Global X_Bild = LoadImage("C:\Users\****\Desktop\Sonstiges\X_Bild.png") Global O_Bild = LoadImage("C:\Users\****\Desktop\Sonstiges\O_Bild.png") Global Hintergrund_Bild = LoadImage("C:\Users\****\Desktop\Sonstiges\Hintergrund_Bild.png") ;Global Jubel_Sound = LoadSound("..") ;Global Spielername1$ = Input$ ;Global Spielername1$ = Input$ Global Spieler = 1 Dim SpielerWechsel(2) SpielerWechsel(1) = 2 SpielerWechsel(2) = 1 ;0 = leere Felder; (1 = X_Bild; 2 = O_Bild) Dim Feld(9) Brettvorbereitung() ;Wohin er malt. Dim FeldX(9) FeldX(1) = 40 FeldX(2) = 340 FeldX(3) = 640 FeldX(4) = 40 FeldX(5) = 340 FeldX(6) = 640 FeldX(7) = 40 FeldX(8) = 340 FeldX(9) = 640 Dim FeldY(9) FeldY(1) = 400 FeldY(2) = 400 FeldY(3) = 400 FeldY(4) = 200 FeldY(5) = 200 FeldY(6) = 200 FeldY(7) = 0 FeldY(8) = 0 FeldY(9) = 0 ;Laden von Bilder. LoadImage Hintergrund_Bild LoadImage X_Bild LoadImage O-Bild SetBuffer BackBuffer() y_H = 0 x_H = 0 Repeat Cls ;Tastaturbelegung If KeyDown(79) And Feld(1) = 0 Then Feld(1) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(80) And Feld(2) = 0 Then Feld(2) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(81) And Feld(3) = 0 Then Feld(3) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(75) And Feld(4) = 0 Then Feld(4) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(76) And Feld(5) = 0 Then Feld(5) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(77) And Feld(6) = 0 Then Feld(6) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(71) And Feld(7) = 0 Then Feld(7) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(72) And Feld(8) = 0 Then Feld(8) = Spieler Spieler = SpielerWechsel(Spieler) ElseIf KeyDown(73) And Feld(9) = 0 Then Feld(9) = Spieler Spieler = SpielerWechsel(Spieler) EndIf ;Unentschieden If Feld(1) = 0 Or Feld(2) = 0 Or Feld(3) = 0 Or Feld(4) = 0 Or Feld(5) = 0 Or Feld(6) = 0 Or Feld(7) = 0 Or Feld(8) = 0 Or Feld(9) = 0 Then Else Text 10,10,"Unentschieden" Brettvorbereitung() EndIf ;Spieler 1 Sieg. If Feld(1) = 1 And Feld(2) = 1 And Feld(3) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(4) = 1 And Feld(5) = 1 And Feld(6) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(7) = 1 And Feld(8) = 1 And Feld(9) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(1) = 1 And Feld(5) = 1 And Feld(9) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(3) = 1 And Feld(5) = 1 And Feld(7) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(1) = 1 And Feld(4) = 1 And Feld(7) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(2) = 1 And Feld(5) = 1 And Feld(8) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf If Feld(3) = 1 And Feld(6) = 1 And Feld(9) = 1 Then Text 10,10,"Spieler 1 hat gewonnen!" Brettvorbereitung() EndIf ;Spieler 2 Sieg. If Feld(1) = 2 And Feld(2) = 2 And Feld(3) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(4) = 2 And Feld(5) = 2 And Feld(6) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(7) = 2 And Feld(8) = 2 And Feld(9) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(1) = 2 And Feld(5) = 2 And Feld(9) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(3) = 2 And Feld(5) = 2 And Feld(7) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(1) = 2 And Feld(4) = 2 And Feld(7) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(2) = 2 And Feld(5) = 2 And Feld(8) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf If Feld(3) = 2 And Feld(6) = 2 And Feld(9) = 2 Then Text 10,10,"Spieler 2 hat gewonnen!" Brettvorbereitung() EndIf DrawImage Hintergrund_Bild, x_H, y_H For Draw_durchlauf = 1 To 9 If Feld(Draw_durchlauf) = 1 Then DrawImage X_Bild, FeldX(Draw_durchlauf), FeldY(Draw_durchlauf) ElseIf Feld(Draw_durchlauf) = 2 Then DrawImage O_Bild, FeldX(Draw_durchlauf), FeldY(Draw_durchlauf) EndIf Next Flip Until KeyHit(1) End Function Brettvorbereitung() Feld(1) = 0 Feld(2) = 0 Feld(3) = 0 Feld(4) = 0 Feld(5) = 0 Feld(6) = 0 Feld(7) = 0 Feld(8) = 0 Feld(9) = 0 Spieler = 1 End Function |
||
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Golddave
Nach schnellem Überfliegen würde ich sagen, dass der Text zwar geschrieben wird, du aber sofort mit dem Programm weitermachst. Also bau, wie schon DAK gesagt hat, Flip(0) Waitkey() nach dem Textbefehl ein und dann müsste es klappen. Lg Dicker Hobbit |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der WaitKey() gehört meiner Meinung nach nach dem ...
BlitzBasic: [AUSKLAPPEN] Text 10,10,"Unentschieden" ..rein Es kann auch sein, dass in dem Moment wo der letzte Stein zum Sieg gesetzt wird, der Spieler gar nicht so schnell von der Taste wegkommt und dies gleich dem WaitKey reicht um durchzuwinken. Daher würde ich empfehlen, vor dem Text noch eine Sekunde zu warten: BlitzBasic: [AUSKLAPPEN] If Feld(1) = 0 Or Feld(2) = 0 Or Feld(3) = 0 Or Feld(4) = 0 Or Feld(5) = 0 Or Feld(6) = 0 Or Feld(7) = 0 Or Feld(8) = 0 Or Feld(9) = 0 Then Wichtig: Dieser SiegTimer% muss global sein und in den Brettvorbereitungen gehört dann dieser Timer wieder auf 0 gestellt für die nächste Spielrunde. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
1 Frage--> 3 mal fast die gleiche Antwort ![]() Es würde doch reichen einfach Code: [AUSKLAPPEN] FlushKeys()
vor Waitkey() zu setzen, um dass Problem mit den bereits gedrückten Tasten zu lösen? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jopp, FlushKeys![]() Was sonst noch auffällt: Du benutzt absolute Pfade für Bilder. Code: [AUSKLAPPEN] LoadImage("C:\Users\****\Desktop\Sonstiges\X_Bild.png")
Wenn du ein Spiel mal an jemand anderes weitergeben willst (z.B. hier im Forum) solltest du relative Pfade verwenden. Code: [AUSKLAPPEN] LoadImage("Ressourcen\Bilder\X_Bild.png") ;Relative Angabe zu dem Ordner, in dem der Code liegt
Bei Ticktacktoe gibt es natürlich noch viele Sonderfälle, aber trotzdem könntest du mit ein paar For ![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
GoldDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank für die vielen Antworten.
Ich werde mich im laufe des Tages wieder dran setzen. Tut mir Leid, dass ich erst so später zurück schreibe, jedoch steht bald ein Umzug an und ich hatte viel am Wochenende zu tuen. |
||
GoldDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank nochmal. Es hat funktioniert.
Der Code sieht jetzt wie folgt aus. Code: [AUSKLAPPEN] If Feld(1) = 1 And Feld(2) = 1 And Feld(3) = 1 Then FlushKeys() Text 10,10,"Spieler 1 hat gewonnen!" Flip(0) WaitKey() Brettvorbereitung() EndIf |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich finde es sehr nett, wenn leute sich mit einem "Hat geklappt, hier code" zurückmelden.
Es gab schon so manches problem, da hätte ich ein bisschen spicken gebrauchen können^^ Aber ein doppelpost muss nicht sein ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group