AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Snake - meine Kreation
Thema durchsuchen
Ansicht
Themen-Optionen

Snake - meine Kreation

Ein Thema von Drachenchamp · begonnen am 30. Nov 2011 · letzter Beitrag vom 9. Jan 2012
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: Snake - meine Kreation

  Alt 30. Nov 2011, 16:15
wegen der Bilddatei
Delphi-Quellcode:
    case map[i, j] of
        .....
       -1: if CheckBox_Futterbild.Checked then
              Apple.Picture.LoadFromFile(OpenDialog.FileName)
Du willst das Bild wirklich beim Zeichnen jedes Mappoints neu laden?
setze hier einfach nur die Farbe.
Da wo Du zeichnest fehlt die Unterscheidung
  if CheckBox_Futterbild.Checked and Assigned(Apple.Picture.Graphic) then tja und da fehlt dann das Malen...

von Vorteil wäre auch:
Delphi-Quellcode:
  if OpenDialog.Execute then
     Apple.Picture.LoadFromFile(OpenDialog.FileName);
und ein Dialog der es nicht zulässt alles Möglich zu laden.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Drachenchamp

Registriert seit: 25. Nov 2011
Ort: Leer
6 Beiträge
 
Delphi 7 Professional
 
#2

AW: Snake - meine Kreation

  Alt 1. Dez 2011, 10:28
  if CheckBox_Futterbild.Checked and Assigned(Apple.Picture.Graphic) then tja und da fehlt dann das Malen...
Wo und wie genau muss ich das in den Quelltext einbauen?
  Mit Zitat antworten Zitat
Drachenchamp

Registriert seit: 25. Nov 2011
Ort: Leer
6 Beiträge
 
Delphi 7 Professional
 
#3

AW: Snake - meine Kreation

  Alt 2. Dez 2011, 12:49
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...
Hinter dir, ein dreiköpfiger Affe!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Snake - meine Kreation

  Alt 2. Dez 2011, 13:11
Das Stichwort für die Suche wäre Canvas.Draw ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#5

AW: Snake - meine Kreation

  Alt 2. Dez 2011, 14:43
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;
  Mit Zitat antworten Zitat
Drachenchamp

Registriert seit: 25. Nov 2011
Ort: Leer
6 Beiträge
 
Delphi 7 Professional
 
#6

AW: Snake - meine Kreation

  Alt 3. Dez 2011, 18:18
Danke, ich werde es Montag ausprobieren.
Hinter dir, ein dreiköpfiger Affe!
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Snake - meine Kreation

  Alt 14. Dez 2011, 22:16
Also vor allem eines hab ich gelernt: Ja nicht auf Futterbild laden klicken
Klick mal drauf, dann auf abbrechen, dann auf Spiel starten und dann versuch mal aus dem Sumpf wieder rauszukommen

Ansonsten sehr gut für ein erstes Programmierprojekt! Respekt!

Meine Verbesserungsvorschläge:

- das Fenster kleiner machen
- die Spielfeldgrösse sollte man gleich zu Beginn sehen / sobald man Breite und Höhe verändert (onchange)
- ein Icon wär noch schön (Projektoptionen)
- mach ein RICHTIGES Spiel draus! Soll heissen: Verstecke/verkleinere unwichtige Buttons wie die ganzen Farboptionen und mach nur die wichtigsten Buttons hin. So dass sich ein Kind sofort auskennt und drauflosspielt. Das ist jetzt nicht mehr viel Arbeit, aber macht dann gleich mehr "her".
- evtl. die Optionen auf ein zweites Form (das ist dann aber am Anfang etwas Aufwand bis man's einmal gelernt hat (ist nicht schwer))
- das mit dem Futterbild muss leicht verständlich funktionieren (für reine Anwender, die den Quellcode nicht kennen) und wenn man abbricht darf keine Exception kommen.
- evtl. ein einzigartiger Name: xxx's Snake vielleicht ?
- ich find Kreise als defaultwert schöner, is aber Geschmackssache

LG Stefan
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 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