def start_game(return_args): global WINNER WINNER = 0 return_args['map'] = cli.get_map(return_args['map']) return_args['dir_p2'] = '/player/' + return_args['dir_p2'] return_args['dir_p1'] = '/player/' + return_args['dir_p1'] global game (game, dockers, sock_file) = cli.create_game(return_args) winner = None try: print("running game") winner = cli.run_game(game, dockers, return_args, sock_file) finally: cli.cleanup(dockers, return_args, sock_file) lock.release() print("release lock") if winner == 'player1': eel.trigger_end_game(1)() elif winner == ' player2': eel.trigger_end_game(2)() else: eel.trigger_end_game(0)()
def run_game(map_path, player1dir, player2dir, replay_dir, docker, terminal_viewer, extra_delay, max_memory, initial_time, per_frame_time): args = {} args['dir_p2'] = player1dir args['dir_p1'] = player2dir args['docker'] = docker # TODO: Will cause name collisions if multiple instances run at the same time! args['replay_filename'] = os.path.join(replay_dir, "replay_" + str(len(os.listdir(replay_dir))) + replay_extension) args['player_memory'] = max_memory args['player_cpu'] = 20 args['time_pool'] = initial_time args['time_additional'] = per_frame_time args['use_viewer'] = False args['terminal_viewer'] = terminal_viewer args['extra_delay'] = extra_delay args['map'] = cli.get_map(map_path) if terminal_viewer and sys.platform == 'win32' and not CINIT: print('To get pretty output with -tv on windows, run `py -3 -m pip install colorama`') (game, sandboxes, sock_file) = cli.create_game(args) try: winner = cli.run_game(game, sandboxes, args, sock_file) finally: cli.cleanup(sandboxes, args, sock_file) print("Winner is player " + str(1 if winner == 'player1' else 2))
def start_game(return_args): global WINNER WINNER = 0 return_args['map'] = cli.get_map(os.path.abspath(os.path.join('..', 'battlecode-maps', return_args['map']))) if 'NODOCKER' in os.environ: return_args['docker'] = False return_args['dir_p1'] = os.path.abspath(os.path.join('..', return_args['dir_p1'])) return_args['dir_p2'] = os.path.abspath(os.path.join('..', return_args['dir_p2'])) else: return_args['docker'] = True return_args['dir_p1'] = os.path.abspath(os.path.join('/player', return_args['dir_p1'])) return_args['dir_p2'] = os.path.abspath(os.path.join('/player', return_args['dir_p2'])) global game (game, dockers, sock_file) = cli.create_game(return_args) winner = None try: print("Running game...") winner = cli.run_game(game, dockers, return_args, sock_file) finally: cli.cleanup(dockers, return_args, sock_file) lock.release() if winner == 'player1': eel.trigger_end_game(1)() elif winner == ' player2': eel.trigger_end_game(2)() else: eel.trigger_end_game(0)()
def start_game(return_args): global WINNER WINNER = 0 return_args['map_name'] = return_args['map'] # check mountpoint for maps first c2 = os.path.abspath( os.path.join('/player/battlecode-maps', return_args['map'])) if 'NODOCKER' not in os.environ and os.path.exists(c2): return_args['map'] = cli.get_map(c2) else: c1 = os.path.abspath( os.path.join('..', 'battlecode-maps', return_args['map'])) if os.path.exists(c1): return_args['map'] = cli.get_map(c1) else: if 'testmap' not in return_args['map']: print("Can't find map {} in {}, falling back to test map..", return_args['map'], os.path.abspath(os.path.join('..', 'battlecode-maps'))) if 'NODOCKER' not in os.environ: print( '(Also looked in /player/battlecode-maps, which should be mounted to the battlecode-maps directory of your scaffold)' ) return_args['map'] = bc.GameMap.test_map() if 'NODOCKER' in os.environ: return_args['docker'] = False return_args['dir_p1'] = os.path.abspath( os.path.join('..', return_args['dir_p1'])) return_args['dir_p2'] = os.path.abspath( os.path.join('..', return_args['dir_p2'])) else: return_args['docker'] = True return_args['dir_p1'] = os.path.abspath( os.path.join('/player', return_args['dir_p1'])) return_args['dir_p2'] = os.path.abspath( os.path.join('/player', return_args['dir_p2'])) return_args['terminal_viewer'] = False return_args['extra_delay'] = 0 global game (game, dockers, sock_file) = cli.create_game(return_args) winner = None try: print("Running game...") winner = cli.run_game(game, dockers, return_args, sock_file) finally: cli.cleanup(dockers, return_args, sock_file) lock.release() if winner == 'player1': eel.trigger_end_game(1)() elif winner == ' player2': eel.trigger_end_game(2)() else: eel.trigger_end_game(0)() print("Ready to run next game.")
def run_game(map_path, player1dir, player2dir, replay_dir, docker=False): args = {} args['dir_p2'] = player1dir args['dir_p1'] = player2dir args['docker'] = docker # TODO: Will cause name collisions if multiple instances run at the same time! args['replay_filename'] = os.path.join( replay_dir, "replay_" + str(len(os.listdir(replay_dir))) + replay_extension) args['player_memory'] = 256 args['player_cpu'] = 20 # TODO: Isn't this supposed to be 10000 or something? I got these values from the web client, but they seem too low args['time_pool'] = 1000 args['time_additional'] = 50 args['use_viewer'] = False args['map'] = cli.get_map(map_path) (game, sandboxes, sock_file) = cli.create_game(args) try: print("running game") winner = cli.run_game(game, sandboxes, args, sock_file) finally: cli.cleanup(sandboxes, args, sock_file) print("Winner is player: " + str(1 if winner == 'player1' else 2))
def match_thread(data): global BUSY BUSY = True GAMES_RUN.append(data['id']) data['s3_bucket'] = bucket data['player_memory'] = 256 data['player_cpu'] = 20 data['map'] = cli.get_map(os.path.abspath(os.path.join('..', 'battlecode-maps', data['map']))) data['docker'] = True data['terminal_viewer'] = False data['use_viewer'] = False data['extra_delay'] = 0 (game, dockers, sock_file) = cli.create_scrimmage_game(data) winner = None match_file = None try: print("Running match " + str(data['id'])) winner, match_file = cli.run_game(game, dockers, data, sock_file,scrimmage=True) finally: cli.cleanup(dockers, data, sock_file) logs = None if all('logger' in player for player in game.players): logs = [player['logger'].logs.getvalue() for player in game.players] end_game(data,winner,match_file,logs)
def match_thread(data): global BUSY global DB_LOCK BUSY = True GAMES_RUN.append(data['id']) data['s3_bucket'] = bucket data['player_memory'] = int(os.environ['PLAYER_MEMORY']) data['player_cpu'] = 20 data['map_name'] = data['map'] data['map'] = cli.get_map( os.path.abspath(os.path.join('..', 'battlecode-maps', data['map']))) data['docker'] = True data['terminal_viewer'] = False data['use_viewer'] = False data['extra_delay'] = 0 try: (game, dockers, sock_file) = cli.create_scrimmage_game(data) except ValueError as e: print( "Destroying the game, as it is invalid. This should not happen.") while DB_LOCK == True: sleep(0.1) DB_LOCK = True cur.execute( "UPDATE " + os.environ["TABLE_NAME"] + " SET status='rejected' WHERE id=%s", (data['id'], )) pg.commit() DB_LOCK = False return PROXY_UPLOADER.game = game winner = None match_file = None try: print("Running match " + str(data['id'])) winner, match_file = cli.run_game(game, dockers, data, sock_file, scrimmage=True) finally: cli.cleanup(dockers, data, sock_file) PROXY_UPLOADER.game = None PROXY_UPLOADER.games_run += 1 logs = None if all('logger' in player for player in game.players): logs = [player['logger'].logs.getvalue() for player in game.players] end_game(data, winner, match_file, logs)
def run_game(map_path, player1dir, player2dir, replay_dir, docker, terminal_viewer, extra_delay, max_memory, initial_time, per_frame_time, proxy_test, working_dir): args = {} args['dir_p1'] = player1dir args['dir_p2'] = player2dir args['docker'] = docker # TODO: Will cause name collisions if multiple instances run at the same time! args['replay_filename'] = os.path.join( replay_dir, "replay_" + str(len(os.listdir(replay_dir))) + replay_extension) # Make sure filename is used. Important if multiple instances are running at the same time f = open(args['replay_filename'], "w") f.write("") f.close() args['player_memory'] = max_memory args['player_cpu'] = 20 args['time_pool'] = initial_time args['time_additional'] = per_frame_time args['use_viewer'] = False args['terminal_viewer'] = terminal_viewer args['extra_delay'] = extra_delay args['map_name'] = map_path args['map'] = cli.get_map(map_path) args['working_dir'] = working_dir if terminal_viewer and sys.platform == 'win32' and not CINIT: print( 'To get pretty output with -tv on windows, run `py -3 -m pip install colorama`' ) (game, sandboxes, sock_file) = cli.create_game(args) if proxy_test: import proxyuploader up = proxyuploader.ProxyUploader() up.game_id = 12312 up.blue_id = 100 up.blue_id = 1000 up.game = game try: winner = cli.run_game(game, sandboxes, args, sock_file) finally: cli.cleanup(sandboxes, args, sock_file) if proxy_test: up.done = True print("Winner is player " + str(1 if winner == 'player1' else 2))
def run_game(map_path, player1dir, player2dir, replay_dir, docker=False, terminal_viewer=False, extra_delay=0): args = {} args['dir_p2'] = player1dir args['dir_p1'] = player2dir args['docker'] = docker # TODO: Will cause name collisions if multiple instances run at the same time! args['replay_filename'] = os.path.join( replay_dir, "replay_" + str(len(os.listdir(replay_dir))) + replay_extension) args['player_memory'] = 256 args['player_cpu'] = 20 # TODO: Isn't this supposed to be 10000 or something? I got these values from the web client, but they seem too low args['time_pool'] = 1000 args['time_additional'] = 50 args['use_viewer'] = False args['terminal_viewer'] = terminal_viewer args['extra_delay'] = extra_delay args['map'] = cli.get_map(map_path) if terminal_viewer and sys.platform == 'win32' and not CINIT: print( 'To get pretty output with -tv on windows, run `py -3 -m pip install colorama`' ) (game, sandboxes, sock_file) = cli.create_game(args) try: print("running game") winner = cli.run_game(game, sandboxes, args, sock_file) finally: cli.cleanup(sandboxes, args, sock_file) print("Winner is player: " + str(1 if winner == 'player1' else 2))
def run_game(map_path, player1dir, player2dir, replay_dir, docker=False): args = {} args['dir_p2'] = player1dir args['dir_p1'] = player2dir args['docker'] = docker # TODO: Will cause name collisions if multiple instances run at the same time! args['replay_filename'] = os.path.join(replay_dir, "replay_" + str(len(os.listdir(replay_dir))) + replay_extension) args['player_memory'] = 256 args['player_cpu'] = 20 # TODO: Isn't this supposed to be 10000 or something? I got these values from the web client, but they seem too low args['time_pool'] = 1000 args['time_additional'] = 50 args['use_viewer'] = False args['map'] = cli.get_map(map_path) (game, sandboxes, sock_file) = cli.create_game(args) try: print("running game") winner = cli.run_game(game, sandboxes, args, sock_file) finally: cli.cleanup(sandboxes, args, sock_file) print("Winner is player: " + str(1 if winner == 'player1' else 2))