Hallo,
ich habe ein Problem mit meinem Karten Memory Spiel. Die Karten sollen über den Butten Alles aufdecken aufgedeckt werden können. Bis dahin funktioniert es. Jetzt sollen sich durch den Timer2 die Karten nach 2 Sekunden komplett wieder verdecken. Es werden bei meinem Code nur 3 Karten wieder umgedreht. Was mache ich da falsch?
MfG
Feld
ich habe ein Problem mit meinem Karten Memory Spiel. Die Karten sollen über den Butten Alles aufdecken aufgedeckt werden können. Bis dahin funktioniert es. Jetzt sollen sich durch den Timer2 die Karten nach 2 Sekunden komplett wieder verdecken. Es werden bei meinem Code nur 3 Karten wieder umgedreht. Was mache ich da falsch?
Code:
[B]Hauptformular[/B]
#include <vcl.h>
#pragma hdrstop
#include "hauptformular.h"
#include "memoryfeld.h"
//---------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
MemoryFeld SpielFeld;
//---------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------
void __fastcall TForm1DrawGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
ImageList1->Draw(DrawGrid1->Canvas,Rect.left,Rect.top,SpielFeld.SpielFeld[ACol][ARow]);
}
//---------------------------------------------------------------------
void __fastcall TForm1DrawGrid1DblClick(TObject *Sender)
{
int x=DrawGrid1->Col;
int y=DrawGrid1->Row;
if (SpielFeld.OffeneKarten==0 && SpielFeld.player==1) SpielFeld.player=0;
if (SpielFeld.OffeneKarten==0 && SpielFeld.player==0) {
//Keine Karte offen
if (SpielFeld.SpielFeld[x][y]==22) SpielFeld.KarteOeffnen(x,y);
}
else
if (SpielFeld.OffeneKarten==1 && SpielFeld.player==0)
{
//1 Karte bereits offen
if (SpielFeld.SpielFeld[x][y]==22)
{
SpielFeld.KarteOeffnen(x,y);
Timer1->Enabled=1;
}
}
DrawGrid1->Repaint();
}
//---------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled=0;
SpielFeld.SchliessenKarten();
Label3->Caption=IntToStr(SpielFeld.Paare[0]);
Label4->Caption=IntToStr(SpielFeld.Paare[1]);
DrawGrid1->Repaint();
if (SpielFeld.Paare[0] + SpielFeld.Paare[1]==21)
{
if (SpielFeld.Paare[0] > SpielFeld.Paare[1]){
Label5->Caption="Der Mensch hat gewonnen";}
else
{
Label5->Caption="Der Computer hat gewonnen!"; }
Label5->Visible=true; }
}
//---------------------------------------------------------------------
[B]void __fastcall TForm1::Timer2Timer(TObject *Sender)[/B]
[B]{[/B]
[B]int x;[/B]
[B]int y;[/B]
[B]SpielFeld.SchliessenKarten();[/B]
[B]DrawGrid1->Repaint();[/B]
[B]randomize();[/B]
[B]Timer2->Enabled = 0;[/B]
[B]Timer2->Interval = 2;[/B]
[B]}[/B]
//---------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int x;
int y;
if(SpielFeld.OffeneKarten==0 && SpielFeld.player==1)
for ( x=0; x<7; x++)
for ( y=0; y<6; y++) {
SpielFeld.KarteOeffnen(x,y);
}else{
for ( x=0; x<7; x++)
for ( y=0; y<6; y++) {
SpielFeld.KarteOeffnen(x,y);
}
if(SpielFeld.SpielFeld[x][y]<22)
{
SpielFeld.KarteOeffnen(x,y);
Timer2->Enabled=1;
}
}
DrawGrid1->Repaint();
}
//---------------------------------------------------------------------
[B][B]Das Memoryfeld[/B][/B]
#ifndef memoryfeldH
#define memoryfeldH
struct pos {int x; int y;};
class MemoryFeld {
public:
MemoryFeld();
void KarteOeffnen(int x, int y);
void SchliessenKarten();
void ComputerZug();
int OffeneKarten;
int player;
pos OffeneKartenPos[2];
int Paare[2];
//das Feld fuer die Indizies der Bilder
int InitFeld[7][6];
//das Spielfeld
int SpielFeld[7][6];
//Bilder, die bereits aufgedeckt wurden
pos Aufgedeckt[21][2];
};
//---------------------------------------------------------------------------
#endif
MfG
Feld
Zuletzt bearbeitet von einem Moderator: