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
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#1

AW: Snake - meine Kreation

  Alt 30. Nov 2011, 14:32
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
  Mit Zitat antworten Zitat
Drachenchamp

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

AW: Snake - meine Kreation

  Alt 30. Nov 2011, 15:56
Danke für die Antworten!
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.
Den Fehler mit dem Bildschirm habe ich behoben. (Das kommt daher, dass ich während des Praktikums 2 Bildschirme benutze.) Das mit der Bilddatei, fällt mir grade auf, funktioniert gar nicht. Das Futter wird dann gar nicht dargestellt. Weiß jemand, woran das liegt?

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.
Weißt du, wie ich diese Fehler beheben kann?

Gruß, Drachenchamp
  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
 
#3

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
 
#4

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
 
#5

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
 
#6

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.493 Beiträge
 
Delphi 12 Athens
 
#7

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
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 18:33 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