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(); } }