2014-04-22 42 views
0

我想在我的鮑魚遊戲中實現Minimax,但我不知道該怎麼做。 準確地說,我不知道算法何時需要最大或最小的玩家。 如果我理解了邏輯,我需要分析玩家並最大化AI?Java極小鮑魚執行

這是維基百科的僞代碼

function minimax(node, depth, maximizingPlayer) 
    if depth = 0 or node is a terminal node 
     return the heuristic value of node 
    if maximizingPlayer 
     bestValue := -∞ 
     for each child of node 
      val := minimax(child, depth - 1, FALSE)) 
      bestValue := max(bestValue, val); 
     return bestValue 
    else 
     bestValue := +∞ 
     for each child of node 
      val := minimax(child, depth - 1, TRUE)) 
      bestValue := min(bestValue, val); 
     return bestValue 

(* Initial call for maximizing player *) 
minimax(origin, depth, TRUE) 

,我的實

private Integer minimax(Board board, Integer depth, Color current, Boolean maximizingPlayer) { 
    Integer bestValue; 
    if (0 == depth) 
     return ((current == selfColor) ? 1 : -1) * this.evaluateBoard(board, current); 

    Integer val; 
    if (maximizingPlayer) { 
     bestValue = -INF; 
     for (Move m : board.getPossibleMoves(current)) { 
      board.apply(m); 
      val = minimax(board, depth - 1, current, Boolean.FALSE); 
      bestValue = Math.max(bestValue, val); 
      board.revert(m); 
     } 
     return bestValue; 
    } else { 
     bestValue = INF; 
     for (Move m : board.getPossibleMoves(current)) { 
      board.apply(m); 
      val = minimax(board, depth - 1, current, Boolean.TRUE); 
      bestValue = Math.min(bestValue, val); 
      board.revert(m); 
     } 
     return bestValue; 
    } 
} 

我的評價功能

private Integer evaluateBoard(Board board, Color player) { 
    return board.ballsCount(player) - board.ballsCount(player.other()); 
} 

回答

1

這取決於你的評價函數;在你的情況下,假設目標是在棋盤上放置比對手更多的球,那麼玩家將最大化AI將會最小化的&。

0

2人遊戲中的常用方法是始終最大化,但是在將值傳遞給父級時,會取消值 。