"Blitz Snake" - ein Snake Klon
Übersicht

BlackCatBetreff: "Blitz Snake" - ein Snake Klon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo.
Ich habe es nun endlich geschafft mein allererstes halbwegs vernuenftiges Spiel zu schreiben. Habe vor 2 wochen mit blitzbasic angefangen und bin selbst erstaunt ueber das ergebniss von den 2 wochen ![]() Das ganze spiel habe ich uebrigens in 2 Tagen gemacht (gestern + heute) Executable gibts hier: https://www.blitzforum.de/upload/file.php?id=3598 Einen Screenshot von meinem Spiel hab ich auch noch gemacht: ![]() ![]() Den Code werde ich euch natuerlich auch nicht vorenthalten. Bugs bitte melden wenn ihr welche findet. Sagt mir bitte auch welche Fehler ich gemacht habe, was ich haette einfacher machen koennen und welche Funktionen ueberfluessig sind. Ich warte schon gespannt auf eure Antwort. Hier der Code: Code: [AUSKLAPPEN] ; *****************************************
; Einfuehrungsbildschirm ; ***************************************** Graphics 640, 480 Color 0, 206, 209 Rect 20, 20, 600, 440, 0 Rect 30, 30, 580, 420, 0 Color 244, 164, 96 SetFont LoadFont("Comic Sans MS", 50) Text 190, 150, "BLITZ-SNAKE" Text 190, 150, "__________" SetFont LoadFont("Arial", 13) Color 0, 255, 0 Text 310, 280, "created by BlackCat" Text 310, 295, "mein allererstes Game in BB ^^" Text 310, 310, "viel Spass beim Spielen!" SetFont LoadFont("Arial", 20) Color 127, 255, 0 Text 100, 400, "Bitte eine beliebige Taste druecken um das Spiel zu starten!" WaitKey() ;***************************************** ; VORBEREITUNGEN ;***************************************** SetBuffer BackBuffer() For i = 1 To 2 punkte% = 0 blocks% = 4 richtung$ = "links" futterx% = 0 futtery% = 0 Dim schlangex(100) Dim schlangey(100) Cls Color 255, 255, 255 Rect 200, 100, 200, 150, 0 SetFont LoadFont("Arial", 13) Color 238, 149, 115 Text 40, 170, "created by BlackCat" Text 440, 150, "ENTER - Spiel beginnen" Text 440, 165, "Pfeiltasten - Schlange bewegen" Text 440, 180, "Leertaste - Pause" Text 440, 195, "ESC - Spiel beenden" Color 255, 165, 0 Text 130, 350, "Ziel das Spiels ist, die Schlange zum Futter zu bewegen." Text 130, 365, "Wenn die Schlange etwas aufgefressen hat verlaengert sie sich." Text 130, 380, "Stoesst die Schlange gegen die Wand oder ihren Koerper ist das Spiel zu Ende." Text 130, 395, "Pro Block gibt es 5 Punkte." Color 255, 255, 255 Text 280, 260, "Punkte: " + punkte% Oval 250, 170, 10, 10, 0 Oval 260, 170, 10, 10 Oval 270, 170, 10, 10 Oval 280, 170, 10, 10 schlangex(1) = 250 schlangex(2) = 260 schlangex(3) = 270 schlangex(4) = 280 schlangey(1) = 170 schlangey(2) = 170 schlangey(3) = 170 schlangey(4) = 170 futterx% = 250 futtery% = 120 Rect 250, 120, 10, 10 Flip Next ;************************************************ ;DAS SPIEL ;************************************************ framet = CreateTimer(60) Local Timer_dauer = 400 Local Timer_start Repeat If KeyDown(28) Then Repeat ms = MilliSecs() If Timer_dauer + Timer_start < ms Then Timer_start = ms If (richtung$ = "links") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangex(1) = schlangex(1) - 10 ElseIf (richtung$ = "oben") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangey(1) = schlangey(1) - 10 ElseIf (richtung$ = "rechts") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangex(1) = schlangex(1) + 10 ElseIf (richtung$ = "unten") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangey(1) = schlangey(1) + 10 EndIf Color 0, 0, 0 Rect 201, 101, 198, 148 Color 255, 255, 255 For i = 2 To blocks% Oval schlangex(i), schlangey(i), 10, 10 Next Oval schlangex(1), schlangey(1), 10, 10, 0 If schlangex(1) <= 200 Or schlangex(1) >= 390 Or schlangey(1) <= 100 Or schlangey(1) >= 240 Then Color 255, 0, 0 Text 240, 105, "Verloren! Punktestand: " + punkte% Color 255, 255, 255 Flip 0 Repeat If KeyDown(1) Then End Until KeyDown(28) Color 0, 0, 0 Rect 201, 101, 198, 148 Color 255, 255, 255 schlangex(1) = 250 schlangex(2) = 260 schlangex(3) = 270 schlangex(4) = 280 schlangey(1) = 170 schlangey(2) = 170 schlangey(3) = 170 schlangey(4) = 170 Oval 250, 170, 10, 10, 0 Oval 260, 170, 10, 10 Oval 270, 170, 10, 10 Oval 280, 170, 10, 10 richtung$ = "links" blocks% = 4 punkte% = 0 Flip 0 WaitKey() EndIf For i = 2 To blocks% If schlangex(1) = schlangex(i) And schlangey(1) = schlangey(i) Then Color 255, 0, 0 Text 240, 105, "Verloren! Punktestand: " + punkte% Color 255, 255, 255 Flip 0 Repeat If KeyDown(1) Then End Until KeyDown(28) Color 0, 0, 0 Rect 201, 101, 198, 148 Color 255, 255, 255 schlangex(1) = 250 schlangex(2) = 260 schlangex(3) = 270 schlangex(4) = 280 schlangey(1) = 170 schlangey(2) = 170 schlangey(3) = 170 schlangey(4) = 170 Oval 250, 170, 10, 10, 0 Oval 260, 170, 10, 10 Oval 270, 170, 10, 10 Oval 280, 170, 10, 10 richtung$ = "links" blocks% = 4 punkte% = 0 Flip 0 WaitKey() EndIf Next If (schlangex(1) = futterx% And schlangey(1) = futtery%) Then blocks% = blocks% + 1 punkte% = punkte% + 5 SeedRnd MilliSecs() futterx% = Rand(22, 37) * 10 SeedRnd MilliSecs() futtery% = Rand(12, 22) * 10 End If Rect futterx%, futtery%, 10, 10 Color 0, 0, 0 Rect 280, 260, 200, 50 Color 255, 255, 255 Text 280, 260, "Punkte: " + punkte% Flip 0 EndIf If KeyDown(203) And richtung$ <> "rechts" Then richtung$ = "links" If KeyDown(200) And richtung$ <> "unten" Then richtung$ = "oben" If KeyDown(208) And richtung$ <> "oben" Then richtung$ = "unten" If KeyDown(205) And richtung$ <> "links" Then richtung$ = "rechts" If KeyDown(57) Then WaitKey() WaitTimer(framet) FlushKeys Until KeyDown(1) EndIf Until KeyDown(1) End |
||
- Zuletzt bearbeitet von BlackCat am Mo, Okt 13, 2008 16:56, insgesamt einmal bearbeitet
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also ich finde es für ein 2 tage projekt sehr schön gelungen
den code hab ich mir (noch) nciht angesehen aber werd meine meinung zu jedenfals ncoh nachholen.. erster eindruck: GUT |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für ein erstes Projekt finde ich es Codemäßig nicht besonders schlimm; "elegante" Varianten erlernt man mit der Zeit, Hauptsache ist erstmal das es funktioniert.
Meine Hinweise: "Goto Ende" ist nicht nötig. End ![]() Den Timer von 5Hz würde ich so nicht anwenden -> Normalerweise nimmt man die Bildschirmwiederholung von 60Hz. Um dein Spiel dann auf eine Spielbare Geschwindigkeit zu bringen, verwendet man einen Timer um alle X Sekunden die Positionen der Schlange zu ändern. Das macht insgesamt die Steuerung flüssiger, da dann auch Keyhit funktioniert und der Spieler exakter reagieren kann. Bei deiner Abfrage zum verlieren des Spielers sehe ich grad nicht so astrein durch; aber mir scheint, du könntest viel Code in eine Funktion auslagern anstatt Copy&Paste-like überall das selbe stehen zu haben... ...und Types könnte man benutzen ![]() |
||
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) |
BlackCat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
erstmal thx an beide ![]() Xeres hat Folgendes geschrieben: "Goto Ende" ist nicht nötig. End
![]() ok werd ich gleich mal rausnehmen Xeres hat Folgendes geschrieben: Den Timer von 5Hz würde ich so nicht anwenden -> Normalerweise nimmt man die Bildschirmwiederholung von 60Hz. Um dein Spiel dann auf eine Spielbare Geschwindigkeit zu bringen, verwendet man einen Timer um alle X Sekunden die Positionen der Schlange zu ändern. Das macht insgesamt die Steuerung flüssiger, da dann auch Keyhit funktioniert und der Spieler exakter reagieren kann.
Stimmt, mit der Steuerung bin ich auch noch nicht wirklich zufrieden. Ich werd das mal mit 60Hz probieren und eine Variable bei jedem Schleifendurchgang erhoehen, bis sie eine bestimmte nummer erreicht und dann erst die schlange bewegen lassen. mal sehen obs klappt. Xeres hat Folgendes geschrieben: Bei deiner Abfrage zum verlieren des Spielers sehe ich grad nicht so astrein durch; aber mir scheint, du könntest viel Code in eine Funktion auslagern anstatt Copy&Paste-like überall das selbe stehen zu haben...
...und Types könnte man benutzen ![]() da muesste man jetzt wissen was types sind xD aber das mit den funktionen stimmt schon. weiss nur nicht wirklich wann und wozu ich eine funktion erstellen soll - fand es in meinem fall halt unnoetig... sobald ich mit den verbesserungen fertig bin, werde ich updaten ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlackCat hat Folgendes geschrieben: Ich werd das mal mit 60Hz probieren und eine Variable bei jedem Schleifendurchgang erhoehen, bis sie eine bestimmte nummer erreicht und dann erst die schlange bewegen lassen. mal sehen obs klappt. Jaein... Für den Konstanten 60Hz Timer geht's vielleicht, besser ist aber eine Konstruktion mit millisecs![]() Edit: Types kann man auch dafür verwenden, war aber eigentlich mehr ironisch gemeint, da Types generell für so vieles gut sind... Die kannst du dir auch noch für's nächste Projekt aufheben... Edit 2: Beispiel kommt gleich... |
||
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) |
- Zuletzt bearbeitet von Xeres am Mo, Okt 13, 2008 16:19, insgesamt einmal bearbeitet
BlackCat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Xeres
Und wie soll das gehen? |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also dein Spiel ist ganz nett, allerdings reagieren die Tasten manchmal nicht wenn man sie nicht hält( hat mich die ersten beiden Runden das Schlangenleben gekostet ^^)
Und das erste Cls kannst du dir sparen, da du Graphics erst danach stehen hast und dementsprechend auch keinen Bildschirm zum löschen hast...(in BMax gäbe es nen Unhandled Memory Exception Error ^^) Keine Ahnung ob dir das was sagt, aber Types sind Klassen(C++, Java usw.), mit denen man sich bspw. einen Type Player und einen Type Futter erstellen könnte, wobei ich jetzt gerade nicht weiß ob die Types in B3D und BlitzMax gleich sind, da ich nur BlitzMax nutze. Vielleicht hilft dir das ja ein wenig: http://de.wikipedia.org/wiki/O...ng#Klassen MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Local ms
;Darin wird der Aktuelle Wert von Millisecs() gespeichert Local Timer_Start, Timer_dauer=500 ;Zeitpunkt zu dem der Timer anfängt zu messen und die Dauer in Millisekunden (1/2 Sekunde) Const KEY_Escape=1 ;Konstanten für Tasten schaffen auch übersicht... Local timer=CreateTimer(60) ;Standartmäßiger Timer Repeat ms = MilliSecs() ;* In der Hauptschleife einmal die Aktuelle Zeit nehmen If Timer_Start + Timer_dauer < ms Then ;*** Wenn die Startzeit + Dauer kleiner ist als die aktuelle zeit... Timer_Start=ms ;... wird die Startzeit nachgestellt... ;... und dann folgen alle Aktionen die alle <Timer_dauer> Millisekunden ausgeführt werden sollen... Print "Blink!" EndIf WaitTimer(timer) Until KeyHit(KEY_Escape) Ich hab mich auf das wesentliche beschränkt... ich hoffe verständlich. |
||
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) |
BlackCat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Xeres
Hab das gleich mal ins Prog uebernommen. Funktioniert einwandfrei, thx ![]() @DaysShadow Problem mit dem Haengen der Tasten wurde dank Xerex behoben ![]() Hab oben jetzt upgedatet. Den neuen Timer hinzugefuegt, GoTo raus, Cls raus und ausserdem - was ich selbst bemerkt habe - die Pause-Funktion noch schnell einprogrammiert. Die hatte ich vergessen mit reinzumachen Die Executable wurde auch mit der neuen Version ersetzt. Auf weitere Kommentare freue ich mich jetzt schon ![]() |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Eingabe ist jetzt schöner, allerdings habe ich noch einen Bug gefunden und zwar wenn die Schlange bspw. nach rechts oder links schlängelt und man dann schnell nacheinander runter oder hoch und links oder rechts drückt, dann macht die Schlange kehrt, trifft sich selbst und man hat verloren...
Hier z.B. war die Richtung nach links, ich drückte schnell hoch und dann rechts und schon war die Richtung nach rechts in Richtung des Schlangenkörpers! MfG DaysShadow |
||
Blessed is the mind too small for doubt |
BlackCat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
DaysShadow hat Folgendes geschrieben: Die Eingabe ist jetzt schöner, allerdings habe ich noch einen Bug gefunden und zwar wenn die Schlange bspw. nach rechts oder links schlängelt und man dann schnell nacheinander runter oder hoch und links oder rechts drückt, dann macht die Schlange kehrt, trifft sich selbst und man hat verloren...
Hier z.B. war die Richtung nach links, ich drückte schnell hoch und dann rechts und schon war die Richtung nach rechts in Richtung des Schlangenkörpers! MfG DaysShadow Der Bug wird dadurch verursacht, dass sich bei jedem Schleifendurchgang die Richtung der Schlange durch druecken der Pfeiltasten aendern kann - ABER die Schlange wird nur alle paar Schleifendurchgaenge neu gezeichnet wegen des neuen eingebauten Timers. Das Ergebnis ist: Man kann die Richtung oefter wechseln bis die Schlange neu gezeichnet ist. Ich hab die Steuerung aus dem Timer deswegen raus, um die Lenkung fluessiger zu machen - was ja auch wunderbar geklappt hat - nur eben hat sich dieser Bug angeschlichen. Zuerst habe ich folgenden Loesungsansatz versucht: Code: [AUSKLAPPEN] If KeyDown(203) And richtung$ <> "rechts" Then
richtung$ = "links" keyge = 1 ElseIf KeyDown(200) And richtung$ <> "unten" Then richtung$ = "oben" keyge = 1 ElseIf KeyDown(208) And richtung$ <> "oben" Then richtung$ = "unten" keyge = 1 ElseIf KeyDown(205) And richtung$ <> "links" Then richtung$ = "rechts" keyge = 1 ElseIf KeyDown(57) Then WaitKey() keyge = 1 EndIf keyge fuer "keygedrueckt" *gg* Diese Variable wird auf 1 bzw. wahr gesetzt, wenn eine Tastatur gedrueckt wurde und wieder auf 0, wenn der Timer gestartet wird und die Schlange neugezeichnet wird. In der If-Abfrage hab ich dann folgendes eingebaut: Code: [AUSKLAPPEN] If Timer_dauer + Timer_start < ms Or keyge = 1 Then
keyge = 0 ; der ganze rest ^^ End If wenn keyge 1 ist, also zuvor ne Taste gedrueckt wurde, wird die schlange neu gezeichnet, ob Timer oder nicht.. danach wieder auf 0 gesetzt. Jedesmal wenn ich im Spiel ein Key druecke setzt der Timer voellig aus, das spiel lauft rasend schnell und man verliert ^^ Das Problem ist wohl, dass es bei KeyDown keine Rolle spielt, ob die Tastatur gedrueckt wurde oder die ganze zeit gedrueckt gehalten wird. Wie kann ich das Problem loesen? Ich habe es mit KeyHit versucht aber das scheint irgendwie nicht zu klappen |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
So habs mal bearbeitet, waren 5 Minuten und eine Variable mehr ![]() MfG DaysShadow Code: [AUSKLAPPEN] ; ***************************************** ; Einfuehrungsbildschirm ; ***************************************** Graphics 640, 480 , 0 , 2 Color 0, 206, 209 Rect 20, 20, 600, 440, 0 Rect 30, 30, 580, 420, 0 Color 244, 164, 96 SetFont LoadFont("Comic Sans MS", 50) Text 190, 150, "BLITZ-SNAKE" Text 190, 150, "__________" SetFont LoadFont("Arial", 13) Color 0, 255, 0 Text 310, 280, "created by BlackCat" Text 310, 295, "mein allererstes Game in BB ^^" Text 310, 310, "viel Spass beim Spielen!" SetFont LoadFont("Arial", 20) Color 127, 255, 0 Text 100, 400, "Bitte eine beliebige Taste druecken um das Spiel zu starten!" WaitKey() Local KEY_DOWN% ; <---------------- hinzugefügt ;***************************************** ; VORBEREITUNGEN ;***************************************** SetBuffer BackBuffer() For i = 1 To 2 punkte% = 0 blocks% = 4 richtung$ = "links" futterx% = 0 futtery% = 0 Dim schlangex(100) Dim schlangey(100) Cls Color 255, 255, 255 Rect 200, 100, 200, 150, 0 SetFont LoadFont("Arial", 13) Color 238, 149, 115 Text 40, 170, "created by BlackCat" Text 440, 150, "ENTER - Spiel beginnen" Text 440, 165, "Pfeiltasten - Schlange bewegen" Text 440, 180, "Leertaste - Pause" Text 440, 195, "ESC - Spiel beenden" Color 255, 165, 0 Text 130, 350, "Ziel das Spiels ist, die Schlange zum Futter zu bewegen." Text 130, 365, "Wenn die Schlange etwas aufgefressen hat verlaengert sie sich." Text 130, 380, "Stoesst die Schlange gegen die Wand oder ihren Koerper ist das Spiel zu Ende." Text 130, 395, "Pro Block gibt es 5 Punkte." Color 255, 255, 255 Text 280, 260, "Punkte: " + punkte% Oval 250, 170, 10, 10, 0 Oval 260, 170, 10, 10 Oval 270, 170, 10, 10 Oval 280, 170, 10, 10 schlangex(1) = 250 schlangex(2) = 260 schlangex(3) = 270 schlangex(4) = 280 schlangey(1) = 170 schlangey(2) = 170 schlangey(3) = 170 schlangey(4) = 170 futterx% = 250 futtery% = 120 Rect 250, 120, 10, 10 Flip Next ;************************************************ ;DAS SPIEL ;************************************************ framet = CreateTimer(60) Local Timer_dauer = 400 Local Timer_start Repeat If KeyDown(28) Then Repeat ms = MilliSecs() If Timer_dauer + Timer_start < ms Then Timer_start = ms KEY_DOWN = 0 ; <------------ TIMER OK, KEY_DOWN WIEDER 0, NEUER TASTENDRUCK VERFÜGBAR! If (richtung$ = "links") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangex(1) = schlangex(1) - 10 ElseIf (richtung$ = "oben") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangey(1) = schlangey(1) - 10 ElseIf (richtung$ = "rechts") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangex(1) = schlangex(1) + 10 ElseIf (richtung$ = "unten") Then For i = blocks% To 1 Step -1 If i <> 1 Then schlangex(i) = schlangex(i-1) schlangey(i) = schlangey(i-1) EndIf Next schlangey(1) = schlangey(1) + 10 EndIf Color 0, 0, 0 Rect 201, 101, 198, 148 Color 255, 255, 255 For i = 2 To blocks% Oval schlangex(i), schlangey(i), 10, 10 Next Oval schlangex(1), schlangey(1), 10, 10, 0 If schlangex(1) <= 200 Or schlangex(1) >= 390 Or schlangey(1) <= 100 Or schlangey(1) >= 240 Then Color 255, 0, 0 Text 240, 105, "Verloren! Punktestand: " + punkte% Color 255, 255, 255 Flip 0 Repeat If KeyDown(1) Then End Until KeyDown(28) Color 0, 0, 0 Rect 201, 101, 198, 148 Color 255, 255, 255 schlangex(1) = 250 schlangex(2) = 260 schlangex(3) = 270 schlangex(4) = 280 schlangey(1) = 170 schlangey(2) = 170 schlangey(3) = 170 schlangey(4) = 170 Oval 250, 170, 10, 10, 0 Oval 260, 170, 10, 10 Oval 270, 170, 10, 10 Oval 280, 170, 10, 10 richtung$ = "links" blocks% = 4 punkte% = 0 Flip 0 WaitKey() EndIf For i = 2 To blocks% If schlangex(1) = schlangex(i) And schlangey(1) = schlangey(i) Then Color 255, 0, 0 Text 240, 105, "Verloren! Punktestand: " + punkte% Color 255, 255, 255 Flip 0 Repeat If KeyDown(1) Then End Until KeyDown(28) Color 0, 0, 0 Rect 201, 101, 198, 148 Color 255, 255, 255 schlangex(1) = 250 schlangex(2) = 260 schlangex(3) = 270 schlangex(4) = 280 schlangey(1) = 170 schlangey(2) = 170 schlangey(3) = 170 schlangey(4) = 170 Oval 250, 170, 10, 10, 0 Oval 260, 170, 10, 10 Oval 270, 170, 10, 10 Oval 280, 170, 10, 10 richtung$ = "links" blocks% = 4 punkte% = 0 Flip 0 WaitKey() EndIf Next If (schlangex(1) = futterx% And schlangey(1) = futtery%) Then blocks% = blocks% + 1 punkte% = punkte% + 5 SeedRnd MilliSecs() futterx% = Rand(22, 37) * 10 SeedRnd MilliSecs() futtery% = Rand(12, 22) * 10 End If Rect futterx%, futtery%, 10, 10 Color 0, 0, 0 Rect 280, 260, 200, 50 Color 255, 255, 255 Text 280, 260, "Punkte: " + punkte% Flip 0 EndIf If KEY_DOWN = 0 If KeyHit(203) And richtung$ <> "rechts" richtung$ = "links" KEY_DOWN = 1 EndIf EndIf If KEY_DOWN = 0 If KeyHit(200) And richtung$ <> "unten" richtung$ = "oben" KEY_DOWN = 1 EndIf EndIf If KEY_DOWN = 0 If KeyHit(208) And richtung$ <> "oben" richtung$ = "unten" KEY_DOWN = 1 EndIf EndIf If KEY_DOWN = 0 If KeyHit(205) And richtung$ <> "links" richtung$ = "rechts" KEY_DOWN = 1 EndIf EndIf If KeyDown(57) Then WaitKey() WaitTimer(framet) ;FlushKeys Until KeyDown(1) EndIf Until KeyDown(1) End |
||
Blessed is the mind too small for doubt |
- Zuletzt bearbeitet von DaysShadow am Di, Okt 14, 2008 15:01, insgesamt 2-mal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ DaysShadow: Die Lösung hätte ich auch vorgeschlagen, aber bitte die Tastenabfrage trotzdem mit Keyhit gestallten, Keydown ist für längeres Drücken gedacht und sollte auch nur dann eingesetzt werden, ansonsten gibt es eine kleine Verzögerung bei der Steuerung. Global muss die Variable auch nicht sein.
Und (@ BlackCat): bitte verwende auch standardmäßig den Fenstermodus. Code: [AUSKLAPPEN] Graphics 640, 480, 0, 2
(Null bei der Farbtiefe übernimmt die aktuelle Einstellung) |
||
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) |
- Zuletzt bearbeitet von Xeres am Di, Okt 14, 2008 14:47, insgesamt einmal bearbeitet
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
ei stimmt, da braucht man ja kein keydown >.< ändere es mal schnell um ^^
Ah und BlackCat, benutze doch zum Einrücken die wunderbare Taste TAB, dein Einrückungsstil mit der Leertaste bringt mich sonst beim Editieren noch um xD MfG DaysShadow |
||
Blessed is the mind too small for doubt |
BlackCat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, jetzt klappts!
Aber KeyHit funktioniert bei mir irgendwie nicht richtig, nur KeyDown. Ich benutze Blitz3D 1.98, liegts vllt daran? @DaysShadow versteh ich gar nicht, ich hab immer tab benutzt, waer doch viel zu umstaendlich mit der Leertaste xD |
||
![]() |
Mr.HydeNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein es liegt nicht an der Version. KeyHit sollte nicht häufiger in einem Schleifendurchgang aufgerufen werden. Außerdem könnte Flushkeys() die Abfrage behindern.
Ich mache es in B3D immer so, dass ich mir Variablen schaffe, die die Abfrage zu Beginn der Schleife speichern. (Ein Tastendruck wird ja im Tastaturbuffer gespeichert) habe dann Variablen wie Code: [AUSKLAPPEN] ;Schleifenbeginn ;Tastenabfrage Key_Left = KeyHit (203) Key_Right = KeyHit (205) ;... alle, die du brauchst Flushkeys() ;weiterer Programmcode |
||
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group