Java :: Aufgabe #9
5 Lösungen
Würfelspiel(Random) mit GUI
Fortgeschrittener - Java
von Jurom
- 23.10.2012 um 12:38 Uhr
Das Programm soll ein einfaches Glücksspiel simulieren.
Lassen Sie 2 Zufallszahlen zwischen 1-6 ausgeben, die höhere Zahl gewinnt.
Wiederholen sie das Würfeln solange, bis der Anwender gewinnt.
Erstellen Sie ein GUI für das Programm, nach dem angehängtem Lösungslayout.
Fertiges Programm
Lassen Sie 2 Zufallszahlen zwischen 1-6 ausgeben, die höhere Zahl gewinnt.
Wiederholen sie das Würfeln solange, bis der Anwender gewinnt.
Erstellen Sie ein GUI für das Programm, nach dem angehängtem Lösungslayout.
Fertiges Programm
Lösungen:
//©2012 by Julius J. Hoffmann
//written with Eclipse
import java.awt.*; //Importiert die API, zur grafischen Darstellung
import java.awt.event.*; //Importiert die API, zum grafischen Eventhandling
import java.util.Random; //Importiert die API, zur Verwendung von Random
import javax.swing.*; //Importiert die API, zur grafischen Darstellung
//----------------------------------------------
class DiceRollPanel extends JPanel implements ActionListener //Klasse, die das Panel erstellt
{ //sie wird von der Klasse JPanel abgeleitet und enthält die Schnittstelle ActionListener
public void paintComponent(Graphics g) //Methode, die das Panel "malt"
{
super.paintComponent(g); //"malt" das Panel mit der Methode aus der Superklasse JPanel
setBackground(Color.white); //setzt den Hintergrund auf weiß
g.drawString("DiceRoll - Zufälliges Würfeln \n",150,20); //Schreibt den String auf das Panel, in Pixelhöhe 150x20
int a = 0; //Initialisieren der Variablen a(Spielerwurf)
int b = 0; //Initialisieren der Variablen b(Computerwurf)
int c = 100; //Initialisieren der Variablen c("Zeilenumbruch")
Random r = new Random(); //Anlegen des Random-Objektes
while (a<=b) //Initiieren einer while-Schleife, solange bis a > b
{
g.setColor(Color.black); //setzt die Schriftfarbe (wieder) auf schwarz
a = r.nextInt(6)+1; //Initialisieren von a mit einer Zufallszahl zw. 1-6 (Wurf)
b = r.nextInt(6)+1; // -||- b -||-
g.drawString("Du würfelst eine: "+ a,150,c); //Schreibt den String auf das Panel, in Pixelhöhe 150x c
g.drawString("Der Gegner würfelt eine: "+ b,150,c+20); //Schreibt den String auf das Panel, in Pixelhöhe 150x c+20
if(a==b) {g.setColor(Color.blue); g.drawString(a + "=" + b + " -> Gleichstand \n",150,c+50);} //wenn Gleichstand, Schriftfarbe blau
else
{
if(a>b) //wenn Spieler gewinnt (a > b)
{g.setColor(Color.green); //Schriftfarbe grün
g.drawString(a + ">" + b + " -> Du gewinnst! \n",150,c+50);} //Schreibt den String auf das Panel, in Pixelhöhe 150x c+50
else
{g.setColor(Color.red); //Schriftfarbe rot
g.drawString(a + "<" + b + " -> Du verlierst! \n",150,c+50);} //Schreibt den String auf das Panel, in Pixelhöhe 150x c+50
}
c = c+150; //c wird um 150 erhöht ("Zeilenumbruch")
} //Ende while-Schleife
} //Ende paint-Methode
} //Ende Panel-Klasse
class DiceRollFrame extends JFrame //Klasse, die das Fenster erstellt, wird von der Klasse JFrame abgeleitet
{
public DiceRollFrame() //Methode, die das Fenster "erstellt"
{
setTitle("DiceRoll"); //Titel des Fensters benennen
setSize(512,1024); //Größe des Fensters bestimmen
addWindowListener(new WindowAdapter() //Zuordnen des Interface WindowAdapter zum Listener Window
{
public void windowClosing(WindowEvent e) //Methode, die "Klick aufs Kreuz oben rechts" initiiert
{System.exit(0);} //beenden des Programms
} //Ende Zuordnung
); //Ende Zuordnung
Container contentPane = getContentPane(); //Anlegen eines Containers
contentPane.add(new DiceRollPanel()); //Panel wird "auf" das Fenster gelegt
} //Ende Methode-frame
} //Ende Klasse
public class DiceRoll //die "ausführende" Klasse
{
public static void main(String[] args) //main-Methode
{
JFrame frame = new DiceRollFrame(); //Erstellen eines neuen Fensters, Aufruf der spezifischen DiceRollFrame-Klasse
frame.show(); //Zeigen des Fensters
} //Ende main-Methode
} //Ende Klasse
Das Lösungslayout ist nicht mehr Verfügbar, daher habe ich ein eigenes einfaches Layout dafür erstellt.
Java-Code
Ausgabe: siehe Anhänge
/* @Author H.K.
* @Date 22.02.2016
*
* Programmbeschreibung:
* Würfle eine Zahl zwischen 1 und 6, Darstellung in einem GUI
*/
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.util.Random;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import java.awt.Color;
public class mainprogramGUI {
private static JLabel lblZahl1 = new JLabel("");
private static JLabel lblZahl2 = new JLabel("");
private static JButton btnNewButton = new JButton("W\u00FCrfeln!");
private JFrame frame;
private JLabel lblWINNER = new JLabel("Du hast gewonnen!");
private JLabel lblLOOSER = new JLabel("Du hast verloren!");
private JLabel lblDRAW = new JLabel("Gleichstand!");
private final JButton btnReset = new JButton("RESET");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
mainprogramGUI window = new mainprogramGUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public String buttonaufruf() {
int min = 1;
int max = 6;
String randomnumber = randInt(min,max);
return randomnumber;
}
public String randInt(int min, int max) {
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
String randomString = Integer.toString(randomNum);
return randomString;
}
/**
* Create the application.
*/
public mainprogramGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblDuWrfelst = new JLabel("Du w\u00FCrfelst eine ");
lblDuWrfelst.setFont(new Font("Tahoma", Font.PLAIN, 14));
lblDuWrfelst.setBounds(72, 56, 130, 14);
frame.getContentPane().add(lblDuWrfelst);
JLabel lblComputerWrfelt = new JLabel("Computer w\u00FCrfelt eine ");
lblComputerWrfelt.setFont(new Font("Tahoma", Font.PLAIN, 14));
lblComputerWrfelt.setBounds(72, 101, 161, 14);
frame.getContentPane().add(lblComputerWrfelt);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lblWINNER.setVisible(false);
lblLOOSER.setVisible(false);
lblDRAW.setVisible(false);
String player1 = buttonaufruf();
int intplayer1 = Integer.parseInt(player1);
String computer = buttonaufruf();
int intcomputer = Integer.parseInt(computer);
lblZahl1.setText(player1);
lblZahl1.setVisible(true);
lblZahl2.setText(computer);
lblZahl2.setVisible(true);
if (intplayer1 > intcomputer) {
lblWINNER.setVisible(true);
}
if (intcomputer > intplayer1){
lblLOOSER.setVisible(true);
}
if (intplayer1 == intcomputer) {
lblDRAW.setVisible(true);
}
}
});
btnNewButton.setBounds(110, 184, 89, 23);
frame.getContentPane().add(btnNewButton);
lblZahl1.setFont(new Font("Tahoma", Font.PLAIN, 14));
lblZahl1.setBounds(225, 56, 46, 14);
frame.getContentPane().add(lblZahl1);
lblZahl2.setFont(new Font("Tahoma", Font.PLAIN, 14));
lblZahl2.setBounds(225, 101, 46, 14);
frame.getContentPane().add(lblZahl2);
lblWINNER.setForeground(new Color(0, 128, 0));
lblWINNER.setHorizontalAlignment(SwingConstants.CENTER);
lblWINNER.setFont(new Font("Tahoma", Font.BOLD, 16));
lblWINNER.setBounds(134, 11, 166, 23);
frame.getContentPane().add(lblWINNER);
lblLOOSER.setHorizontalAlignment(SwingConstants.CENTER);
lblLOOSER.setForeground(new Color(139, 0, 0));
lblLOOSER.setFont(new Font("Tahoma", Font.BOLD, 16));
lblLOOSER.setBounds(134, 11, 166, 23);
frame.getContentPane().add(lblLOOSER);
lblDRAW.setHorizontalAlignment(SwingConstants.CENTER);
lblDRAW.setForeground(new Color(0, 0, 255));
lblDRAW.setFont(new Font("Tahoma", Font.BOLD, 16));
lblDRAW.setBounds(134, 11, 166, 23);
frame.getContentPane().add(lblDRAW);
btnReset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblWINNER.setVisible(false);
lblLOOSER.setVisible(false);
lblDRAW.setVisible(false);
lblZahl1.setVisible(false);
lblZahl2.setVisible(false);
}
});
btnReset.setBounds(239, 184, 89, 23);
frame.getContentPane().add(btnReset);
lblZahl1.setVisible(false);
lblZahl2.setVisible(false);
lblWINNER.setVisible(false);
lblLOOSER.setVisible(false);
lblDRAW.setVisible(false);
}
}
Ausgabe: siehe Anhänge
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
static JButton start;
static JButton reset;
static JLabel player, bot, wurfPlayer, wurfBot, ergebnis;
//Labels um die letzten 10 Ergebnisse zu merken
static JLabel[] ergebnisse = new JLabel[10];
public static void main(String[] args) {
Main frame = new Main();
frame.setTitle("Wuerfelspiel");
frame.getContentPane().setBackground(Color.white);
frame.setSize(500, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLayout(null);
//Initialisieren der Ergebnis-Historie
initErgeb(ergebnisse);
player = new JLabel("Spieler");
player.setBounds(150, 100, 100, 50);
bot = new JLabel("Computer");
bot.setBounds(150, 150, 100, 50);
wurfPlayer = new JLabel();
wurfPlayer.setBounds(250, 100, 100, 50);
wurfBot = new JLabel();
wurfBot.setBounds(250, 150, 100, 50);
ergebnis = new JLabel("Unentschieden");
ergebnis.setBounds(170, 75, 200, 50);
start = new JButton("Würfeln");
start.setBounds(150, 200, 80, 40);
reset = new JButton("Reset");
reset.setBounds(250, 200, 80, 40);
frame.add(player);
frame.add(bot);
frame.add(wurfPlayer);
frame.add(wurfBot);
frame.add(ergebnis);
frame.add(start);
frame.add(reset);
for (int i = 0; i < 10; i++)
frame.add(ergebnisse[i]);
//ActionListener fuer naechste Runde
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
wurfPlayer.setText("" + werfen());
wurfBot.setText("" + werfen());
auswerten();
}
int werfen() {
return (int) (Math.random() * 6 + 1);
}
});
//ActionListener fuer Reset-Button
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
wurfPlayer.setText("");
wurfBot.setText("");
ergebnis.setText("");
resetErgeb(ergebnisse);
}
});
}
//Auswertung der Spielrunde
static void auswerten() {
int player = Integer.parseInt(wurfPlayer.getText());
int bot = Integer.parseInt(wurfBot.getText());
moveColors(ergebnisse);
if (player > bot) {
ergebnis.setText("Sie haben gewonnen!");
ergebnisse[0].setBackground(Color.GREEN);
} else if (player < bot) {
ergebnis.setText("Sie haben verloren!");
ergebnisse[0].setBackground(Color.RED);
} else {
ergebnis.setText("Unentschieden!");
ergebnisse[0].setBackground(Color.gray);
}
}
//Die letzten 9 Ergebnise auf Anzeige um 1 nach Hinten verschieben
static void moveColors(JLabel[] labels) {
for (int i = labels.length - 1; i > 0; i--) {
labels[i].setBackground(labels[i - 1].getBackground());
}
}
//Initialisieren der Anzeige fuer die letzten 10 Spiele
static void initErgeb(JLabel[] labels) {
for (int i = 0; i < 10; i++) {
labels[i] = new JLabel();
labels[i].setBounds(i * 49, 325, 49, 50);
labels[i].setBackground(Color.WHITE);
labels[i].setOpaque(true);
}
}
//Loeschen der Historie
static void resetErgeb(JLabel[] labels){
for(int i=0;i<labels.length-1;i++)
labels[i].setBackground(Color.white);
}
}
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
static JButton start, reset;
static JLabel player, bot, wurfPlayer, wurfBot, ergebnis;
//Labels um die letzten 10 Ergebnisse zu merken
static JLabel[] ergebnisse = new JLabel[10];
public static void main(String[] args) {
Main frame = new Main();
frame.setTitle("Wuerfelspiel");
frame.getContentPane().setBackground(Color.white);
frame.setSize(500, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLayout(null);
//Initialisieren der Ergebnis-Historie
initErgeb(ergebnisse);
player = new JLabel("Spieler");
player.setBounds(150, 100, 100, 50);
bot = new JLabel("Computer");
bot.setBounds(150, 150, 100, 50);
wurfPlayer = new JLabel();
wurfPlayer.setBounds(250, 100, 100, 50);
wurfBot = new JLabel();
wurfBot.setBounds(250, 150, 100, 50);
ergebnis = new JLabel();
ergebnis.setBounds(170, 75, 200, 50);
start = new JButton("Würfeln");
start.setBounds(150, 200, 80, 40);
reset = new JButton("Reset");
reset.setBounds(250, 200, 80, 40);
frame.add(player);
frame.add(bot);
frame.add(wurfPlayer);
frame.add(wurfBot);
frame.add(ergebnis);
frame.add(start);
frame.add(reset);
for (int i = 0; i < 10; i++)
frame.add(ergebnisse[i]);
//ActionListener fuer naechste Runde
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
wurfPlayer.setText("" + werfen());
wurfBot.setText("" + werfen());
auswerten();
}
int werfen() {
return (int) (Math.random() * 6 + 1);
}
});
//ActionListener fuer Reset-Button
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
wurfPlayer.setText("");
wurfBot.setText("");
ergebnis.setText("");
resetErgeb(ergebnisse);
}
});
}
//Auswertung der Spielrunde
static void auswerten() {
int player = Integer.parseInt(wurfPlayer.getText());
int bot = Integer.parseInt(wurfBot.getText());
moveColors(ergebnisse);
if (player > bot) {
ergebnis.setText("Sie haben gewonnen!");
ergebnisse[0].setBackground(Color.GREEN);
} else if (player < bot) {
ergebnis.setText("Sie haben verloren!");
ergebnisse[0].setBackground(Color.RED);
} else {
ergebnis.setText("Unentschieden!");
ergebnisse[0].setBackground(Color.gray);
}
}
//Die letzten 9 Ergebnise auf Anzeige um 1 nach Hinten verschieben
static void moveColors(JLabel[] labels) {
for (int i = labels.length - 1; i > 0; i--) {
labels[i].setBackground(labels[i - 1].getBackground());
}
}
//Initialisieren der Anzeige fuer die letzten 10 Spiele
static void initErgeb(JLabel[] labels) {
for (int i = 0; i < 10; i++) {
labels[i] = new JLabel();
labels[i].setBounds(i * 49, 325, 49, 50);
labels[i].setBackground(Color.WHITE);
labels[i].setOpaque(true);
}
}
//Loeschen der Historie
static void resetErgeb(JLabel[] labels){
for(int i=0;i<labels.length;i++)
labels[i].setBackground(Color.white);
}
}
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Wuerfel {
public static void main(String[] args) {
FrWuerfel frwuerfel = new FrWuerfel("Würfel Spiel");
}
}
class FrWuerfel extends JFrame implements ActionListener {
JLabel lbl = new JLabel("Die Größere Zahl gewinnt!");
JButton button = new JButton("würfeln");
JTextField tfUser = new JTextField(10);
JLabel lblAusgabe = new JLabel("computer:");
JTextField tfAusgabe = new JTextField(10);
JLabel lblKonklusion = new JLabel();
JPanel pText = new JPanel();
JPanel pUser = new JPanel();
JPanel pAusgabe = new JPanel();
JPanel pKonklusion = new JPanel();
FrWuerfel(String titel) {
super(titel);
setVisible(true);
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new FlowLayout(FlowLayout.RIGHT, 20, 20));
tfUser.setEditable(false);
tfAusgabe.setEditable(false);
tfUser.setHorizontalAlignment(JTextField.RIGHT);
tfAusgabe.setHorizontalAlignment(JTextField.RIGHT);
button.addActionListener(this);
pText.add(lbl);
pUser.add(button);
pUser.add(tfUser);
pAusgabe.add(lblAusgabe);
pAusgabe.add(tfAusgabe);
pKonklusion.add(lblKonklusion);
add(pText);
add(pUser);
add(pAusgabe);
add(pKonklusion);
lblKonklusion.setText(" ");
}
public void randomZahlen() {
Random ran = new Random();
int zahlUser = ran.nextInt(6) + 1;
int zahlComp = ran.nextInt(6) + 1;
tfUser.setText(Integer.toString(zahlUser));
tfAusgabe.setText(Integer.toString(zahlComp));
if (zahlUser > zahlComp) {
lblKonklusion.setText("Sie haben gewonnen");
}
if (zahlUser < zahlComp) {
lblKonklusion.setText("Der Computer hat gewonnen");
}
if (zahlUser == zahlComp) {
lblKonklusion.setText("unentschieden");
}
}
@Override
public void actionPerformed(ActionEvent e) {
randomZahlen();
}
}