Jetzt kommt die Maus

Das nächste Projekt soll ein Spiel sein, das sich stark an das altbekannte Memory hält. Der Computer (oder man selbst) kann in einem 10x10-Spielfeld die Felder mit z.B. drei verschiedenen Farben einfärben. Danach wird das Spielfeld verdeckt und der Spieler muss versuchen, Felder gleicher Farbe nacheinander aufzudecken. Die Felder sind waagerecht in Zeilen 1..10 und senkrecht in Spalten 1..10 angeordnet. Es ist also sinnvoll, ein bestimmtes Feld über seine Koordinaten z.B. zeile = 4 und spalte = 6 oder einfacher als Feld[6 ,4] anzusprechen. 

Die erste  Übung soll sein, ein bestimmtes Feld  mittels Mausklick mit einer bestimmten  Farbe einzufärben. Die Komponente TImage kennt das Ereignis  MouseDown, das mit der Prozedur

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; 
                                 Shift: TShiftState; X, Y: Integer)

behandelt werden kann. Von den übergebenen Parametern interessieren uns vor allem die Koordinaten x und y der Mausposition. Das Wertepaar (x,y) beschreibt das Pixel auf der Komponente TImage1, über dem sich die Spitze des Mauszeigers gerade befindet. Diese Werte müssen aber erst noch in Feld-Koordinaten umgerechnet werden. Das jedes Feld 25 Pixel breit und hoch ist, liefern die Umrechnungen  zeile := ( y div 25 )+1 und spalte := (x div 25)+1 die Feldkoordinaten. 

Das Umfärben kann man wieder mit der Floodfill-Routine vornehmen:

with Image1.Canvas do begin
  Brush.Color := aktuelleFarbe;
  FloodFill(spalte*25-12,zeile*25-12,clWhite,fsSurface);
end; 

Jetzt muss nur noch die aktuelle Farbe gesetzt werden. Das geschieht dadurch, dass man vor dem Färben auf den entsprechend eingefärbten FarbButton klickt.


und hier die abgespeckte Version, mit der man schon mal anfangen kann:  memory1.zip

 

Aufgaben:

  1. 1. Erstelle ein quadratisches Liniengitter auf einer Zeichenfläche, jedes Quadrat z.B. 25 x 25 Pixel groß.
  2. Setze vier Farbknöpfe auf das Formular: Es gibt sog. SpeedButtons, denen man Bilder als Oberfläche übergeben kann.
  3. Vervollständige die Routine Image1MouseDown: Das angeklickte Feld soll entsprechend eingefärbt werden und die   Koordinaten des Feldes angezeigt werden.
  4. Implementiere eine Löschroutine, die das gesamte Spielfeld neuzeichnet.
  5. Implementiere eine Routine, die ein gefärbtes Feld wieder weiß  färbt.

 

Zurück zu Delphi

© Dietrich Praclik