Problem beim ersten Spiel

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Flotz

Betreff: Problem beim ersten Spiel

BeitragFr, Apr 03, 2009 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen!

Ich habe vor einer Zeit angefangen mich mit BlitzMax zu beschäftigen und dachte nun, dass es an der Zeit sei, das erste kleine Spiel zu programmieren.
Natürlich nichts tolles...
Es soll mal etwas Snake-ähnliches werden.

Bisher kriege ich leider nur ein rotes Quadrat(rot.png) dazu, sich wie der "Kopf" von der Snake zu bewegen.
Sprich ich kann ihn steuern, aber natürlich nicht dahin, wo er einen Step zuvor war.
Meine Frage wäre jetzt, ob mir jemand sagen kann, wie ich diesen "Kopf" praktisch dubliziere und ihn etwas zeit(bzw. orts-)versetzt hinter dem Anfangsstück hinterherlaufen lasse.
Am Ende soll die Schlange also aus vielen hintereinander gereihten roten Quadraten bestehen und sich genauso bewegen, wie bei Snake auch...
Ich hoffe, das war einigermaßen verständlich : )

Anbei mal mein Code mit dem Hauptteil und der Funktion "laufschlange(richtung)"
Ich entschuldige mich im vorraus für eventuell dumme Fehler oder unübersichtliche Deklarationen! : )

Vielen Dank schonmal!!
Gruß,
Flo
Code:

Import brl.pngloader
Graphics 800, 600, 0, 0
Global timer:TTimer = CreateTimer(60)
Global hintergrund:TImage = LoadImage("background.jpg")
Global element:TImage = LoadImage("rot.png")
Global x:Int = 0
Global y:Int = 0
Global xAlt:Int = 0
Global yAlt:Int = 0
Global schlange:Int = 0
Global richtung:Int = 0
Global DirOld:Int = 3


While(KeyHit(KEY_ESCAPE) = False)
   
   Cls
   WaitTimer(timer)
   
   If((0 < x < 770) And (0 < y < 580))
      schlange = schlange + 1
      xAlt = x
      yAlt = y
       
      Cls
      TileImage hintergrund, 0, 0
      
      If(KeyHit(KEY_DOWN))
         richtung = 4
      EndIf
      If(KeyHit(KEY_UP))
         richtung = 2
      EndIf
      If(KeyHit(KEY_LEFT))
         richtung = 1
      EndIf
      If(KeyHit(KEY_RIGHT))
         richtung = 3
      EndIf   

      laufschlange(richtung)
   
   Else
      'Schade Schade, vorbei!
   
   End If


   Flip
Wend


Function laufschlange(richtung:Int)

         If ((richtung = 4) And (DirOld <> 2))
         y = y + 5
         x = xAlt
         DrawImage element, xAlt, y
         
         DirOld = 4
      Else If ((richtung = 3) And (DirOld <> 1))
         x = x + 5
         y = yAlt
         DrawImage element, x, yAlt
         DirOld = 3
      Else If ((richtung = 2) And (DirOld <> 4))
         y = y - 5
         x = xAlt
         DrawImage element, xAlt, y
         DirOld = 2
      Else If ((richtung = 1) And (DirOld <> 3))
         x = x - 5
         y = yAlt
         DrawImage element, x, yAlt
         DirOld = 1
      ElseIf richtung = 0
         x = x + 5
         y = 200
         DrawImage element, x, y
      Else
         richtung = DirOld
         Print ("Geht nicht")
         laufschlange(DirOld)
      EndIf

End Function


Edit: CodeTage eingefügt.
MfG
BladeRunner
  • Zuletzt bearbeitet von Flotz am Fr, Apr 03, 2009 13:43, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragFr, Apr 03, 2009 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Benutz bitte die Code-Tags für deinen Code, dann ist das besser zu lesen
2. Rücke auch in der IDE deinen Code ein, damit du besseren Überblick behältst. Das wird für die meisten hier das MInimum sein um sich mit deinem Code zu befassen.
3. Benutze superstrict. Immer. Es hilftviele Fehler zu vermeiden
4. Zu Deinem Problem. mache einen Type dafür, der ein Feld auf den nachfolgenden Type ("child") enthält, dann kannst Du dich durch die Typestruktur hangeln und für jedes Feld die Position zum Vorgänger abgleichen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group