![]() |
Python (Snake) Verbesserungsvorschläge
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute,
ich habe für die Schule eine Snake Version programmiert (s. Anhang) Nun meine Frage: Habt ihr Verbesserungsvorschläge??? :mrgreen: |
Re: Python (Snake) Verbesserungsvorschläge
Hi
Zitat:
Zitat:
` => ' Wenn man die Schlange schneller "kriechen" lässt, sollte es pro Steinchen, das man einsammelt, mehr Punkte geben, als wenn die Schlange langsam läuft. Dann halt das Übliche, wie Festergröße fix lassen oder das Spiel eben skalieren. Sonst ganz nett. |
Re: Python (Snake) Verbesserungsvorschläge
Hi,
Zitat:
(2) Wenn die Schlange an der Bande anschlägt, sollte das Spiel zu Ende sein. Sonst ganz nett! |
Re: Python (Snake) Verbesserungsvorschläge
Zitat:
zu2) Das ist die 2. Snake Version. Sieht genauso aus aber auch mit Banden aus.... Kleine Frage: Wie fixiere ich das Fenster? |
Re: Python (Snake) Verbesserungsvorschläge
Zitat:
- BorderStyle auf bsSingle - BorderIcons: biMaximize auf false |
Re: Python (Snake) Verbesserungsvorschläge
Da ich selber einen Snake-Clone in der Mache hab erkenn ich einen meiner ersten Bugs wieder: Schnelle Wende innerhalb eines Zyklus führt zum Crash.
Passiert zum beispiel, wenn du dich nach unten bewegst und schnell nach oben willst (natürlich neben der Schlange) also schnell links und hoch, leider zu schnell (innerhalb dess Takts) und Crash. Wenn es nach unten geht sollt der Befehl nach oben geblockt werden ;) just my 2 cent. |
Re: Python (Snake) Verbesserungsvorschläge
wie würdest du das problem am besten lösen - also wie soll ichs blocken?
|
Re: Python (Snake) Verbesserungsvorschläge
Ich hab mir nen eigenen Typ deklariert...
Delphi-Quellcode:
bei einem Step wird dann einfach geprüft ob die Richtung die 'gewählt' wurde entgegengesetzt der alten (zwischengespeicherten) Richtung ist und dann passiert einfach nichts bzw. er macht den Schritt nach links oder so noch. Asynchrone Tastenabfrage ist hier wohl das Schlüsselwort. So bekommst du raus Welche Tasten gedrückt wurden und das im Timer. Bei OnKey die Richtung zu setzen hat da entscheidende Nachteile wie ich feststellen musste. Das sollt auch mit Integers oder Sting funzen eigentlich ;) aber 'n eigener Typ ist im Code einfach wesentlich übersichtlicher.
TRichtung = (riLinks, riRechts, riHoch, riRunter);
|
Re: Python (Snake) Verbesserungsvorschläge
also ivh habs jetzt so gemacht:
Delphi-Quellcode:
if (key = VK_UP) then begin
if richtung.Y=0 then richtung := Point(0, -1); end else if (key = VK_down) then begin if richtung.Y=0 then richtung := Point(0, 1); end else if (key = VK_right) then begin if richtung.X=0 then richtung := Point(1, 0); end else if (key = VK_left) then begin if richtung.X=0 then richtung := Point(-1, 0); end geht das oder ist da ein fehler drinnen??? |
Re: Python (Snake) Verbesserungsvorschläge
Siehe oben... auf die Weise bekommst du nicht raus in welche Richtung der User bei dem Step eigentlich wollte. Darum asynchron im Timer abfragen statt auf OnKeyDown
|
Re: Python (Snake) Verbesserungsvorschläge
passiert der fehler eigentl. nur weil rechner zu langsam oder wegen was anderem???
|
Re: Python (Snake) Verbesserungsvorschläge
Zum Highscore: wenn man den knackt, soll man seinen Namen ja ohne Leerzeichen eingeben:
1. wieso? 2. wenn man doch eins eingibt oder wenn man Zahlen eingibt, wird ein Delphi-Fehler angezeigt und der eigene Highscore wird überhaupt nicht angezeigt und auch nicht gespeichert > lässt sich deutlich besser lösen 3. warum verbietest du nicht einfach die Eingabe eines Leerzeichens, z.B. mit
Delphi-Quellcode:
Das EditXKeypress natürlich noch auf deine Nummer des Edits anpassen.
procedure TForm1.EditXKeyPress(Sender: TObject; var Key: Char);
begin if not (Key in ['A'..'Z', 'a'..'z', Char(VK_BACK)]) then Key := #0; end; 4. Wenn man dann seinen Namen eingegeben hat, wird der neue Highscore nicht sofort in der Anzeige aktualisiert, sondern erst, wenn man ein neues Spiel mit ENTER begonnen hat. 5. Man kann bei der Eingabe des Namens einen unendlich langen Namen eingeben. Ich würde die maximale Eingabelänge des Edits mit dem MaxLength-Wert setzen 6. Bei der Frage nach der Zeit in Millisekunden kann man auch Buchstaben eingeben. Deshalb analog zu oben bitte folgenden Code im Keypress-Event verwenden:
Delphi-Quellcode:
Außerdem würde ich dann nochmal vom Programm prüfen lassen, ob wirklich nur Nummern eingegeben wurden.
procedure TForm1.EditXKeyPress(Sender: TObject; var Key: Char);
begin if not (Key in ['0'..'9', Char(VK_BACK)]) then Key := #0; end; Aber ansonsten ist dein Programm wirklich gut :thumb: |
Re: Python (Snake) Verbesserungsvorschläge
@
cruiser: ich finde zu deinem punkt absolut nix... könntest du mir mal einen teil vom code (zur tasetnabfrage) per PM oder so schicken? |
Re: Python (Snake) Verbesserungsvorschläge
Mal sehn wie man das auf die schnelle adaptieren könnte... bei nem TPoint ist der Nachteil, dass du's nicht direkt im case nutzen kannst :/
wenn isKeyPressed eine Funktion ist die prüft ob in der Zwischenzeit eine bestimmte Taste gedrückt wurde (Die Arbeit nehm ich dir nicht ab ;) ) könnt mans etwa so machen (und zwar im OnTimer):
Delphi-Quellcode:
Das ist nicht geprüft aber so müsst es sauber gehn ;)// Deklarationen: // richtung : globalevariable vom typ TRichtung // bLeft etc. : lokale Variable vom typ Boolean if isKeyPressed(VK_Left) then bLeft := true; // wiederholen für die anderen Richtungen // => du weisst welche Tasten gedrückt wurden case Richtung of riLeft : begin if bHoch then richtung := riHoch; if bRunter then richtung := riRunter; end; // wiederholen für die anderen 3 Fälle end; // auf richtung reagieren und entsprechend zeichnen |
Re: Python (Snake) Verbesserungsvorschläge
lass mich raten und die procedure
isKeyPressed muss mit GetAsyncKeyState gemacht werden oder :) |
Re: Python (Snake) Verbesserungsvorschläge
Geraten, suche benutzt oder PM gelesen? :twisted:
|
Re: Python (Snake) Verbesserungsvorschläge
immer diese verdammten besserwisser ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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