def _initNew( self, player1, player2 ): ## Create empty board self.board = Board() ## Save player info self.player1 = int( player1 ) self.player2 = int( player2 ) ## Save status self.status = "CHALLENGE" self.winner = None self.turn = 1 ## Create new Game instance self.game = Game( player1 = self.player1, player2 = self.player2, status = self.status, board = self.board.serialize(), turn = self.turn, winner = self.winner, parent = Game.games_key() ) ## Save new game to database key = self.game.put() self.gameid = key.id() ## Send an email to player 2 player1_name = User.get_user_name( self.player1 ) player2_user = User.by_id( self.player2 ) HexEmail.sendChallenge( player2_user.email, player1_name )
def get_detailed_status( self, user_id ): ## Pending games if self.status == "CHALLENGE": player2_name = User.get_user_name( self.player2 ) return "Waiting for %s to accept challenge" % player2_name ## Active games if self.is_my_turn( user_id ): return "My move" if self.status == "ACTIVE": return "Opponent's turn" ## Completed games if self.status == "COMPLETE": winner_name = User.get_user_name( self.winner ) return "%s has won" % winner_name
def _build_game_set( self, games ): data = [] for game in games: gameid = game.key().id() view = GameView( gameid = gameid ) user_id = self.user.key().id() player1_name = User.get_user_name( view.player1 ) player2_name = User.get_user_name( view.player2 ) data.append( { "gameid": gameid, "player1": player1_name, "player2": player2_name, "status": view.get_detailed_status( user_id ) } ) return data
def post( self ): ## Make sure the user is logged in if not self.user: self.redirect( "/login" ) return cancel = self.request.get( "cancel" ) gameid = self.request.get( "gameid" ) ## If the user hit "cancel" then refresh the board if cancel: self._cancel_move( gameid ) return else: ## Retrieve this game from the database game = GameView( gameid = gameid ) if game: ## Grab the move row = self.request.get( "row" ) col = self.request.get( "col" ) try: game.update_game( user = self.user, row = int( row ), col = int( col ) ) except WrongTurnException as e: self.render( "/play?gameid=%s" % gameid, error = e.message ) return ## Send email to opponent telling them it's their turn player1_name = User.get_user_name( game.player1 ) player2 = User.by_id( game.player2 ) if player2.email and player2.move_emails: HexEmail.sendMoveNotice( player2.email, player1_name ) ## Redirect to homepage self.redirect( "/home" ) else: logging.error( "That's not a valid game" ) self.redirect( "/" )