O
Olbi
Gast
Heidiho ihrz.
Also vorweg. Ich habe die Suche benutzt und ich denke ich hab das Prinzip halbwegs verstanden wie diese Methode funktioniert. Leider sind die anderen Memory-Versionen anders als meine aufgebaut und ich bekomm es nicht hin die Werte in die Run-Methode von Thread zu übertragen.
Hier mal der Quelltext:
Die GUI
Die Steuerung:
Das Hauptproblem liegt in diesem Teil:
Ich weiß, dass mein Programmiersyle etwas rustikal ist, aber daran wird noch gearbeitet. Ich hoffen jedenfalls, dass mir jemand da weiter helfen kann, wie ich es hinbekommen, dass die Karten erst nach einer Pause zugedeckt werden.
Also vorweg. Ich habe die Suche benutzt und ich denke ich hab das Prinzip halbwegs verstanden wie diese Methode funktioniert. Leider sind die anderen Memory-Versionen anders als meine aufgebaut und ich bekomm es nicht hin die Werte in die Run-Methode von Thread zu übertragen.
Hier mal der Quelltext:
Die GUI
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class MemoryGUI extends JFrame{
private JButton[] press;
private JLabel[]karten;
private JLabel[]deckkarten;
private JLabel level;
private JLabel zeit;
private JLabel timer;
private JLabel smilie;
private Label[] speicher;
private JLabel auf;
private JLabel anzKart;
private JLabel aufNum;
private JButton pause;
private JLabel test;
private JLabel hinter;
private JButton los;
private MenuBar menubar;
private Menu Spiel;
private MenuItem optionen;
private MenuItem Neu;
private MenuItem Ende;
MemoryGUI()
{
setTitle("Memory von Christian Zörner");
setBackground(Color.lightGray);
setLayout (null);
karten = new JLabel[18];
press = new JButton[18];
speicher = new Label[9];
deckkarten = new JLabel[18];
for(int i=0;i<18;++i)
{
karten[i]=new JLabel("0");
press[i]=new JButton(""+i);
deckkarten[i]=new JLabel("");
ImageIcon icon = new ImageIcon("deck.jpg");
if(i<6)
{
speicher[i]= new Label("0");
speicher[i].setBounds(900,100+i*30,100,25);
karten[i].setBounds(180+i*110,200,100,100);
karten[i].setVisible(false);
deckkarten[i].setBounds(180+i*110,200,100,100);
deckkarten[i].setVisible(false);
deckkarten[i].setIcon(icon);
press[i].setBounds(180+i*110,200,100,100);
press[i].setContentAreaFilled(false);
add(karten[i]);
add(speicher[i]);
add(deckkarten[i]);
add(press[i]);
}
else if (i>=6 && i<12)
{
if (i<8)
{ speicher[i]= new Label("0");
speicher[i].setBounds(600,100+i*30,100,25);
}
karten[i].setBounds(180+(i-6)*110,320,100,100);
karten[i].setVisible(false);
add(karten[i]);
deckkarten[i].setBounds(180+(i-6)*110,320,100,100);
deckkarten[i].setIcon(icon);
deckkarten[i].setVisible(false);
add(deckkarten[i]);
press[i].setBounds(180+(i-6)*110,320,100,100);
press[i].setContentAreaFilled(false);
add(press[i]);
}
else if (i>=12 )
{
karten[i].setBounds(180+(i-12)*110,440,100,100);
karten[i].setVisible(false);
add(karten[i]);
deckkarten[i].setBounds(180+(i-12)*110,440,100,100);
deckkarten[i].setIcon(icon);
deckkarten[i].setVisible(false);
add(deckkarten[i]);
press[i].setBounds(180+(i-12)*110,440,100,100);
press[i].setContentAreaFilled(false);
add(press[i]);
}
}
auf= new JLabel("0");
auf.setBounds(600,400,100,25);
add(auf);
aufNum= new JLabel("0");
aufNum.setBounds (700,400,100,25);
add(aufNum);
anzKart= new JLabel("0");
anzKart.setBounds(600,425,100,25);
add(anzKart);
test = new JLabel ("0");
test.setBounds(400,500,300,25);
add(test);
los = new JButton ("Los");
los.setBounds(50,500,100,25);
add(los);
level = new JLabel("Level 1");
level.setBounds(25,0,100,25);
add(level);
pause= new JButton ("Pause");
pause.setBounds(150,0,80,25);
add(pause);
zeit = new JLabel ("Zeit:");
zeit.setBounds(250,0,30,25);
add(zeit);
timer= new JLabel("30");
timer.setBounds(280,0,30,25);
add(timer);
ImageIcon smilieIcon = new ImageIcon("smilie_gut.jpg");
smilie= new JLabel(smilieIcon);
smilie.setBounds(600,400,200,190);
add(smilie);
menubar = new MenuBar();
setMenuBar(menubar);
Spiel = new Menu ("Spiel");
menubar.add(Spiel);
optionen = new MenuItem ("Optionen");
Spiel.add(optionen);
Neu = new MenuItem ("Neu");
Spiel.add(Neu);
Ende = new MenuItem ("Ende");
Spiel.add(Ende);
ImageIcon hint = new ImageIcon("tisch2.jpg");
hinter= new JLabel("");
hinter.setBounds(0,0,1000,730);
hinter.setIcon(hint);
add(hinter);
addWindowListener (new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
pack();
setVisible(true);
setSize(1000,730);
setLocation(200,50);
setResizable(false);
}
public void speichern(int i, int karte)
{
speicher[i].setText(""+karte);
}
public String holeSpeicher(int i)
{
return speicher[i].getText().trim();
}
public void setKarten()
{
for (int i=0;i<4;++i)
{
int karte=Integer.parseInt(speicher[i].getText().trim());
ImageIcon icon = new ImageIcon(karte+".jpg");
int anzKart=0;
while ( anzKart<2)
{
int pos=(int)(Math.random()*8);
if (Integer.parseInt(karten[pos].getText().trim())==0)
{
karten[pos].setIcon(icon);
anzKart=anzKart+1;
karten[pos].setText(""+karte);
deckkarten[pos].setVisible(true);
}
}
}
}
public void aufdecken(int i)
{
int nummer =Integer.parseInt( aufNum.getText().trim());
karten[i].setVisible(true);
deckkarten[i].setVisible(false);
press[i].setVisible(false);
if (anzKart.getText().trim().equals("0"))
{
auf.setText(karten[i].getText().trim());
aufNum.setText(""+i);
anzKart.setText("1");
}
else if (anzKart.getText().trim().equals("1"))
{
karten[i].setVisible(true);
deckkarten[i].setVisible(false);
press[i].setVisible(false);
if (auf.getText().trim().equals(karten[i].getText().trim()))
{
karten[i].setVisible(false);
press[i].setVisible(false);
karten[nummer].setVisible(false);
press[nummer].setVisible(false);
anzKart.setText("0");
deckkarten[i].setVisible(false);
deckkarten[nummer].setVisible(false);
}
else
{
warten();
karten[i].setVisible(true);
deckkarten[i].setVisible(false);
press[i].setVisible(false);
karten[i].setVisible(false);
press[i].setVisible(true);
karten[nummer].setVisible(false);
press[nummer].setVisible(true);
deckkarten[i].setVisible(true);
deckkarten[nummer].setVisible(true);
anzKart.setText("0");
}
}
}
public void warten()
{
Thread warte = new Thread(new Runnable()
{
public void run()
{
try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }
}
});
warte.start();
}
public void nullen()
{
for(int i=0;i<karten.length;++i)
karten[i].setText(""+0);
}
public void sichtbar (int i)
{
if (i==1)
{
for (int j=0;j<deckkarten.length;++j)
{
deckkarten[j].setVisible(true);
karten[j].setVisible(false);
press[j].setVisible(true);
}
}
}
public void anmelden(MemoryStrg strg)
{
for(int i=0;i<8;++i)
{
press[i].addActionListener(strg);
}
los.addActionListener(strg);
}
}
Die Steuerung:
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MemoryStrg implements ActionListener {
private MemoryGUI gui;
public MemoryStrg(MemoryGUI gui){
this.gui=gui;
}
public void actionPerformed (ActionEvent e)
{
String cmd= e.getActionCommand().trim();
if( cmd.equals("0")||cmd.equals("1")||cmd.equals("2")||cmd.equals("3")||cmd.equals("4")||cmd.equals("5")||
cmd.equals("6")||cmd.equals("7"))
{
gui.aufdecken(Integer.parseInt(cmd));
}
if(cmd.equals("Los"))
{
erzeugen();
}
}
public void ende()
{
gui.setVisible(false);
gui.dispose();
System.exit(0);
}
public void erzeugen()
{
gui.nullen();
for(int i=0;i<4;++i)
{
int karte=(int)(Math.random()*8+1);
int j=0;
if (i==j)
{
gui.speichern(i, karte);
}
while( j<i)
{
int speicher =Integer.parseInt(gui.holeSpeicher(j));
if (speicher!=karte)
{
j=j+1;
if (j==i)
{
gui.speichern(j, karte);
}
}
else
{
karte=(int)(Math.random()*8+1);
j=0;
}
}
}
gui.setKarten();
gui.sichtbar(1);
}
}
Das Hauptproblem liegt in diesem Teil:
Code:
public void aufdecken(int i)
{
int nummer =Integer.parseInt( aufNum.getText().trim());
karten[i].setVisible(true);
deckkarten[i].setVisible(false);
press[i].setVisible(false);
if (anzKart.getText().trim().equals("0"))
{
auf.setText(karten[i].getText().trim());
aufNum.setText(""+i);
anzKart.setText("1");
}
else if (anzKart.getText().trim().equals("1"))
{
karten[i].setVisible(true);
deckkarten[i].setVisible(false);
press[i].setVisible(false);
if (auf.getText().trim().equals(karten[i].getText().trim()))
{
karten[i].setVisible(false);
press[i].setVisible(false);
karten[nummer].setVisible(false);
press[nummer].setVisible(false);
anzKart.setText("0");
deckkarten[i].setVisible(false);
deckkarten[nummer].setVisible(false);
}
else
{
warten();
karten[i].setVisible(true);
deckkarten[i].setVisible(false);
press[i].setVisible(false);
karten[i].setVisible(false);
press[i].setVisible(true);
karten[nummer].setVisible(false);
press[nummer].setVisible(true);
deckkarten[i].setVisible(true);
deckkarten[nummer].setVisible(true);
anzKart.setText("0");
}
}
}
public void warten()
{
Thread warte = new Thread(new Runnable()
{
public void run()
{
try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }
}
});
warte.start();
}
Ich weiß, dass mein Programmiersyle etwas rustikal ist, aber daran wird noch gearbeitet. Ich hoffen jedenfalls, dass mir jemand da weiter helfen kann, wie ich es hinbekommen, dass die Karten erst nach einer Pause zugedeckt werden.