manoman, das mit 20 Minuten habe ich wohl ein wenig übertrieben...
Also, nochmal von vorn...
Schauen wir uns den Spieler an:
[HIGHLIGHT="Java"]
public class Player
{
private int points=0;
private String name;
public Player(String name){
this.name=name;
}
public String getName(){
return name;
}
public int getPoints(){
return points;
}
public void addPoints(int additionalPoints){
points+=additionalPoints;
}
}
[/HIGHLIGHT]
Was muss der speiler wissen? Wieviele Punkte er hat, sonst nichts. Dann muss er noch die eben geworfene punkte draufrechnen können.
Was braucht der Becher? Naja, ich hab's so gemacht, dass die anzahl der Quader einstellbar ist, sonst ist es langweilig. aber er muss prinzipiell nur würfeln können:
[HIGHLIGHT="Java"]
import java.util.*;
public class Randomizer {
private Random random;
int numberOfDices;
public Randomizer(int numberOfDices){
this.numberOfDices=numberOfDices;
random=new Random();
}
public int throwDices(){
int result=0;
for(int i=0; i<numberOfDices; i++){
result+=random.nextInt(6)+1;
}
return result;
}
}
[/HIGHLIGHT]
Guut, was muss das Spiel alles wissen?
-Speieler mit ihren punkten
-Den verwendeten randomizer
-wer dran ist
-welche runde grad ist
-was der letzte wurf war
-wieviele runden es gibt
Also sowas:
[HIGHLIGHT="Java"]
public class Game {
Randomizer randomizer;
Player player1,player2;
Player currentPlayer;
int numberOfRounds,currentRound;
int lastTurn;
public Game(int numberOfRounds){
randomizer=new Randomizer(5);
this.numberOfRounds=numberOfRounds;
reset();
}
public void reset(){
player1=new Player("Mike");
player2=new Player("Paul");
currentPlayer=Math.random()>0.5?player1

layer2; //depends on random who starts
currentRound=1;
lastTurn=0;
}
public void playRound(){
if(currentRound<=numberOfRounds){
//throw dices
lastTurn=randomizer.throwDices();
//update points, swich players
if(currentPlayer==player1){
player1.addPoints(lastTurn);
currentPlayer=player2;
}else{
player2.addPoints(lastTurn);
currentPlayer=player1;
}
//update round counter
currentRound++;
}else{
//game over
lastTurn=0;
}
}
public String getStateInformation(){
String result;
if(currentRound<=numberOfRounds){
result="Round "+currentRound+"/"+numberOfRounds+", It's "+(currentPlayer.getName())+"'s turn,";
}else{
result="Game over ";
}
if(player2.getPoints()>player1.getPoints()){
result+=player2.getName()+" leads";
}else if(player2.getPoints()<player1.getPoints()){
result+=player1.getName()+" leads";
}else{
result+=" tie";
}
return result;
}
public Player getPlayer1(){
return player1;
}
public Player getPlayer2(){
return player2;
}
public int getLastTurn(){
return lastTurn;
}
}
[/HIGHLIGHT]
haufen getter, und dann noch eine methode für jede aktion:
1) runde spielen
2) alles neustarten
mehr muss das spiel nicht machen
Was die GUI macht, weißt du ja nun hoffentlich: bei jedem actionPerformed greift sie auf Spiel-Klasse zu und ruft entsprechende methode auf. Dann updatet sie alle textfelder (benutzt dabei die ganzen getXXX()-methoden der Spiel-klasse, und setzt die werte in die textfelder ein)
[HIGHLIGHT="Java"]
import javax.imageio.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
@SuppressWarnings("serial")
public class GUI
extends JFrame
implements ActionListener{
private Game game = new Game(20);
private JTextField player1Points,player2Points,state,lastTurn;
private JButton playButton, quitButton, resetButton;
public GUI(){
super("Laplace experiment");
//background image
setContentPane(new JPanel(){
Image img;
{
try{
img=ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/commons/c/c8/Wuerfel5.jpg"));
}catch(IOException e){
e.printStackTrace();
}
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
if(img!=null){
g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);
}
g.setColor(new Color(0,0,50,200));
g.fillRect(0,0,this.getWidth(),this.getHeight());
}
});
//init components
player1Points = new JTextField();
player1Points.setEditable(false);
this.getContentPane().add(player1Points);
player2Points= new JTextField();
player2Points.setEditable(false);
this.getContentPane().add(player2Points);
lastTurn=new JTextField();
lastTurn.setEditable(false);
this.getContentPane().add(lastTurn);
state=new JTextField();
state.setEditable(false);
this.getContentPane().add(state);
JLabel points1Label = new JLabel ("Points of "+game.getPlayer1().getName());
points1Label.setForeground(Color.WHITE);
this.getContentPane().add(points1Label);
JLabel points2Label = new JLabel ("Points of "+game.getPlayer2().getName());
points2Label.setForeground(Color.WHITE);
this.getContentPane().add(points2Label);
playButton = new JButton ("Throw dices");
this.getContentPane().add(playButton);
playButton.addActionListener(this);
resetButton = new JButton ("Reset");
this.getContentPane().add(resetButton);
resetButton.addActionListener(this);
quitButton = new JButton ("Quit");
this.getContentPane().add(quitButton);
quitButton.addActionListener(this);
//build layout
GridBagLayout gbl=new GridBagLayout();
Insets insets=new Insets(10,20,10,20);
int anchor = GridBagConstraints.CENTER,
fill = GridBagConstraints.BOTH;
//(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
gbl.setConstraints(points1Label, new GridBagConstraints(0,0,1,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(player1Points, new GridBagConstraints(1,0,1,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(points2Label, new GridBagConstraints(2,0,1,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(player2Points, new GridBagConstraints(3,0,1,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(lastTurn, new GridBagConstraints(0,1,4,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(state, new GridBagConstraints(0,2,4,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(playButton, new GridBagConstraints(0,3,2,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(resetButton, new GridBagConstraints(2,3,2,1,1,1,anchor,fill,insets,0,0));
gbl.setConstraints(quitButton, new GridBagConstraints(2,4,2,1,1,1,anchor,fill,insets,0,0));
getContentPane().setLayout(gbl);
setSize(500,300);
updateGUI();
}
private void updateGUI(){
player1Points.setText(""+game.getPlayer1().getPoints());
player2Points.setText(""+game.getPlayer2().getPoints());
lastTurn.setText("Last turn: "+game.getLastTurn());
state.setText(game.getStateInformation());
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==playButton){
game.playRound();
}else if(e.getSource()==resetButton){
game.reset();
}else if (e.getSource()==quitButton){
System.exit(0);
}
updateGUI();
}
}
[/HIGHLIGHT]
jetzt noch starten:
[HIGHLIGHT="Java"]
public class Main {
public static void main(String... _){
GUI gui=new GUI();
gui.setVisible(true);
}
}
[/HIGHLIGHT]
Fertig. Noch fragen?
57 Minuten: übel^^ naja, du hättest es an einem tag auch geschafft, hättest du bloß früh genug angefangen
