Hy ... hab hier ein Problem mit nem Kalaha - Spiel , aufgrund von zu wenig kentnissen.
Die grafische Oberfläche hab ich fertig, aber ich weiß nicht wie ich die Spielregeln und den CPU-Gegner implementieren soll.
Hier erstmal die Regeln zum Spiel(Wer die schon kennt kann sie ja überlesen):
Kalaha
Spielfeld
Die Grundform des Brettes besteht aus 2 Reihen von 6 Spielmulden (für jeden Spieler eine Reihe) und - am Ende der beiden Reihen - 2 Gewinnmulden(Kalaha) zum Ablegen der Bohnen, die erobert worden sind.
Spielverlauf
Jede der zwölf Mulden wird mit vier Bohnen gefüllt. Die Kalaha( bei mir sind das die Gewinnmulden ) bleiben leer, dort werden später die eroberten Bohnen abgelegt. Ein Spielzug besteht darin, alle Bohnen einer eigenen Spielfeldmulde aufzunehmen und entgegen dem Uhrzeigersinn einzeln auf die anderen Spielfeldmulden zu verteilen, eigene und gegnerische. Die Kalaha werden ausgelassen. Danach ist der Mitspieler an der Reihe.
Erobert werden können gegnerische Steine wenn
* die letzte Bohne des Spielzuges in eine gefüllte gegnerische Mulde fällt, in der sich nur eine oder zwei Bohnen befinden. Diese Mulde wird also auf zwei oder drei Bohnen aufgefüllt. Die eroberten Bohnen werden in der eigenen Kalaha abgelegt.
* liegen in der davorliegenden gegnerischen Mulde auch nur zwei oder drei Bohnen, dann darf diese Mulde ebenfalls geleert werden. Anschließend ist der Mitspieler am Zug.
Als Besonderheit ist zu beachten: enthält die ausgewählte Mulde mehr als zwölf Bohnen, so dass ein vollständiger Umlauf möglich ist, wird bei der zweiten Runde die soeben geleerte übersprungen.
Spielende
Hat ein Spieler keine Bohnen mehr in seinen Mulden, ist der Mitspieler verpflichtet, ihm Bohnen herüberzuspielen. Das Spiel endet, wenn ein Spieler keine Bohnen mehr in seinen Mulden hat. Die in den Mulden liegenden Bohnen gehören dem Spieler, auf dessen Seite sie sich befinden.
Spielende
Hat ein Spieler keine Bohnen mehr in seinen Mulden, ist der Mitspieler verpflichtet, ihm Bohnen herüberzuspielen. Das Spiel endet, wenn ein Spieler keine Bohnen mehr in seinen Mulden hat. Die in den Mulden liegenden Bohnen gehören dem Spieler, auf dessen Seite sie sich befinden.
Wer mal ne runde spielen will kann sich mal dieses Kalaha spiel ansehen :Kalahaspiel zum Ausprobieren
Hier jetzt mein Quelltext:
Kalaha.java
Graf.java
Kann mir bitte jemand erklären wie ich die Regeln und einen CPU-Gegner implementieren?
Ich hatte dieses Spiel schonmal hier im Forum rein gestellt , mir wurde auch geholfen, aber ich hab den Quelltext später nicht mehr verstanden und konnte deshalb nicht weiter schreiben.
Nun bitte ich die jenigen die mir Antworten ; die schritte ausführlich zu dokumentieren.
Ich bedank mich schon mal im voraus.
Die grafische Oberfläche hab ich fertig, aber ich weiß nicht wie ich die Spielregeln und den CPU-Gegner implementieren soll.
Hier erstmal die Regeln zum Spiel(Wer die schon kennt kann sie ja überlesen):
Kalaha
Spielfeld
Die Grundform des Brettes besteht aus 2 Reihen von 6 Spielmulden (für jeden Spieler eine Reihe) und - am Ende der beiden Reihen - 2 Gewinnmulden(Kalaha) zum Ablegen der Bohnen, die erobert worden sind.
Spielverlauf
Jede der zwölf Mulden wird mit vier Bohnen gefüllt. Die Kalaha( bei mir sind das die Gewinnmulden ) bleiben leer, dort werden später die eroberten Bohnen abgelegt. Ein Spielzug besteht darin, alle Bohnen einer eigenen Spielfeldmulde aufzunehmen und entgegen dem Uhrzeigersinn einzeln auf die anderen Spielfeldmulden zu verteilen, eigene und gegnerische. Die Kalaha werden ausgelassen. Danach ist der Mitspieler an der Reihe.
Erobert werden können gegnerische Steine wenn
* die letzte Bohne des Spielzuges in eine gefüllte gegnerische Mulde fällt, in der sich nur eine oder zwei Bohnen befinden. Diese Mulde wird also auf zwei oder drei Bohnen aufgefüllt. Die eroberten Bohnen werden in der eigenen Kalaha abgelegt.
* liegen in der davorliegenden gegnerischen Mulde auch nur zwei oder drei Bohnen, dann darf diese Mulde ebenfalls geleert werden. Anschließend ist der Mitspieler am Zug.
Als Besonderheit ist zu beachten: enthält die ausgewählte Mulde mehr als zwölf Bohnen, so dass ein vollständiger Umlauf möglich ist, wird bei der zweiten Runde die soeben geleerte übersprungen.
Spielende
Hat ein Spieler keine Bohnen mehr in seinen Mulden, ist der Mitspieler verpflichtet, ihm Bohnen herüberzuspielen. Das Spiel endet, wenn ein Spieler keine Bohnen mehr in seinen Mulden hat. Die in den Mulden liegenden Bohnen gehören dem Spieler, auf dessen Seite sie sich befinden.
Spielende
Hat ein Spieler keine Bohnen mehr in seinen Mulden, ist der Mitspieler verpflichtet, ihm Bohnen herüberzuspielen. Das Spiel endet, wenn ein Spieler keine Bohnen mehr in seinen Mulden hat. Die in den Mulden liegenden Bohnen gehören dem Spieler, auf dessen Seite sie sich befinden.
Wer mal ne runde spielen will kann sich mal dieses Kalaha spiel ansehen :Kalahaspiel zum Ausprobieren
Hier jetzt mein Quelltext:
Kalaha.java
Code:
public class Kalaha
{
public static void main (String[]args)
{
Graf test = new Graf();
test.setSize(900,200);
test.setVisible(true);
}
}
Graf.java
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.reflect.*;
public class Graf extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 5520439391198523898L;
private JButton mulde1, mulde2, mulde3, mulde4, mulde5, mulde6;
private JButton sm1, sm2, sm3, sm4, sm5, sm6, spielermulde, cpumulde;
private JButton cm1, cm2, cm3, cm4, cm5, cm6;
private JButton start;
public Graf() {
// Spiel-Fenster
String title = "Kalaha";
setTitle(title);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container spielfeld = this.getContentPane();
spielfeld.setLayout(null);
// Aktions-Knoepfe fuer die Spieler-Mulden
start = new JButton("Start");
start.setBounds(780, 140, 100, 30);
start.addActionListener(this);
start.setBackground(Color.BLACK);
start.setForeground(Color.WHITE);
spielfeld.add(start);
mulde1 = new JButton("Mulde 1");
mulde1.setBounds(120, 100, 100, 30);
mulde1.addActionListener(this);
spielfeld.add(mulde1);
mulde2 = new JButton("Mulde 2");
mulde2.setBounds(230, 100, 100, 30);
mulde2.addActionListener(this);
spielfeld.add(mulde2);
mulde3 = new JButton("Mulde 3");
mulde3.setBounds(340, 100, 100, 30);
mulde3.addActionListener(this);
spielfeld.add(mulde3);
mulde4 = new JButton("Mulde 4");
mulde4.setBounds(450, 100, 100, 30);
mulde4.addActionListener(this);
spielfeld.add(mulde4);
mulde5 = new JButton("Mulde 5");
mulde5.setBounds(560, 100, 100, 30);
mulde5.addActionListener(this);
spielfeld.add(mulde5);
mulde6 = new JButton("Mulde 6");
mulde6.setBounds(670, 100, 100, 30);
mulde6.addActionListener(this);
spielfeld.add(mulde6);
// Spielermulden
sm1 = new JButton();
sm1.setBounds(120, 60, 100, 30);
sm1.addActionListener(this);
sm1.setBackground(Color.GREEN);
spielfeld.add(sm1);
sm2 = new JButton();
sm2.setBounds(230, 60, 100, 30);
sm2.addActionListener(this);
sm2.setBackground(Color.GREEN);
spielfeld.add(sm2);
sm3 = new JButton();
sm3.setBounds(340, 60, 100, 30);
sm3.addActionListener(this);
sm3.setBackground(Color.GREEN);
spielfeld.add(sm3);
sm4 = new JButton();
sm4.setBounds(450, 60, 100, 30);
sm4.addActionListener(this);
sm4.setBackground(Color.GREEN);
spielfeld.add(sm4);
sm5 = new JButton();
sm5.setBounds(560, 60, 100, 30);
sm5.addActionListener(this);
sm5.setBackground(Color.GREEN);
spielfeld.add(sm5);
sm6 = new JButton();
sm6.setBounds(670, 60, 100, 30);
sm6.addActionListener(this);
sm6.setBackground(Color.GREEN);
spielfeld.add(sm6);
// Computer-Mulden
cm6 = new JButton();
cm6.setBounds(120, 20, 100, 30);
cm6.addActionListener(this);
cm6.setBackground(Color.RED);
spielfeld.add(cm6);
cm5 = new JButton();
cm5.setBounds(230, 20, 100, 30);
cm5.addActionListener(this);
cm5.setBackground(Color.RED);
spielfeld.add(cm5);
cm4 = new JButton();
cm4.setBounds(340, 20, 100, 30);
cm4.addActionListener(this);
cm4.setBackground(Color.RED);
spielfeld.add(cm4);
cm3 = new JButton();
cm3.setBounds(450, 20, 100, 30);
cm3.addActionListener(this);
cm3.setBackground(Color.RED);
spielfeld.add(cm3);
cm2 = new JButton();
cm2.setBounds(560, 20, 100, 30);
cm2.addActionListener(this);
cm2.setBackground(Color.RED);
spielfeld.add(cm2);
cm1 = new JButton();
cm1.setBounds(670, 20, 100, 30);
cm1.addActionListener(this);
cm1.setBackground(Color.RED);
spielfeld.add(cm1);
// Gewinn-Mulden
cpumulde = new JButton();
cpumulde.setBounds(20, 20, 90, 70);
cpumulde.setBackground(Color.RED);
cpumulde.addActionListener(this);
spielfeld.add(cpumulde);
spielermulde = new JButton();
spielermulde.setBounds(780, 20, 90, 70);
spielermulde.setBackground(Color.GREEN);
spielermulde.addActionListener(this);
spielfeld.add(spielermulde);
}
// Methode um die Buttons zu initialisieren
public void resetVar(final int initwert) {
spielermulde.setText("0");
cpumulde.setText("0");
try {
Field[] fieldArray = getClass().getDeclaredFields();
for (int i = 0; i < fieldArray.length; i++) {
String fieldName = (fieldArray[i]).getName();
if ((fieldName.startsWith("sm") || fieldName.startsWith("cm"))
&& fieldName.length() == 3) {
((JButton) fieldArray[i].get(this)).setText("" + initwert);
}
}
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
public void actionPerformed(ActionEvent ereignis) {
Object objekt = ereignis.getSource();
if (objekt == start) {
resetVar(4);
}
}
}
Kann mir bitte jemand erklären wie ich die Regeln und einen CPU-Gegner implementieren?
Ich hatte dieses Spiel schonmal hier im Forum rein gestellt , mir wurde auch geholfen, aber ich hab den Quelltext später nicht mehr verstanden und konnte deshalb nicht weiter schreiben.
Nun bitte ich die jenigen die mir Antworten ; die schritte ausführlich zu dokumentieren.
Ich bedank mich schon mal im voraus.