[+] A2 P1.3 make_move
This commit is contained in:
@@ -25,6 +25,8 @@ from typing import Optional
|
|||||||
|
|
||||||
import a2_game_tree
|
import a2_game_tree
|
||||||
import a2_minichess
|
import a2_minichess
|
||||||
|
from a2_game_tree import GameTree
|
||||||
|
from a2_minichess import MinichessGame
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@@ -97,7 +99,57 @@ class RandomTreePlayer(a2_minichess.Player):
|
|||||||
|
|
||||||
Preconditions:
|
Preconditions:
|
||||||
- There is at least one valid move for the given game
|
- There is at least one valid move for the given game
|
||||||
|
|
||||||
|
>>> t = GameTree()
|
||||||
|
>>> t.insert_move_sequence(['c2d3', 'd4d3', 'd2c3'])
|
||||||
|
>>> t.insert_move_sequence(['c2d3', 'd4d3', 'b1d3'])
|
||||||
|
>>> g = MinichessGame()
|
||||||
|
>>> p = RandomTreePlayer(t)
|
||||||
|
>>> p.make_move(g, None)
|
||||||
|
'c2d3'
|
||||||
|
>>> p._game_tree.move
|
||||||
|
'c2d3'
|
||||||
|
>>> len(p._game_tree.get_subtrees())
|
||||||
|
1
|
||||||
|
>>> g.make_move('c2d3')
|
||||||
|
>>> g.make_move('d4d3')
|
||||||
|
>>> m = p.make_move(g, 'd4d3')
|
||||||
|
>>> m in ['d2c3', 'b1d3']
|
||||||
|
True
|
||||||
|
>>> p._game_tree.move == m
|
||||||
|
True
|
||||||
|
>>> len(p._game_tree.get_subtrees())
|
||||||
|
0
|
||||||
|
>>> g.make_move(m)
|
||||||
|
>>> m = random.choice(g.get_valid_moves())
|
||||||
|
>>> g.make_move(m)
|
||||||
|
>>> m = p.make_move(g, m)
|
||||||
|
>>> m in g.get_valid_moves()
|
||||||
|
True
|
||||||
|
>>> p._game_tree is None
|
||||||
|
True
|
||||||
"""
|
"""
|
||||||
|
# 1. First it updates its game tree to the subtree corresponding to the move made by its opponent.
|
||||||
|
# If no subtree is found, its game tree is set to None.
|
||||||
|
if previous_move:
|
||||||
|
self._game_tree = self._game_tree.find_subtree_by_move(previous_move)
|
||||||
|
|
||||||
|
# 2. The player picks its move based on the following conditions:
|
||||||
|
|
||||||
|
# If its game tree is None or is just a leaf with no subtrees, it picks a random move from all
|
||||||
|
# valid moves from the game, like RandomPlayer.
|
||||||
|
if self._game_tree is None or len(self._game_tree.get_subtrees()) == 0:
|
||||||
|
move = random.choice(game.get_valid_moves())
|
||||||
|
|
||||||
|
# Otherwise, it picks a random move from among its game tree’s subtrees.
|
||||||
|
else:
|
||||||
|
move = random.choice(self._game_tree.get_subtrees()).move
|
||||||
|
|
||||||
|
# Update tree
|
||||||
|
if self._game_tree:
|
||||||
|
self._game_tree = self._game_tree.find_subtree_by_move(move)
|
||||||
|
|
||||||
|
return move
|
||||||
|
|
||||||
|
|
||||||
def part1_runner(games_file: str, n: int, black_random: bool) -> None:
|
def part1_runner(games_file: str, n: int, black_random: bool) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user