class Game: def __init__(self): self.pastStateData = [] self.currentState = State() def reset(self): self.currentState.reset() self.pastStateData = [] def makeMove(self, move): self.pastStateData.append((self.currentState.toString(), -self.currentState.getPlayer())) self.currentState.makeMove(move) def getHeuristic(self): if (self.currentState.getPlayer() == 1): return self.starterHeuristic else: return self.followerHeuristic def setHeuristic(self, heuristic, player): heuristic.setState(self.currentState) if (player == 1): self.starterHeuristic = heuristic else: self.followerHeuristic = heuristic def takeTurn(self): move = self.getHeuristic().getForcedMove() if move is None: move = self.getHeuristic().getMove() self.makeMove(move) def play(self): result = board.UNFINISHED while result is board.UNFINISHED: self.takeTurn() result = self.getHeuristic().getGameResult() return (self.pastStateData[1:], result)
def getCompletenessScore(self, move, player): score = 0 completenessData = self.state.getLineCompleteness(move, player).data for (numComplete, numLines) in enumerate(completenessData): score += self.WEIGHTS[numComplete] * math.pow(numLines, self.POWERS[numComplete]) return score if __name__ == '__main__': # TESTS from test import * from game_state import GameState as State state = State() heuristic = PotentialWinsHeuristic() heuristic.setState(state) assertEquals((3, 0), heuristic.getMove()) state.makeMove((3, 0)) state.makeMove((3, 1)) assertEquals((2, 0), heuristic.getMove()) state.makeMove((3, 2)) state.makeMove((3, 3)) state.makeMove((3, 4)) state.makeMove((3, 5)) assertEquals((1, 0), heuristic.getMove()) state.makeMove((1, 0)) assertEquals((1, 1), heuristic.getMove())