I
igelsalat
Gast
Hi Leute,
Eine dieser "Könnt-ihr-mir-weiterhelfen"-Fragen: Ich habe ein Memory-Spiel, bei dem jeweils gleiche Buchstaben aufgedeckt werden müssen. Nicht schön, aber selten :wink: . Jedenfalls klappt's:
Meine Idee war, dass man statt der gleichen Buchstaben einfach Vokabeln aufdecken soll. Ein konkreter Ansatz einer Idee schwebt mir schon vor:
Problem: Ich krieg meinen Teilcode nicht richtig integriert. Es ist ja nicht einfach nur das eine Array durch die beiden neuen zu ersetzen. :?
Eine dieser "Könnt-ihr-mir-weiterhelfen"-Fragen: Ich habe ein Memory-Spiel, bei dem jeweils gleiche Buchstaben aufgedeckt werden müssen. Nicht schön, aber selten :wink: . Jedenfalls klappt's:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Memory extends JFrame
{
// Konstruktor
public Memory()
{
super("Memory");
// Nur ein Listener-Objekt fuer alle Felder:
MemoryListener memListener = new MemoryListener();
Container content = this.getContentPane();
content.setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4));
// Buttons fuer die Felder erzeugen:
for (int i = 0; i < 16; i++)
{
CharButton b = new CharButton(this.getCharacter());
buttonPanel.add(b);
b.addActionListener(memListener);
b.cover();
}
// Elemente auf den ContentPane packen
content.add(buttonPanel, BorderLayout.CENTER);
// Fenster anzeigen
setSize(300, 350);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
// Die Beschriftungen der Felder:
private String[] labels = { "A", "B", "C", "D", "E", "F", "G", "H", "A",
"B", "C", "D", "E", "F", "G", "H" };
private int labelsLength = labels.length;
private String getCharacter()
{
// Waehlt einen Label zufaellig aus dem Array
// und entfernt ihn daraus.
int pos = (int) (Math.random() * 100) % labelsLength;
String c = labels[pos];
// Luecke im Array schliessen:
for (int i = pos + 1; i < labelsLength; i++)
{
labels[i - 1] = labels[i];
}
labelsLength--;
return c;
}
public static void main(String[] args) throws Exception
{
Memory m = new Memory();
}
}
// separate Klasse fuer den Listener:
class MemoryListener implements ActionListener
{
// Die bisher aufgedeckten Felder:
private CharButton firstSelection = null;
private CharButton secondSelection = null;
// Zaehler fuer die bisher entdeckten Paare
private int pairsFound = 0;
// Konstruktor
public MemoryListener()
{
super();
}
public void actionPerformed(ActionEvent e)
{
// Das gerade gewaehlte Feld:
CharButton flipped = (CharButton) e.getSource();
// Drei Zustaende:
// kein, ein, zwei Feld(er) ist/sind aufgedeckt:
if (firstSelection == null)
{
// kein Feld - nun das erste:
firstSelection = flipped;
flipped.setEnabled(false);
flipped.uncover();
}
else if (secondSelection == null)
{
// ein Feld - nun das zweite:
flipped.setEnabled(false);
flipped.uncover();
secondSelection = flipped;
if (firstSelection.getChar().equals(secondSelection.getChar()))
{
// Die Marken sind gleich:
firstSelection.setBackground(Color.BLACK);
secondSelection.setBackground(Color.BLACK);
// Neue Wahl vorbereiten:
firstSelection = null;
secondSelection = null;
// Zaheler erhoehen
pairsFound++;
// Spiel beendet?
if (pairsFound == 8)
{
JOptionPane.showMessageDialog(null,
"Laura kann kein Memory! Laura kann kein Memory! Hahahaha!", "Memory",
JOptionPane.INFORMATION_MESSAGE);
}
}
else
{
// Die Marken sind verschieden
// Sie bleiben aufgedeckt bis zur naechsten Wahl
}
}
else
{
// Nach einem Fehlversuch wurde drittes Feld aufgedeckt:
flipped.setEnabled(false);
flipped.uncover();
firstSelection.cover();
firstSelection.setEnabled(true);
firstSelection = flipped;
secondSelection.cover();
secondSelection.setEnabled(true);
secondSelection = null;
}
}
}
// Hilfsklasse: Button-Unterklasse mit verdeckbarer Beschriftung:
class CharButton extends JButton
{
private String myLabel;
CharButton(String lab)
{
super(lab);
myLabel = lab;
}
void uncover()
{
setText(myLabel);
}
void cover()
{
setText("");
}
String getChar()
{
return myLabel;
}
}
Meine Idee war, dass man statt der gleichen Buchstaben einfach Vokabeln aufdecken soll. Ein konkreter Ansatz einer Idee schwebt mir schon vor:
Code:
String deutsch[ ] = { "lernen","schlafen","essen", "laufen" };
String english[ ] = { "to learn","to sleep","to eat", "to run" };
// Ausgabe der Paare
for( int i = 0; i < deutsch.length; i++ )
{
System.out.println( deutsch[i] + " = " + english[i] ); //oder setText ("...")
}