Пример #1
0
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)()
Пример #2
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))
Пример #3
0
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)()
Пример #4
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.")
Пример #5
0
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))
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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))
Пример #9
0
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))
Пример #10
0
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))