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()
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()