コード例 #1
0
ファイル: GameView.py プロジェクト: rywit/Hex
    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 )
コード例 #2
0
ファイル: GameView.py プロジェクト: rywit/Hex
    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
コード例 #3
0
ファイル: Home.py プロジェクト: rywit/Hex
 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
コード例 #4
0
ファイル: PlayGame.py プロジェクト: rywit/Hex
    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( "/" )