Programmieren eines Bots für Zahlen-Brettspiel

bluetrix

Mitglied
Hallo liebe Community,
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

Der funktionierende Code bisher:
Java:
public class test4 extends Primspieler {
    public String getPlayerName() {
        return "Strat4"; // Hier steht Ihr Name!
    }
   
    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;
    }
}

Weiß nicht ob es hilft aber der Versuch vorrauszuschauen:
Gibt mir einen out of Bounds Error bei jedem Zug mit einer anderen Index Zahl (hier 2 auszüge):

Exception in thread "Thread-31" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
at test6.createBoard(test6.java:23)
at test6.auswahl(test6.java:57)

Exception in thread "Thread-33" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at test6.createBoard(test6.java:23)
at test6.auswahl(test6.java:57)


Java:
public class test6 extends Primspieler {
    public String getPlayerName() {
        return "Strat5"; // Hier steht Ihr Name!
    }
   
    public int opponentGain(int ausgewaehlteZahl, int[] zahlen) {
        int Gain = 0;
        for (int i = 0; i <= zahlen.length-1; i++) {
            if (ausgewaehlteZahl > zahlen[i] && ausgewaehlteZahl % zahlen[i] == 0)
                Gain += zahlen[i];
        }
        return Gain;
    }
   
    public int[] createBoard(int[] zahlen) {
        int[] newBoard = new int[zahlen.length - 1];
        int index = vorauswahl(zahlen);
        for (int i = 0, j = 0; i < zahlen.length; i++) {
            if (i != index) {
                newBoard[j++] = zahlen[i];          
            }
        }
        return newBoard;
    }
   
    public int myGain(int ausgewaehlteZahl, int[] zahlen) {
        if(opponentGain(ausgewaehlteZahl,zahlen)==0) {
            int myGain = ausgewaehlteZahl - (int) Math.ceil(ausgewaehlteZahl/2);
            return myGain;
           
        }else
        {
            int myGain = ausgewaehlteZahl - opponentGain(ausgewaehlteZahl, zahlen);
            return myGain;
        }
       
    }
    public int vorauswahl(int[] zahlen) {
        int ausgewaehlteZahl = zahlen[0];
        int myGain = myGain( ausgewaehlteZahl, zahlen);
        for (int i = 0; i < zahlen.length; i++) {
            if (myGain(zahlen[i],zahlen) > myGain) {
                ausgewaehlteZahl = zahlen[i];
                myGain = myGain( ausgewaehlteZahl, zahlen);
            }
        }
        return ausgewaehlteZahl;
    }
   
    public int auswahl(int[] zahlen) {
        int ausgewaehlteZahl = zahlen[0];
        int myGain = myGain( ausgewaehlteZahl, zahlen);
       
        int[] newBoard = createBoard(zahlen);
       
        int oppPick = newBoard[0];
        int oppGainAfter = myGain( oppPick, newBoard);
        for (int i = 0; i < newBoard.length; i++) {
            if (myGain(newBoard[i],newBoard) > oppGainAfter) {
                oppPick = zahlen[i];
                oppGainAfter = myGain( oppPick, newBoard);
            }
        }
       
        for (int i = 0; i < zahlen.length; i++) {
            if (myGain(zahlen[i],zahlen) > myGain && oppGainAfter < myGain) {
                ausgewaehlteZahl = zahlen[i];
                myGain = myGain( ausgewaehlteZahl, zahlen);
            }
        }
       
       
       
       
        return ausgewaehlteZahl;
    }
}
 

Oneixee5

Top Contributor
Naja, der Fehler in 'test6.createBoard' ist ja ganz offensichtlich. Wie lang ist das Array zahlen und wie lang das Array newBoard und über welche Länge iterierst du? Wozu dient j? Warum hältst du dich nicht an die Java-Code-Conventions? Beantworte dir die Fragen am besten selbst.
 

bluetrix

Mitglied
Naja, der Fehler in 'test6.createBoard' ist ja ganz offensichtlich. Wie lang ist das Array zahlen und wie lang das Array newBoard und über welche Länge iterierst du? Wozu dient j? Warum hältst du dich nicht an die Java-Code-Conventions? Beantworte dir die Fragen am besten selbst.
Ich bin ganz ehrlich wirklich weiter geholfen hat mir die antwort jetzt nicht Array zahlen ist nehmen wir mal an 50 dann ist newBoard 49 lang. was du mit über welche länge iterierst du meinst weiß ich nicht und j hat schon seinen zweck ich weiß dass laut code convention eine for schleife nur mit i sein sollte das funktioniert hier aber nicht weil j nur erhöht wird wenn if zutrifft i aber immer wenn die for schleife ausgeführt wird

So offensichtlich ist der Fehler und wie ich ihn behebe leider nicht sitze da schon seid stunden dran und komme nicht weiter
 
Zuletzt bearbeitet:

mihe7

Top Contributor
vorauswahl() liefert eine Zahl auf dem Spielfeld, die Du in createBoard mit dem Array-Index vergleichst. Soll das so sein?
 

Blut1Bart

Bekanntes Mitglied
Geht das nur mir so, liegt es an später Stunde, oder sind die Spielregeln unverständlich? :D (Oder etwa doch zu tief ins Glas geschaut 🤣 )
 

bluetrix

Mitglied
Habe jetzt nach langem Debuggen und rumprobieren eine Lösung gefunden total verständlich dass ihr es nicht wirklich versteht ist schwer wenn man die regeln und alles andere nicht versteht stehe jetzt aber vor folgendem problem für dass ich keine richtig funktionierende Lösung finde ich will ein array ("arr1) duplizieren in ein Array ("arr3") aber ohne die werte die auch in array2 ("arr2") sind quasi habe ich Arr1 = {1,2,3,4} und Arr2 = {2,4} Array3 soll dann so aussehen Arr3 = {1,3}. Da komme ich irgendwie auf keine gescheite Lösung
 

bluetrix

Mitglied
Aber der Text "Mein Spieler/Bot:" ist auch so lang. :rolleyes:
Sorry 🙃 hab versuch es möglichst gut zu beschreiben danke übrigens für deine Mühe und auch an @mihe7 Ich versuche euch auch garnicht zu erklären wie ich es ans laufen bekommen habe. Weiß ich selber nicht so ganz hat aufjedenfall einige Stunden Debugging gebraucht (Man muss dazu sagen dass erste mal das ich debugging benutzt habe)😂
 

mihe7

Top Contributor
stehe jetzt aber vor folgendem problem für dass ich keine richtig funktionierende Lösung finde ich will ein array ("arr1) duplizieren in ein Array ("arr3") aber ohne die werte die auch in array2 ("arr2") sind quasi habe ich Arr1 = {1,2,3,4} und Arr2 = {2,4} Array3 soll dann so aussehen Arr3 = {1,3}. Da komme ich irgendwie auf keine gescheite Lösung
Methode zu Fuß könne z. B. so aussehen:
Java:
static int[] removeAll(int[] source, int[] values) {
    int[] tmp = new int[arr1.length];
    int size = 0;
    for (int value : source) {
         if (!contains(values, value)) {
             tmp[size] = value;
             size++;
         }
    }
    return trimmed(tmp, size);
}

static boolean contains(int[] arr, int value) {
    for (int current : arr) {
        if (current == value) {
            return true;
        }
    }
    return false;
}

static int[] trimmed(int[] arr, int len) {
    int[] result = new int[len];
    System.arraycopy(arr, 0, result, 0, len);
    return result;
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
Ruvok Programmieren eines Einheiten Konverters Java Basics - Anfänger-Themen 1
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
B Erste Schritte Programmieren eines Web Crawlers mit Java Java Basics - Anfänger-Themen 8
J Methoden Hilfe bei Programmieren eines Geldautomat en Java Basics - Anfänger-Themen 18
E Problem beim Programmieren eines Kartenspiels Java Basics - Anfänger-Themen 3
K Brauche Hilfe beim Programmieren eines Funktionsplotters Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
V Zeichenkette programmieren Java Basics - Anfänger-Themen 20
O Fenster programmieren Java Basics - Anfänger-Themen 2
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
A Programmieren lernen Java Basics - Anfänger-Themen 28
F ArrayListe manuell programmieren? Java Basics - Anfänger-Themen 24
X Erste Schritte Einstieg ins Programmieren Java Java Basics - Anfänger-Themen 2
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
Ellachen55 Weihnachtsbaum in Eclipse programmieren Java Basics - Anfänger-Themen 6
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
S Dreieckssignal programmieren Java Basics - Anfänger-Themen 5
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
M Spiel programmieren Java Basics - Anfänger-Themen 16
A Fenster programmieren Java Basics - Anfänger-Themen 1
V OOP Kassensystem objektorientiert programmieren Java Basics - Anfänger-Themen 15
A Erste Schritte DoodleJump programmieren: Kollisionsabfrage Java Basics - Anfänger-Themen 4
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
G Rekursives Programmieren --> harmonische Reihe Java Basics - Anfänger-Themen 3
A Endlich anfangen mit Programmieren ! Java Basics - Anfänger-Themen 8
L Karawane programmieren Java Basics - Anfänger-Themen 0
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
steven789hjk543 Erste Schritte java programmieren/ Schritt für Schritt Java Basics - Anfänger-Themen 14
I Spiel programmieren. Java Basics - Anfänger-Themen 16
H [Studium] Mäxchenspiel programmieren Java Basics - Anfänger-Themen 10
C BlueJ Zahlenschloss programmieren Java Basics - Anfänger-Themen 5
steven789hjk543 mit dem Smartphone java programmieren Java Basics - Anfänger-Themen 44
F Okjektorientiert programmieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben