![]() |
Snake Spiel
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DelphiPraxis,
ich muss zum Abschluss dieses Schuljahres das Spiel Snake programmieren. Jedoch habe ich noch einige Fragen!! Ich weiß nicht ob ich die Klassen auslagern muss, wenn ja, könne mir da jemand helfen, da ich da erst am ende dran gedacht hab :( und wie ihr merken werdet habe ich einen Sound eingefügt. Ich möchte, das dieser Sound nur abgespielt wird, wenn man auf den "BtnStart" klickt, jedoch wird er jetzt abgespielt, wenn sich das Spiel öffnet. Wenn ich den befehl zum abspielen in die procedure von "BtnStart" lege, wird der Sound zwar beim klicken auf den Button abgespielt, jedoch auch wenn ich die anderen Buttons anklicke. Ich möchte aber das der Sound nur abgespielt wird, wenn der StartButton angeklickt wird! Ich bitte um dringende Hilfe ! :) Mfg. Cueppi P.S: Datei ist im Anhang :) Danke für die super Hilfe hier!!!! |
AW: Snake Spiel
Hallo und willkommen in der DP... :dp:
sei doch bitte so nett und hänge die PAS und einen Screenshot an deinen Beitrag an. Bei so einem Download weiß man nie was man bekommt :zwinker: ...dann wirst du hier geholfen. :zwinker: |
AW: Snake Spiel
Hallo und Willkommen in der DP :dp:,
Du kannst Dateien an Deinen Beitrag anhängen, dann bleiben Sie uns auch erhalten, was bei externen Links nicht immer der Fall ist. Und ich verstehe Dein Problem nicht ganz: pack den Befehl zum Sound abspielen doch einfach ins OnClick des Buttons. |
AW: Snake Spiel
Datei ist im anhang ! :)
danke!!!! ja habe ich versucht, dann spielt der trotzdem immer ab. Moment:
Delphi-Quellcode:
sonst wüsste ich leider nicht was ihr jetzt meint :(
procedure TForm1.BtnStartClick(Sender: TObject);
var X, Y: Integer; begin BtnStart.Enabled := False; PunkteZaehler:= 0; for X:=0 to BSB do for Y:=0 to HSB do map[X, Y] := 0; kopf := Point(1, 1); laengesnake := 3; richtung := Point(0, 1); map[kopf.X, kopf.Y] := laengesnake; neuesfressen; bewegungSchlange; AktiviereButtons(True); ende := False; Timer1.Enabled := True; Startbild.Visible:=false; ZPunkte.Visible:=true; APunkte.Visible:=true; BtnHoch.Visible:=True; BtnLinks.Visible:=True; BtnRechts.Visible:=True; BtnUnten.Visible:=True; PlaySOUND(PChar('.\Rattlesnakerattle.wav'),hInstance,snd_ASync ); end; |
AW: Snake Spiel
Wie ich schon sagte: nimm das PlaySound aus dem OnCreate raus und pack es ins OnClick des Startbuttons.
|
AW: Snake Spiel
bleib trotzdem so :(
ich hab es aus dem Oncreate in den OnBtnStart getan, jetzt spielt der das immer ab :( |
AW: Snake Spiel
:?: Häng doch mal die aktuelle *.pas an.
|
AW: Snake Spiel
Liste der Anhänge anzeigen (Anzahl: 1)
hier ;)
|
AW: Snake Spiel
Bei mir wird der Sound nur einmal abgespielt, wenn ich den Button betätige, also wie gewollt.
|
AW: Snake Spiel
der Sound wird abgespielt beim Start und beim Beenden, weil du in der BtnBeendenClick BtnStart.Click aufrufst. Ich gehe davon aus, daß du damit wieder neu initialisieren möchtest. Lagere die Initialisierung in eine eigene Prozedure aus und rufe diese explizit auf. Dann ist auch der Sound aus dem Beenden weg.
PS: ich glaube, daß in der
Delphi-Quellcode:
...ein paar begin / end fehlen oder zumindest durch die Formatierung nicht zu erkennen ist, wie der Ablauf wirklich sein soll.
procedure TForm1.BtnBeendenClick(Sender: TObject);
begin if (BtnStart.Enabled =false) then timer1.Enabled:=false else if (MessageBox(0,'Schon fertig gezockt ?!?! // Good Bye :-)' ,'Spielende' , MB_YESNO + MB_ICONQUESTION )=IDYES)then close; BtnStart.click; if (BtnStart.Enabled =false) then timer1.Enabled:=false; IF (MessageBox(0, 'Wiederholen ??', 'Spielende', MB_YESNO + MB_ICONQUESTION )=IDNO) then BtnStart.Click; if (BtnStart.Enabled =false) then timer1.Enabled:=false; //showMessage ('Schon fertig gezockt ?!?! // Good Bye :-)'); if (BtnStart.Enabled =false) then timer1.Enabled:=false; if (BtnStart.Enabled =true) then close; BtnStart.Enabled:=true; |
AW: Snake Spiel
ich guck mal mit den begin und end ;)
können sie mir dann einen kleinen tipp geben, wie ich das asulager `? |
AW: Snake Spiel
Was auslagern?
[edit] BTW: Deine Codeformatierung ist sagen wir mal "kreativ", da müsste etwas mehr Ordnung rein. [/edit] |
AW: Snake Spiel
Delphi-Quellcode:
procedure TForm1.Initialisierung;
var X, Y: Integer; begin BtnStart.Enabled := False; PunkteZaehler:= 0; for X:=0 to BSB do for Y:=0 to HSB do map[X, Y] := 0; kopf := Point(1, 1); laengesnake := 3; richtung := Point(0, 1); map[kopf.X, kopf.Y] := laengesnake; neuesfressen; bewegungSchlange; AktiviereButtons(True); ende := False; Timer1.Enabled := True; Startbild.Visible:=false; ZPunkte.Visible:=true; APunkte.Visible:=true; BtnHoch.Visible:=True; BtnLinks.Visible:=True; BtnRechts.Visible:=True; BtnUnten.Visible:=True; end;
Delphi-Quellcode:
procedure TForm1.BtnStartClick(Sender: TObject);
begin Initialisierung; PlaySOUND(PChar('.\Rattlesnakerattle.wav'),hInstance,snd_ASync ); end;
Delphi-Quellcode:
procedure TForm1.BtnBeendenClick(Sender: TObject);
begin if (BtnStart.Enabled =false) then timer1.Enabled:=false else if (MessageBox(0,'Schon fertig gezockt ?!?! // Good Bye :-)' ,'Spielende' , MB_YESNO + MB_ICONQUESTION )=IDYES)then close; Initialisierung; if (BtnStart.Enabled =false) then timer1.Enabled:=false; IF (MessageBox(0, 'Wiederholen ??', 'Spielende', MB_YESNO + MB_ICONQUESTION )=IDNO) then Initialisierung; if (BtnStart.Enabled =false) then timer1.Enabled:=false; //showMessage ('Schon fertig gezockt ?!?! // Good Bye :-)'); if (BtnStart.Enabled =false) then timer1.Enabled:=false; if (BtnStart.Enabled =true) then close; BtnStart.Enabled:=true; |
AW: Snake Spiel
ja also :
"der Sound wird abgespielt beim Start und beim Beenden, weil du in der BtnBeendenClick BtnStart.Click aufrufst. Ich gehe davon aus, daß du damit wieder neu initialisieren möchtest. Lagere die Initialisierung in eine eigene Prozedure aus und rufe diese explizit auf. Dann ist auch der Sound aus dem Beenden weg. " das :D |
AW: Snake Spiel
Achso, siehe Beitrag 13.
|
AW: Snake Spiel
jetzt meckert das Programm:
Nicht deklarierter Begriff in zeile 237 - 257 :( |
AW: Snake Spiel
du mußt natürlich die procedure noch unter private deklarieren... :zwinker:
Delphi-Quellcode:
private
{ Private-Deklarationen } map: Array [0..BSB] of Array [0..HSB] of Integer; kopf, richtung, fressen: TPoint; LaengeSnake: Integer; PunkteZaehler: Integer; ende: Boolean; procedure AktiviereButtons(status: Boolean); procedure FarbeSpielfeld; procedure BewegungSchlange; procedure NeuesFressen; procedure SpielEnde; procedure Initialisierung; public |
AW: Snake Spiel
Stimmt, das muss auch eine Methode sein. Schreib also mal
Delphi-Quellcode:
in den private-Abschnitt des Formulars und im implementation-Teil dann
procedure Initialisierung;
Delphi-Quellcode:
procedure TForm1.Initialisierung;
begin //hier der Code end; |
AW: Snake Spiel
es läuft alles wie gewünscht!
super danke :):):) aber noch zwei fragen: wie würdet ihr das denn "aufräumen" also, weil eben ja gesagt wurde, das ich sehr kreativ programmiert hab :( und, ich möchte die schlange mit den Pfeiltasten & "W,A,S,D" steuern können, was muss ich dafür programmieren ?? |
AW: Snake Spiel
Liste der Anhänge anzeigen (Anzahl: 1)
die fertige Datei :)
|
AW: Snake Spiel
Setz die KeyPreview-Eigenschaft des Forms auf true, dann kannst Du im OnKeyPress die entsprechende Taste abfragen und darauf reagieren. Und zur Formatierung: irgendwo hier im Forum ist der Styleguide verlinkt, an den sollte man sich weitestgehend halten.
[edit] Link gefunden: ![]() |
AW: Snake Spiel
gaaaanz laaaangsam... :zwinker:
Fang einfach mal damit an, den Quellcode vernünftig einzurücken und vor allem keine 2 Anweisungen in die gleiche Zeile. |
AW: Snake Spiel
so mal etwas aufgeräumt :)
ich hab das in der mainform auf true gesetzt, nur die frage ist, wie die procedure heißt und geschrieben wird :O ich kenn mich damit garnicht aus :( wie ihr merkt ich bin relativ neu in delphi :) |
AW: Snake Spiel
Klick auf das Form und setze im Objektinspektor KeyPreview auf true. Dann wechselst Du zu den Ereignissen und gehst zu "OnKeyPress". Im Code dazu könntest Du dann so etwas machen (ganz einfache Variante, schöner wären eigene Methoden):
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin case Key of 'a','A': BtnLinks.Click; 'd','D': BtnRechts.Click; 's','S': BtnUnten.Click; 'w','W': BtnHoch.Click; end; end; |
AW: Snake Spiel
mir fällt grade auf :(
Wenn man auf den beendenbutton klickt, wenn das spiel NICHT läuft, hat man die auswahlt zwischen weiter im programm bleiben und dem programm verlassen. Wenn ich auf programm verlassen gehe, verlässt er das programm! Jedoch wenn ich auf "nein im programm bleiben" klicke, kommt die "wiederholen ?" anfrage wieder :( die muss da noch weg ... die wiederholen anfrage soll nur kommen, wenn das spiel am laufen ist und ich es stoppen möchte.. hiillfe |
AW: Snake Spiel
Zitat:
|
AW: Snake Spiel
viiel viiel tüffteln.
ich glaub ich sitz 20 stunden an dem projekt. ich hab mich vertan. man muss ja nichts schreiben, hab das mit den ereignissen überlesen :-[ |
AW: Snake Spiel
Nochmal kurz :D
Mir fiel auf, die Schlange startete immer oben Links, das habe ich geändert :) (kopf := Point(Random(BSB), Random(HSB));) Jedoch startet sie auch immer nur in Richtung unten!! Das möchte ich auch unterschiedlich haben ... vorschläge ?
Delphi-Quellcode:
procedure TForm1.Initialisierung;
var X, Y: Integer; begin BtnStart.Enabled := False; PunkteZaehler:= 0; for X:=0 to BSB do for Y:=0 to HSB do map[X, Y] := 0; kopf := Point(Random(BSB), Random(HSB)); laengesnake := 4; richtung := Point(0, 1); map[kopf.X, kopf.Y] := laengesnake; neuesfressen; bewegungSchlange; AktiviereButtons(True ende := False; Timer1.Enabled := True; Startbild.Visible:=false; ZPunkte.Visible:=true; APunkte.Visible:=true; BtnHoch.Visible:=True; BtnLinks.Visible:=True; BtnRechts.Visible:=True; BtnUnten.Visible:=True; end; |
AW: Snake Spiel
Dann wirst du wohl auch "richtung" ändern müssen?
|
AW: Snake Spiel
und wie ?
|
AW: Snake Spiel
Zitat:
Zitat:
Langsam zweifle ich, dass du da viel selbst gemacht, geschweige denn verstanden hast. |
AW: Snake Spiel
ja super clevere aussage!
Delphi-Quellcode:
hab ich da stehen!
begin
BtnStart.Enabled := False; PunkteZaehler:= 0; for X:=0 to BSB do for Y:=0 to HSB do map[X, Y] := 0; Kopf:= Point(Random(BSB), Random(HSB)); laengesnake := 4; richtung := Point( 0, 1); map[kopf.X, kopf.Y] := laengesnake; neuesfressen; bewegungSchlange; AktiviereButtons(True); Wenn ich
Delphi-Quellcode:
also bei richtung auch änder, dann flipt mir die schlange rum und das programm beendet sich!!!
begin
BtnStart.Enabled := False; PunkteZaehler:= 0; for X:=0 to BSB do for Y:=0 to HSB do map[X, Y] := 0; Kopf:= Point(Random(BSB), Random(HSB)); laengesnake := 4; richtung := Point(Random(BSB), Random(HSB)); map[kopf.X, kopf.Y] := laengesnake; neuesfressen; bewegungSchlange; AktiviereButtons(True); |
AW: Snake Spiel
Ich weiß nicht, was HSB und BSB sind. Du musst natürlich dafür sorgen, dass nur Werte zwischen 0 und 1 heraus kommen (evtl. auch negativ), falls das dein Problem sein sollte.
|
AW: Snake Spiel
HSB = Höhe des Bereichs
BSB = Breite des Bereichs also das Spielfeld ist gemeint |
AW: Snake Spiel
Eben.
|
AW: Snake Spiel
Wenn Du wirklich so viel getüftelt hast, wirst Du Deinen eigenen Quelltext ja wohl am ehesten verstehen und wissen, was Du wieso gemacht hast. Für uns als Außenstehende ist das ungleich schwieriger.
|
AW: Snake Spiel
also, HSB & BSB sind 35 Felder groß! ( 0 -34)
Das Raster ist in 10 eingeteilt. Mein problem besteht nur darin, das die schlange immer nach unten startet. Sie soll nur immer unterschiedlich starten(mal rechts, mal links...) //Kopf:= Point(Random(BSB), Random(HSB)); Die Position des Kopf's auf der Map ist zufällig. //richtung := Point( 0, 1); Die Startrichtung der Schlange ist x(BSB) =0, da x=0 keine bewegung nach links, rechts! Die Startrichtung der Schlange ist y(HSB) =1, also startet in richtung Y-Achse, also nach unten!!! Das möchte ich nicht mehr haben. Der zufallsbefehl ist "Random" aaaaaaaber wenn ich den einfüge, flippt mir die schalnge rum und das spiel wird beendet :( ich weiß doch selber nicht weiter :( Ich bin neu in Delphi, habe selber noch Probleme. Ich habe es mit einem Tutorial eines Freundes gemacht.. |
AW: Snake Spiel
Das ist nicht ganz so trivial. Wenn der Kopf zufällig irgendwo auf dem Spielfeld auftauchen darf, musst Du zunächst prüfen, ob sie in irgendeiner Richtung bereits so nah am Rand ist, dass ein Spiel gar nicht möglich ist und ggf. die Richtung korrigieren.
|
AW: Snake Spiel
ja das weiß ich auch.
diese Prüfung habe ich versucht, nicht hinbekommen :( |
AW: Snake Spiel
Zeige uns doch mal deinen Versuch.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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 by Thomas Breitkreuz