import numpy as np from a_player import APlayer from helper import to_state_string, create_empty_state, create_test_state class HumanPlayer(APlayer): def __init__(self, mark, name: str): APlayer.__init__(self, mark) self.name = name def move(self, state: np.array): move = 0 has_moved = False while True: print(f"{self.name}, Du bist dran. Das Spielfeld sieht so aus:") print(to_state_string(state, create_test_state())) print(f"{self.name}, in welches Feld willst Du Dein \"{self.mark}\" setzen?") choice = input("Feldnummer: ") if choice in "Qq": print("Abbruch") break if not choice in "123456789" or len(choice) != 1: print("Ungültiges Feld!") print("Versuche es nochmal") continue move = int(choice) - 1 if not move in self.get_potential_moves(state): print("Feld is bereits belegt!") print("Versuche es nochmal") continue print("So soll es geschehen") has_moved = True break state_next = self.state_from_move(state.copy(), move) return state_next, has_moved def reward(self, value): if value > 0: print(f"{self.name}, Du hast gewonnen, super!") else: print(f"{self.name}, Du hast leider verloren!") if __name__ == '__main__': p = HumanPlayer("X", "Jens") state = create_empty_state() while True: state, has_moved = p.move(state) if not has_moved: break p.reward(1.0)