w00tah
Legacy Member
hallo,
Ik moet voor een project van school met java het spel 'Memory' namaken (dat spel waarbij je telkens twee van twintig omgedraaide kaartjes mag bekijken en als ze hetzelfde zijn blijven ze met de afbeelding naar boven liggen, zoniet kan je nog es proberen)
Nu ik heb een tekenPanel waar de kaarten met hun rug naar boven liggen (ik maak gebruik van de paintComponent) en door een clickEvent wordt er eentje omgedraaid. Telkens wanneer ik een tweede kaart aanklik controleert ie of het matched met de eerste kaart die werd aangeklikt, zoniet draait ie deze terug om. Dit gaat ongelooflijk snel dus zou er een timer moeten tussen komen. Ik gebruik hiervoor de volgende code:
Ik ben er zeker van dat mijn code goed in elkaar gestoken is, maar telkens ik de tweede kaart aanklik blijft ie meteen de kaart omdraaien en achteraf maar een seconde wachten. Ik heb ook al ontdekt dat hij repaint(); voor de Thread.sleep(1000); niet uitvoert, maar wel de repaint(); erna (wanneer ik de repaint erna verwijder voert hij het nog steeds erna uit!
Ik heb al enkele uren/dagen gezocht om dit op te lossen, maar ik vind geen oplossing, ik hoop dat jullie me wat kunnen helpen, dat zou ik erg waarderen.
Ik moet voor een project van school met java het spel 'Memory' namaken (dat spel waarbij je telkens twee van twintig omgedraaide kaartjes mag bekijken en als ze hetzelfde zijn blijven ze met de afbeelding naar boven liggen, zoniet kan je nog es proberen)
Nu ik heb een tekenPanel waar de kaarten met hun rug naar boven liggen (ik maak gebruik van de paintComponent) en door een clickEvent wordt er eentje omgedraaid. Telkens wanneer ik een tweede kaart aanklik controleert ie of het matched met de eerste kaart die werd aangeklikt, zoniet draait ie deze terug om. Dit gaat ongelooflijk snel dus zou er een timer moeten tussen komen. Ik gebruik hiervoor de volgende code:
Code:
public void paintComponent(Graphics g) {
Afbeelding[][] kaarten = spelbord.getKaarten();
//overloop de array om te zien welke kaarten omgedraaid mogen getoont worden en welke niet
for (int i = 0; i < spelbord.KOLOMMEN; i++) {
for (int j = 0; j < spelbord.RIJEN; j++) {
g.drawImage(kaarten[j][i].getImage(), i * 100, j * 130, null);
}
}
}
private void formMouseClicked(java.awt.event.MouseEvent evt) {
...
if (aantalClicks == 2) {
aantalClicks = 0;
try {
//zorg ervoor dat de kaart zichtbaar wordt
spelbord.draaiKaart(tempRij, tempKolom, true);
} catch (InterruptedException ex) {
Logger.getLogger(TekenPanel.class.getName()).log(Level.SEVERE, null, ex);
}
//wanneer de tweede kaart niet overeen komt met de eerste
if (!spelbord.kaartenOmgedraaid[tempRij][tempKolom].getMatch()) {
//voer paintComponent uit
repaint();
try {
//'pauzeer' een seconde, zodat de tweede kaart eventjes zichtbaar wordt
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(TekenPanel.class.getName()).log(Level.SEVERE, null, ex);
}
//draai de twee verkeerde kaarten terug om
spelbord.legVerkeerdeTerug(tempRij, tempKolom);
//voer nogmaal paintComponent uit
repaint();
} else {//wanneer de twee kaarten wel overeen komen laat beide zichtbaar worden
//voer paintComponent uit
repaint();
}
}
else{//bij 1e klik
try {
//draai de kaart om
spelbord.draaiKaart(tempRij, tempKolom, false);
} catch (InterruptedException ex) {
Logger.getLogger(TekenPanel.class.getName()).log(Level.SEVERE, null, ex);
}
//voor paintComponent uit
repaint();
}
}
Ik ben er zeker van dat mijn code goed in elkaar gestoken is, maar telkens ik de tweede kaart aanklik blijft ie meteen de kaart omdraaien en achteraf maar een seconde wachten. Ik heb ook al ontdekt dat hij repaint(); voor de Thread.sleep(1000); niet uitvoert, maar wel de repaint(); erna (wanneer ik de repaint erna verwijder voert hij het nog steeds erna uit!
Ik heb al enkele uren/dagen gezocht om dit op te lossen, maar ik vind geen oplossing, ik hoop dat jullie me wat kunnen helpen, dat zou ik erg waarderen.
