![]() |
Snake für die Schule programmieren,Pause;Highscoures einbaun
Moin Leute ich bin ganz neu hier und habe ein paar Fragen.
Ich habe es mit meinen bescheiden Delphi Kenntnisse und den Tipps hier im Forum schon geschafft, eine schlange zu bauen, die sich verlängert und das spiel abbricht, wenn die wand oder seiner selbst berüht wird. nun mächte ich noch einne highscoure einbauen. Für jeden Punkt soll es 5 Punkte geben. Wie mache ich das am besten...? Dann hätte ich gerne sowas wie eine Pause Funktion, dass das Spiel angehalten werden kann. Wäre super, wenn ich ein paar Tipps bekommen könnte, wo ich da nachlesen kann oder wie die befehle lauten vielen Dank. PS: Sorry aber ich bin wieder einer der typischen Deppen die bei so einem älteren Herrn Unterricht haben, der selbst keine Peilung hat und man sich so den ganzen kram selber beibringen muss. Kotz.... Danke euch für die Unterstüzung! :thumb: |
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Wie baust/bewegst du die Shclange. Läuft die Geschwindigkeit des Spielsvia Timer?
Ein bisschen QT wäre nich schlecht, Kristallkugel ist grad in Reperatur -.- |
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Ich hab mich ganz an das Beispiel hier im Forum gehalten... Jupp es läuft mit Timer:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; const farben: Array [0..2] of TColor=(clWhite, clLime, clRed); stufen: Array [0..2] of Cardinal=(200, 100, 50); raster = 7; breite = 65; hoehe = 45; type TForm1 = class(TForm) Spielfeld: TPaintBox; Timer1: TTimer; BStart: TButton; BOben: TButton; BLinks: TButton; BRechts: TButton; BUnten: TButton; PEnde: TButton; procedure BStartClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure BObenClick(Sender: TObject); procedure BLinksClick(Sender: TObject); procedure BRechtsClick(Sender: TObject); procedure BUntenClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure PEndeClick(Sender: TObject); private { Private-Deklarationen } map: Array [0..breite] of Array [0..hoehe] of Integer; kopf, richtung, futter: TPoint; laenge: Integer; ende, rand, gebissen: Boolean; procedure enable_buttons(status: Boolean); procedure spiel_ende; procedure neues_futter; procedure paint_map; procedure calc_snake; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.enable_buttons(status: Boolean); begin BOben.Enabled := status; BRechts.Enabled := status; BLinks.Enabled := status; BUnten.Enabled := status; end; procedure TForm1.spiel_ende; begin ende := True; Timer1.Enabled := False; enable_buttons(False); BStart.Enabled := True; end; procedure TForm1.neues_futter; begin futter := Point(Random(breite), Random(hoehe)); while map[futter.X, futter.Y]<>0 do futter := Point(Random(breite), Random(hoehe)); map[futter.X,futter.Y] := -1; end; procedure TForm1.paint_map; var i, j: Integer; col: TColor; begin for i := 0 to breite do for j := 0 to hoehe do begin case map[i, j] of -1: col := farben[1]; 0: col := farben[0]; else col := farben[2]; end; Spielfeld.Canvas.Brush.Color:=col; Spielfeld.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster)); end; end; procedure TForm1.calc_snake; var i, j: Integer; begin for i := 0 to breite do for j := 0 to hoehe do if map[i, j]>0 then Dec(map[i, j]); Inc(kopf.X, richtung.X); Inc(kopf.Y, richtung.Y); if (kopf.X<0) or (kopf.X>breite) or (kopf.Y<0) or (kopf.Y>hoehe) then begin spiel_ende; ShowMessage('Nicht den Rand berühen!'); end; if (map[kopf.X, kopf.Y]>0) and (not ende) then begin spiel_ende; ShowMessage('Nicht in den Schwanz beißen!'); end; if (kopf.X=futter.X) and (kopf.Y=futter.Y) then begin Inc(laenge); neues_futter; end; map[kopf.X, kopf.Y] := laenge; end; procedure TForm1.BStartClick(Sender: TObject); var i, j: Integer; begin BStart.Enabled := False; for i:=0 to breite do for j:=0 to hoehe do map[i, j] := 0; kopf := Point(1, 1); laenge := 5; richtung := Point(0, 1); map[kopf.X, kopf.Y] := laenge; neues_futter; paint_map; enable_buttons(True); ende := False; Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin calc_snake; if not ende then paint_map; end; procedure TForm1.BObenClick(Sender: TObject); begin if richtung.Y=0 then richtung := Point(0, -1); end; procedure TForm1.BLinksClick(Sender: TObject); begin if richtung.X=0 then richtung := Point(-1, 0); end; procedure TForm1.BRechtsClick(Sender: TObject); begin if richtung.X=0 then richtung := Point(1, 0); end; procedure TForm1.BUntenClick(Sender: TObject); begin if richtung.Y=0 then richtung := Point(0, 1); end; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end; procedure TForm1.PEndeClick(Sender: TObject); begin halt; end; end. |
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Die Punkte addierst du, wenn auch eine Kollision festgestellt wurde. Die Pause kannst du zb. Durch deaktivierung des Timers verursachen
|
Re: Snake für die Schule programmieren,Pause;Highscoures ein
letzteres kapiere ich noch.
Aber wie addieren. Wenn game over ist muss es doch angezeigt werden? Am besten in einem neuem fenster oder? |
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Du addierst immer wenn eine Kollision nit Futter stattfindet auf eine Variable (sowas wie 'Score') 5 hinzu. Wenn das spiel zuende ist kannst du ja mit einer MessageBox oder Label die Punktezahl/Highscores anzeigen lassen
|
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Das hab ich verstanden, nur die umstetzung!
|
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Delphi-Quellcode:
Und dann
if (kopf.X=futter.X) and (kopf.Y=futter.Y) then
begin Punkte:=Punkte+5; Inc(laenge); neues_futter; end;
Delphi-Quellcode:
procedure TForm1.spiel_ende;
begin ende := True; Timer1.Enabled := False; enable_buttons(False); BStart.Enabled := True; ShowMessage('Du hast '+IntToStr(Punkte)+' Punkte erreicht); end; |
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Danke werd es gleich einbauen. Bin noch an der Pause. Wie bekomme ich den Button weg.
TForm1.PauseClick.Visible:=False; klappt net, der Button heißt Pause- du merkst ich bin ein Noob^^ |
Re: Snake für die Schule programmieren,Pause;Highscoures ein
Ohne das T vor TForm^^
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz