Hintergrund:
Ich habe ein Schere Stein Papier Spiel (mit GUI) gecodet, welches nun auch funktioniert.
Beim klicken des Buttons wird das Spiel gestartet und in der TextArea werden so Sachen wie "Spieler nimmt Stein, PC nimmt Schere, Spieler gewinnt" angezeigt. Da diese anzeige, aber sofort erscheint, würde ich den Text in mehreren Zeitabständen ausgeben lassen, damit es ein wenig spannender wirkt.
Beispiel:
*Schere* (1sek Pause)
*Stein* (1sek Pause)
*Papier* (1sek Pause)
"Spieler nimmt Stein, PC nimmt Schere" (1sek Pause)
"Spieler gewinnt"
Das ganze müsste sich mit einem Thread realisieren lassen, indem man den Thread dann immer für 1 sek einschlafen lässt.
Hier das Spiel ohne Threads, wo der Text sofort erscheint. Die ganze Aktion spielt sich eigentlich in der ActionPerformed Methode des Buttons ab (Funktionierende Version)
Hier meine aktuelle Thread-Version, welche nicht funktioniert. Erstmal soll das ganze Zeugs aus der Actionperformed Methode des Buttons, vom Thread aus ausgeführt werden:
Ich habe ein Schere Stein Papier Spiel (mit GUI) gecodet, welches nun auch funktioniert.
Beim klicken des Buttons wird das Spiel gestartet und in der TextArea werden so Sachen wie "Spieler nimmt Stein, PC nimmt Schere, Spieler gewinnt" angezeigt. Da diese anzeige, aber sofort erscheint, würde ich den Text in mehreren Zeitabständen ausgeben lassen, damit es ein wenig spannender wirkt.
Beispiel:
*Schere* (1sek Pause)
*Stein* (1sek Pause)
*Papier* (1sek Pause)
"Spieler nimmt Stein, PC nimmt Schere" (1sek Pause)
"Spieler gewinnt"
Das ganze müsste sich mit einem Thread realisieren lassen, indem man den Thread dann immer für 1 sek einschlafen lässt.
Hier das Spiel ohne Threads, wo der Text sofort erscheint. Die ganze Aktion spielt sich eigentlich in der ActionPerformed Methode des Buttons ab (Funktionierende Version)
Java:
import java.awt.BorderLayout;
public class Schere extends JFrame
{
private JPanel contentPane;
private JScrollPane scrollPane;
private JTextArea textArea;
private JRadioButton SchereRadioButton;
private JRadioButton SteinRadioButton;
private JRadioButton PapierRadioButton;
public String spielerAuswahl;
public String computerAuswahl;
public ArrayList<String> liste = new ArrayList<String>();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Schere frame = new Schere();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Schere() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 547, 429);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
scrollPane = new JScrollPane();
scrollPane.setBounds(42, 28, 444, 221);
contentPane.add(scrollPane);
textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
scrollPane.setViewportView(textArea);
SchereRadioButton = new JRadioButton("Schere");
SchereRadioButton.setBounds(42, 256, 109, 23);
contentPane.add(SchereRadioButton);
SteinRadioButton = new JRadioButton("Stein");
SteinRadioButton.setBounds(42, 282, 109, 23);
contentPane.add(SteinRadioButton);
PapierRadioButton = new JRadioButton("Papier");
PapierRadioButton.setBounds(42, 308, 109, 23);
contentPane.add(PapierRadioButton);
ButtonGroup group = new ButtonGroup();
group.add(SchereRadioButton);
group.add(SteinRadioButton);
group.add(PapierRadioButton);
JButton btnNewButton = new JButton("Los");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(SchereRadioButton.isSelected() | SteinRadioButton.isSelected() | PapierRadioButton.isSelected()) {
textArea.append("Das Spiel beginnt!\n");
liste.add("Schere");
liste.add("Stein");
liste.add("Papier");
int zufallsZahl = (int) (Math.random()*3);
computerAuswahl = liste.get(zufallsZahl);
if(SchereRadioButton.isSelected()) {
spielerAuswahl = "Schere";
textArea.append("Spieler nimmt Schere. Der Computer nimmt "+computerAuswahl+".\n");
}
if(SteinRadioButton.isSelected()) {
spielerAuswahl = "Stein";
textArea.append("Spieler nimmt Stein. Der Computer nimmt "+computerAuswahl+".\n");
}
if(PapierRadioButton.isSelected()) {
spielerAuswahl = "Papier";
textArea.append("Spieler nimmt Papier. Der Computer nimmt "+computerAuswahl+".\n");
}
if(spielerAuswahl==computerAuswahl)
{
textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Unentschieden!\n\n");
}
else
{
if( (spielerAuswahl == "Schere" && computerAuswahl=="Papier") ||
(spielerAuswahl == "Stein" && computerAuswahl=="Schere") ||
(spielerAuswahl == "Papier" && computerAuswahl=="Stein"))
{
textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Spieler gewinnt das Spiel!\n\n");
}
else
{
textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Computer gewinnt das Spiel!\n\n");
}
}
}
}
});
btnNewButton.setBounds(42, 360, 89, 23);
contentPane.add(btnNewButton);
}
}
Hier meine aktuelle Thread-Version, welche nicht funktioniert. Erstmal soll das ganze Zeugs aus der Actionperformed Methode des Buttons, vom Thread aus ausgeführt werden:
Java:
import java.awt.BorderLayout;
public class Schere extends JFrame
{
public JPanel contentPane;
public JScrollPane scrollPane;
public JTextArea textArea;
public JRadioButton SchereRadioButton;
public JRadioButton SteinRadioButton;
public JRadioButton PapierRadioButton;
public String spielerAuswahl;
public String computerAuswahl;
public ArrayList<String> liste = new ArrayList<String>();
public Runnable r1 = new SchereThread();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Schere frame = new Schere();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Schere() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 547, 429);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
scrollPane = new JScrollPane();
scrollPane.setBounds(42, 28, 444, 221);
contentPane.add(scrollPane);
textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
scrollPane.setViewportView(textArea);
SchereRadioButton = new JRadioButton("Schere");
SchereRadioButton.setBounds(42, 256, 109, 23);
contentPane.add(SchereRadioButton);
SteinRadioButton = new JRadioButton("Stein");
SteinRadioButton.setBounds(42, 282, 109, 23);
contentPane.add(SteinRadioButton);
PapierRadioButton = new JRadioButton("Papier");
PapierRadioButton.setBounds(42, 308, 109, 23);
contentPane.add(PapierRadioButton);
ButtonGroup group = new ButtonGroup();
group.add(SchereRadioButton);
group.add(SteinRadioButton);
group.add(PapierRadioButton);
JButton btnNewButton = new JButton("Los");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new Thread(r1).start();
}
});
btnNewButton.setBounds(42, 360, 89, 23);
contentPane.add(btnNewButton);
}
}
Java:
public class SchereThread extends Schere implements Runnable {
public void run() {
if(SchereRadioButton.isSelected() | SteinRadioButton.isSelected() | PapierRadioButton.isSelected()) {
textArea.append("Das Spiel beginnt!\n");
liste.add("Schere");
liste.add("Stein");
liste.add("Papier");
int zufallsZahl = (int) (Math.random()*3);
computerAuswahl = liste.get(zufallsZahl);
if(SchereRadioButton.isSelected()) {
spielerAuswahl = "Schere";
textArea.append("Spieler nimmt Schere. Der Computer nimmt "+computerAuswahl+".\n");
}
if(SteinRadioButton.isSelected()) {
spielerAuswahl = "Stein";
textArea.append("Spieler nimmt Stein. Der Computer nimmt "+computerAuswahl+".\n");
}
if(PapierRadioButton.isSelected()) {
spielerAuswahl = "Papier";
textArea.append("Spieler nimmt Papier. Der Computer nimmt "+computerAuswahl+".\n");
}
if(spielerAuswahl==computerAuswahl)
{
textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Unentschieden!\n\n");
}
else
{
if( (spielerAuswahl == "Schere" && computerAuswahl=="Papier") ||
(spielerAuswahl == "Stein" && computerAuswahl=="Schere") ||
(spielerAuswahl == "Papier" && computerAuswahl=="Stein"))
{
textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Spieler gewinnt das Spiel!\n\n");
}
else
{
textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Computer gewinnt das Spiel!\n\n");
}
}
}
}
}