本文整理汇总了Python中models.Move.allocate_ids方法的典型用法代码示例。如果您正苦于以下问题:Python Move.allocate_ids方法的具体用法?Python Move.allocate_ids怎么用?Python Move.allocate_ids使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类models.Move
的用法示例。
在下文中一共展示了Move.allocate_ids方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: makeMove
# 需要导入模块: from models import Move [as 别名]
# 或者: from models.Move import allocate_ids [as 别名]
def makeMove(self, request):
"""
authenticated player makes a move, implemented by creating a move,
updating Game and Player
"""
g_key = ndb.Key(urlsafe=request.websafeGameKey)
game = g_key.get()
# set up for a move
m_id = Move.allocate_ids(size=1, parent=g_key)[0]
m_key = ndb.Key(Move, m_id, parent=g_key)
player = Player.query(Player.displayName == request.player_name).get()
next_player_name = game.playerTwo if player.displayName == game.playerOne else game.playerOne
next_player = Player.query(Player.displayName == next_player_name).get()
print('next_player', next_player_name)
if game.gameOver:
raise endpoints.UnauthorizedException('This game is already over.')
# check if game is signed up by two players and by the current player
elif game.playerOne is None or game.playerTwo is None:
raise endpoints.UnauthorizedException(
'Need 2 signed-up players to start')
elif not player:
raise endpoints.NotFoundException('no player found')
elif player.displayName not in [game.playerTwo, game.playerOne]:
raise endpoints.UnauthorizedException('You did not sign up')
# check if the player had played the last move
elif player.displayName != game.nextPlayer is not None:
raise endpoints.UnauthorizedException(
"Player {}, it is your opponent {}'s turn" .format(
player.displayName, game.nextPlayer))
elif game.board[request.positionTaken] != '':
raise endpoints.UnauthorizedException('The game board position {} \
is already taken' .format(request.positionTaken))
else:
data = {}
data['key'] = m_key
data['moveNumber'] = game.gameCurrentMove + 1
data['playerName'] = player.displayName
data['positionTaken'] = request.positionTaken
Move(**data).put()
move = m_key.get()
# Update Game on the position affected by the move, and player
game.gameCurrentMove += 1
game.board[request.positionTaken] = request.player_name
setattr(game, 'nextPlayer', next_player_name)
if game._isWon:
setattr(game, 'gameWinner', getattr(player,'displayName'))
# if no win and game.gameCurrentMove >= 9, it is a tie;
# declare the winner as 'tie'
if game.gameCurrentMove > 9:
setattr(game, 'gameWinner', 'tie')
if game._isWon or game.gameCurrentMove > 9:
setattr(game, 'gameOver', True)
player.gamesInProgress.remove(g_key.urlsafe())
player.gamesCompleted.append(g_key.urlsafe())
next_player.gamesInProgress.remove(g_key.urlsafe())
next_player.gamesCompleted.append(g_key.urlsafe())
# if no winner at step before 9, send a move invite to the opponent
game.put()
player.put()
next_player.put()
return game._copyGameToForm