Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 13:15:36
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Allgemeines Forum
| | |-+  Snake-Spiel
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Snake-Spiel  (Gelesen 2143 mal)
Kesteff
Newbie
*
Offline Offline

Beiträge: 4


123107042
« am: 06.03.2002, 17:15:30 »

Ich habe ein Snake-Spiel (bekannt von den Nokia-Handys) programmiert, allerdings funktionieren die Grundideen nicht, nämlich, dass die Schlange wächst, wenn sie was gefressen hat und dass das Spiel zu Ende ist, wenn die Schlange den Spielfeldrand oder sich selbst berührt hat.
 
Code:
procedure TSpielForm.GameOver;

begin

  if (Kopf<>nil)and((Kopf^.x=SpielImage.Width) or(Kopf^.x=0) or(Kopf^.y<SpielImage.Height)or(Kopf^.y<0))

    then timer1.Enabled := false;

      GameLabel.Visible := true;

  end;



procedure TSpielForm.ApfelGefressen;

begin

  Apfel.x:=random((SpielImage.Width div 10-1)*10);

  Apfel.y:=random((SpielImage.Height div 10-1)*10);

  if (Kop<>nil)and(Kopf^.x=Apfel.x)and(Kopf^.y=Apfel.y)

    then begin Apfel.z := true;

      Laenge := Laenge+2;

  end;

end;

Was haut da nicht hin bei diesen Prozeduren?
Gespeichert
Lemy
Hero Member
*****
Offline Offline

Beiträge: 605



« Antworten #1 am: 06.03.2002, 18:06:33 »

[font  size=2 face="Courier New" color="#000080"]// Kopf^.y ]= SpielImage.Height Test war <
[/font]procedure TSpielForm.GameOver;
begin
  if 
( (Kopf<>nil)
  and  ( (Kopf^.x ]= SpielImage.Width)
  or     (Kopf^.x <= 0)
 or     (Kopf^.y ]= SpielImage.Height)
  or     (Kopf^.y <= 0 ) ) )then
    
timer1.Enabled := false;
  GameLabel.Visible := true;
end;

[font color="#000080"]// if ( (Kopf <> nil) war Kop <> nil

[/font]procedure TSpielForm.ApfelGefressen;
begin
  
Apfel.x := random((SpielImage.Width div 10-1)*10);
  Apfel.y := random((SpielImage.Height div 10-1)*10);
  if ( (Kopf <> nil)
  and  (Kopf^.x = Apfel.x)
  and  (Kopf^.y = Apfel.y) ) then
  begin
    
Apfel.z := true;
    Laenge := Laenge+2;
  end;
end;

[/font]
Gespeichert
Kesteff
Newbie
*
Offline Offline

Beiträge: 4


123107042
« Antworten #2 am: 06.03.2002, 22:13:32 »

Dankeschön!!!
Aber leider klappen beide Prozeduren immer noch nicht richtig. Zumindest nicht, wenn ich die Prozeduren so belasse, füge ich allerdings die GameOver-Prozedur in eine Timer-Prozedur mit ein so funktioniert erstmal das Prinzip. Jedoch hält die Schlange nicht genau mit dem Kopfanfang vor der Spielfeldabgrenzung an, sondern verschwindet ein bisschen daruntur. Könnte das vielleicht an den Koordinaten der Schlange liegen? Denn der Kopf ist ja nicht nur ein kleiner Punkt, sondern ein Kreis.
So hab ich den Schlangenkopf zuvor in einer anderen Prozedur erstellt:
Code:
SpielImage.Canvas.Ellipse (Kopf^.x, Kopf^.y, Kopf^.x+24, Kopf^.y+24);

Was muss ich jetzt an der GameOver-Prozedur ändern?
Gespeichert
Lemy
Hero Member
*****
Offline Offline

Beiträge: 605



« Antworten #3 am: 07.03.2002, 11:15:40 »

[font  size=2 face="Courier New" color="#000000"]  if ( (Kopf<>nil)
  and  ( (Kopf^.x >= SpielImage.Width -12)
  or     (Kopf^.x <= 12)
  or     (Kopf^.y >= SpielImage.Height -12)
  or     (Kopf^.y <= 12 ) ) )then

[/font]
Gespeichert
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS