Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    algoritmo Min Max e tic tac toe: non funziona correttamente

    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:

    codice:
    	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;
    	}
    e richiamo il metodo in questo modo
    codice:
    bestMove = minimax(new Move(), 0, model.getTurn());
    ciao e grazie a tutti!

  2. #2
    mi è stato segnalato un errore che ho corretto, ma l'IA rimane comunque troppo stupida...
    deve esserci un errore di fondo che non riesco a trovare :-(

    era
    codice:
    minimax(moves.get(i), depth-1, originalPlayer);
    ora è
    codice:
    minimax(moves.get(i), depth+1, originalPlayer);

    ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.