我试图写一个屏风式四子棋游戏极小的功能,这是我未完成的代码极小哈斯克尔
minimax:: RT Board ->Int
minimax (Tree board subtrees) = case subtrees of
[] >evaluate board (get_turn board)
_ ->case get_turn board of
Player_X ->maximum (next_socres)
Player_O ->minimum (next_socres)
where next_socres = map evaluate (map get_board subtrees)
--get the node from sub trees
get_board:: RT Board -> Board
get_board (Tree board subtrees) = board
--evaluate moves(not finished)
evaluate :: Board -> Player -> Int
evaluate board me'
|[me,me,me,Blank] `isInfixOf_e` all_stone_lines = 10
|[opp,opp,opp,Blank] `isInfixOf_e` all_stone_lines = -10
|otherwise = 0
where
me = get_stone_of me'
opp = opponent' me
all_stone_lines = combine_list stones_from_rows (combine_list stones_from_cols (combine_list stones_from_left_dias stones_from_right_dias))
stones_from_rows = map (get_from_row board) [1..board_size]
stones_from_cols = map (get_from_column board) [1..board_size]
stones_from_left_dias = map (get_from_left_diagonal board) [-(board_size-1)..(board_size-1)]
stones_from_right_dias = map (get_from_right_diagonal board) [2..(2*board_size)]
我想用地图它计算整棵树前,每个子树来评价,但我不不知道如何在这里使用map ...而且我意识到如果我的代码编译了,它不会是递归。任何人都可以教我如何做?
我会尽量让minimax成为递归函数。即超过极小极小的地图,而不是评估。 –