ExceptionOutOfBrain
Grünschnabel
Ich brauche eure Hilfe bei der Programmierung eines Spielers/Bots für ein Spiel welches folgender maßen funktioniert,
Das Spiel:
Das Spiel ist ein 2 Personen spiel mit beliebiger Spielfeldgröße, zwei Spieler wählen aus einem Spielfeld, das von 1 bis zu seiner wählbaren Größe durchnummeriert ist, in jedem Spielzug eine Zahl auswählen.
Der Spieler, der am Zug ist, erhält den Wert seiner gewählten Zahl als Score und der Gegner die Summe der noch auf dem Spielfeld verbliebenen Teiler dieser Zahl. Die Zahl die gewählt wurde sowie alle noch verfügbaren Teiler werden nach dem Zug vom Spielfeld entfernt
Wenn jedoch eine Zahl keine Teiler mehr auf dem Spielfeld hat bekommt der Spieler der diese Zahl wählt nur die aufgerundete hälfte der gewählten Zahl bei
121 dann zum Beispiel nur 61.
Mein Spieler/Bot:
Bisher bin ich bei dem funktionierendem Stand dass der Spieler die für ihn Optimalste Zahl auswählt dass heißt er Geht durch das Spielfeld und schaut was bei der Aktuellen Zahl sein Gewinn ist der Gewinn besteht aus dem was er bekommt minus die den Score den der Gegner bei diesem Zug bekommen würde.
Nun würde ich aber gerne etwas vorausschauen, also Modelliere ich beim Planen des Zuges ein neues Spielfeld ohne die Zahl die ich plane zu wählen und lasse die Strategie nochmals entscheiden welche Zahl ich bei dem neu Modelliertem Feld nehmen würde, denn durch meinen Zug könnte sich einen für den Gegner viel besserer Zug eröffnen (Bsp: Die 30,15,2,1 sind auf dem Spielfeld ich nehme die 5 habe einen gewinn von 14 aber der gegner kann nun die 30 nehmen und hat einen Gewinn von 28 weil ich die 15 einen Teiler weggenommen habe) Wenn also durch meinen Zug ein noch größerer Gewinn für den Gegner im nächsten Zug entsteht nehme ich diese Zahl nicht. Ich habe mich schon an diesem Ansatz versuch stoße jedoch nur auf Fehler, daher wende ich mich an euch. Wenn ihr Ideen habt wie man das Programmiertechnisch umsetzten kann oder eine noch Bessere Strategie auf Lager habt freue ich mich über eure Antwort
Meine Frage: Wie kann ich dieses neue Spielfeld modellieren bei dem ich die Zahl die ich wählen möchte und ihre Teiler nicht mit drin habe ? Wäre über konkrete Hilfe sehr Dankbar da ich alles nach meinem Wissen versucht habe mir Stundenlang meinen Code angesehen habe aber nur auf Fehler stoße
Der funktionierende Code bisher:
Java:
Das Spiel:
Das Spiel ist ein 2 Personen spiel mit beliebiger Spielfeldgröße, zwei Spieler wählen aus einem Spielfeld, das von 1 bis zu seiner wählbaren Größe durchnummeriert ist, in jedem Spielzug eine Zahl auswählen.
Der Spieler, der am Zug ist, erhält den Wert seiner gewählten Zahl als Score und der Gegner die Summe der noch auf dem Spielfeld verbliebenen Teiler dieser Zahl. Die Zahl die gewählt wurde sowie alle noch verfügbaren Teiler werden nach dem Zug vom Spielfeld entfernt
Wenn jedoch eine Zahl keine Teiler mehr auf dem Spielfeld hat bekommt der Spieler der diese Zahl wählt nur die aufgerundete hälfte der gewählten Zahl bei
121 dann zum Beispiel nur 61.
Mein Spieler/Bot:
Bisher bin ich bei dem funktionierendem Stand dass der Spieler die für ihn Optimalste Zahl auswählt dass heißt er Geht durch das Spielfeld und schaut was bei der Aktuellen Zahl sein Gewinn ist der Gewinn besteht aus dem was er bekommt minus die den Score den der Gegner bei diesem Zug bekommen würde.
Nun würde ich aber gerne etwas vorausschauen, also Modelliere ich beim Planen des Zuges ein neues Spielfeld ohne die Zahl die ich plane zu wählen und lasse die Strategie nochmals entscheiden welche Zahl ich bei dem neu Modelliertem Feld nehmen würde, denn durch meinen Zug könnte sich einen für den Gegner viel besserer Zug eröffnen (Bsp: Die 30,15,2,1 sind auf dem Spielfeld ich nehme die 5 habe einen gewinn von 14 aber der gegner kann nun die 30 nehmen und hat einen Gewinn von 28 weil ich die 15 einen Teiler weggenommen habe) Wenn also durch meinen Zug ein noch größerer Gewinn für den Gegner im nächsten Zug entsteht nehme ich diese Zahl nicht. Ich habe mich schon an diesem Ansatz versuch stoße jedoch nur auf Fehler, daher wende ich mich an euch. Wenn ihr Ideen habt wie man das Programmiertechnisch umsetzten kann oder eine noch Bessere Strategie auf Lager habt freue ich mich über eure Antwort
Meine Frage: Wie kann ich dieses neue Spielfeld modellieren bei dem ich die Zahl die ich wählen möchte und ihre Teiler nicht mit drin habe ? Wäre über konkrete Hilfe sehr Dankbar da ich alles nach meinem Wissen versucht habe mir Stundenlang meinen Code angesehen habe aber nur auf Fehler stoße
Der funktionierende Code bisher:
Java:
Code:
public class test4 extends Primspieler {
public String getPlayerName() {
return "Strat4"; // Hier steht Ihr Name!
}
public long getStudentNumber() {
return 202121663;
}
public int opponentGain(int pick, int[] availiableNumbers) {
int Gain = 0;
for (int i = 0; i <= availiableNumbers.length-1; i++) {
if (pick > availiableNumbers[i] && pick % availiableNumbers[i] == 0)
Gain += availiableNumbers[i];
}
return Gain;
}
public int myGain(int pick, int[] availiableNumbers) {
if(opponentGain(pick,availiableNumbers)==0) {
int myGain = pick - (int) Math.ceil(pick/2);
return myGain;
}else
{
int myGain = pick - opponentGain(pick, availiableNumbers);
return myGain;
}
}
public int auswahl(int[] availiableNumbers) {
int pick = availiableNumbers[0];
int myGain = myGain( pick, availiableNumbers);
for (int i = 0; i < availiableNumbers.length; i++) {
if (myGain(availiableNumbers[i],availiableNumbers) > myGain) {
pick = availiableNumbers[i];
myGain = myGain( pick, availiableNumbers);
}
}
return pick;
}
}