Ich arbeite an einem Projekt, wo ich ein Stück Code für 4x4 Tic Tac Toe bekomme, aber meine eigene KI darin implementieren muss, die die vorinstallierte KI schlagen kann. Die 2 KI's sind einfach und zufällig. Random fügt zufällig nur Xs auf ein Quadrat ein und Simple Player startet vom obersten linken Quadrat und iteriert genau ein Quadrat. Um einen einfachen Spieler abzufangen, habe ich mein erstes O auf die erste Reihe gelegt und mache im Grunde eine vertikale Linie, bis es 4 in einer Reihe gibt. Zufälliger Spieler kann jedoch meine Linie abfangen, und danach setzt mein Computerspieler zufällig O's in leere Felder, um zu zeichnen. Dies funktioniert jedoch nicht richtig, da mein Player nicht mehr spielt, weil er nicht weiß, wohin er gehen soll. So würde ich schätzen, wenn jemand meine Konzepte korrigieren könnte.Ich mache meinen AI-Player in Tic Tac Toe
DIES IST NUR EIN TEIL MEINER CODE
package noughtsAndCrossesV3;
import ncErrors.outOfRangeError;
import java.util.ArrayList;
import java.util.Random;
public class MyCompPlayer extends GenericPlayer implements NCPlayer {
Random theGenerator;
public MyCompPlayer()
{
super(); // no further initialisation required
theGenerator = new Random();
}
// NCGrid is the grid the class that displays the grid and rules to win
@Override
public GridCoordinate getNextMove(NCGridV3 currentGrid) {
int Row;
int Col;
GridCoordinate theSquare = null;
int randomSelection;
ArrayList<GridCoordinate> freeSquares = new ArrayList<GridCoordinate>(); // array finding free squares
//iterates through row and column
for (Row = 0; (theSquare == null) && (Row < currentGrid.getGridRowDimension()); Row++){
for (Col = 0; (theSquare == null) && (Col < currentGrid.getGridColDimension()); Col++){
try{
//If last column is empty, then draw a row of O's downwards in a straight line.
if(currentGrid.getSquareStatus(Row,3)==NCGridV3.SquareStatus.EMPTY){
theSquare = new GridCoordinate(Row,3);
return theSquare;
}
//If there is a nought then randomize movement. This doesnt work yet.
else if(currentGrid.getSquareStatus(Row,3)==NCGridV3.SquareStatus.NOUGHT)
freeSquares.add(new GridCoordinate(Row, Col));
// adds free sqaures to array and plots coordinate there but doesnt work.
}
catch (outOfRangeError e)
{
}
}
}
randomSelection = theGenerator.nextInt(freeSquares.size());
return freeSquares.get(randomSelection);
}
}
Können Sie angeben, ob Sie nur diese beiden Arten von KI, die Sie beschreiben, schlagen möchten oder eine KI erstellen möchten, die (jede) Art von Spieler/KI schlagen kann? Du könntest das verwenden http://www.wikihow.com/Win-at-Tic-Tac-Toe –
Was meinst du "Das funktioniert jedoch nicht richtig, da mein Spieler nicht mehr an der Reihe ist, weil er es nicht weiß wo hin." ? Es gibt eine outOfRangeError-Ausnahme, die nicht behandelt wird, wird sie ausgelöst? Also, ist das Hausaufgaben? (sollte es als solches markieren.) – phtrivier