Hallo zusammen
Ich habe ein Monopoly Spiel programmiert bzw. umgeschrieben..
Bei diesem werden die Felder ab Feld 20 übersprungen..
Das muss irgendwo festgelegt werden aber ich finde die Stelle nicht..
Wäre jedem Dankbar, der die Lösung findet.. Vielen vielen Dank
Hier einmal alle Klassen:
Würfel:
Brett:
Feld:
Hauptspiel:
Spieler:
Ich habe ein Monopoly Spiel programmiert bzw. umgeschrieben..
Bei diesem werden die Felder ab Feld 20 übersprungen..
Das muss irgendwo festgelegt werden aber ich finde die Stelle nicht..
Wäre jedem Dankbar, der die Lösung findet.. Vielen vielen Dank
Hier einmal alle Klassen:
Würfel:
Java:
package gui;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class Wuerfel extends JPanel {
Random rnd = new Random();
int augenzahl = 1;
public Wuerfel(int xCoord, int yCoord, int width, int height) {
setBorder(new LineBorder(new Color(0, 0, 0)));
setBounds(xCoord, yCoord, width, height);
}
public void paintComponent(Graphics g) { //hier wird der Würfel auf dem Spielfeld gezeichnet
super.paintComponent(g);
if(augenzahl == 1) {
g.fillOval(getWidth()/2 - 5/2, getHeight()/2 - 5/2, 5, 5);
} else if(augenzahl == 2) {
g.fillOval(getWidth()/2 - 15, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 - 15, 5, 5);
} else if(augenzahl == 3) {
g.fillOval(getWidth()/2 - 15, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 - 5/2, getHeight()/2 - 5/2, 5, 5);
} else if(augenzahl == 4) {
g.fillOval(getWidth()/2 - 15, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 - 15, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 + 10, 5, 5);
} else if(augenzahl == 5) {
g.fillOval(getWidth()/2 - 15, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 - 15, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 - 5/2, getHeight()/2 - 5/2, 5, 5);
} else {
g.fillOval(getWidth()/2 - 15, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 - 15, getHeight()/2 - 15, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 + 10, 5, 5);
g.fillOval(getWidth()/2 - 15, getHeight()/2 - 5/2, 5, 5);
g.fillOval(getWidth()/2 + 10, getHeight()/2 - 5/2, 5, 5);
}
}
public void wuerfeln(){
augenzahl = rnd.nextInt(6) + 1;
repaint();
}
public int getAugenzahl(){
return augenzahl;
}
public Wuerfel(int xCoord, int yCoord, int width, int height, String labelString) {
setBorder(new LineBorder(new Color(0, 0, 0)));
setBounds(xCoord, yCoord, width, height);
}
}
Brett:
Java:
package gui;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
public class Brett extends JPanel {
private ArrayList<Feld> alleFelder = new ArrayList<Feld>(); //Alle Felder die Man kaufen kann
private ArrayList<Feld> unverkaeuflicheFelder = new ArrayList<Feld>(); // Da man Start nicht kaufen kann
public ArrayList<Feld> getUnverkaeuflicheFelder(){
return unverkaeuflicheFelder;
}
public ArrayList<Feld> getAlleFelder(){
return alleFelder;
}
public Feld getFeldAtIndex(int location) {
return alleFelder.get(location);
}
public Brett(int xCoord, int yCoord, int width, int height) {
setBorder(new LineBorder(new Color(0, 0, 0)));
setBounds(xCoord, yCoord, 1116, 1116);
this.setLayout(null);
initializeFelder();
}
private void initializeFelder() { //Die Namen aller Felder
String[] felderNamen = {
"Start",
"Hauptbahnhof",
"Siegfriedsplatz",
"Lokschuppen",
"Oetker Eisbahn",
"Rathaus",
"Dr. Oetker Welt",
"Klinikum Bielefeld",
"Ravensberger Spinnerei",
"Marienschule",
"Fachhochschule",
"Univerität",
"Olderdissen",
"Schüco Arena",
"Ishara",
"Loom",
"Sparrenburg",
"Seidenstickerhalle",
"Rudolf-Oetker-Halle",
"Lenkwerk",
"IKEA",
"Ravensberger Park",
"Jahnplatz",
"Stadttheater",
"Rathausplatz",
"Hauptstraße",
"Leineweber Denkmal",
"Kunsthalle",
"Bauernhausmuseum",
"Flugplatz",
"Historisches Museum",
"Obersee",
"Bahnhofstraße",
};
//Hier werden allen Feldern Positionen,Größen und die Namen aus dem obigen Array zugeteilt
// Felder oben
Feld feld00 = new Feld(6,6,100,100,felderNamen[0],135);
this.add(feld00);
alleFelder.add(feld00);
unverkaeuflicheFelder.add(feld00);
Feld feld01 = new Feld(106,6,100,100,felderNamen[1],180);
this.add(feld01);
alleFelder.add(feld01);
Feld feld02 = new Feld(206,6,100,100,felderNamen[2],180);
this.add(feld02);
alleFelder.add(feld02);
Feld feld03 = new Feld(306,6,100,100,felderNamen[3],180);
this.add(feld03);
alleFelder.add(feld03);
Feld feld04 = new Feld(406,6,100,100,felderNamen[4],180);
this.add(feld04);
alleFelder.add(feld04);
Feld feld05 = new Feld(506,6,100,100,felderNamen[5],180);
this.add(feld05);
alleFelder.add(feld05);
Feld feld06 = new Feld(606,6,100,100,felderNamen[6],180);
this.add(feld06);
alleFelder.add(feld06);
Feld feld07 = new Feld(706,6,100,100,felderNamen[7],180);
this.add(feld07);
alleFelder.add(feld07);
Feld feld08 = new Feld(806,6,100,100,felderNamen[8],180);
this.add(feld08);
alleFelder.add(feld08);
Feld feld09 = new Feld(906,6,100,100,felderNamen[9],-135);
this.add(feld09);
alleFelder.add(feld09);
// Felder rechts
Feld feld10 = new Feld(906,106,100,100,felderNamen[10],-90);
this.add(feld10);
alleFelder.add(feld10);
Feld feld11 = new Feld(906,206,100,100,felderNamen[11],-90);
this.add(feld11);
alleFelder.add(feld11);
Feld feld12 = new Feld(906,306,100,100,felderNamen[12],-90);
this.add(feld12);
alleFelder.add(feld12);
Feld feld13 = new Feld(906,406,100,100,felderNamen[13],-90);
this.add(feld13);
alleFelder.add(feld13);
Feld feld14 = new Feld(906,506,100,100,felderNamen[14],-90);
this.add(feld14);
alleFelder.add(feld14);
Feld feld15 = new Feld(906,606,100,100,felderNamen[15],-90);
this.add(feld15);
alleFelder.add(feld15);
Feld feld16 = new Feld(906,706,100,100,felderNamen[16],-90);
this.add(feld16);
alleFelder.add(feld16);
Feld feld17 = new Feld(906,806,100,100,felderNamen[17],-45);
this.add(feld17);
alleFelder.add(feld17);
// Felder unten
Feld feld18 = new Feld(806,806,100,100,felderNamen[18],0);
this.add(feld18);
alleFelder.add(feld18);
Feld feld19 = new Feld(706,806,100,100,felderNamen[19],0);
this.add(feld19);
alleFelder.add(feld19);
Feld feld20 = new Feld(606,806,100,100,felderNamen[20],0);
this.add(feld20);
alleFelder.add(feld20);
Feld feld21 = new Feld(506,806,100,100,felderNamen[21],0);
this.add(feld21);
alleFelder.add(feld21);
Feld feld22 = new Feld(406,806,100,100,felderNamen[22],0);
this.add(feld22);
alleFelder.add(feld22);
Feld feld23 = new Feld(306,806,100,100,felderNamen[23],0);
this.add(feld23);
alleFelder.add(feld23);
Feld feld24 = new Feld(206,806,100,100,felderNamen[24],0);
this.add(feld24);
alleFelder.add(feld24);
Feld feld25 = new Feld(106,806,100,100,felderNamen[25],0);
this.add(feld25);
alleFelder.add(feld25);
Feld feld26 = new Feld(6,806,100,100,felderNamen[26],45);
this.add(feld26);
alleFelder.add(feld26);
// Felder links
Feld feld27 = new Feld(6,706,100,100,felderNamen[27],90);
this.add(feld27);
alleFelder.add(feld27);
Feld feld28 = new Feld(6,606,100,100,felderNamen[28],90);
this.add(feld28);
alleFelder.add(feld28);
Feld feld29 = new Feld(6,506,100,100,felderNamen[29],90);
this.add(feld29);
alleFelder.add(feld29);
Feld feld30 = new Feld(6,406,100,100,felderNamen[30],90);
this.add(feld30);
alleFelder.add(feld30);
Feld feld31 = new Feld(6,306,100,100,felderNamen[31],90);
this.add(feld31);
alleFelder.add(feld31);
Feld feld32 = new Feld(6,206,100,100,felderNamen[32],90);
this.add(feld32);
alleFelder.add(feld32);
Feld feld33 = new Feld(6,106,100,100,felderNamen[32],90);
this.add(feld33);
alleFelder.add(feld33);
// Hier werden Preise gesetzt zum Kauf
feld01.setPreis(100);
feld02.setPreis(110);
feld03.setPreis(120);
feld04.setPreis(130);
feld05.setPreis(140);
feld06.setPreis(150);
feld07.setPreis(160);
feld08.setPreis(170);
feld09.setPreis(180);
feld10.setPreis(190);
feld11.setPreis(200);
feld12.setPreis(210);
feld13.setPreis(220);
feld14.setPreis(230);
feld15.setPreis(240);
feld16.setPreis(250);
feld17.setPreis(260);
feld18.setPreis(270);
feld19.setPreis(280);
feld20.setPreis(290);
feld21.setPreis(300);
feld22.setPreis(310);
feld23.setPreis(320);
feld24.setPreis(330);
feld25.setPreis(340);
feld26.setPreis(350);
feld27.setPreis(360);
feld28.setPreis(370);
feld29.setPreis(380);
feld30.setPreis(390);
feld31.setPreis(400);
feld32.setPreis(410);
feld33.setPreis(420);
//Hier werden die Preise für die zu bezahlende Miete festgelegt
feld01.setMietPreis(10);
feld02.setMietPreis(11);
feld03.setMietPreis(12);
feld04.setMietPreis(13);
feld05.setMietPreis(14);
feld06.setMietPreis(15);
feld07.setMietPreis(16);
feld08.setMietPreis(17);
feld09.setMietPreis(18);
feld10.setMietPreis(19);
feld11.setMietPreis(20);
feld12.setMietPreis(21);
feld13.setMietPreis(22);
feld14.setMietPreis(23);
feld15.setMietPreis(24);
feld16.setMietPreis(25);
feld17.setMietPreis(26);
feld18.setMietPreis(27);
feld19.setMietPreis(28);
feld20.setMietPreis(29);
feld21.setMietPreis(30);
feld22.setMietPreis(31);
feld23.setMietPreis(32);
feld24.setMietPreis(33);
feld25.setMietPreis(34);
feld26.setMietPreis(35);
feld27.setMietPreis(36);
feld28.setMietPreis(37);
feld29.setMietPreis(38);
feld30.setMietPreis(39);
feld31.setMietPreis(40);
feld32.setMietPreis(41);
feld32.setMietPreis(42);
feld33.setMietPreis(43);
JLabel lblMonopoly = new JLabel("MONOPOLY"){
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
AffineTransform aT = g2.getTransform();
Shape oldshape = g2.getClip();
double x = getWidth()/2.0;
double y = getHeight()/2.0;
aT.rotate(Math.toRadians(-35), x, y);
g2.setTransform(aT);
g2.setClip(oldshape);
super.paintComponent(g);
}
};
lblMonopoly.setForeground(Color.WHITE);
lblMonopoly.setBackground(Color.RED);
lblMonopoly.setOpaque(true);
lblMonopoly.setHorizontalAlignment(SwingConstants.CENTER);
lblMonopoly.setFont(new Font("Lucida Grande", Font.PLAIN, 40));
lblMonopoly.setBounds(379, 377, 263, 55); //(179, 277, 263, 55);
this.add(lblMonopoly);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
}
Feld:
Java:
package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
public class Feld extends JPanel {
int nummer;
private String name;
String beschreibung;
JLabel nameLabel;
static int felderGesamt = 0;
private int preis;
private int mietPreis;
public void setMietPreis(int mietPreis) {
this.mietPreis = mietPreis;
}
public int getMietPreis() {
return mietPreis;
}
public void setPreis(int preis) {
this.preis = preis;
}
public int getPreis() {
return preis;
}
public String getName() {
return name;
}
public Feld(int xCoord, int yCoord, int width, int height, String labelString, int rotationDegrees) {
nummer = felderGesamt;
felderGesamt++;
setBorder(new LineBorder(new Color(0, 0, 0)));
setBounds(xCoord, yCoord, width, height);
name = labelString;
this.setLayout(null);
if(rotationDegrees == 0) {
nameLabel = new JLabel(labelString);
nameLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 9));
nameLabel.setHorizontalAlignment(SwingConstants.CENTER);
nameLabel.setBounds(0,20,this.getWidth(),20);
this.add(nameLabel);
} else {
// rotating a Jlabel: https://www.daniweb.com/programming/software-development/threads/390060/rotate-jlabel-or-image-in-label
nameLabel = new JLabel(labelString) {
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
AffineTransform aT = g2.getTransform();
Shape oldshape = g2.getClip();
double x = getWidth()/2.0;
double y = getHeight()/2.0;
aT.rotate(Math.toRadians(rotationDegrees), x, y);
g2.setTransform(aT);
g2.setClip(oldshape);
super.paintComponent(g);
}
};
if(rotationDegrees == 90) {
nameLabel.setBounds(20, 0, this.getWidth(), this.getHeight());
}
if(rotationDegrees == -90) {
nameLabel.setBounds(-10, 0, this.getWidth(), this.getHeight());
}
if(rotationDegrees == 180) {
nameLabel.setBounds(0, 0, this.getWidth(), this.getHeight());
}
if(rotationDegrees == 135 || rotationDegrees == -135 || rotationDegrees == -45 || rotationDegrees == 45) {
nameLabel.setBounds(0, 0, this.getWidth(), this.getHeight());
}
nameLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 9));
nameLabel.setHorizontalAlignment(SwingConstants.CENTER);
this.add(nameLabel);
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
//oben
if(this.nummer == 1 || this.nummer == 2 || this.nummer == 3 ) {
g.drawRect(0, this.getHeight()-20, this.getWidth(), 20);
g.setColor(Color.BLUE);
g.fillRect(0, this.getHeight()-20, this.getWidth(), 20);
}
if(this.nummer == 4 || this.nummer == 5) {
g.drawRect(0, this.getHeight()-20, this.getWidth(), 20);
g.setColor(Color.RED);
g.fillRect(0, this.getHeight()-20, this.getWidth(), 20);
}
if(this.nummer == 6 || this.nummer == 7 || this.nummer == 8 ) {
g.drawRect(0, this.getHeight()-20, this.getWidth(), 20);
g.setColor(Color.GREEN);
g.fillRect(0, this.getHeight()-20, this.getWidth(), 20);
}
//rechts
if(this.nummer == 10 || this.nummer == 11) {
g.drawRect(0, 0, 20, this.getHeight());
g.setColor(Color.PINK);
g.fillRect(0, 0, 20, this.getHeight());
}
if(this.nummer == 12 || this.nummer == 13 || this.nummer == 14) {
g.drawRect(0, 0, 20, this.getHeight());
g.setColor(Color.ORANGE);
g.fillRect(0, 0, 20, this.getHeight());
}
if(this.nummer == 15 || this.nummer == 16) {
g.drawRect(0, 0, 20, this.getHeight());
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 20, this.getHeight());
}
//unten
if(this.nummer == 18 || this.nummer == 19 || this.nummer == 20) {
g.drawRect(0, 0, this.getWidth(), 20);
g.setColor(Color.ORANGE);
g.fillRect(0, 0, this.getWidth(), 20);
}
if(this.nummer == 21 || this.nummer == 22) {
g.drawRect(0, 0, this.getWidth(), 20);
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), 20);
}
if(this.nummer == 23 || this.nummer == 24 || this.nummer == 25) {
g.drawRect(0, 0, this.getWidth(), 20);
g.setColor(Color.BLUE);
g.fillRect(0, 0, this.getWidth(), 20);
}
//links
if(this.nummer == 27 || this.nummer == 28) {
g.drawRect(this.getWidth()-20, 0, 20, this.getHeight());
g.setColor(Color.GREEN);
g.fillRect(this.getWidth()-20, 0, 20, this.getHeight());
}
if(this.nummer == 29 || this.nummer == 30 || this.nummer == 31) {
g.drawRect(this.getWidth()-20, 0, 20, this.getHeight());
g.setColor(Color.PINK);
g.fillRect(this.getWidth()-20, 0, 20, this.getHeight());
}
if(this.nummer == 32 || this.nummer == 33) {
g.drawRect(this.getWidth()-20, 0, 20, this.getHeight());
g.setColor(Color.ORANGE);
g.fillRect(this.getWidth()-20, 0, 20, this.getHeight());
}
}
private boolean hatMieteBezahlt = false;
public boolean hatMieteBezahlt() {
return hatMieteBezahlt;
}
public void setMieteBezahlt (boolean bezahlt) {
hatMieteBezahlt = bezahlt;
}
}
Hauptspiel:
Java:
package gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import gui.Wuerfel;
import gui.Spieler;
import gui.Brett;
public class Hauptspiel extends JFrame{
private JPanel inhalt;
static JTextArea infoFeld;
JPanel spielerBesitztuemerFeld;
CardLayout c1 = new CardLayout();
ArrayList<Spieler> spieler = new ArrayList<Spieler>();
static int turnCounter = 0;
JButton btnNaechsterZug;
JButton btnWuerfeln;
JButton btnMieteZahlen;
JButton btnKaufen;
JTextArea panelSpieler1TextArea;
JTextArea panelSpieler2TextArea;
Brett spielBrett;
Spieler spieler1;
Spieler spieler2;
Boolean doppeltWuerfelnFürSpieler1 = false;
Boolean doppeltWuerfelnFürSpieler2 = false;
static int amZug = 0;
public Hauptspiel() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
setSize(2000,1800);
inhalt = new JPanel();
inhalt.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(inhalt);
inhalt.setLayout(null);
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setBorder(new LineBorder(new Color(0, 0, 0)));
layeredPane.setBounds(6, 6, 1200, 1200); //6,6
inhalt.add(layeredPane);
spielBrett = new Brett(6,6,1200,1200);
spielBrett.setBackground(new Color(51, 255, 153));
layeredPane.add(spielBrett, new Integer(0));
spieler1 = new Spieler(1, Color.RED);
spieler.add(spieler1);
layeredPane.add(spieler1, new Integer(1));
spieler2 = new Spieler(2, Color.BLUE);
spieler.add(spieler2);
layeredPane.add(spieler2, new Integer(1));
JPanel rechtesPanel = new JPanel();
rechtesPanel.setBackground(Color.LIGHT_GRAY);
rechtesPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
rechtesPanel.setBounds(1300, 6, 419, 600); //634, 6, 419, 600
inhalt.add(rechtesPanel);
rechtesPanel.setLayout(null);
btnKaufen = new JButton("Kaufen");
btnKaufen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//turnCounter--; // abnehmen, weil wir am Ende des Würfels zugenommen haben
Spieler aktuellerSpieler = spieler.get(amZug);
infoFeld.setText("Du hast gekauft: "+spielBrett.getAlleFelder().get(aktuellerSpieler.getAktuelleFeldNummer()).getName());
aktuellerSpieler.kaufeEigentumsrechte(aktuellerSpieler.getAktuelleFeldNummer());
int abzuhebenderBetrag = spielBrett.getAlleFelder().get(aktuellerSpieler.getAktuelleFeldNummer()).getPreis();
aktuellerSpieler.abziehenVomKontostand(abzuhebenderBetrag);
btnKaufen.setEnabled(false);
updatePanelSpieler1TextArea();
updatePanelSpieler2TextArea();
//turnCounter++;
}
});
btnKaufen.setBounds(81, 478, 117, 29);
rechtesPanel.add(btnKaufen);
btnKaufen.setEnabled(false);
btnMieteZahlen = new JButton("Miete Zahlen");
btnMieteZahlen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// turnCounter--;
Spieler aktuellerSpieler = spieler.get(amZug);
Spieler besitzerDesFeldes = spieler.get((Spieler.ledger.get(aktuellerSpieler.getAktuelleFeldNummer()))==1?0:1);
infoFeld.setText("Du hast dem Besitzer bezahlt: "+besitzerDesFeldes.getSpielerNummer());
int abzuhebenderBetrag = spielBrett.getAlleFelder().get(aktuellerSpieler.getAktuelleFeldNummer()).getMietPreis();
System.out.println(abzuhebenderBetrag);
aktuellerSpieler.abziehenVomKontostand(abzuhebenderBetrag);
besitzerDesFeldes.einzahlenAufsKonto(abzuhebenderBetrag);
btnNaechsterZug.setEnabled(true);
btnMieteZahlen.setEnabled(false);
//aktuellerSpieler.withdrawFromWallet(withdrawAmount);
updatePanelSpieler1TextArea();
updatePanelSpieler2TextArea();
//turnCounter++;
//gameBoard.getAlleFelder().get(spieler1.getAktuelleFelderNummer()).setMieteGezahlt(true);
}
});
btnMieteZahlen.setBounds(210, 478, 117, 29);
rechtesPanel.add(btnMieteZahlen);
btnMieteZahlen.setEnabled(false);
Wuerfel wuerfel1 = new Wuerfel(244, 406, 40, 40);
layeredPane.add(wuerfel1, new Integer(1));
Wuerfel wuerfel2 = new Wuerfel(333, 406, 40, 40);
layeredPane.add(wuerfel2, new Integer(1));
btnWuerfeln = new JButton("Würfeln");
btnWuerfeln.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(amZug == 0) {
// player1's turn
int wuerfel1OldValue = wuerfel1.getAugenzahl();
int wuerfel2OldValue = wuerfel2.getAugenzahl();
wuerfel1.wuerfeln();
wuerfel2.wuerfeln();
int augenzahlKomplett = wuerfel1.getAugenzahl() + wuerfel2.getAugenzahl();
if(wuerfel1.getAugenzahl() == wuerfel2.getAugenzahl()) {
doppeltWuerfelnFürSpieler1 = true;
} else {
doppeltWuerfelnFürSpieler1 = false;
}
spieler1.bewegen(augenzahlKomplett);;
if(Spieler.ledger.containsKey(spieler1.getAktuelleFeldNummer()) // Wenn schon von jemandem gekauft
&& Spieler.ledger.get(spieler1.getAktuelleFeldNummer()) != spieler1.getSpielerNummer() // not by itself
) {
btnKaufen.setEnabled(false);
btnWuerfeln.setEnabled(false);
btnNaechsterZug.setEnabled(false);
btnMieteZahlen.setEnabled(true);
}
if (Spieler.ledger.containsKey(spieler1.getAktuelleFeldNummer()) // Wenn schon von jemandem gekauft
&& Spieler.ledger.get(spieler1.getAktuelleFeldNummer()) == spieler1.getSpielerNummer()) { // and by itself
btnKaufen.setEnabled(false);
btnMieteZahlen.setEnabled(false);
btnNaechsterZug.setEnabled(true);
}
if(spielBrett.getUnverkaeuflicheFelder().contains(spielBrett.getAlleFelder().get(spieler1.getAktuelleFeldNummer()))) {
btnKaufen.setEnabled(false);
btnNaechsterZug.setEnabled(true);
} else if (!Spieler.ledger.containsKey(spieler1.getAktuelleFeldNummer())) { // Wenn nicht von jemandem gekauft
btnKaufen.setEnabled(true);
btnNaechsterZug.setEnabled(true);
btnMieteZahlen.setEnabled(false);
}
} else {
// Spieler 2's Zug
int wuerfel1OldValue = wuerfel1.getAugenzahl();
int wuerfel2OldValue = wuerfel2.getAugenzahl();
wuerfel1.wuerfeln();
wuerfel2.wuerfeln();
int augenzahlKomplett = wuerfel1.getAugenzahl() + wuerfel2.getAugenzahl();
if(wuerfel1.getAugenzahl() == wuerfel2.getAugenzahl()) {
doppeltWuerfelnFürSpieler2 = true;
} else {
doppeltWuerfelnFürSpieler2 = false;
}
spieler2.bewegen(augenzahlKomplett);
if(Spieler.ledger.containsKey(spieler2.getAktuelleFeldNummer()) // Wenn schon von jemandem gekauft
&& Spieler.ledger.get(spieler2.getAktuelleFeldNummer()) != spieler2.getSpielerNummer() // not by itself
) {
btnKaufen.setEnabled(false);
btnWuerfeln.setEnabled(false);
btnNaechsterZug.setEnabled(false);
btnMieteZahlen.setEnabled(true);
}
if(Spieler.ledger.containsKey(spieler2.getAktuelleFeldNummer()) // Wenn schon von jemandem gekauft
&& Spieler.ledger.get(spieler2.getAktuelleFeldNummer()) == spieler2.getSpielerNummer()) { // and by itself
btnKaufen.setEnabled(false);
btnMieteZahlen.setEnabled(false);
}
if(spielBrett.getUnverkaeuflicheFelder().contains(spielBrett.getAlleFelder().get(spieler2.getAktuelleFeldNummer()))) {
btnKaufen.setEnabled(false);
btnNaechsterZug.setEnabled(true);
} else if (!Spieler.ledger.containsKey(spieler2.getAktuelleFeldNummer())) { // Wenn nicht von jemandem gekauft
btnKaufen.setEnabled(true);
btnNaechsterZug.setEnabled(true);
btnMieteZahlen.setEnabled(false);
}
}
btnWuerfeln.setEnabled(false);
if(doppeltWuerfelnFürSpieler1 || doppeltWuerfelnFürSpieler2) {
infoFeld.setText("Klicken Sie Nächster Zug um Spieler "+ (amZug==0 ? 1 : 2) +" an den Zug zu lassen");
} else {
infoFeld.setText("Klicken Sie Nächster Zug um Spieler "+ (amZug==0 ? 2 : 1) +" an den Zug zu lassen");
}
// Um Gui Fehler zu vermeiden:
layeredPane.remove(spielBrett);
layeredPane.add(spielBrett, new Integer(0));
updatePanelSpieler1TextArea();
updatePanelSpieler2TextArea();
}
});
btnWuerfeln.setBounds(81, 413, 246, 53);
rechtesPanel.add(btnWuerfeln);
btnNaechsterZug = new JButton("Nächster Zug");
btnNaechsterZug.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
btnWuerfeln.setEnabled(true);
btnKaufen.setEnabled(false);
btnMieteZahlen.setEnabled(false);
btnNaechsterZug.setEnabled(false);
if(amZug == 0 && doppeltWuerfelnFürSpieler1) {
amZug = 0;
doppeltWuerfelnFürSpieler1 = false;
} else if(amZug == 1 && doppeltWuerfelnFürSpieler2) {
amZug = 1;
doppeltWuerfelnFürSpieler2 = false;
} else if(!doppeltWuerfelnFürSpieler1 && !doppeltWuerfelnFürSpieler2) {
amZug = (amZug + 1) % 2;
}
c1.show(spielerBesitztuemerFeld, ""+(amZug==0 ? 1 : 2)); // maps 0 to 1 and 1 to 2
updatePanelSpieler1TextArea();
updatePanelSpieler2TextArea();
infoFeld.setText("Spieler "+(amZug==0 ? 1 : 2)+" ist nun am Zug!");
}
});
btnNaechsterZug.setBounds(81, 519, 246, 53);
rechtesPanel.add(btnNaechsterZug);
btnNaechsterZug.setEnabled(false);
JPanel test = new JPanel();
test.setBounds(81, 312, 246, 68);
rechtesPanel.add(test);
test.setLayout(null);
spielerBesitztuemerFeld = new JPanel();
spielerBesitztuemerFeld.setBounds(81, 28, 246, 300); //189
rechtesPanel.add(spielerBesitztuemerFeld);
spielerBesitztuemerFeld.setLayout(c1);
JPanel panelSpieler1 = new JPanel();
panelSpieler1.setBackground(Color.RED);
spielerBesitztuemerFeld.add(panelSpieler1, "1");
panelSpieler1.setLayout(null);
JLabel panelSpieler1Title = new JLabel("Infos zu Spieler 1");
panelSpieler1Title.setForeground(Color.WHITE);
panelSpieler1Title.setHorizontalAlignment(SwingConstants.CENTER);
panelSpieler1Title.setBounds(0, 6, 240, 16);
panelSpieler1.add(panelSpieler1Title);
panelSpieler1TextArea = new JTextArea();
panelSpieler1TextArea.setBounds(10, 34, 230, 230); //149
panelSpieler1.add(panelSpieler1TextArea);
JPanel panelSpieler2 = new JPanel();
panelSpieler2.setBackground(Color.BLUE);
spielerBesitztuemerFeld.add(panelSpieler2, "2");
panelSpieler2.setLayout(null);
c1.show(spielerBesitztuemerFeld, ""+amZug);
JLabel panelSpieler2Title = new JLabel("Infos zu Spieler 2");
panelSpieler2Title.setForeground(Color.WHITE);
panelSpieler2Title.setHorizontalAlignment(SwingConstants.CENTER);
panelSpieler2Title.setBounds(0, 6, 240, 16);
panelSpieler2.add(panelSpieler2Title);
panelSpieler2TextArea = new JTextArea();
panelSpieler2TextArea.setBounds(10, 34, 230, 230); //149
panelSpieler2.add(panelSpieler2TextArea);
updatePanelSpieler1TextArea();
updatePanelSpieler2TextArea();
infoFeld = new JTextArea();
infoFeld.setColumns(20);
infoFeld.setRows(5);
infoFeld.setBounds(6, 6, 234, 56);
test.add(infoFeld);
infoFeld.setLineWrap(true);
infoFeld.setText("Spieler 1 startet das Spiel indem er würfelt!");
}
public void updatePanelSpieler2TextArea() {
String result = "";
result += "Aktueller Saldo: "+spieler2.getKontostand()+"\n";
result += "Eigentumsrechte: \n";
for(int i = 0; i < spieler2.getEigentumsrechte().size(); i++) {
result += " - "+spielBrett.getAlleFelder().get(spieler2.getEigentumsrechte().get(i)).getName()+"\n";
}
panelSpieler2TextArea.setText(result);
}
public void updatePanelSpieler1TextArea() {
String result = "";
result += "Aktueller Saldo: "+spieler1.getKontostand()+"\n";
result += "Eigentumsrechte: \n";
for(int i = 0; i < spieler1.getEigentumsrechte().size(); i++) {
result += " - "+spielBrett.getAlleFelder().get(spieler1.getEigentumsrechte().get(i)).getName()+"\n";
}
panelSpieler1TextArea.setText(result);
}
public static void errorBox(String infoMessage, String titleBar) {
JOptionPane.showMessageDialog(null, infoMessage, "InfoBox: " + titleBar, JOptionPane.ERROR_MESSAGE);
}
public static void main(String[] args) {
Hauptspiel frame = new Hauptspiel();
frame.setVisible(true);
}
}
Spieler:
Java:
package gui;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class Spieler extends JPanel {
private int spielerNummer;
JLabel lblSpielerNummer;
static int spielerGesamt = 0; // wir brauchen diese Nummer später
static HashMap<Integer, Integer> ledger= new HashMap<>();
private int aktuelleFeldNummer = 0; // derzeitige Position des Spielers (0 - 33) Start=0
private ArrayList<Integer> eigentumsrechte = new ArrayList<Integer>(); // Besitztümer des Spielers
private int kontostand = 5000; // Konotstand für Häuserkauf und Miete zahlen.
public ArrayList<Integer> getEigentumsrechte() {
return eigentumsrechte;
}
public int getKontostand() {
return kontostand;
}
public void abziehenVomKontostand(int abzuhebenderBetrag) {
if(abzuhebenderBetrag > kontostand) {
setVisible(false);
System.out.println("Spieler "+ spielerNummer + " geht bankrott!");
} else {
kontostand -= abzuhebenderBetrag;
}
}
public void einzahlenAufsKonto(int einuzahlenderBetrag) {
kontostand += einuzahlenderBetrag;
System.out.println("Der Spieler "+getSpielerNummer()+". bekommt: $200!");
}
public int getAktuelleFeldNummer() {
return aktuelleFeldNummer;
}
public int getSpielerNummer() {
return spielerNummer;
}
public boolean hatEigentumsrechte (int feldNummer) {
return eigentumsrechte.contains(feldNummer) ? true : false;
}
public void kaufeEigentumsrechte(int feldNummer) {
if(ledger.containsKey(feldNummer)) {
System.out.println("Dieses Feld gehört bereits einem anderen Spieler, du kannst es nicht kaufen.");
} else {
eigentumsrechte.add(this.getAktuelleFeldNummer());
ledger.put(feldNummer, this.getSpielerNummer()); // everytime a player buys a title deed, it is written in ledger, for example square 1 belongs to player 2
}
}
public Spieler(int xCoord, int yCoord, int width, int height) {
setBorder(new LineBorder(new Color(0, 0, 0)));
setBounds(xCoord, yCoord, 20, 20);
this.setLayout(null);
}
public Spieler(int spielerNummer, Color color) {
// TODO Auto-generated constructor stub
this.spielerNummer = spielerNummer;
this.setBackground(color);
lblSpielerNummer = new JLabel(""+spielerNummer);
lblSpielerNummer.setFont(new Font("Lucida Grande", Font.BOLD, 15));
lblSpielerNummer.setForeground(Color.WHITE);
this.add(lblSpielerNummer);
this.setBounds(spielerNummer*30, 33, 20, 28); // need to fix here for adjustable player numbers
spielerGesamt++;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
int[] xKoordinateVonSpieler1 = {31, 131, 231, 331, 431, 531, 631, 731, 831, 931,
931, 931, 931, 931, 931, 931, 931, 931, 931,
831, 731, 631, 531, 431, 331, 231, 131, 31,
31, 31, 31, 31, 31, 31, 31, 31};
int[] yKoordinateVonSpieler1 = {33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
133, 233, 333, 433, 533, 633, 733, 833,
833, 833, 833, 833, 833, 833, 833, 833, 833,
733, 633, 533, 433, 333, 233, 133,};
int[] xKoordinateVonSpieler2 = {61, 191, 291, 361, 461, 561, 661, 761, 861, 961,
961, 961, 961, 961, 961, 961, 961, 961, 961,
861, 761, 661, 561, 461, 361, 261, 161, 61,
61, 61, 61, 61, 61, 61, 61, 61};
int[] yKoordinateVonSpieler2 = {33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
133, 233, 333, 433, 533, 633, 733, 833,
833, 833, 833, 833, 833, 833, 833, 833, 833,
733, 633, 533, 433, 333, 233, 133,};
public void bewegen(int augenzahlKomplett) {
if(aktuelleFeldNummer + augenzahlKomplett > 32) {
einzahlenAufsKonto(200);
}
int zielFeld = (aktuelleFeldNummer + augenzahlKomplett) % 20;
aktuelleFeldNummer = zielFeld;
if(Hauptspiel.amZug == 0) {
this.setLocation(xKoordinateVonSpieler1[zielFeld], yKoordinateVonSpieler1[zielFeld]);
} else {
this.setLocation(xKoordinateVonSpieler2[zielFeld], yKoordinateVonSpieler2[zielFeld]);
}
if(ledger.containsKey(this.getAktuelleFeldNummer())) {
Hauptspiel.infoFeld.setText("Dieses Eigentum gehört "+ledger.get(this.getAktuelleFeldNummer()));
}
//ledger.put(this.getAktuelleFeldNummer(), this.getSpielerNummer());
}
// by comparing player's coordinates according to the board, we will get it's
// current square number
// currently unused, found a better way
public int getAktuelleFeldNummerDurchKoordinaten() {
int x = this.getX();
int y = this.getY();
if(x < 100) {
if(y < 100) {
return 0;
} else if(y > 100 && y < 200) {
return 33;
} else if(y > 200 && y < 300) {
return 32;
} else if(y > 300 && y < 400) {
return 31;
} else if(y > 400 && y < 500) {
return 30;
} else if(y > 500 && y < 600) {
return 29;
} else if(y > 600 && y < 700) {
return 28;
} else if(y > 700 && y < 800) {
return 27;
} else if(y > 800 && y < 900) {
return 26;
} else {
return 25;
}
} else if(x > 100 && x < 200) {
if(y < 100) {
return 1;
} else {
return 25;
}
} else if(x > 200 && x < 300) {
if(y < 100) {
return 2;
} else {
return 24;
}
} else if(x > 300 && x < 400) {
if(y < 100) {
return 3;
} else {
return 23;
}
}else if(x > 400 && x < 500) {
if(y < 100) {
return 4;
} else {
return 22;
}
}else if(x > 500 && x < 600) {
if(y < 100) {
return 5;
} else {
return 21;
}
}else if(x > 600 && x < 700) {
if(y < 100) {
return 6;
} else {
return 20;
}
}else if(x > 700 && x < 800) {
if(y < 100) {
return 7;
} else {
return 19;
}
}else if(x > 800 && x < 900) {
if(y < 100) {
return 8;
} else {
return 18;
}
}else {
if(y < 100) {
return 9;
} else if(y > 100 && y < 200) {
return 10;
} else if(y > 200 && y < 300) {
return 11;
} else if(y > 300 && y < 400) {
return 12;
} else if(y > 400 && y < 500) {
return 13;
} else if(y > 500 && y < 600) {
return 14;
} else if(y > 600 && y < 700) {
return 15;
} else if(y > 700 && y < 800) {
return 16;
} else {
return 17;
}
}
}
}
Zuletzt bearbeitet: