Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi memory2 (https://www.delphipraxis.net/148463-memory2.html)

funkuchn 2. Mär 2010 12:55


memory2
 
Hey Leute,
ich arbeite ja immer noch an meinem Memory Spiel.
jetzt hab ich die Karten zugedeckt liegen und will die Stringgridzellen mit Zahlen für Pärchen belegen, als 1 für die beiden bmp1 oder so. Wie mach ich das und wie kann ich durch klicken die Felder "aufdecken"?
Hab jetzt nur ne dreiviertel Stunde, helft mir bitte ein wenig...
:shock:
Danke im voraus, ich versuch mein bisheriges Programm anzuhängen :stupid: hab aber grad festgestellt, dass der PC das hier net will -.-
Liebe Grüße, die Susi

Quelltext:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, Grids, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    StringGrid1: TStringGrid;
    Men1: TMenuItem;
    Start1: TMenuItem;
    Aufgeben1: TMenuItem;
    Neustart1: TMenuItem;
    Beenden1: TMenuItem;
    Hilfe1: TMenuItem;
    Image1: TImage;
    Highscore1: TMenuItem;
    procedure Beenden1Click(Sender: TObject);
    procedure Hilfe1Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    KarteVerdeckt:tbitmap;
    KartenArray:array [0..4,0..3] of integer;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Beenden1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Hilfe1Click(Sender: TObject);
begin
showmessage('REMEMBER YOUR CHILDHOOD');
showmessage('Bei diesem Spiel geht es darum, gleiche Pärchen aufzudecken.');
showmessage('Durch den Klick auf zwei Spielkarten werden sie dir angezeigt.');
showmessage('Hast du ein Pärchen gefunden, werden dir 5 Punkte gutgeschrieben.');
showmessage('Viel Spaß beim Spielen!');
end;



procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   if KartenArray[aCol, arow]=0 then
   Stringgrid1.Canvas.Draw(rect.left,rect.top,KarteVerdeckt);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
    for i:=0 to 2 do
     for j:=0 to 2 do
       KartenArray[i,j]:=0;

    KarteVerdeckt:=tbitmap.create;
    KarteVerdeckt.LoadFromFile(extractfilepath(application.exename)+'clip_image002.bmp');

end;

Teekeks 2. Mär 2010 14:10

Re: memory2
 
Delphi-Quellcode:
procedure TForm1.Hilfe1Click(Sender: TObject);
begin
showmessage('REMEMBER YOUR CHILDHOOD');
showmessage('Bei diesem Spiel geht es darum, gleiche Pärchen aufzudecken.');
showmessage('Durch den Klick auf zwei Spielkarten werden sie dir angezeigt.');
showmessage('Hast du ein Pärchen gefunden, werden dir 5 Punkte gutgeschrieben.');
showmessage('Viel Spaß beim Spielen!');
end;
Du meinst wohl eher das hier:
Delphi-Quellcode:
procedure TForm1.Hilfe1Click(Sender: TObject);
begin
showmessage('REMEMBER YOUR CHILDHOOD'+#10+
'Bei diesem Spiel geht es darum, gleiche Pärchen aufzudecken.'+#10+
'Durch den Klick auf zwei Spielkarten werden sie dir angezeigt.'+#10+
'Hast du ein Pärchen gefunden, werden dir 5 Punkte gutgeschrieben.'+#10+
'Viel Spaß beim Spielen!');
end;
Nur so...

Neutral General 2. Mär 2010 14:16

Re: memory2
 
Aber bitte #13#10 und nicht nur #10.

Wir sind hier ja in Windows ;)

DeddyH 2. Mär 2010 14:29

Re: memory2
 
Noch besser sLineBreak. Muss man sich die ASCII-Codes nicht merken und es ist plattformunabhängig ;)

Neutral General 2. Mär 2010 14:35

Re: memory2
 
Zitat:

Zitat von DeddyH
Noch besser sLineBreak. Muss man sich die ASCII-Codes nicht merken und es ist plattformunabhängig ;)

Was auch besonders wichtig ist, weil Delphi ja auch so plattformunabhängig ist :stupid: SCNR :P

ryLIX 2. Mär 2010 14:53

Re: memory2
 
OnSelectCell sollte sein was du suchst.
Du musst natürlich auch für jede Karte bzw Zelle speichern ob diese ein Karte enthält welche schon aufgedeckt wurde.
Wenn die Karte noch nicht aufgedeckt wurde dann zeichnest du das Bitmap der Karte in die Zelle und sonst passiert nichts.

Du solltest dir auch merken welche Karte bereits auf gedeckt wurde das macht das vergleichen einfacher.

DeddyH 2. Mär 2010 14:58

Re: memory2
 
Zitat:

Zitat von Neutral General
Zitat:

Zitat von DeddyH
Noch besser sLineBreak. Muss man sich die ASCII-Codes nicht merken und es ist plattformunabhängig ;)

Was auch besonders wichtig ist, weil Delphi ja auch so plattformunabhängig ist :stupid: SCNR :P

AFAIK kennt Lazarus diese Konstante auch, so dass das dann schon wieder interessant wird. Über Kylix will ich mich jetzt nicht auslassen :mrgreen:

funkuchn 4. Mär 2010 12:59

Re: memory2
 
Zitat:

OnSelectCell sollte sein was du suchst.
Du musst natürlich auch für jede Karte bzw Zelle speichern ob diese ein Karte enthält welche schon aufgedeckt wurde.
Wenn die Karte noch nicht aufgedeckt wurde dann zeichnest du das Bitmap der Karte in die Zelle und sonst passiert nichts.

Du solltest dir auch merken welche Karte bereits auf gedeckt wurde das macht das vergleichen einfacher.
ja okay, soweit war ich meinen theoretischen Überlegungen auch ^^
jetzt bräuchte ich nur Ansätze, weil ich arbeite an diesem Programm iwie nur 2 mal die woche un grad steh ich mit ??? überm Kopf da :wall:
wie belege ich die einzelnen Zellen nun mit Zahlen, denen ich dann ein Pärchen zuweise? :spin:

ryLIX 4. Mär 2010 21:52

Re: memory2
 
Fang andersrum an.
Erst die Pärchen erzeugen und dann auf Zellen verteilen.

Für die Pärchen brauchst du zu erst Random und Randomize um zufällig Zahlen zu erzeugen.

Ich hab bei meinem Memory (welches aber Andorra für die Grafik verwendet) eine Konstante mit dem Abc verwendet.
Du kannst natürlich auch Zahlen verwenden.
Delphi-Quellcode:
const
ABC: String = 'abcdefghijklmnopqrstuvwxyz';
Jetzt kannst du über die Länge des Strings (mit Length) Zahlen erzeugen die dann auf ein Element des Strings zeigen.

Jetzt muss du eigentlich nur noch deine Ausgewählte Zahl bzw ausgewälten Buchstaben in zwei Zellen verteilen.
Du kannst auch prüfen ob die Zahl schon vorhanden ist oder nicht.
Aber den Rest musst du dir schon selber zusammen suchen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz