Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 def __init__(self, player_pair):
     self._state = SystemState()
     self._player_pair = player_pair
     self._history = []
     self._winner = None
     self._gameEnd = False
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
 def __init__(self, player_pair):
     self._state = SystemState()
     self._player_pair = player_pair
     self._history = []
     self._winner = None
     self._gameEnd = False