Ciao a tutti, sto cercando di implementare l'algoritmo min-max per il gioco del tris, però dvo aver commesso un errore che non riesco a trovare... perchè l'IA è abbastanza stupida![]()
spero davvero che mi possiate aiutare... mi serve per preparare un esame... e no riesco a saltarne fuori; non voglio che mi rifacciate il codice... ma piuttosto se mi potreste aiutarmi a individuare il problema
vi scrivo il codice dei due metodi interessati:
e richiamo il metodo in questo modocodice:private int EvalGameState(Model game, int point, Player player){ if (game.gameWin() && game.getWinner() == player){//se il vincitore sono io return point; } else if (model.gameWin() && game.getWinner() != player){ //il vincitore è il mio avversario return -point; } return 0; } private Move minimax(Move nodo, int depth, Player originalPlayer){ if (model.gameFinished() || depth ==9) { nodo.setRating(EvalGameState(model, 99999,originalPlayer)); return nodo; } Move a; ArrayList<Move> moves = genMoves(model); //genera l'elenco delle mosse possibili if (model.getTurn() != originalPlayer){ //tocca al mio avversario a = new Move(); //mossa vuota a.setRating(99999); for (int i = 0; i<moves.size(); i++){ model.setMove(moves.get(i)); //gioco la mossa Move esplora = minimax(moves.get(i), depth-1, originalPlayer); if (a.getRating() > esplora.getRating()) a = esplora; model.unSetMove(moves.get(i)); //tolgo la mossa } } else {//tocca a me a = new Move(); a.setRating(-99999); for (int i = 0; i<moves.size(); i++){ model.setMove(moves.get(i)); Move esplora = minimax(moves.get(i), depth-1, originalPlayer); if (a.getRating() < esplora.getRating()) a = esplora; model.unSetMove(moves.get(i)); } } return a; }
ciao e grazie a tutti!codice:bestMove = minimax(new Move(), 0, model.getTurn());

Rispondi quotando