Optische Aufmachung meines Programms

Status
Nicht offen für weitere Antworten.

Hecke

Aktives Mitglied
Und überhaupt: bist du dir sicher, dass du nicht zu früh mit der Gui angefangen hast? Deine Spiel-Klasse scheint irgendwelchen mist zu machen, schaue es dir nochmal genauer an, schmeiß die hälfte weg, und schreib wirklich nur das rein, was gebraucht wird.
Sicher bin ich mir gar nicht mehr. War eben so euphorisch, nur jetzt befürchte ich, dass ich hier noch lange sitzen werde.:(
 

0x7F800000

Top Contributor
vielleicht beruhigt dch ein wenig, wenn ich dir sage, dass das gesamte Programm in 20 Minuten geschrieben werden kann (ich werd's allerdings nicht demonstrieren)

Was funktioniert denn alles schon, was funktioniert noch nicht?

Imho sollte man in die spiel Klasse noch 5-6 zeilen einfachsten code reinschreiben, dann wäre es sowohl optisch als auch programmtechnisch "nicht allzu katastrophal" auf der normalen Skala bzw. "megatoll" gemessen auf der schul-skala^^ :D

5-10 zeilen okay? Kein stress...
 

Hecke

Aktives Mitglied
Das einzige, was nicht funktioniert, ist die Anzeige des Ergebnises, soweit ich das sehen kann. Sonst bin ich fertig.

Wenn man auf "Reset" klickt, ist der Text "Ergebnis" auch erstmal weg, bis man ihn markiert.:shock:
 

0x7F800000

Top Contributor
jetz komm, bitte, höre auf auf der oberfläche rumzukratzen.
[sowohl buchstäblich, als auch im übertragenen sinne]

Kannst du mir kurz und deutlich sagen, bzw für dich selbst klar machen, was die Spiel-Klasse tun soll?
 

Hecke

Aktives Mitglied
Zunächst definiert die Klasse die beiden Spieler.
Dann setzt es die Punkte Beider auf 0.
Danach werden die Punkte des Wurfes dazu addiert und als Finalpunkte ausgegeben.

Darauf folgend, sollte eigentlich in dem Textfeld ausgeben werden, wer, mit wievielen Punkten gewonnen hat.

Der Reset-Button setzt die Punkte auf 0 - ist ja klar.
 

0x7F800000

Top Contributor
Es gibt nur eine Runde in dem Spiel?

Ne, insgesammt: entweder habe ich was verpasst (hab hier nicht alles gelesen, besonders nicht den teil wo Lexi dazukam), oder du hast bisher nicht so wirklich geschrieben, was da eigentlich passieren soll.
 

0x7F800000

Top Contributor
Omg...
Poste bitte die gesammte aktuelle Spiel-klasse hier nochmal okay?
Bitte, denke dran: Oberfläche ist nur die hübsche verpackung. Spiel-Klasse ist das Herz. Solange mit dem Herz was nicht stimmt, läuft garnichts, da kann die verpackung so toll sein wie sie will...
 
Zuletzt bearbeitet von einem Moderator:

0x7F800000

Top Contributor
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:player2; //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 :eek:
 
Zuletzt bearbeitet von einem Moderator:

0x7F800000

Top Contributor
Tipp: klick erst Zitieren-Button an, dann kann man den code aus meinem beitrag normal kopieren, sonst kopiert er noch zeilennummer mit rein, weil die forumsoftware verbuggt ist.

Na komm, jetzt sag nich dass du einfach pennen gegangen bist, wär ja schade um eine nahezu-musterlösung der hausaufgabe^^
 
Zuletzt bearbeitet von einem Moderator:

0x7F800000

Top Contributor
moment.
wo hast du die dateien abgespeichert? wenn die in keinem package sind, dann lösche alle package-anweisungen vorne in allen dateien.
 

0x7F800000

Top Contributor
Der quellcode sollte komplett richtig sein, hab's eben alles ausgeführt, lief wunderbar... Ääähm, ich lad's grad irgendwo hoch^^
 

Hecke

Aktives Mitglied
Die Dateien habe ich auf dem Desktop in einem Ordner "Java-App". Da sind dann die .java und .class usw. drin.

Ey, du bist so sau genial...:)

Das Hochladen ist noch besser! Vielen Dank!
 

0x7F800000

Top Contributor
[broken link]
Jetzt sag bitte einfach dass es funzt, und ich kann dann ruhig weiter zoggen gehn^^ :D
 
Zuletzt bearbeitet von einem Moderator:

Hecke

Aktives Mitglied
Du bist der Beste! Ich liebe dich!:D

Wenn ich dir mal irgendwie helfen kann, dann melde dich - Ich würde alles tun, nachdem, was du für mich getan hast!

Funzt!;( (vor Freude)

EDIT: Jetzt muss ich nur noch ein UML-Diagramm davon hinbekommen.
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Lol... Hier wird alles unter Beerware veröffentlicht, wenn du drauf bestehst, kannst du meinetwegen bei Gelegenheit eine münze rüberfaxen, ich werde die ehrlich für Alkohol verwenden^^ :D

Na, UML kriegst du jetzt selbst hin, oder wie? Mach mal' ne Skizze, lade die irgendwo hoch, drüberguggen geht immer, ich zogge solange 20 minuten quacium tritium arenium^^ :smoke:
 

0x7F800000

Top Contributor
Jo, sieht doch hübsch aus.
Selbst gebastelt, oder irgendein IDE-Plugin verwendet? ;)

Dass der implements-pfeil so punktiert wird wusste ich gar nicht, ist das jetzt so geregelt? :)
 
Zuletzt bearbeitet von einem Moderator:

Hecke

Aktives Mitglied
Mit dem JavaEditor erstellt.:)

Kenne keinen anderen Weg:)

Wenn es einen besseren Weg gibt und du Lust hast, ihn mir mitzuteilen, höre ich gerne:)
 

0x7F800000

Top Contributor
naja, man kann es ja auch mit bleistift zeichnen, oder mit kreide... Ist auch ziemlich geil für Brainstorming :)

Wie der implemets pfeil aussehen soll weiß ich gar nicht mehr. Ich glaub ich hätte den schlampig als gewöhnlichen "extends"-pfeil hingezeichnet, aber ich kenn die aktuellen regeln echt nicht mehr, ich weiß es ehrlich nicht^^ :p
 

0x7F800000

Top Contributor
Es kommt natürlich drauf an, was gefordert wird. Evtl sollte man noch namen der member-variablen und die Multiplizitäten der Assoziationen dranschreiben, aber es ist ja fast alles 1:1 oder so...

Ja, egal... Frag deinen Lehrer nochmal kurz, ob da noch multiplizitäten an die pfeilchen müssen, würde imho nicht schaden. gn8^^
 

Hecke

Aktives Mitglied
Der Lehrer hat UML aber auch anhand des JavaEditors vorgestellt. Wird schon richtig sein.
Und selbst wenn nicht - das geniale Programm macht das ja eh wieder wett;)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben