def __init__(self, player_pair, save_file="save.pkl"): self._state = SystemState() self._player_pair = player_pair self._history = [] self._winner = None self._gameEnd = False self._save_file = save_file
def reset(self, testing=False): self._player_pair[0].reset(testing=testing) self._player_pair[1].reset(testing=testing) #self.save(self._save_file) self._state = SystemState() self._history = [] self._winner = None self._gameEnd = False
def __init__(self, player_pair): self._state = SystemState() self._player_pair = player_pair self._history = [] self._winner = None self._gameEnd = False
class Game: def __init__(self, player_pair): self._state = SystemState() self._player_pair = player_pair self._history = [] self._winner = None self._gameEnd = False def getState(self): return self._state ''' Get Player object from SystemState _player value ''' def getCurPlayer(self): return self._player_pair[self._state._player] ''' Update SystemState and record Move ''' def update(self, mv): self._state = self._state.update(mv) self._history.append(mv) ''' Check and return whether game is complete and record winning Player ''' def checkWin(self): self._gameEnd, winner = self._state.isGoal() if self._gameEnd and winner != const.EMPTY_VAL: self._winner = self._player_pair[winner] return self._gameEnd ''' Save game information with pickle ''' def save(self, fname): pair = self._player_pair if os.path.isfile(fname): data = pickle.load(open(fname, 'rb')) else: data = [] players = tuple(map(lambda p: p._name if p is not None else p, pair)) win_name = self._winner._name if self._winner is not None else None win_state = (self._gameEnd, win_name) mv_list = tuple(self._history) game = (players, win_state, mv_list) data.append(game) f = open(fname, 'wb') pickle.dump(data, f) f.close() ''' Write game information to text file ''' def log(self, fname): pair = self._player_pair f = open(fname, 'a') line = '' line += str((pair[0]._name, pair[1]._name)) line += ',' + str((self._gameEnd, self._winner._name)) line += ',' + str(self._history) f.write(line + "\n") f.close() ''' Draw game screen with optional message. Clears previous screen unless const.DEBUG denotes debug mode. ''' def drawScreen(self, msg=''): if not const.DEBUG: os.system('clear') toPrint = ' ' for i in range(const.NUM_COLS): toPrint += '{0:^7} '.format(i + 1) print(toPrint) print(self._state) p1 = self._player_pair[0] flip1 = ' '.join('*' * (const.MAX_FLIPS - self._state._num_flips[0])) space1 = ' ' * (20 - len(str(p1)) - len(flip1)) p2 = self._player_pair[1] flip2 = ' '.join('*' * (const.MAX_FLIPS - self._state._num_flips[1])) space2 = ' ' * (20 - len(str(p2)) - len(flip2)) print( colored(str(p1), 'cyan') + space1 + colored(flip1, 'green', attrs=['bold'])) print( colored(str(p2), 'white') + space2 + colored(flip2, 'green', attrs=['bold'])) print() stage = 'Place' if self._state._stage == 1 else 'Flip' print(str(self.getCurPlayer()) + "'s turn: %s Stage " % stage) if msg != '': print(msg)
class Game: def __init__(self, player_pair, save_file="save.pkl"): self._state = SystemState() self._player_pair = player_pair self._history = [] self._winner = None self._gameEnd = False self._save_file = save_file ''' Reset function used for reinforcement learning Updates epsilon value ''' def reset(self, testing=False): self._player_pair[0].reset(testing=testing) self._player_pair[1].reset(testing=testing) #self.save(self._save_file) self._state = SystemState() self._history = [] self._winner = None self._gameEnd = False def getState(self): return self._state ''' Get Player object from SystemState _player value ''' def getCurPlayer(self): return self._player_pair[self._state._player] ''' Update SystemState and record Move ''' def update(self, mv): self._state = self._state.update(mv) self._history.append(mv) ''' Check and return whether game is complete and record winning Player ''' def checkWin(self): self._gameEnd, winner = self._state.isGoal() if self._gameEnd and winner != const.EMPTY_VAL: self._winner = self._player_pair[winner] return self._gameEnd ''' Save game information with pickle ''' def save(self, fname): pair = self._player_pair if os.path.isfile(fname): data = pickle.load(open(fname, 'rb')) else: data = [] players = tuple(map(lambda p: p._name if p is not None else p, pair)) win_name = self._winner._name if self._winner is not None else None win_state = (self._gameEnd, win_name) mv_list = tuple(self._history) game = (players, win_state, mv_list) data.append(game) f = open(fname, 'wb') pickle.dump(data, f) f.close() ''' Write game information to text file ''' def log(self, fname): pair = self._player_pair f = open(fname, 'a') line = '' line += str((pair[0]._name, pair[1]._name)) line += ',' + str((self._gameEnd, self._winner._name)) line += ',' + str(self._history) f.write(line + "\n") f.close() ''' Draw game screen with optional message. Clears previous screen unless const.DEBUG denotes debug mode. ''' def drawScreen(self, msg=''): if not const.DEBUG: os.system('clear') toPrint = ' ' for i in range(const.NUM_COLS): toPrint += '{0:^7} '.format(i+1) print(toPrint) print(self._state) p1 = self._player_pair[0] flip1 = ' '.join('*' * (const.MAX_FLIPS - self._state._num_flips[0])) space1 = ' ' * (20 - len(str(p1)) - len(flip1)) p2 = self._player_pair[1] flip2 = ' '.join('*' * (const.MAX_FLIPS - self._state._num_flips[1])) space2 = ' ' * (20 - len(str(p2)) - len(flip2)) print(colored(str(p1), 'cyan') + space1 + colored(flip1, 'green', attrs=['bold'])) print(colored(str(p2), 'white') + space2 + colored(flip2, 'green', attrs=['bold'])) print() stage = 'Place' if self._state._stage == 1 else 'Flip' print(str(self.getCurPlayer()) + "'s turn: %s Stage " % stage) if msg != '': print(msg)