def __init__(self, width, height, ship_sizes, player1, player2): self.width = width self.height = height self.player1 = player1 self.player2 = player2 self.players = [self.player1, self.player2] self.ship_sizes = ship_sizes self.observer = SimpleObserver() self.observer.set_players(player1.name, player2.name) logger.info("*" * 80) logger.info("board size:%d x %d" % (self.width, self.height)) logger.info("ship sizes: %s" % (str(self.ship_sizes)))
class BattleshipServer(object): def __init__(self, width, height, ship_sizes, player1, player2): self.width = width self.height = height self.player1 = player1 self.player2 = player2 self.players = [self.player1, self.player2] self.ship_sizes = ship_sizes self.observer = SimpleObserver() self.observer.set_players(player1.name, player2.name) logger.info("*" * 80) logger.info("board size:%d x %d" % (self.width, self.height)) logger.info("ship sizes: %s" % (str(self.ship_sizes))) #################################################################### def run(self): game_over = False try: ### get ship placement self.send_all_clients("|INFO|grid size|%d %d|END|" % (self.width, self.height)) self.observer.send("|grid size|%d %d|END|" % (self.width, self.height)) self.send_all_clients("|INFO|num ships|%d|END|" % len(self.ship_sizes)) self.observer.send("|num ships|%d|END|" % len(self.ship_sizes)) str_ship_sizes = "|".join([str(x) for x in self.ship_sizes]) self.send_all_clients("|INFO|ship sizes|%s|END|" % str_ship_sizes) self.observer.send("|ship sizes|%s|END|" % str_ship_sizes) self.get_ships(self.player1) self.get_ships(self.player2) ### start game loop while not game_over: game_over = self.play_round() except ClientErrorException, e: if e.winner: game_over = e.winner elif e.loser: game_over = self.other_player_name(e.loser) self.report_winner(game_over == self.player1.name, game_over == self.player2.name) if game_over == True: game_over = None self.end_game() return game_over