当前位置: 首页>>代码示例>>Python>>正文


Python GameState.preRotate方法代码示例

本文整理汇总了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
开发者ID:greengatz,项目名称:senior_project,代码行数:70,代码来源:SearchRandomComparison.py

示例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
#.........这里部分代码省略.........
开发者ID:greengatz,项目名称:senior_project,代码行数:103,代码来源:GreedySearchPercentageDepth.py

示例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]
#.........这里部分代码省略.........
开发者ID:greengatz,项目名称:senior_project,代码行数:103,代码来源:GreedySearch.py

示例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

#.........这里部分代码省略.........
开发者ID:greengatz,项目名称:senior_project,代码行数:103,代码来源:RegionSearch.py

示例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()
#.........这里部分代码省略.........
开发者ID:greengatz,项目名称:senior_project,代码行数:103,代码来源:GreedySearchNoRandom.py


注:本文中的GameState.GameState.preRotate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。