Wie kann ich Tic Tac Toe ein Bot machen mit der Sprache C++ Arrays?
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Programmiersprache
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