示例#1
0
 def create_new_game(self, data):
   game_key = ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(8))
   print("New game created! Key is {0}".format(game_key))
   username = data["name"]
   ship = Ship(name=username)
   milli_time = utils.get_time()
   print("Made ship!")
   asteroid = Asteroid.make_asteroid()
   print("Made asteroid!")
   game_state = {
     "game_id": game_key,
     "ships": [
       ship
     ],
     "last_updated": milli_time,
     "asteroids": [
       asteroid
     ],
     "level": 1,
     "level_over": False,
     "level_countdown": 0,
   }
   
   with lock:
     self.games[game_key] = game_state
   
   return game_state.copy()
示例#2
0
  def increment_game(self, game_state):
    current_time = utils.get_time()
    time_delta = current_time - game_state["last_updated"]
    
    ships = game_state["ships"]
    asteroids = game_state["asteroids"]
    
    level_time = game_state["level_countdown"]
    if level_time > 0:
      level_time -= min(level_time, time_delta)
      game_state["level_countdown"] = level_time
      if level_time == 0:
        game_state["level"] += 1
        game_state["level_over"] = False
        new_asteroids = [Asteroid.make_asteroid() for _ in range(0, game_state["level"])]
        asteroids = new_asteroids
        for ship in ships:
          ship.invuln_time += 1000

    i = 0
    shipsLength = len(ships)
    while i < shipsLength:
      ship = ships[i]
      # Remove ships that time out. Mark them as leaving for half a second
      # first, so that the client has time to display some nice blink effect
      # or something down the road.
      if ship.leaving and current_time - ship.last_updated > 500:
        print("Ship leaving: {0}".format(ship.name))
        ships.pop(i)
        shipsLength -= 1
      elif current_time - ship.last_updated > 5000:
        ship.leaving = True
        ship.update(time_delta)
        i += 1
      else:
        ship.update(time_delta)
        i += 1
    
    i = 0
    asteroidsLen = len(asteroids)
    while i < asteroidsLen:
      asteroid = asteroids[i]
      asteroid.update()
      if asteroid.dead:
        asteroids.pop(i)
        asteroidsLen -= 1
      else:
        i += 1
        
    if len(asteroids) == 0 and not game_state["level_over"]:
      game_state["level_over"] = True
      game_state["level_countdown"] = 1500
    
    game_state["ships"] = ships
    game_state["asteroids"] = asteroids
    game_state["last_updated"] = utils.get_time()