Warum komme ich auf der anderen seite nicht raus??

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Sephka

Betreff: Warum komme ich auf der anderen seite nicht raus??

BeitragDi, Aug 24, 2010 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 1024,768,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

head_x = 2
head_y = 22
Global R=0,G=0,B=0
Const Nord = 10
Const Ost = 20
Const Sued = 30
Const West = 40
Richtung = Ost

Koerper = LoadImage("GFX\Körper.bmp")
Kopf = LoadAnimImage("GFX\Kopf.bmp",32,32,0,4)
MaskImage Koerper,255,255,255
MaskImage Kopf,255,255,255
;Schablone für Teile
Type TTeil
   Field x
   Field y
   
End Type

;Fünf Körperteile zu beginn
For i=0 To 3
   Teil.TTeil = New TTeil
   Teil\x = head_x - 30 + i ;Damit die Schlange nach Westen gerichtet ist
   Teil\y = head_y
   
Next

Nahrung_x = Rand(0,1024)
Nahrung_y = Rand(0,768)

;Hauptschleife
Repeat
    ;Hintergrund
 Cls
 ClsColor R,G,B
   
;Norden?
If KeyHit(200) Then
   If Richtung <> Sued Then
      Richtung = Nord
   EndIf
EndIf

;Osten?
If KeyHit(205) Then
   If Richtung <> West Then
      Richtung = Ost
   EndIf
EndIf

;Süden?
If KeyHit(208) Then
   If Richtung <> Nord Then
      Richtung = Sued
   EndIf
EndIf

;Westen?
If KeyHit(203) Then
   If Richtung <> Ost
      Richtung = West
   EndIf
EndIf
   
   ;Zeit abfragen
If MilliSecs() - letztebewegung > 50 Then ;Je weniger, desto schneller!
   letztebewegung = MilliSecs()
   
   ;Bewegung durchführen….
   head_x = head_x - (Richtung=West) + (Richtung=Ost)
head_y = head_y - (Richtung=Nord) + (Richtung=Sued)
If head_x < 0 Then head_x = 1024
If head_x > 1024 Then head_x = 0
If head_y < 0 Then head_y = 768
If head_y > 768 Then head_y = 0

If head_x = Nahrung_x And head_y = Nahrung_y Then
   Nahrung_x = Rand(0,1024) : Nahrung_y = Rand(0,768)
   gegessen = 1
   Punkte = Punkte + 1
Else
   gegessen = 0
EndIf

Teil.TTeil = New TTeil ;Instanz erstellen
Teil\x = head_x ;Position des Kopfes
Teil\y = head_y
If gegessen = 0 Then
   Delete First TTeil
EndIf
End If
;Hintergrundfarbe ändern

;Alle Körperteile durchgehen
For Teil.TTeil = Each TTeil
DrawImage Koerper,Teil\x*32,Teil\y*32

;Kollision prüfen
If head_x = Teil\x And head_y = teil\Y And (teil<>Last tteil) Then
   Cls
   Color 255,255,255
   Text 160,120,"G A M E  O V ER",1,1
   Flip
   FlushKeys
   WaitKey
   End
EndIf
Next

   ;Kopf zeichnen
   Color 255,255,255
   DrawImage Kopf,head_x*32,head_y*32,richtung/10-1

   ;Nahrung zeichnen
Color 255,255,0
Rect Nahrung_x*32,Nahrung_y*32,32,32,1
   
   ;Punkte schreiben
Color 255,255,255
Text 0,0,"Punkte:" +Punkte
 
   Flip
Until KeyHit(1)
End

Warum komme ich nicht auf der anderen Seite raus wenn ich aus dem Bildschirm raus bin ??

Skabus

BeitragDi, Aug 24, 2010 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal ein paar allgemeine Dinge, falls du die nicht bereits weißt und nur zum testen keinen Bock hattest.

Du solltest immer jpg oder PNG für deine Bilder verwenden.Das spart Platz und hat noch einen anderen Vorteil:

Bei PNG kannst du z.B. bei "The GIMP" Transparenz auch direkt in das Bild reinspeichern, sodass du nicht immer
MaskImage schreiben musst um die entsprechende Farbe transparent zu haben.


Zu deinem Problem:


Zitat:
head_x = head_x - (Richtung=West) + (Richtung=Ost)
head_y = head_y - (Richtung=Nord) + (Richtung=Sued)
If head_x < 0 Then head_x = 1024
If head_x > 1024 Then head_x = 0
If head_y < 0 Then head_y = 768
If head_y > 768 Then head_y = 0


Hast du bereits deine Wert überprüft?Sollte der Wert durch die Subtraktion 0 werden wird
sie niemals ausgeführt.


Hoffe ich konnte ein bissle helfen!


MfG Ska


EDIT: habs eben probiert, die If-Kurzschreibweise funzt.
Darum geändert
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

das wurgel

BeitragDi, Aug 24, 2010 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Hast du bereits deine Wert überprüft?Sollte der Wert durch die Subtraktion 0 werden wird
sie niemals ausgeführt.


Hm Skabus, ich weis nicht ob es an mir liegt aber ich wüsste nicht was du damit meinst. Welchen Wert überprüfen? Welche Subtraktion und was wird niemals ausgeführt?

@Sephka
Kleiner Flüchtigkeitsfehler. Du hast vergessen, dass head_x und head_y noch mit 32 malgenommen werden, also wird die Schlange erst nach 768 bzw 1024 * 32 pixeln wieder hereinkommen.
1 ist ungefähr 3

Skabus

BeitragDi, Aug 24, 2010 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich habs gerade mal probiert...

Ja das wurgel,es lag nicht an den Werten.^^

Mir passiert das oft, dass ich extra hinschreibe < 0 und dann wird der Wert (in dem Fall head_y oder y) exakt 0 und ich wundere mich, hä? Aber das war hier in dem Fall nicht so.

Wie das wurgel sagt, es ist einfach weil du die Werte vergessen hast richtig anzupassen.

Also:
Code: [AUSKLAPPEN]
If head_x < 0 Then head_x = 1024/32
If head_x > 1024/32 Then head_x = 0
If head_y < 0 Then head_y = 768/32
If head_y > 768/32 Then head_y = 0


Dann gings bei mir auch^^


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group