Memory-Spiel

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Memory-Spiel

Beitrag von hde »

Michl hat geschrieben:glaube nicht, dass sich jemand durch den kompletten Code liest...
so wird's wohl sein

Sadde
Beiträge: 9
Registriert: Fr 14. Jun 2013, 15:59

Re: Memory-Spiel

Beitrag von Sadde »

Hier die .zip das Problem ist im Bildermodus. zu Beginn passiert garnichts, drückt man auf Karten neu legen werden alle Felder des Drawgrids schwarz und durch Klicken wieder weiß das wars dann aber auch schon.
Dateianhänge
Memory.zip
(4.82 MiB) 88-mal heruntergeladen

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Memory-Spiel

Beitrag von Michl »

Wenn du mal folgendes machst:

Code: Alles auswählen

procedure TForm1.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  index : integer;
begin
  index := LinearIndexOf(ARow, ACol);
 
  DrawGrid.Canvas.StretchDraw(Rect, Images[ImageOfCell[index]].Picture.Graphic);  //Zeichnet Bilder korrekt
 
{  if ModeOfCell[index] = CELL_INVISIBLE then
    begin
      DrawGrid.Canvas.Brush.Color := clBlack;
      DrawGrid.Canvas.FillRect(Rect)
    end
    else if ModeOfCell[index] = ALREADY_MATCHED then
      begin
//        DrawGrid.Canvas.StretchDraw(Rect, Images[ImageOfCell[index]].Picture.Graphic);
        DrawGrid.Canvas.Brush.Color := clWhite;
        DrawGrid.Canvas.FillRect(Rect)
      end
      else begin
        DrawGrid.Canvas.StretchDraw(Rect, Images[ImageOfCell[index]].Picture.Graphic);
      end  }
end;
Werden die Bilder angezeigt. Warum der ausgeklammerte Code nicht funktioniert, solltest du mal mit Breakpoints + F7 + Zettel + Stift erkunden!

Eigentlich schade, dass du nicht versucht hast, die funktionierende Stringgrid einfach in ein Drawgrid zu verwandeln, wäre ein recht überschaubares Unterfangen gewesen, und statt dessen einen vollkommen anderen Code von irgendwo kopiert hast und diesen jetzt versuchst irgendwie zum Laufen zu bringen...

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Sadde
Beiträge: 9
Registriert: Fr 14. Jun 2013, 15:59

Re: Memory-Spiel

Beitrag von Sadde »

Kann es daran liegen dass bei mir das drawgrid zu Beginn auf unsichtbar ist und somit auch jede zelle und der Befehl desshalb nicht richtig ausgeführt wird?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Memory-Spiel

Beitrag von Michl »

Sadde hat geschrieben:Kann es daran liegen dass bei mir das drawgrid zu Beginn auf unsichtbar ist und somit auch jede zelle und der Befehl desshalb nicht richtig ausgeführt wird?
Probiere es doch einfach aus. Stelle DrawGrid.Visible im Objektinspektor auf True und teste es!

Ich habs mal für dich gemacht ... gleiches Ergebnis ... liegt also irgendwo daran, wann wobei welche Zelle als "ALREADY_MATCHED, CELL_VISIBLE, CELL_INVISIBLE" (Bezeichnungen hat der Verfasser deines kopierten Codes so gewählt) gestellt wird -> hat wirklich rein gar nichts mit Drawgrid.Visible zu tun -> also müsstest du mal untersuchen, was bei einem Klick auf die Drawgrid passiert, wie du das am besten machst, habe ich dir oben geschrieben (Schritt für Schritt durchgehen, überlegen, was der Code macht, die hinterlegten Größen der Variablen dabei immer anschauen, warum welche zu welcher Größe geändert wurde, zum Test auch mal eine anders belegen usw....)

Wer Lust hat kann auch den Originalcode testen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten