![]() |
Snake - meine Kreation
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Leute,
ich habe während einer Praktikumswoche mal Snake programmiert. Als Vorlage nahm ich dieses Tutorial: ![]() Dann habe ich ein paar Sachen hinzugefügt (u.a. 3 Schwierigkeitsstufen). Vielleicht wollt ihr mir ja sagen, was ihr davon haltet... (Zur Info: Ich programmiere erst seit ca. 3 Wochen mit Delphi.) Drachenchamp |
AW: Snake - meine Kreation
Nicht schlecht. Zwei Fehler ist mir aufgefallen, wenn man kein Bild im Laden-Dialog auswählt, kommt 'Unbekannte Bilderweiterung (.)' und die Form startet bei mir über den linken Bildschirmrand hinaus.
MfG schlagzu |
AW: Snake - meine Kreation
Das konnte mich 15 Minuten vom langweiligen Arbeitsalltag ablenken!
Zwei Kleinigkeiten: - Ich war tot, habe neu angefangen auf Mittel. Meine Schlange wurde scheinbar genau vor einem Hindernis wiederbelebt und ich bekam sofort die Meldung, dass ich gegen ein Hindernis gelaufen bin. - Wenn man sich nach rechts bewegt und ganz schnell hintereinander "Pfeil nach oben" und dann "Pfeil nach links" drückt ist man tot, obwohl die Schlange sich nicht nach oben bewegt hat. Im Programmablauf vielleicht schon, visuell aber nicht. Wenn du daran weiter arbeiten möchtest, würde ich den Quelltext (der für "nur 3 Wochen Programmiererfahrung" nicht schlecht ist wie ich sagen würde) vielleicht mit ein paar Klassen ausstatten, z.B. TSchlange, TSchlangenTeil, TFutter (Sichtwort Objektorientierte Programmierung). Damit wird das alles noch leserlicher. Und wenn du es auf die Spitze treiben möchtest kannst du vielleicht auch mit Andorra 2D experimentieren, dann kannst du DirectX/OpenGL nutzen für ein paar schöne Effekte und so :) |
AW: Snake - meine Kreation
Danke für die Antworten!
Zitat:
Zitat:
Gruß, Drachenchamp |
AW: Snake - meine Kreation
Zitat:
|
AW: Snake - meine Kreation
wegen der Bilddatei
Delphi-Quellcode:
Du willst das Bild wirklich beim Zeichnen jedes Mappoints neu laden?
case map[i, j] of
..... -1: if CheckBox_Futterbild.Checked then Apple.Picture.LoadFromFile(OpenDialog.FileName) setze hier einfach nur die Farbe. Da wo Du zeichnest fehlt die Unterscheidung
Delphi-Quellcode:
tja und da fehlt dann das Malen...
if CheckBox_Futterbild.Checked and Assigned(Apple.Picture.Graphic) then
von Vorteil wäre auch:
Delphi-Quellcode:
und ein Dialog der es nicht zulässt alles Möglich zu laden.
if OpenDialog.Execute then
Apple.Picture.LoadFromFile(OpenDialog.FileName); |
AW: Snake - meine Kreation
Zitat:
|
AW: Snake - meine Kreation
Wenn noch jemand dieses Thema verfolgt, wäre ich dankbar für eine Erklärung, wie ich den o.g. Abschnitt in den Quelltext einbauen kann...
|
AW: Snake - meine Kreation
Das Stichwort für die Suche wäre Canvas.Draw ...
|
AW: Snake - meine Kreation
Dem Ereignis "CheckBox_Futterbild.OnClick" ist derzeit die Methode "FormCreate()" zugewiesen.
Es sollte aber besser die Methode "FutterBild()" sein. Ich hab mich bemüht nicht zu viel zu ändern:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin {Apfel erzeugen, unsichtbar} Apple:=TImage.Create(Form1); Apple.Visible := False; Application.HintHidePause:=4000; {...} end; procedure TForm1.FutterBild(Sender: TObject); begin {Checkbox wurde an oder ausgeschalten} if CheckBox_Futterbild.Checked then begin if OpenDialog.Execute then begin Apple.Picture.LoadFromFile(OpenDialog.FileName); if Assigned(Apple.Picture.Graphic) then Apple.Picture.Graphic.Transparent := True; end; CheckBox_Futterbild.Checked := Assigned(Apple.Picture.Graphic); end; {neu Zeichnen} paint_map; end; {Das Zeichnen auf mehrere Methoden verteilt} function TForm1.GetItemColor(AItem: Integer): TColor; begin case AItem of -2: Result := ColorDialog_Wand.Color; -1: Result := ColorDialog_Futter.Color; 0: Result := ColorDialog_HG.Color; else Result := ColorDialog_Schlange.Color; end; end; procedure TForm1.paint_background(ARect: TRect); begin {Hintergrund zeichnen} Spielfeld.Canvas.Brush.Color := ColorDialog_HG.Color; Spielfeld.Canvas.FillRect(ARect); end; procedure TForm1.paint_field(AItem: Integer; ARect: TRect); begin {Bild des Futters zeichnen} if CheckBox_Futterbild.Checked and (AItem = -1) then begin paint_background(ARect); Spielfeld.Canvas.StretchDraw(ARect, Apple.Picture.Graphic); end else if RadioButton_Kreise.Checked then begin paint_background(ARect); if AItem <> 0 then begin Spielfeld.Canvas.Brush.Color := GetItemColor(AItem); Spielfeld.Canvas.Ellipse(ARect); end; end else begin Spielfeld.Canvas.Brush.Color := GetItemColor(AItem); Spielfeld.Canvas.FillRect(ARect); end; end; procedure TForm1.paint_map; var x, y: Integer; begin for y := 0 to breite do for x := 0 to hoehe do paint_field(map[x, y], Rect(x*raster, y*raster, (x+1)*raster, (y+1)*raster)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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