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
 |