• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Karten Spiel Problem

Status
Für weitere Antworten geschlossen.

Feld

Neues Mitglied
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?

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:
Ich gehe jetzt mal davon aus, dass die Funktion Spielfeld.SchliesseKarten() dafür verantwortlich ist.
Leider seh ich die nirgends.

Poste mal nur den Code, in dem die Karten wieder verdeckt werden.

lg,
n1ob
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben