Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.10.2011, 13:58

[Java] Logischer Fehler

Hallo, ich habe ein kleines Memory-Spiel versucht zu programmieren.
Klappt auch soweit aber wenn ich 2 Karten, die zusammen gehören, was sie im Beipsiel alle tun, finde,
muss ich erst wieder eine andere Karte(Button) anklicken, damit die Punktzahl erhöht wird.
Genauso ist es, wenn man gewonnen hat. Man muss auch erst einen Button anklicken.
Der Fehler müsste ja dann in der actionPerformed(..) liegen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
public void actionPerformed(ActionEvent event)
  {
   CheckCards();
   Object cmd = event.getSource();
   if(iNumOpenCards < 2)    //Wenn weniger als 2 Karten aufgedeckt wurden
   {
   for(int i= 0; i<iNumberOfCards; i++)
   {
if( cmd == CCard[i].bCard &&
    CCard[i].bAufgedeckt == false &&
    CCard[i].bErraten == false)   //Karte aufdecken
{
  iNumOpenCards++;
  CCard[i].bAufgedeckt = true;
  CCard[i].bCard.setLabel(CCard[i].cColor);
}
   }
   }
  }//Ende ActionListener für Buttons
  
  public void CheckCards()
  {
   repaint();
   int iArryIndex1,iArryIndex2;
   iArryIndex1 = -1;
   iArryIndex2 = -1;
   int iNumOfErraten = 0;
   
   for(int i=0; i<iNumberOfCards; i++)  //Erratene Karten zählen
   {
if(CCard[i].bErraten == true)
{
 iNumOfErraten++;
 repaint();
}
   }
   if(iNumOfErraten == iNumberOfCards) //Wenn alle Karten geraten wurden
   {
bGewonnen = true;
repaint();
   }
   
   if(iNumOpenCards == 2)  //Zwei Karten wurden aufgedeckt
   {
 for(int i=0; i<iNumberOfCards; i++) //Offene Karten suchen
 {
  if(CCard[i].bAufgedeckt == true &&
     CCard[i].bErraten == false &&
     iArryIndex1 == -1 &&
     iArryIndex2 == -1)           //Erste offene Karte
  {
   iArryIndex1 = i;              //Index der offenen Karte merken
   repaint();
  }
  else if(CCard[i].bAufgedeckt == true &&
          CCard[i].bErraten == false &&
          iArryIndex1 > -1 &&
          iArryIndex2 == -1)        //Zweite offene Karte
  {
   iArryIndex2 = i;                  //Index der offenen Karte merken
   repaint();
  }
 }
 //Jetzt schauen, ob die Karten gleich sind oder nicht
 if(CCard[iArryIndex1].cColor == CCard[iArryIndex2].cColor)  //Sind gleich
 {
   iPoints += 10;
   CCard[iArryIndex1].bAufgedeckt = false;
   CCard[iArryIndex2].bAufgedeckt = false;
   CCard[iArryIndex1].bErraten = true;
   CCard[iArryIndex2].bErraten = true;
   iNumOpenCards = 0;
   repaint();
 }
 else                  //Sind nicht gleich
 {
   Sleep(2000);
   CCard[iArryIndex1].bAufgedeckt = false;
   CCard[iArryIndex2].bAufgedeckt = false;
   CCard[iArryIndex1].bCard.setLabel("?");
   CCard[iArryIndex2].bCard.setLabel("?");
   iNumOpenCards = 0;
   repaint();
 }
   }
   repaint();
  }


Ich habe es mit vielen repaint()-Methoden versucht aber daran scheint es nciht zu legen.
Wenn ihr den ganzen Quellcode brauchst, sagt bescheid.

//Edit ein Problem gelöst


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  public void actionPerformed(ActionEvent event)
  {
   Object cmd = event.getSource();
   if(iNumOpenCards < 2)        //Wenn weniger als 2 Karten aufgedeckt wurden
   {
   for(int i= 0; i<iNumberOfCards; i++)
   {
    if( cmd == CCard[i].bCard &&
        CCard[i].bAufgedeckt == false &&
        CCard[i].bErraten == false)   //Karte aufdecken
    {
    iNumOpenCards++;
    CCard[i].bAufgedeckt = true;
    CCard[i].bCard.setLabel(CCard[i].cColor);
    }
   }
   }
   CheckCards();
  }//Ende ActionListener für Buttons


Punktzahl klappt aber Win noch nicht.

Ok. Hat sich alles erledigt.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »ahhhilfe« (09.10.2011, 14:17)