|
Registriert seit: 3. Mär 2009 Ort: Köln 6 Beiträge |
#1
Hallo Liebe Member,
ich habe ein Problem mit der Steuerung von Snake. Ich selber habe schon einige Zeit nach dem Fehler gesucht aber nichts gefunden. Evtl. kann mir ja einer von euch helfen. Hier der Programmcode:
Delphi-Quellcode:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TSpiel = class(TForm) Spielfeld: TImage; Timer1: TTimer; Punkte: TLabel; rang: TLabel; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; const sup = 1; sdown = 2; sleft = 3; sright = 4; Wand = 5; Essen = 6; var Spiel: TSpiel; Karte: array[1..150] of array[1..150] of integer; // Doppeltes Array Schlange: array of TPoint; Essenposition: Tpoint; // position des Essens schlangenlaenge,setlaenge, KeyDirection,Direction,level, P, HighScore: integer; //HSFile: TIniFile; implementation uses Unit2; {$R *.dfm} procedure Spielflaeche(x,y: integer; color: Tcolor); // Spielfeld zeichnen begin with Spiel.Spielfeld.canvas do begin pen.color:= color; brush.color:= color; rectangle(x*5-4, y*5-4, x*5, y*5); end; end; procedure Zeichnewand; var x, y, i: integer; begin for i:= 1 to 90 do begin x:= 1; y:= i; Spielflaeche(x, y, clblack); Karte[x, y]:= Wand; x:= 90; // Feldgröße; Spielflaeche(x, y, clblack); Karte[x, y]:= Wand; x:= i; y:= 1; Spielflaeche(x, y, clblack); Karte[x, y]:= Wand; y:= 90; // Feldgröße Spielflaeche(x, y, clblack); Karte[x, y]:= Wand; end; end; procedure Zeichnekarte; var x, y, i: integer; begin with Spiel.Spielfeld.Canvas do begin brush.color:= clwhite; rectangle(0, 0, 450, 450); end; x:= 0; y:= 0; for i:= 0 to 40 do begin with Spiel.Spielfeld.canvas do x:= x + 5; y:= y + 5; end; Zeichnewand; end; procedure Zeichneschlange; var i: integer; begin Spielflaeche(Schlange[0].X, Schlange[0].Y, clred); for i:= 1 to Schlangenlaenge do Spielflaeche(Schlange[i].X, Schlange[i].Y, clgreen); end; procedure Zeichneessen; begin Spielflaeche(Essenposition.x, Essenposition.y, clblue); end; procedure ErstelleEssen; var i: integer; begin Essenposition.X:= random(37) + 2; Essenposition.Y:= random(37) + 2; for i:= 0 to Schlangenlaenge do if (Schlange[i].X = Essenposition.X) and (Schlange[i].Y = Essenposition.Y) then ErstelleEssen else Karte[Essenposition.x, Essenposition.y]:= Essen; end; procedure StartGame; var i, x, y: integer; begin //try //HSFile:=TIniFile.Create('Highscore.ini'); //HighScore:= HSFile.Readinteger('Score', 'HighScore', 0); //finally //HSFile.Free; //end; //Spiel.HSDisplay.caption:= 'HighScore: ' + inttostr(HighScore); Spiel.Timer1.Enabled:= true; P:= 0; Spiel.Punkte.Caption:= 'Punkte: ' + inttostr(P); for x:= 1 to 40 do for y:= 1 to 40 do Karte[x, y]:= 0; direction:= random(4)+1; schlangenlaenge:= 8; setlength(schlange, schlangenlaenge + 1); schlange[0].x:= random(20) + 10; schlange[0].y:= random(20) + 10; for i:= 1 to schlangenlaenge do begin schlange[i].Y:= schlange[0].Y; schlange[i].X:= schlange[0].X; end; ErstelleEssen; Zeichnekarte; ZeichneEssen; Zeichneschlange; end; procedure GameOver; begin Spiel.Timer1.Enabled:= false; //try //HSFile:=TIniFile.Create('Highscore.ini'); //if HSFile.Readinteger('Score', 'HighScore', 0) < Points //then HSFile.Writeinteger('Score', 'Highscore', Points); //finally // HSFile.Free; //end; showmessage('Spielvorbei!'); StartGame; end; procedure TSpiel.FormCreate(Sender: TObject); begin randomize; Spiel.DoubleBuffered:= true; StartGame; end; procedure TSpiel.Timer1Timer(Sender: TObject); var i,c:integer; begin for i:= schlangenlaenge downto 1 do begin schlange[i].y:= schlange[i-1].Y; schlange[i].X:= schlange[i-1].X; end; if Direction = sUp then schlange[0].Y:= schlange[0].Y - 1 else if Direction = sDown then schlange[0].Y:= schlange[0].Y + 1 else if Direction = sLeft then schlange[0].X:= schlange[0].X - 1 else if Direction = sRight then schlange[0].X:= schlange[0].X + 1 else if Karte[schlange[0].X, schlange[0].y] = Wand then begin GameOver; exit; end; if Karte[schlange[0].X, schlange[0].Y] = Essen then begin P:= P + 25; // Zählen der Punkte Punkte.Caption:= 'Punkte: ' + inttostr(P);//Punkte schlangenlaenge:= schlangenlaenge + 1; setlength(schlange, schlangenlaenge + 1); Karte[Essenposition.x, Essenposition.y]:= 0; ErstelleEssen; end; for c:= 1 to schlangenlaenge do if (schlange[0].X = schlange[c].X) and (schlange[0].Y = schlange[c].Y) then begin GameOver; exit; end; Zeichnekarte; Zeichneessen; ZeichneSchlange; //LVL Backgroundwechsel if p=100 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl2.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=150 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl3.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=200 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl4.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=250 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl5.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=300 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl6.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=350 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl7.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=400 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl8.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=450 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl9.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-20; end; if p=500 then begin Spielfeld.Picture.LoadFromFile('Bilder/lvl10.bmp'); level:=level+1; rang.Caption:='Level: '+inttostr(level); timer1.Interval:=timer1.interval-19; end; end; procedure TSpiel.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = vk_up) and (Direction <> sDown) then Direction:= sUp ; if (key = vk_down) and (Direction <> sUp) then Direction:= sDown; if (key = vk_left) and (Direction <> sRight) then Direction:= sleft; if (key = vk_right) and (Direction <> sLeft) then Direction:= sright; end; end. Vielen Dank schon mal für eure Hilfe. |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |