Labyrinth (Spiel) programieren

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
jerry_cotton
Beiträge: 5
Registriert: Mo 6. Aug 2012, 17:04

Re: Labyrinth (Spiel) programieren

Beitrag von jerry_cotton »

Danke für den Tipp mit "canvas". Dazu eine kleine Frage: Ich finde den canvas. Befehl für das Erkennen der Pixel nicht. Und wie gibt man dann die Coordinaten an, wo der Computer überprüfen soll? Und wie werden die Pixelfarben dann angegeben? Mit z. B. #0000 ?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Labyrinth (Spiel) programieren

Beitrag von pluto »

Pixel wird dir nicht weiter helfen. Canvas hält eine reihe von Methoden bereit um Figuren zu Zeichnen.
Die Hintergrund oder Vordergrund Farbe kannst du wie folgt angaben:
Brush.Color > Hintergrund Farbe z.b. auf clBlack stellen
Pen.Color > Rahmen Farbe z.b. auf clRed stellen.
Nun kannst du einer dieser Methoden nutzen, um den Effekt zu sehen.

Direkt mit Pixel Arbeiten, macht wenig Sinn. Die Eigenschaft heißt:
Pixels[x,y]:=clRed;
Damit wird auf den Position x und y die Farbe Rot gesetzt. Ich hoffe ich habe mich bei der Eigenschaft Pixels nicht verschrieben.
Schau dir mal die Methoden von Canvas an: Einfach anklicken mit der Maus und dann Rechte Maustaste und der erste Eintrag im Popup Menü, welches dann erscheint.
MFG
Michael Springwald

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Labyrinth (Spiel) programieren

Beitrag von Heinrich Wolf »

jerry_cotton hat geschrieben:Danke für den Tipp mit "canvas". Dazu eine kleine Frage: Ich finde den canvas. Befehl für das Erkennen der Pixel nicht. Und wie gibt man dann die Coordinaten an, wo der Computer überprüfen soll? Und wie werden die Pixelfarben dann angegeben? Mit z. B. #0000 ?

Pixels ist eine Eigenschaft von Canvas. Image.Picture.Bitmap.Canvas.Pixels[x, y] := clRed; Wie Pluto geschrieben hat, würde ich nicht mit Pixels arbeiten. Ich würde deklarieren:

Code: Alles auswählen

const
  xDim = 50;
  yDim = 50;
type
  TSpielZelle = (zUnbekannt, zWand, zLeer, zMaennchen);
  TLabyrinthForm = class
    Image : TImage;
    Maennchen : TImage;
    ...
    FormCreate(Sender : TObject);
  private
    Spielfeld : Array[0..xDim - 1, 0 .. yDim - 1] of TSpielzelle;
    ...
    procedure Zeichnen;
  end;
...
procedure TLabyrinthForm.FormCreate;
  begin
    Image.Picture.Bitmap.Width := Image.Width;
    Image.Picture.Bitmap.Height := Image.Height;
  end;
 
procedure TLabyrinthForm.Zeichnen;
  ...
  begin
    for x := 0 to xDim do
      for y := 0 to yDim do
        begin
          case Spielfeld[x, y] of
            zWand:
              begin
                Image.Picture.Bitmap.Canvas.Brush.Color := clBlack;
                Image.Picture.Bitmap.Canvas.Pen.Color := clRed;
              end;
            zLeer:
              begin
                Image.Picture.Bitmap.Canvas.Brush.Color := clWhite;
                Image.Picture.Bitmap.Canvas.Pen.Color := clWhite;
              end;
          end;
          case Spielfeld[x, y] of
            zWand,
            zLeer:
              Image.Picture.Bitmap.Canvas.FillRect(
                Rect((x * Image.Picture.Bitmap.Width) div xDim,
                     (y * Image.Picture.Bitmap.Height) div yDim,
                     ((x + 1) * Image.Picture.Bitmap.Width) div xDim,
                     ((y + 1) * Image.Picture.Bitmap.Height) div yDim
                    ));
            zMaennchen:
              Image.Picture.Bitmap.Canvas.StretchDraw(
                Rect((x * Image.Picture.Bitmap.Width) div xDim,
                     (y * Image.Picture.Bitmap.Height) div yDim,
                     ((x + 1) * Image.Picture.Bitmap.Width) div xDim,
                     ((y + 1) * Image.Picture.Bitmap.Height) div yDim
                    ), Maennchen);
 
          end;
        end;

TLabyrinthForm.Maennchen ist dabei ein Image, das Du im Formulareditor mit einem Männchen Bitmap geladen hast und das Du unsichtbar gemacht hast. Achtung: Die y Koordinate des Image zeigt nach unten und nicht nach oben. Zur Not musst Du umrechnen.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Labyrinth (Spiel) programieren

Beitrag von pluto »

So, ähnlich mache ich es auch in meinem Beispiel-Code, den ich hier gezeigt habe, ist nur etwas "mehr" geworden.
MFG
Michael Springwald

Antworten