示例#1
0
    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
示例#2
0
 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))
示例#3
0
 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
示例#4
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]