Beispiel #1
0
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())