def __init__(self, players, map_name=None, planets=None, fleets=None, turns_per_second=None, turn=0, collisions=False): if len(players) < 2: raise Exception("A game requires at least two players.") self.player_names = players self.players = [_neutral_player ] + [PlanetWars.ais[player] for player in players] self.map_name = map_name if map_name is not None: planets, fleets = PlanetWars.maps[map_name] self.planets = [Planet(*planet) for planet in planets] self.fleets = [Fleet(*fleet) for fleet in fleets] else: assert planets is not None, "Please specify planets since map_name is None." assert fleets is not None, "Please specify fleets since map_name is None." self.planets = planets self.fleets = fleets self.views = [] self.turns_per_second = turns_per_second self.turn_duration = 1.0 / (turns_per_second or 1.0) self.turn = turn self.collisions = collisions
def issue_order(self, player, order): if order.source.owner != player: raise Exception("Player %d issued an order from enemy planet %d." % (player, order.source.id)) source = self.planets[order.source.id] ships = int(min(order.ships, source.ships)) if ships > 0: destination = self.planets[order.destination.id] source.ships -= ships self.fleets.append(Fleet(player, ships, source, destination))
def __init__(self, players, map_name, turns_per_second=2): if len(players) < 2: raise Exception("A game requires at least two players.") self.player_names = players self.players = [NeutralPlayer()] + [PlanetWars.ais[player]() for player in players] self.map_name = map_name planets, fleets = PlanetWars.maps[map_name] self.planets = [Planet(*planet) for planet in planets] self.fleets = [Fleet(*fleet) for fleet in fleets] self.views = [] self.turns_per_second = turns_per_second self.turn_duration = 1.0 / turns_per_second self.turn = 0
def update(self, planets, fleets): with self.lock: self.planets = [Planet(*planet) for planet in planets] self.fleets = [Fleet(*fleet) for fleet in fleets]