コード例 #1
0
ファイル: GameProcess.py プロジェクト: kosyak/tic-tac-toe
 def post(self):
     game_id = getGameIdByRequest(self.request)
     player_id = getUserIdByRequest(self.request)
     cur_game_record = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id = :1", game_id).get()
     if not cur_game_record:
         self.handle_exception('POST request to gameprocess: no game with such game_id', True)
         return  
     cur_game = cur_game_record.unPack()
     x = int(self.request.get('x'))
     y = int(self.request.get('y'))
     if cur_game.turn == 0 and cur_game.first_player_uid == player_id or\
        cur_game.turn == 1 and cur_game.second_player_uid == player_id:
         if cur_game.is_ended:
             self.response.out.write('cannot')
             return
         can_move = cur_game.makeMove(x, y)
         cur_game_record.pack(cur_game)
         cur_game_record.put()
         if not can_move:
             self.response.out.write('cannot')
             return
         self.response.out.write('can ')
         self.response.out.write(' ' + ('X' if cur_game.turn else 'O') + ' ')
         if cur_game.is_ended:
             self.response.out.write(' ended ' + cur_game.getWinningString())
         else:
             self.response.out.write(' not_ended')
     else:
         self.response.out.write('cannot')
コード例 #2
0
ファイル: GameStatus.py プロジェクト: kosyak/tic-tac-toe
 def post(self):
     game_id = getGameIdByRequest(self.request)
     player_id = getUserIdByRequest(self.request)
     cur_game_record = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id = :1", (game_id)).get()
     if not cur_game_record:
         self.error(301)
         return  
     cur_game = cur_game_record.unPack()
     opponent = db.GqlQuery("SELECT * FROM PlayerRecord WHERE record_of_uid = :1", cur_game.first_player_uid + cur_game.second_player_uid - player_id).get()
                         
     if opponent.record_of_last_online < time.mktime(time.gmtime()) - DIFF_TIME:
         self.response.out.write('opponent_offline') 
         return
     
     #self.response.out.write(cur_game.getPlayerGameStatus(1 if cur_game.first_player_uid == player_id else 0))
     #return
     
     if cur_game.turn == 0 and cur_game.first_player_uid == player_id or\
        cur_game.turn == 1 and cur_game.second_player_uid == player_id:
             if cur_game.is_ended:
                 self.response.out.write('lose ' + cur_game.getWinningString())
             else:
                 self.response.out.write('move')
     else: 
             if cur_game.is_ended:
                 self.response.out.write('win ' + cur_game.getWinningString())
             else:
                 self.response.out.write('not_move')
コード例 #3
0
ファイル: GameRepaint.py プロジェクト: kosyak/tic-tac-toe
 def post(self):
     game_id = getGameIdByRequest(self.request)
     player_id = getUserIdByRequest(self.request)
     cur_game_record = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id = :1", (game_id)).get()
     if not cur_game_record:
         self.error(301)
         return  
     cur_game = cur_game_record.unPack()
     if cur_game.last_move != None and cur_game.last_move[0] == 1 and cur_game.first_player_uid == player_id or\
        cur_game.last_move != None and cur_game.last_move[0] == 0 and cur_game.second_player_uid == player_id:
         self.response.out.write(('X' if not cur_game.last_move[0] else 'O') + ' ' + str(cur_game.last_move[1]) + ' ' + str(cur_game.last_move[2]) + ' ')
コード例 #4
0
ファイル: Playing.py プロジェクト: kosyak/tic-tac-toe
 def post(self):
     # Update last online 
     cur_uid = int(self.request.cookies.get('uid', None))
     if cur_uid:
         cur_query = db.GqlQuery("SELECT * FROM PlayerRecord " + 
             "WHERE record_of_uid = :1", cur_uid)
         cur_player_record = cur_query.get()
         if not cur_player_record:
             return
         cur_player_record.record_of_last_online = time.mktime(time.gmtime())
         cur_player_record.put()
     # Last online updated
       
     mode = self.request.get('mode', None)
     if not mode:
         self.handle_exception('POST to playing: bad mode\n', True)
     game_id = getGameIdByRequest(self.request)
     if db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id = :1", game_id).get() == None:
         self.handle_exception("POST to playing: no game with such game_id", True)
     cur_game = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id = :1", game_id).get().unPack()
     player_position = 0 if cur_game.isFirstPlayer(getUserIdByRequest(self.request)) else 1
     if mode == 'waiting':
         start_time = time.mktime(time.gmtime())
         while time.mktime(time.gmtime()) < start_time + MAX_REQUEST_TIME:
             cur_game = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id =:1", game_id).get().unPack()
             if cur_game.turn == player_position:
                 self.response.out.write(cur_game.getPlayerGameStatus(player_position))
                 return
             time.sleep(DELAY_BETWEEN_PROCESSING)
         self.response.out.write(cur_game.getPlayerGameStatus(player_position))
     elif mode == 'moving':
         cur_game = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id =:1", game_id).get().unPack()
         if not cur_game:
             return "game_error"
         if cur_game.turn != player_position:
             self.response.out.write(cur_game.getPlayerGameStatus(player_position))
             return
         x = int(self.request.get('x'))
         y = int(self.request.get('y'))
         query = db.GqlQuery("SELECT * FROM GameRecord WHERE record_of_game_id =:1", game_id)
         for q in query:
             q.delete()
         
         cur_game.makeMove(x, y)
         cur_game_record = game.GameRecord()
         cur_game_record.pack(cur_game)
         cur_game_record.put()
         self.response.out.write(cur_game.getPlayerGameStatus(player_position))
     elif mode == 'ask':
         self.response.out.write(cur_game.getPlayerGameStatus(player_position) + ' ')
     else:
         pass