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