def __init__(self,hash=None): if hash is None: hash = new_game_hash(sum_cells=True,mode=self.MODE) verify_hash(hash=hash,mode=GAME_MODES[self.MODE]['GRID']) self._hash = hash self._binary = None self._hash_map = CELL_HASH_TABLE[self.MODE] self._cells = [self.CELL_KLASS.from_hash(hash=h) for h in decompose_grid_hash(hash=self._hash,mode=self.MODE)] state_hash = sum([ ( 1 << n) for n, c in enumerate(self._cells) if (c.player == PLAYER_1 or c.player == PLAYER_2)]) self._state = self.GRID_STATE_KLASS(hash=state_hash) self.validate_grid()
def decompose_grid_hash(hash,mode=TTT_3_IN_A_ROW): verify_game_mode(game_mode=mode) m = GAME_MODES[mode]['GRID'] verify_hash(hash=hash,mode=GAME_MODES[mode]['GRID']) length = MODES[m]['length'] binary = bin(hash)[2:].zfill(length) binary_cells = [c for c in reversed( [binary[bin_range:bin_range+3] for bin_range in xrange(0, len(binary), 3)] ) ] bits_to_push = lambda c : ((c+1) * 3) - 3 return [ (1 << ((int(b, 2) >> 1) + bits_to_push(c=cell))) for cell, b in enumerate(binary_cells) ]
def __init__(self,hash=0): verify_hash(hash=hash,mode=GAME_MODES[self.MODE]['GRID_STATE']) self._hash = hash self._binary = None