class Runner:
    def __init__(self):
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(
                sys.argv[1], int(sys.argv[2]))
            self.name = sys.argv[3]
        else:
            self.remote_process_client = RemoteProcessClient(
                'wgforge-srv.wargaming.net', 443)
            self.name = "Mickey"

    def run(self):
        status, start_data = self.remote_process_client.login(self.name)
        try:
            map_graph = self.remote_process_client.read_map()
            objects = self.remote_process_client.read_objects()
            strategy = Strategy(start_data)
            while strategy.in_progress:
                self.remote_process_client.update_objects(objects)
                moves = strategy.get_moves(objects, map_graph)
                if moves:
                    for move in moves:
                        self.remote_process_client.move(move)
                self.remote_process_client.turn()

        finally:
            self.remote_process_client.logout()
            self.remote_process_client.close()
def test_defult_example():
    remote_process_client = RemoteProcessClient('wgforge-srv.wargaming.net',
                                                443)
    assert remote_process_client.login("Test12345")[0] == 0
    assert remote_process_client.move(Move(1, 1, 0))[0] == 0
    assert remote_process_client.map(1)[0] == 0
    assert remote_process_client.turn()[0] == 0
    remote_process_client.logout()
    remote_process_client.close()
Example #3
0
def test_speed():
    try:
        process_client = RemoteProcessClient('wgforge-srv.wargaming.net', 443)
        player = process_client.login("Test12345")
        map_graph = process_client.read_map()
        map_graph.pos = dict(
            [(cord['idx'], (cord['x'] / 200, cord['y'] / 200))
             for cord in process_client.read_position()["coordinate"]])
        objects = process_client.read_objects()
        process_client.update_objects(objects, map_graph, player)

        process_client.move(Move(1, 1, 1))
        process_client.turn()
        process_client.turn()
        process_client.update_objects(objects, map_graph, player)
        train = objects.trains[1]
        print(" pos - ", train.position, " speed - ", train.speed)

        process_client.move(Move(1, 0, 1))
        process_client.move(Move(1, -1, 1))
        process_client.turn()
        process_client.update_objects(objects, map_graph, player)
        print(" pos - ", train.position, " speed - ", train.speed)
    finally:
        process_client.logout()
        process_client.close()
Example #4
0
class Runner:
    def __init__(self, name="Mickey"):
        self.player = None
        self.map_graph = None
        self.objects = None
        self.is_gui = True
        self.multi = False
        self.name = name
        if len(sys.argv) >= 2:
            if '-gui' in sys.argv:
                self.is_gui = True
            if '-m' in sys.argv:
                self.multi = True
                self.name = input("Name:")
                self.game = input("Game name:")
                self.num_players = int(input("Num of players:"))
        self.process_client = RemoteProcessClient('wgforge-srv.wargaming.net',
                                                  443)

    def run(self):
        try:
            try:
                if self.multi == False:
                    self.player = self.process_client.login(self.name)
                else:
                    self.player = self.process_client.multi_login(
                        self.name, self.game, self.num_players)
            except LoginError:
                self.process_client.logout()
                print('BAD LOGIN\nTRY AGAIN')
                exit()
            self.init_world()
            strategy = Strategy(self.player, self.map_graph, self.objects)
            if self.is_gui:
                self.gui = GUI(self.player, self.map_graph, self.objects, strategy)
            while self.player.is_alive:
                self.process_client.update_objects(self.objects,
                                                   self.map_graph, self.player)
                # self.print_state()
                if self.is_gui:
                    self.gui.turn()
                    if (not self.gui.paused) or self.gui.onestep:
                        self.move(strategy)
                else:
                    self.move(strategy)
        finally:
            self.process_client.logout()
            self.process_client.close()

        return self.player.is_alive  # for testing

    def init_world(self):
        self.map_graph = self.process_client.read_map()
        self.map_graph.pos = dict(
            [(cord['idx'], (cord['x'] / 200, cord['y'] / 200))
             for cord in self.process_client.read_position()["coordinate"]])
        self.objects = self.process_client.read_objects()
        # self.map_graph.define_points(self.objects)
        self.player.settle(self.map_graph, self.objects)

    def move(self, strategy):  # move == ход
        moves = strategy.get_moves()
        if moves:
            for move in moves:
                self.process_client.move(move)
        up_obj = strategy.get_upgrade()
        if up_obj:
            self.process_client.upgrade(up_obj)
        self.process_client.turn()
        self.objects.tick += 1

    def print_state(self):
        str_post = []
        for town in self.objects.towns.values():
            str_post.append(
                [town.name, town.product, town.armor, town.population])
        for market in self.objects.markets.values():
            str_post.append([market.name, market.product, '-', '-'])
        for storage in self.objects.storages.values():
            str_post.append([storage.name, '-', storage.armor, '-'])

        print(
            tabulate(
                str_post, headers=['name', 'product', 'armor', 'population']),
            '\n')

        for train in self.objects.trains.values():
            print(
                tabulate(
                    [[
                        train.idx, train.goods, train.post_type,
                        train.line_idx, train.speed, train.position
                    ]],
                    headers=[
                        'Train_id', 'product', 'post_type', 'line_idx',
                        'speed', 'position'
                    ]))