本文整理汇总了Python中GameState.GameState.preRotate方法的典型用法代码示例。如果您正苦于以下问题:Python GameState.preRotate方法的具体用法?Python GameState.preRotate怎么用?Python GameState.preRotate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GameState.GameState
的用法示例。
在下文中一共展示了GameState.preRotate方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: SearchRandomComparison
# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import preRotate [as 别名]
#.........这里部分代码省略.........
bestMove = Move.up
bestValue = -1
move = Move.up
moveValue = self.searchDirectionRandom(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
move = Move.left
moveValue = self.searchDirectionRandom(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
move = Move.right
moveValue = self.searchDirectionRandom(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
move = Move.down
moveValue = self.searchDirectionRandom(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
return (bestMove, bestValue)
'returns the number of matches that a given move would make'
'this only determines value of one move and no further searching'
def valueOfMove(self, board, move):
return value(self.game.preRotate(move, board), self.game, move)
'returns the expected value of a given move searching with the given depth factoring in random tiles'
def searchDirectionRandom(self, board, depth, move):
testGame = GameState()
testGame.setBoard(board)
testGame.setBoard(testGame.copyArr())
# if the move isn't valid, don't consider it
if (not testGame.isValid(move)):
return -1
#determine the value for making the move at this level
ourValue = self.valueOfMove(testGame.gameArray, move)
#'using that as the starting board, check a lot of possibilities'
afterMove = testGame.executeMove(move)
testGame.setBoard(afterMove)
ev2 = [[0 for x in range(4)] for x in range(4)]
ev4 = [[0 for x in range(4)] for x in range(4)]
options = 0
searchValue = 0
# determine the value of each cell
for x in range (0, 4):
for y in range (0, 4):
trialBoard = testGame.copyArr()
if (trialBoard[x][y] == 0):
options += 1
trialBoard[x][y] = 2
示例2: GreedySearchPercentageDepth
# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import preRotate [as 别名]
class GreedySearchPercentageDepth(object):
minimumDepth = 2
fourCorners = {(0, 0), (0, 3), (3, 0), (3, 3)}
options = {Move.down, Move.left, Move.up, Move.right}
enterCorner = 0
maxInCornerMultiplier = 1.0
cornerBonusScaledByMax = 0.8
moveDownPenalty = 0.0
def __init__(self, threshold):
self.game = GameState()
self.numMoves = 0
self.threshold = threshold
pass
'keeps searching for moves until the game is complete'
def playGame(self):
self.game.printState(self.game.gameArray)
count = 0
while (self.game.isGoing()):
self.possibilities = 0
moveStart = time.time()
print("Starting move: " + datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))
testBoard = self.game.copyArr()
bestMove = self.search(testBoard, 1, 0)
moveEnd = time.time()
totalTime = moveEnd - moveStart
print(bestMove[0])
print("time to search " + str(self.possibilities) + " possibilities moves: " + str(totalTime))
print("time per possibility: " + str(totalTime / self.possibilities))
# when at the end, all decisions might lead to an inevitable failure
if (not self.game.isValid(bestMove)):
pass
#self.game.printState(self.game.gameArray)
self.game.takeMove(bestMove[0])
self.game.printState(self.game.gameArray)
self.numMoves = self.numMoves + 1
print(self.numMoves)
pass
'returns best move and the value of that move'
'best move is only useful for the top-level call'
def search(self, board, likelihood, depth):
if (depth >= self.minimumDepth and likelihood < self.threshold):
return (Move.up, 0)
self.possibilities += 1
bestMove = Move.up
bestValue = -1
for move in self.options:
moveValue = self.searchDirection(board, likelihood, move, depth + 1)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
return (bestMove, bestValue)
'returns the number of matches that a given move would make'
'this only determines value of one move and no further searching'
def valueOfMove(self, board, move):
board = self.game.preRotate(move, board)
testGame = GameState()
testGame.setBoard(board)
testGame.setBoard(testGame.copyArr())
value = 0
# store previous information
oldScore = testGame.getScore()
oldMaxTile = testGame.getMaxTile()
testGame.executeMove(Move.down)
newScore = testGame.getScore()
value += newScore - oldScore
# check if the largest tile is in a corner after the move
newMaxTile = testGame.getMaxTile()
for corner in self.fourCorners:
if testGame.gameArray[corner[0]][corner[1]] == newMaxTile:
value *= self.maxInCornerMultiplier
value += self.cornerBonusScaledByMax * newMaxTile
value += self.enterCorner
# penalty for moving down
if move == Move.down:
value -= self.moveDownPenalty * newMaxTile
#.........这里部分代码省略.........
示例3: GreedySearch
# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import preRotate [as 别名]
class GreedySearch(object):
fourCorners = {(0, 0), (0, 3), (3, 0), (3, 3)}
possibilities = {Move.down, Move.left, Move.up, Move.right}
enterCorner = 0
maxInCornerMultiplier = 1.0
cornerBonusScaledByMax = 0.8
moveDownPenalty = 0.0
def __init__(self, inDepth):
'''
Constructor
'''
self.game = GameState()
self.numMoves = 0
self.depth = inDepth
pass
'keeps searching for moves until the game is complete'
def playGame(self):
count = 0
while (self.game.isGoing()):
print("\nStarting move: " + datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))
testBoard = self.game.copyArr()
bestMove = self.search(testBoard, self.depth)
print(bestMove[0])
self.game.printState(self.game.gameArray)
wasSuccessful = self.game.takeMove(bestMove[0])
self.numMoves = self.numMoves + 1
if not wasSuccessful:
break
self.game.printState(self.game.gameArray)
print("number of moves in game: " + str(self.numMoves))
pass
'returns best move and the value of that move'
'best move is only useful for the top-level call'
def search(self, board, depth):
bestMove = Move.up
bestValue = -1
for move in self.possibilities:
moveValue = self.searchDirection(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
return (bestMove, bestValue)
'returns the number of matches that a given move would make'
'this only determines value of one move and no further searching'
def valueOfMove(self, board, move):
return value(self.game.preRotate(move, board), self.game, move)
'returns the expected value of a given move searching with the given depth'
def searchDirection(self, board, depth, move):
testGame = GameState()
testGame.setBoard(board)
testGame.setBoard(testGame.copyArr())
# if the move isn't valid, don't consider it
if (not testGame.isValid(move)):
return -1
# determine the value for making the move at this level
ourValue = self.valueOfMove(testGame.gameArray, move)
# if we have reached bottom depth, stop searching and return the heuristic value
if depth == 1:
return ourValue
# using that as the starting board, check a lot of possibilities
afterMove = testGame.executeMove(move)
testGame.setBoard(afterMove)
ev2 = [[0 for x in range(4)] for x in range(4)]
ev4 = [[0 for x in range(4)] for x in range(4)]
options = 0
searchValue = 0
# determine the value of each cell
for x in range (0, 4):
for y in range (0, 4):
trialBoard = testGame.copyArr()
if (trialBoard[x][y] == 0):
options += 1
trialBoard[x][y] = 2
ev2[x][y] = self.search(trialBoard, depth - 1)[1]
trialBoard[x][y] = 4
ev4[x][y] = self.search(trialBoard, depth - 1)[1]
#.........这里部分代码省略.........
示例4: RegionSearch
# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import preRotate [as 别名]
class RegionSearch(object):
"""
classdocs
"""
def __init__(self, inDepth):
"""
Constructor
"""
self.game = GameState()
self.numMoves = 0
self.depth = inDepth
pass
"keeps searching for moves until the game is complete"
def playGame(self):
self.game.printState(self.game.gameArray)
count = 0
while self.game.isGoing():
print("\nStarting move: " + datetime.datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S"))
testBoard = self.game.copyArr()
bestMove = self.search(testBoard, self.depth)
print(bestMove[0])
# when at the end, all decisions might lead to an inevitable failure
if not self.game.isValid(bestMove):
pass
# self.game.printState(self.game.gameArray)
self.game.takeMove(bestMove[0])
self.game.printState(self.game.gameArray)
self.numMoves = self.numMoves + 1
print(self.numMoves)
pass
"returns best move and the value of that move"
"best move is only useful for the top-level call"
def search(self, board, depth):
if depth == 0:
return (Move.up, 0)
bestMove = Move.up
bestValue = -1
move = Move.up
moveValue = self.searchDirection(board, depth, move)
if moveValue > bestValue:
bestMove = move
bestValue = moveValue
move = Move.left
moveValue = self.searchDirection(board, depth, move)
if moveValue > bestValue:
bestMove = move
bestValue = moveValue
move = Move.right
moveValue = self.searchDirection(board, depth, move)
if moveValue > bestValue:
bestMove = move
bestValue = moveValue
move = Move.down
moveValue = self.searchDirection(board, depth, move)
if moveValue > bestValue:
bestMove = move
bestValue = moveValue
return (bestMove, bestValue)
"returns the number of matches that a given move would make"
"this only determines value of one move and no further searching"
def valueOfMove(self, board, move):
board = self.game.preRotate(move, board)
value = 0
for x in range(0, 4):
value += self.game.countSlideDownMatches(x, board)
board = self.game.postRotate(move, board)
return value
"returns the expected value of a given move searching with the given depth"
def searchDirection(self, board, depth, move):
testGame = GameState()
testGame.setBoard(board)
testGame.setBoard(testGame.copyArr())
# if the move isn't valid, don't consider it
if not testGame.isValid(move):
return -1
#.........这里部分代码省略.........
示例5: GreedySearchNoRandom
# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import preRotate [as 别名]
class GreedySearchNoRandom(object):
def __init__(self, inDepth):
self.game = GameState()
self.numMoves = 0
self.depth = inDepth
pass
'keeps searching for moves until the game is complete'
def playGame(self):
self.game.printState(self.game.gameArray)
count = 0
while (self.game.isGoing()):
testBoard = self.game.copyArr()
bestMove = self.search(testBoard, self.depth)
print(bestMove[0])
# when at the end, all decisions might lead to an inevitable failure
if (not self.game.isValid(bestMove)):
pass
#self.game.printState(self.game.gameArray)
self.game.takeMove(bestMove[0])
self.game.printState(self.game.gameArray)
pass
'returns best move and the value of that move'
'best move is only useful for the top-level call'
def search(self, board, depth):
if (depth == 0):
return (Move.up, 0)
bestMove = Move.up
bestValue = -1
move = Move.up
moveValue = self.searchDirection(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
move = Move.left
moveValue = self.searchDirection(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
move = Move.right
moveValue = self.searchDirection(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
move = Move.down
moveValue = self.searchDirection(board, depth, move)
if (moveValue > bestValue):
bestMove = move
bestValue = moveValue
return (bestMove, bestValue)
'returns the number of matches that a given move would make'
'this only determines value of one move and no further searching'
def valueOfMove(self, board, move):
return value(self.game.preRotate(move, board), self.game, move)
'returns the expected value of a given move searching with the given depth'
'this ignores the new tiles appearing, which saves tons on complexity'
def searchDirection(self, board, depth, move):
testGame = GameState()
testGame.setBoard(board)
testGame.setBoard(testGame.copyArr())
# if the move isn't valid, don't consider it
if (not testGame.isValid(move)):
return -1
# determine the value for making the move at this level
ourValue = self.valueOfMove(testGame.gameArray, move)
# using that as the starting board, check the child's options
afterMove = testGame.executeMove(move)
searchValue = self.search(afterMove, depth - 1)[1]
return ourValue + searchValue
'generic methods of every solver'
def getScore(self):
return self.game.getScore()
def getMaxTile(self):
return self.game.getMaxTile()
#.........这里部分代码省略.........