Fabio Hellmann
Erfahrenes Mitglied
Hi TobyNick,
nein, du hast mich damals ein wenig falsch verstanden. Ich habe dir hier mal einen kleinen Beispiel-Code geschrieben, um dir das mal ein bischen besser veranschaulichen zu können.
Die Klasse Pott fügst du zu deinem JFrame hinzu. Das Pott-Objekt übernimmt die Anzeige der einzelnen Würfel. D.h. der aktuelle Spieler wird über die Methode setActualPlayer(Player) gesetzt und danach wird die Methode update() aufgerufen. Die Methode update() wird immer dann aufgerufen, wenn der Spieler z.B. neu gewürfelt hat oder bei sonstigen Änderungen.
Die Klasse Player enthält jetzt unsere Würfelobjekte. Da nur der Spieler (nach OOP) weiß welche Würfel er "selektiert" hat und welche nicht, werden diese beiden Methoden - getNotSelectedCubes() und getSelectedCubes() - dem Player-Objekt hinzugefügt. Zudem bekommt das Player-Objekt noch die Methode dice() zum würfeln. Wird diese Methode aufgerufen, werden alle Würfel (welche nicht selektiert sind) gewürfelt.
Die Klasse Cube ist nun also unser Würfel-Objekt. Von diesem Objekt können wir nun erfragen, ob es selektiert wurde und welche Nummer es gerade zeigt. Zudem (fürs zeichnen) können wir noch die x-/y-Koordinaten einsehen und ändern.
Ich hoffe ich konnte dir meinen Gedankengang ein wenig veranschaulichen mit diesen Codeausschnitten. Bitte bedenke, dass ich diesen Code vorher nicht ausprobiert habe und ich daher nicht garantieren kann, dass er zu 100% einsatzbereit/lauffähig (sprich: Fehler können vorhanden sein) ist.
Du wirst wahrscheinlich nichts desto drotz die ein oder anderen Änderungen vornehmen müssen. Diese Arbeit wird dir wohl nicht erspart bleiben.
Falls du noch Fragen haben solltest, nur zu.
Gruß
Fabio
nein, du hast mich damals ein wenig falsch verstanden. Ich habe dir hier mal einen kleinen Beispiel-Code geschrieben, um dir das mal ein bischen besser veranschaulichen zu können.
Die Klasse Pott fügst du zu deinem JFrame hinzu. Das Pott-Objekt übernimmt die Anzeige der einzelnen Würfel. D.h. der aktuelle Spieler wird über die Methode setActualPlayer(Player) gesetzt und danach wird die Methode update() aufgerufen. Die Methode update() wird immer dann aufgerufen, wenn der Spieler z.B. neu gewürfelt hat oder bei sonstigen Änderungen.
Java:
public class Pott extends JPanel
{
private Player player;
private final List<JPanel> pottPanels;
/**
*
*/
public Pott() {
this.pottPanels = new LinkedList<JPanel>();
// Je nachdem, wieviele JPanels du zum Würfelzeichnen brauchst
// ...
JPanel panel1 = new JPanel();
pottPanels.add(panel1);
add(panel1);
JPanel panel2 = new JPanel();
pottPanels.add(panel2);
add(panel2);
JPanel panel3 = new JPanel();
pottPanels.add(panel3);
add(panel3);
JPanel panel4 = new JPanel();
pottPanels.add(panel4);
add(panel4);
JPanel panel5 = new JPanel();
pottPanels.add(panel5);
add(panel5);
// Den Panels müsstest du auch noch einen MouseListener für ein Click-Event mit übergeben.
// Oder du nimmst statt JPanel's einfach JButton's.
}
public void setActualPlayer(Player player) {
this.player = player;
}
public void update() {
List<Cube> notSelectedCubes = player.getNotSelectedCubes();
for (int i = 0; i < pottPanels.size(); i++) {
JPanel panel = pottPanels.get(i);
if(i < notSelectedCubes.size()) {
Cube cube = notSelectedCubes.get(i);
cube.draw((Graphics2D) panel.getGraphics());
} else {
panel.validate();
panel.update(panel.getGraphics());
}
}
}
}
Die Klasse Player enthält jetzt unsere Würfelobjekte. Da nur der Spieler (nach OOP) weiß welche Würfel er "selektiert" hat und welche nicht, werden diese beiden Methoden - getNotSelectedCubes() und getSelectedCubes() - dem Player-Objekt hinzugefügt. Zudem bekommt das Player-Objekt noch die Methode dice() zum würfeln. Wird diese Methode aufgerufen, werden alle Würfel (welche nicht selektiert sind) gewürfelt.
Java:
public class Player
{
private final List<Cube> cubes;
public Player() {
this.cubes = new ArrayList<Cube>();
cubes.add(new Cube());
cubes.add(new Cube());
cubes.add(new Cube());
cubes.add(new Cube());
cubes.add(new Cube());
// Je nachdem, wieviele Würfel du haben willst
// ...
}
public void dice() {
for (int i = 0; i < cubes.size(); i++) {
Cube cube = cubes.get(i);
if(!cube.isSelected()) {
cube.dice();
}
}
}
public List<Cube> getNotSelectedCubes() {
List<Cube> selectedCubes = new ArrayList<Cube>();
for (int i = 0; i < cubes.size(); i++) {
Cube cube = cubes.get(i);
if(!cube.isSelected()) {
selectedCubes.add(cube);
}
}
return selectedCubes;
}
public List<Cube> getSelectedCubes() {
List<Cube> selectedCubes = new ArrayList<Cube>();
for (int i = 0; i < cubes.size(); i++) {
Cube cube = cubes.get(i);
if(cube.isSelected()) {
selectedCubes.add(cube);
}
}
return selectedCubes;
}
}
Die Klasse Cube ist nun also unser Würfel-Objekt. Von diesem Objekt können wir nun erfragen, ob es selektiert wurde und welche Nummer es gerade zeigt. Zudem (fürs zeichnen) können wir noch die x-/y-Koordinaten einsehen und ändern.
Java:
public class Cube
{
private int shownValue;
private boolean selected;
private int x = 0;
private int y = 0;
public void dice() {
this.shownValue = (int) (Math.random()*6+1);
}
public int getShownValue() {
return shownValue;
}
public void setSelected(boolean isSelected) {
this.selected = isSelected;
}
public boolean isSelected() {
return selected;
}
public void setX(int x) {
this.x = x;
}
public int getX() {
return x;
}
public void setY(int y) {
this.y = y;
}
public int getY() {
return y;
}
public void draw(Graphics2D g) {
g.drawRect(x, y, 40, 40);
g.drawString(String.valueOf(shownValue), x+19, y+18); // Oder durch selber gezeichnete Punkte ersezten
}
}
Ich hoffe ich konnte dir meinen Gedankengang ein wenig veranschaulichen mit diesen Codeausschnitten. Bitte bedenke, dass ich diesen Code vorher nicht ausprobiert habe und ich daher nicht garantieren kann, dass er zu 100% einsatzbereit/lauffähig (sprich: Fehler können vorhanden sein) ist.
Du wirst wahrscheinlich nichts desto drotz die ein oder anderen Änderungen vornehmen müssen. Diese Arbeit wird dir wohl nicht erspart bleiben.
Falls du noch Fragen haben solltest, nur zu.
Gruß
Fabio