//Hallo,
// mein Programmierproblem..........
//sobald der user auf eine Karte klickt, dann den "Schummelknopf" auslöst, dann diesselbe Karte //anklickt, erkennt das Programm ein Paar und dreht genau diese eine Karte als "paar" um.(zweimal //als gleiche Karte erkannt, also "paar"......
// wo liegt mein Fehler.......?? Danke für jeden Hinweis!!!!!!!!!!
// mein Programmierproblem..........
//sobald der user auf eine Karte klickt, dann den "Schummelknopf" auslöst, dann diesselbe Karte //anklickt, erkennt das Programm ein Paar und dreht genau diese eine Karte als "paar" um.(zweimal //als gleiche Karte erkannt, also "paar"......
// wo liegt mein Fehler.......?? Danke für jeden Hinweis!!!!!!!!!!
Java:
public class MemoryFeld_12 extends JFrame{
class TimerListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e){
//System.out.println("Ich werde vom Timer ausgegeben. ");
karteSchliessen();
}
}
class MeinSchummelListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("aufdecken")){
if((zugErlaubt()== true)||(umgedrehteKarten == 0))
kartenAufdecken();
}
}
}
private MemoryKarte_12[]karten;
private String [] bilder =
{"grafiken/apfel.jpg","grafiken/birne.jpg",
"grafiken/blume.jpg","grafiken/blume2.jpg",
"grafiken/ente.jpg", "grafiken/fisch.jpg",
"grafiken/fuchs.jpg","grafiken/igel.jpg",
"grafiken/kaenguruh.jpg" , "grafiken/katze.jpg",
"grafiken/kuh.jpg","grafiken/maus1.jpg",
"grafiken/maus2.jpg","grafiken/maus3.jpg",
"grafiken/melone.jpg","grafiken/pilz.jpg",
"grafiken/ronny.jpg","grafiken/schmetterling.jpg",
"grafiken/sonne.jpg", "grafiken/wolke.jpg",
"grafiken/maus4.jpg"
};
private int userPunkte;
private int pcPunkte;
private int werZieht;
private JLabel userPunkteLabel, pcPunkteLabel;
private JLabel werZiehtLabel;
private int umgedrehteKarten;
private MemoryKarte_12[] paar;
private int spieler;
private Timer timer;
private int [][]gemerkteKarten;
private int spielStaerke ;
private JSlider slider;
private int minimum, maximum;
class MeinSliderListener implements ChangeListener{
@Override
public void stateChanged(ChangeEvent e) {
if (e.getSource()instanceof JSlider ){
spielStaerke = slider.getValue();
slider.setValue(spielStaerke);
System.out.println(spielStaerke);
}
}
}
public MemoryFeld_12 (String title){
super(title);
karten = new MemoryKarte_12[42];
paar = new MemoryKarte_12[2];
gemerkteKarten = new int[2][21];
userPunkte = 0;
pcPunkte = 0;
umgedrehteKarten = 0;
spieler = 0;
minimum = 1;
maximum = 10;
spielStaerke = 5;
for (int aussen =0; aussen <2; aussen ++)
for(int innen = 0; innen < 21; innen++)
gemerkteKarten[aussen][innen]= -1;
initGUI();
timer = new Timer (2000, new TimerListener());
timer.setRepeats(false);
setSize(420,740);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void initGUI() {
setLayout(new FlowLayout(FlowLayout.LEFT));
JPanel feld = new JPanel();
feld.setLayout(new GridLayout(7,0));
kartenZeichnen(feld);
add(feld);
JPanel ausgabe= new JPanel();
userPunkteLabel = new JLabel();
pcPunkteLabel = new JLabel();
userPunkteLabel.setText(Integer.toString(userPunkte));
pcPunkteLabel.setText(Integer.toString(pcPunkte));
werZiehtLabel = new JLabel();
werZiehtLabel.setText(Integer.toString(werZieht));
JButton schummelKnopf = new JButton("Alles Aufdecken");
schummelKnopf.setActionCommand("aufdecken");
MeinSchummelListener schummel = new MeinSchummelListener();
schummelKnopf.addActionListener (schummel);
slider = new JSlider(minimum, maximum);
slider.setValue(spielStaerke);
slider.setMajorTickSpacing(1);
slider.setMinorTickSpacing(1);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
MeinSliderListener listener= new MeinSliderListener();
slider.addChangeListener(listener);
ausgabe.setLayout(new GridLayout(0,2));
ausgabe.add(new JLabel("User : "));
ausgabe.add(userPunkteLabel);
ausgabe.add(new JLabel("PC : "));
ausgabe.add(pcPunkteLabel);
ausgabe.add(new JLabel ("Es zieht der"));
ausgabe.add(werZiehtLabel);
ausgabe.add(schummelKnopf);
ausgabe.add(new JLabel(" < stark Spielstärke schwach > "));
ausgabe.add(new JLabel());
ausgabe.add(slider);
add(ausgabe);
}
private void kartenZeichnen(JPanel feld) {
int count = 0;
for (int i = 0; i<=41; i++){
karten[i]= new MemoryKarte_12(bilder[count],count, this);
if ((i + 1)%2 ==0)
count++;
}
Collections.shuffle(Arrays.asList(karten));
for (int i = 0; i<= 41; i++){
feld.add(karten[i]);
karten[i].setBildPos(i);
}
}
public void karteOeffnen(MemoryKarte_12 karte) {
int kartenID, kartenPos;
paar[umgedrehteKarten]= karte;
kartenID = karte.getBildID();
kartenPos = karte.getBildPos();
if ((gemerkteKarten[0][kartenID]==-1))
gemerkteKarten[0][kartenID]= kartenPos;
else
if(gemerkteKarten[0][kartenID]!=kartenPos)
gemerkteKarten[1][kartenID]= kartenPos;
umgedrehteKarten++;
if ( umgedrehteKarten ==2){
paarPruefen (kartenID);
timer.start();
}
if (pcPunkte + userPunkte == 21){
if (pcPunkte < userPunkte){
JOptionPane.showMessageDialog(this, "Das Spiel ist vorbei! Der User hat gewonnen mit " + userPunkte +" Punkten!" );
}
else{
if(userPunkte <pcPunkte){
JOptionPane.showMessageDialog(this, "Das Spiel ist vorbei! Der Computer hat gewonnen mit: " + pcPunkte + " Punkten!");
}
System.exit(0);
}
}}
private void karteSchliessen() {
boolean rausnehmen = false;
if (paar[0].getBildID()== paar[1].getBildID())
rausnehmen = true;
paar[0].rueckseiteZeigen(rausnehmen);
paar[1].rueckseiteZeigen(rausnehmen);
umgedrehteKarten = 0;
if ( rausnehmen == false)
spielerWechseln();
else
if (spieler ==1)
pcZug();
}
private void spielerWechseln() {
if (spieler == 0){
spieler = 1;
werZiehtLabel.setText("Computer");
pcZug();
}else
spieler = 0;
}
private void pcZug() {
int kartenZaehler = 0;
int zufall = 0;
boolean treffer = false;
if ((int )(Math.random()* spielStaerke)==0){
while ((kartenZaehler<21)&& (treffer == false)){
if ((gemerkteKarten [0][kartenZaehler]>=0)&&
(gemerkteKarten[1][kartenZaehler]>=0)){
treffer = true;
karten[gemerkteKarten[0][kartenZaehler]].doClick();
karten[gemerkteKarten[1][kartenZaehler]].doClick();
karten[gemerkteKarten[0][kartenZaehler]].vorderseiteZeigen();
karteOeffnen(karten[gemerkteKarten[0][kartenZaehler]]);
karten[gemerkteKarten[1][kartenZaehler]].vorderseiteZeigen();
karteOeffnen(karten[gemerkteKarten[1][kartenZaehler]]);
}
kartenZaehler++;
}
}
if ( treffer == false){
do{
zufall = (int)(Math.random()* karten.length);
}while (karten[zufall].isNochImSpiel()== false);
karten[zufall].doClick();
karten[zufall].vorderseiteZeigen();
karteOeffnen(karten[zufall]);
do{
zufall=(int)(Math.random()* karten.length);
}while ((karten[zufall].isNochImSpiel()==false)||
(karten[zufall].isUmgedreht()==true));
karten[zufall].vorderseiteZeigen();
karteOeffnen(karten[zufall]);
}
}
private void paarPruefen(int kartenID) {
if (paar[0].getBildID()==paar[1].getBildID()){
paarGefunden();
gemerkteKarten[0][kartenID]= -2;
gemerkteKarten[1][kartenID]= -2;
}
}
private void paarGefunden() {
if (spieler == 0){
userPunkte ++;
userPunkteLabel.setText(Integer.toString(userPunkte));
}
else
{
pcPunkte++;
pcPunkteLabel.setText(Integer.toString(pcPunkte));
}
}
public boolean zugErlaubt(){
boolean erlaubt = true;
if ( spieler == 1)
erlaubt = false;
werZiehtLabel.setText("User");
if ( umgedrehteKarten == 2 )
erlaubt = false;
return erlaubt;
}
public void kartenAufdecken() {
for (int i = 0; i <= 41; i++) {
if (karten[i].isNochImSpiel() == true) {
karten[i].vorderseiteZeigen();
}
}
Timer quickBlende = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 0; i <= 41; i++) {
if (karten[i].isNochImSpiel() == true) {
karten[i].rueckseiteZeigen(false);
}
}
}
});
quickBlende.setInitialDelay(500);
quickBlende.setRepeats(false);
quickBlende.start();
}}
Zuletzt bearbeitet von einem Moderator: