Java :: Aufgabe #9

5 Lösungen Lösungen öffentlich

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

Lösungen:

vote_ok
von Jurom (1070 Punkte) - 23.10.2012 um 16:35 Uhr
Quellcode ausblenden Java-Code
//©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
vote_ok
von HaraldK (260 Punkte) - 22.02.2016 um 21:28 Uhr
Das Lösungslayout ist nicht mehr Verfügbar, daher habe ich ein eigenes einfaches Layout dafür erstellt.

Quellcode ausblenden Java-Code
/* @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
vote_ok
von rockerle (120 Punkte) - 15.09.2017 um 15:34 Uhr
Quellcode ausblenden Java-Code
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);
	}

}

vote_ok
von rockerle (120 Punkte) - 15.09.2017 um 15:58 Uhr
Quellcode ausblenden Java-Code
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);
	}

}
vote_ok
von kollar (340 Punkte) - 14.12.2019 um 16:14 Uhr
Quellcode ausblenden Java-Code
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();

	}
}
2101680

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.