memory spiel

pinar

Mitglied
hallo leute,
ich muss ein memory spiel programmieren, aber komme nicht weiter. ich habe es geschafft, dass ich 8 karten habe und wenn ich draufklicke "dreht" sich die karte auch (es ändert vorerst nur die farbe) nur brauche ich 8*2 Karten. wie kriege ich es hin dass die karten doppelt werden und wenn ihr meinen code sieht merkt ihr dass es irgendwie zu lang ist gibt es für die buttons eine bessere lösung??? wäre für jede hilfe dankbar...:oops:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;


public class feld extends JFrame {
	
JPanel panel;
JButton button, button1, button2, button3, button4, button5, button6, button7, button8;

JMenuBar menubar;
//Spiel
JMenu spiel;
JMenuItem newgame, score, close ;
//Einstellungen
JMenu einstellungen;
JMenuItem info;
//Fragezeichen
JMenu fragez;
JMenuItem mitwir;


	
Klick klick = new Klick();
	

	
	public feld() {
		
		super("Memory");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(700, 550);
		//Menüleiste erzeugen
		menubar = new JMenuBar();
		
		//Menüelemente erzeugen
		spiel = new JMenu("Spiel");
		einstellungen = new JMenu("Einstellungen");
		fragez = new JMenu("?");
		
		//Untermenüelemente erzeugen
		newgame = new JMenuItem("Neues Spiel");
		score = new JMenuItem("Highscore");
		close = new JMenuItem("Beenden");
		
		info = new JMenuItem("Info");
		mitwir = new JMenuItem("Mitwirkende");
		
		//Menüelemente hinzufügen
		menubar.add(spiel);
		menubar.add(einstellungen);
		menubar.add(fragez);
		
		//Untermenüelemente hinzufügen 
		spiel.add(newgame);
		spiel.add(score);
		spiel.add(close);
		einstellungen.add(info);
		fragez.add(mitwir);
		setJMenuBar(menubar);
		
				
		
		panel = new JPanel();
		panel.setBackground(Color.white);
		panel.setLayout(new GridLayout(4, 4, 10, 10));
		
		//bei 32 karten wäre dieser codeblock nicht die beste idee :/
		button = new JButton();
		button.setBackground(Color.black);
		panel.add(button);
		button.addActionListener(klick);
		
		button1 = new JButton();
		button1.setBackground(Color.black);
		panel.add(button1);
		button1.addActionListener(klick);
		
		button2 = new JButton();
		button2.setBackground(Color.black);
		panel.add(button2);
		button2.addActionListener(klick);
		
		button3 = new JButton();
		button3.setBackground(Color.black);
		panel.add(button3);
		button3.addActionListener(klick);
		
		button4 = new JButton();
		button4.setBackground(Color.black);
		panel.add(button4);
		button4.addActionListener(klick);
		
		button5 = new JButton();
		button5.setBackground(Color.black);
		panel.add(button5);
		button5.addActionListener(klick);
		
		button6 = new JButton();
		button6.setBackground(Color.black);
		panel.add(button6);
		button6.addActionListener(klick);
		
		button7 = new JButton();
		button7.setBackground(Color.black);
		panel.add(button7);
		button7.addActionListener(klick);
		
		button8 = new JButton();
		button8.setBackground(Color.black);
		panel.add(button8);
		button8.addActionListener(klick);
	
		
		add(panel);
		
		
		setVisible(true);
	}
	
	
	
public class Klick implements ActionListener {

public void actionPerformed(ActionEvent e) {
	Object obj = e.getSource();
	
		if (obj == button){ button.setBackground(Color.orange);}
		if (obj == button1){button1.setBackground(Color.red);}
		if (obj == button2){button2.setBackground(Color.blue);}
		if (obj == button3){button3.setBackground(Color.gray);}
		if (obj == button4){button4.setBackground(Color.green);}
		if (obj == button5){button5.setBackground(Color.cyan);}
		if (obj == button6){button6.setBackground(Color.YELLOW);}
		if (obj == button7){button7.setBackground(Color.pink);}
		if (obj == button8){button8.setBackground(Color.magenta);}
		}
	}


}]
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Wenn es doppelt soviele Button werden sollen, dann führst du noch button9 bis button16 ein und erstellst die genauso wie die vorherigen buttons... oder... du lässt dir was schlaueres einfallen :)

Als erstes sollte man buttons in einer Schleife (und/oder Methode) erstellen, damit man sich den ganzen Code spart. Außerdem solltest du drüber nachdenken ein Model einzuführen, dass das Spiel verwaltet. Das Model würde z.b. alle Karten beinhalten und sich darum kümmern was passiert wenn Karten aufgedeckt wurden.
 

pinar

Mitglied
naja ich hab gehofft dass man mir hier helft einen besseren code zu finden :)
danke für deine tipps aber ehrlich gesagt kann ich damit nichts anfangen bin wirklich noch ein anfänger ich hab vieles schon ausprobiert aber bis auf das was ich im moment habe, habe ich nichts gescheidenes hinbekommen :(
 

Timothy Truckle

Top Contributor
hallo leute,
ich muss ein memory spiel programmieren, aber komme nicht weiter. ich habe es geschafft, dass ich 8 karten habe und wenn ich draufklicke "dreht" sich die karte auch (es ändert vorerst nur die farbe) nur brauche ich 8*2 Karten. wie kriege ich es hin dass die karten doppelt werden
Wie wäre es mit doppelt so vielen Buttons?
und wenn ihr meinen code sieht merkt ihr dass es irgendwie zu lang ist gibt es für die buttons eine bessere lösung??? wäre für jede hilfe dankbar...:oops:
Also dieses kleine Spiel eignet sich super für den Einstieg in das MVC-Pattern:
Zuerst definiert Du ein Modell: Eine Liste aus
Code:
Paar
-Objekten. So ein Paar-Objekt hält immer 2
Code:
boolean
-Werte und eine Liste von
Code:
MatchListener
-Objekten, an die ein
Code:
MatchEvent
erhalten, wenn der zweite boolean auf true gesetzt wurde (dass sind z.B. die beiden Buttons, die sich dann deaktivieren und das Spiel, um das Spielende zu ermitteln, [JAPI]Observable[/JAPI] kann uns dabei helfen...).
Dann Erzeugen wir eine eigene Ableitung von [JAPI]AbstractAction[/JAPI]. Die bekommt 3 Konstruktor-Parameter: "Ihr" Paar-Objekt, welcher boolean darin "ihrer" ist und auf welche Farbe der Button zu setzen ist. Immer 2 AbstractActionImplementierungen bekommen natürlich das selbe Paar aus dem Modell.

Jetzt müssen die AbstractActionImplementierungen nur noch zufällig auf die Buttons verteilt werden.

Also alles ganz easy... ;o)

bye
TT
 
Zuletzt bearbeitet:

pinar

Mitglied
Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;


public class feld extends JFrame {
	
JPanel panel;
JButton button;

JMenuBar menubar;
//Spiel
JMenu spiel;
JMenuItem newgame, score, close ;
//Einstellungen
JMenu einstellungen;
JMenuItem info;
//Fragezeichen
JMenu fragez;
JMenuItem mitwir;

	
Icon icon1 = new ImageIcon(getClass().getResource("asd.jpg"));
Icon icon2 = new ImageIcon(getClass().getResource("asd1.jpg"));

	
Klick klick = new Klick();
	

	
	public feld() {
		
		super("Memory");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(700, 550);
		//Menüleiste erzeugen
		menubar = new JMenuBar();
		
		//Menüelemente erzeugen
		spiel = new JMenu("Spiel");
		einstellungen = new JMenu("Einstellungen");
		fragez = new JMenu("?");
		
		//Untermenüelemente erzeugen
		newgame = new JMenuItem("Neues Spiel");
		score = new JMenuItem("Highscore");
		close = new JMenuItem("Beenden");
		
		info = new JMenuItem("Info");
		mitwir = new JMenuItem("Mitwirkende");
		
		//Menüelemente hinzufügen
		menubar.add(spiel);
		menubar.add(einstellungen);
		menubar.add(fragez);
		
		//Untermenüelemente hinzufügen 
		spiel.add(newgame);
		spiel.add(score);
		spiel.add(close);
		einstellungen.add(info);
		fragez.add(mitwir);
		setJMenuBar(menubar);
		
				
		
		panel = new JPanel();
		panel.setBackground(Color.white);
		panel.setLayout(new GridLayout(4, 4, 10, 10));
		
		List<JButton> liste = new LinkedList<JButton>();
		 for ( int i=1; i <=16; i++) {
			JButton button = new JButton("Button " + i);
			liste.add(button);
			button.addActionListener(klick);
			panel.add(button);
		 }
		 
		
		 		
		add(panel);
		
		
		setVisible(true);
	}
	
	
	
public class Klick implements ActionListener {

public void actionPerformed(ActionEvent e) {
	Object obj = e.getSource();
		List<JButton> list = new LinkedList<JButton>();
		for(JButton button1 : list){
			if(obj == button1){
				button.setBackground(Color.CYAN);

		}
	
	}
}

}
}

hab den code noch mal bearbeitet aber es macht trotzdem nicht das was ich wil wo ist mein fehler o bitte hilft mir doch :oops:???:L???:L???:L
 
Zuletzt bearbeitet:

Timothy Truckle

Top Contributor
Code:
button.addActionListener(klick);
Hier sollte
Code:
button.addActionListener(new Klick(/*patameter*/));
stehen. Parameter sollte mindestens die Farbe sein, die nach dem Klick erscheinen soll.

Wenn Du die erste Änderung gemacht hast kann der AL nur von einem einzigen Button aktiviert worden sein. Man muss also nicht mehr nach dem Schuldigen suchen:
Java:
private final Color color; // vom Konstruktor zu setzen
public void actionPerformed(ActionEvent e) {
 Button button = (Button)e.getSource(); 
     if(color.equals( button.getBackground()) { // wir wollen ja auch zurück wechseln können
       button.setBackground(color); 
     } else {
       button.setBackground(new JLabel().getBackground()); // nicht elegant aber wirkungsvoll
     }
 } 
}
Feddisch (wie mir Hesse sogn)
So kann dein Memory die Farben der Buttons wechseln. Allerdings steckt da noch gar keine Logik drin. Es ist weder sichergestellt, dass nur 2 Felder aufgedeckt werden noch, dass die Felder von allein wieder zugedeckt werden.

bye
TT
 

pinar

Mitglied
ich danke dir für deine antwort...
ja die logik für das spiel wollte ich nicht aufbauen, aber da ich nicht mal hinbekam dass die einzelnen buttons beim anklicken etwas tun, kam ich noch nicht zu dem restlichen... vlt komme ich jetzt dank dir schnelle voran :idea:
 

Timothy Truckle

Top Contributor
ich danke dir für deine antwort...
ja die logik für das spiel wollte ich nicht aufbauen, aber da ich nicht mal hinbekam dass die einzelnen buttons beim anklicken etwas tun, kam ich noch nicht zu dem restlichen... vlt komme ich jetzt dank dir schnelle voran :idea:
Ich sehe gerade, dass in meinem if ein Ausrufezeichen fehlt...[JAVA=4]if(!color.equals( button.getBackground()) {[/code]

bye
TT
 
S

Spacerat

Gast
Hmm... Memory...
1. Du brauchst eine Liste oder ein Array mit verschiedenen Karten bzw. Farben oder andere Objekte, z.B. Strings (statisch).
2. Du brauchst ein "Hintergrund-Objekt" des Typs welchen du in der Liste verwendet hast. (statisch, Name: DEFAULT);
3. Nun erstellst du von der statischen Liste eine Kopie, fügst den Inhalt der Liste noch ein zweites mal ein und mischt sie mittels "Collections.shuffle()".
4. Nun erstellst du eine Map<Button, Karte> (Name: cards), erstellst zu jeder Karte einen Button, welchem du folgenden ActionListener anhängst (Achtung! Beispiel mit Strings und JButton!) und mittels "put" der Map hinzufügst (und natürlich dem Panel addest ;)).
Java:
class GlobalActionListener implements ActionListener {
  private JButton first;
 
  public void actionPerformed(ActionEvent e) {
    JButton b = (JButton) e.getSource();
    String s = cards.get(b);
    if(first != null) {
      if(first.getText().equals(s) {
        b.setText(s);
        b.setEnabled(false);
      } else {
        first.setText(DEFAULT);
        first.setEnabled(true);
      }
      first = null;
    } else {
      b.setText(s);
      b.setEnabled(false)
      first = b;
    }
    revalidate();
    repaint();
  }
}
 
Zuletzt bearbeitet von einem Moderator:

pinar

Mitglied
danke spacerat für deine antwort und hilfe...
und allen anderen danke ich natürlich auch...
ich hab in den büchern nachgelesen und viel gegooglet und sonst eigentlich alles mögliche getan aber langsam begreif ich, dass das nichts wird. ich komme einfach nicht weiter und merke dass ich viele befehle noch nicht beherrsche und somit auch die logik nicht programmieren kann...
ich muss leider einen fehlversuch für die prüfung in kauf nehmen :/
und wer weiss vlt bin ich nächstes jahr dann so fit dass ich hier selber anderen helfen kann :) ;)
 

homer65

Top Contributor
Auf der MyOggRadio Webseite gibt es im Download Bereich ein Open Source Memory Spiel (jgspiel).
Der Quellcode ist im .jar enthalten - einfach entpacken.
Vielleicht wirst du davon inspiriert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
I Memory-Spiel Feld nur einmal mischen Java Basics - Anfänger-Themen 2
K Memory-Spiel stecke Fest Java Basics - Anfänger-Themen 2
K Ein Memory Spiel ! Java Basics - Anfänger-Themen 6
K Memory-Spiel alle verdeckte karten aufdecken. Java Basics - Anfänger-Themen 26
I Memory-Spiel Java Basics - Anfänger-Themen 2
G Memory-Spiel Java Basics - Anfänger-Themen 8
B Image Matching in Memory Minigame Java Basics - Anfänger-Themen 7
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
V Memory Logik Problem/Denkblockade, bitte helft Java Basics - Anfänger-Themen 1
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
P Layout Manager - Welches Layout für Memory? Java Basics - Anfänger-Themen 7
A Java memory leakage Java Basics - Anfänger-Themen 9
T Out of Memory (Java Heap Space) Java Basics - Anfänger-Themen 9
S Datentypen Memory Problem Java Basics - Anfänger-Themen 12
O Memory Thread.sleep() Java Basics - Anfänger-Themen 5
T Memory Leak und der Garbage Collector Java Basics - Anfänger-Themen 21
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
S memory heap problem Java Basics - Anfänger-Themen 9
J Memory Footprint von Objekten Java Basics - Anfänger-Themen 2
W Servlet - out of memory Java Basics - Anfänger-Themen 7
B Memory - Zufällige Anordnung von Buchstabenpaaren Java Basics - Anfänger-Themen 8
J Memory Java Basics - Anfänger-Themen 2
G Memory Projekt, Fragen über Fragen Java Basics - Anfänger-Themen 6
B Memory in Java Java Basics - Anfänger-Themen 16
T Out of Memory Error Java Basics - Anfänger-Themen 7
E Heapspace out of Memory Java Basics - Anfänger-Themen 8
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
I Threads Spiel gol Java Basics - Anfänger-Themen 6
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben