generated from mwc/lab_tic_tac_toe
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from nim.game_stub import NimGameStub
|
|
from strategy.lookahead_strategy import LookaheadStrategy
|
|
|
|
class HumanNimPlayer:
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.game = NimGameStub()
|
|
|
|
def choose_action(self, state):
|
|
actions = self.game.get_actions(state)
|
|
for i, action in enumerate(actions):
|
|
row, lines_to_remove = action
|
|
print(f"{i}. Remove {lines_to_remove} from row {row}.")
|
|
choice = self.get_int(len(actions))
|
|
return actions[choice]
|
|
|
|
def get_int(self, maximum):
|
|
while True:
|
|
response = input("> ")
|
|
if response.isdigit():
|
|
value = int(response)
|
|
if value < maximum:
|
|
return value
|
|
print("Invalid input.")
|
|
|
|
class ComputerNimPlayer:
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.strategy = LookaheadStrategy(NimGameStub(), max_depth=3, deterministic=False)
|
|
|
|
def choose_action(self, state):
|
|
action = self.strategy.choose_action(state)
|
|
row, lines_to_remove = action
|
|
print(f"{self.name} removes {lines_to_remove} from row {row}")
|
|
return action
|