示例#1
0
 def dataReceived(self, data):
     print "Received: %r" % data
     line = data.strip()
     items = line.split("\n")
     if items[-1] == "TEAM":
         self.transport.write(self.name)
     elif items[-1] == "MOVE":
         if items[0] == "RESTART":
             self.reset()
             del items[0]
         for item in items[:-1]:
             parts = item.split()
             # think for a random time 1-5 seconds, for testing only
             # time.sleep(random.randint(1, 5))
             player, x, y = parts[0], int(parts[1]), int(parts[2])
             # make a random move
             self.prev_moves.append((x, y))
         move = self.make_random_move()
         print "making move %r" % str(move)
         scores = genVoronoi.get_scores(2)
         print scores
         self.transport.write("{0} {1}".format(move[0], move[1]))
     elif items[-1] == "END":
         self.transport.loseConnection()
     elif items[-1] == "RESTART":
         self.reset()
示例#2
0
  def thinkNextMove(self, board, deep, deepSet, points, Moves, OppMoves):
    if Moves==0 and OppMoves ==0:
      return (500,500)
    if deep > deepSet:
      genVoronoi.generate_voronoi_diagram(2, Moves, points, self.colors, None, 0, 0)
      scores = genVoronoi.get_scores(2)
      myScore = scores[self.playerIdx]
      oppScore = scores[self.oppIdx]
      return myScore

    legalMoves = self.legal_plays(board)
    if deep%2 == 1:
      randSampling = 10
    else:
      randSampling = 10
    randIdx = np.random.choice(len(legalMoves[0]), randSampling)
    tmp = []
    for idx in randIdx:
      tmp.append((legalMoves[0][idx], legalMoves[1][idx]))
    legalMoves = tmp

    score = -sys.maxint - 1
    bestMove = ()
    for eachMove in legalMoves:
      # print deep, eachMove
      myBoard = np.copy(board)
      myPoints = np.copy(points)
      myMoves = copy.copy(Moves)
      myOppMoves = copy.copy(OppMoves)
      if deep%2 == 1: # it's me
        myPoints[self.playerIdx][myMoves][0] = eachMove[0]
        myPoints[self.playerIdx][myMoves][1] = eachMove[1]
        tmp_val = self.thinkNextMove(board, deep+1, deepSet, myPoints, myMoves+1, myOppMoves)
        board[eachMove[0]][eachMove[1]] = self.playerIdx
      else:
        myPoints[self.oppIdx][myOppMoves][0] = eachMove[0]
        myPoints[self.oppIdx][myOppMoves][1] = eachMove[1]
        tmp_val = self.thinkNextMove(board, deep+1, deepSet, myPoints, myMoves, myOppMoves+1)
        board[eachMove[0]][eachMove[1]] = self.oppIdx

      # tmp_val = self.thinkNextMove(board, deep, deepSet, myPoints, myMoves, myOppMoves)
      if not isinstance(tmp_val, tuple) and tmp_val > score:
        score = tmp_val
        bestMove = eachMove
    print "result in thinkNextMove"
    print score, bestMove, self.myMoves, deep
    if deep == 2:
      return score
    else:
      return bestMove
示例#3
0
 def winner(self, myMoves, myOppMoves, myPoints):
   # print "winner", myMoves, myOppMoves
   if myMoves == myOppMoves and myOppMoves == self.numMoves-1:
     genVoronoi.generate_voronoi_diagram(2, myMoves, myPoints, self.colors, None, 0, 0)
     scores = genVoronoi.get_scores(2)
     myScore = scores[self.playerIdx]
     oppScore = scores[self.oppIdx]
     print "myScore", myScore
     if myScore >= oppScore:
       return self.playerIdx
     else:
       return self.oppIdx
   else:
     return 0
示例#4
0
  def findBestLastOne(self, board, deep, deepSet, points, Moves, OppMoves):
    legalMoves = self.legal_plays(board)
    randIdx = np.random.choice(len(legalMoves[0]), 100)
    tmp = []
    for idx in randIdx:
      tmp.append((legalMoves[0][idx], legalMoves[1][idx]))
    legalMoves = tmp

    score = -sys.maxint - 1
    bestMove = ()
    for eachMove in legalMoves:
      points[self.playerIdx][Moves+1][0] = eachMove[0]
      points[self.playerIdx][Moves+1][1] = eachMove[1]
      genVoronoi.generate_voronoi_diagram(2, Moves+1, points, self.colors, None, 0, 0)
      scores = genVoronoi.get_scores(2)
      myScore = scores[self.playerIdx]
      print "myScore", myScore, eachMove
      if score < myScore:
        score = myScore
        bestMove = eachMove
      points[self.playerIdx][Moves+1][0] = -1
      points[self.playerIdx][Moves+1][1] = -1
    return bestMove
示例#5
0
 def get_scores(self):
     scores_np = genVoronoi.get_scores(num_players)
     scores = [scores_np[p] for p in range(num_players)]
     return scores
示例#6
0
 def get_score(self):
     scores = genVoronoi.get_scores(2)
     return scores[self.playerIdx], scores[self.oppIdx]