Wie kann ich Tic Tac Toe ein Bot machen mit der Sprache C++ Arrays?

1 Antwort

Du könntest es Bruteforcen.

Hab das mal in JS gecoded, sollte nicht schwer sein, das zu C umzuwandeln. Hab es kommentiert, damit du die Schritte besser verstehst:

//Eine Funktion, die ein int-Array (array), einen Index (i), und den aktuellen Spieler (hier als boolean)(p) entgegennimmt
function bruteforce(array, i, p) {
  //Erstelle eine Liste mit Indexen aller freien Felder
  const freefields = array.reduce((a,b,index)=> {if (!b) a.push(index); return a;},[]); 
 
  //Falls Spiel zuende:
  //Gebe ein Tupel zurück, dass Gewinn/Unentschieden/Verlust (-1/0/1) und eine Liste der Schritte (vorerst nur i) enthält.
  if (checkwin(array)) return {win: p?-1:1, steps:[i]}; 
  else if (freefields.length==0) return {win: 0, steps:[i]};
  

  //Für jedes freie Feld:
  //Erstelle Kopie des Arrays
  //Besetze das freie Feld in der Kopie entsprechend mit x oder o, jenachdem wer dran ist
  //Rufe rekursiv die Bruteforce-Funktion mit diesem geänderten Array auf.
    //Ändere im Funktionsaufruf auch den aktuellen Spieler.
  //Gib das beste oder schlechteste Ergebnis, jenachdem welcher Spieler dran ist, zurück.
    //(Wenn der Gegner dran ist, dann soll der Algorithmus ja etwas finden, wo dieser verliert, nicht etwas wo dieser gewinnt)
  const best = freefields.map(index => {
    const arrayClone = [...array];
    arrayClone[index] = p?"x":"o";
    return bruteforce(arrayClone, index, !p);
  }).sort((a,b)=> p?a.win<b.win:a.win>b.win)[0];

  //Füge den aktuellen Schritt zur Liste der Schritte im Tupel hinzu
  if (i>-1) best.steps.push(i);
  //Gib das Tupel zurück
  return best;
}

Hier meine Beispielanwendung:

Mit Code: https://jsfiddle.net/xnbg6vcz/4/

Vollbild-Ansicht zum Spielen: https://jsfiddle.net/xnbg6vcz/4/show

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf