コード例 #1
0
ファイル: main.py プロジェクト: Tiensbakung/PKSimulator
def main():
    pk_set_debug_options(warning=False,
                         trace=False,
                         debug=True,
                         info=False,
                         verbous=False)
    logging.basicConfig(level=logging.WARN)
    pygame.init()
    screen = pygame.display.set_mode(screen_size)
    gw = ui.GameWindow(screen)
    allsprites = pygame.sprite.RenderUpdates()
    clock = pygame.time.Clock()

    world = Box2D.b2World(gravity=(0,0))
    lwall, rwall, twall, bwall = conf.create_playground(world)
    rbl = []                    # robot body list
    rsl = []                    # robot sprite list
    rrl = []                    # robot role list
    bbl = []                    # ball body list
    bsl = []                    # ball sprite list

    for ID,pos,heading,leader,role,team in robot_info_list:
        body, sprite, role = conf.create_robot(ID, pos, heading,
                                               world, leader, role, team)
        rbl.append(body)
        rsl.append(sprite)
        rrl.append(role)

    for name,pos in ball_info_list:
        body, sprite = conf.create_ball(name, pos, world)
        bbl.append(body)
        bsl.append(sprite)

    allsprites.add(rsl)
    allsprites.add(bsl)
    gw.add_spritegroup(allsprites)
    fps = 60
    dt = 1.0 / 60
    vel_iters = 10
    pos_iters = 10
    t0 = time.time()
    counter = 0

    while True:
        clock.tick(fps)
        for e in pygame.event.get():
            if e.type == QUIT:
                pygame.quit()
                sys.exit()
            elif e.type == KEYDOWN:
                if e.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()

        wb_r_data = conf.build_wb_robot_data(rbl)
        wb_o_data = conf.build_wb_object_data(bbl)
        for i, body, role in itertools.izip(range(len(rbl)), rbl, rrl):
            if not counter:
                ml = []
                for b, r in itertools.izip(rbl, rrl):
                    if body.ID == b.ID:
                        continue
                    elif role.team != r.team:
                        continue
                    ml.extend(r.wm.comm_out)
                role.wm.comm_update(ml)
                vi_r_data = conf.build_vi_robot_data(body, role,
                                                     itertools.izip(rbl, rrl))
                vi_o_data = conf.build_vi_object_data(body, role, bbl)
                in_grabber = conf.object_in_grabber(body, role, bbl)
                role.feed_workbench_data(wb_r_data, wb_o_data)
                role.feed_vision_data(vi_r_data, vi_o_data, in_grabber)
                role.run()
            # v_t, v_r = conf.get_speed(role.speed())
            v_t = role.wm.translational_velocity
            v_r = role.wm.phi_dot
            li = body.set_linear_impulse(v_t, v_r, dt)
            ai = body.set_angular_impulse(v_t, v_r, dt)
            text = '{}: {} [{}]'.format(role.ID, role.role, role.state)
            gw.add_dynamictext(text, (705, 120 + 20*i))
        counter = (counter + 1) % 12

        world.Step(dt, vel_iters, pos_iters)

        score_red = 0
        score_blue = 0
        for body, sprite in itertools.izip(rbl, rsl):
            sprite.set_pos(conf.b2g_pos(body.get_pos()))
            sprite.rotate(conf.b2g_angle(body.get_angle()))

        for body, sprite in itertools.izip(bbl, bsl):
            sprite.set_pos(conf.b2g_pos(body.get_pos()))
            sprite.rotate(conf.b2g_angle(body.get_angle()))
            score_red += sprite.score_red
            score_blue += sprite.score_blue

        running_time = timedelta(seconds=int(time.time()-t0))
        gw.add_dynamictext('Time: {}'.format(running_time), (705,20))
        gw.add_dynamictext('Team Red: {}'.format(score_red), (705,50))
        gw.add_dynamictext('Team Blue: {}'.format(score_blue), (705,70))
        gw.update()
コード例 #2
0
ファイル: test_wk.py プロジェクト: Tiensbakung/PKSimulator
    ('2', (1.8,1.8), 0, 'collector', 'blue'),
    ('3', (2.1,2.1), 0, 'collector', 'blue'),
    ('4', (2.5,2.5), 0, 'collector', 'red'),
    ('5', (2.8,2.8), 0, 'collector', 'red'),
    ('6', (3.2,3.2), 0, 'collector', 'red')
)
ball_info_list = (
    ('Ball', (3,3)),
    ('Ball', (4.0,4.0))
)

world = b2World()
rbl = []                    # robot body list
rrl = []                    # robot role list
bbl = []                    # ball body list
bsl = []                    # ball sprite list

for ID,pos,heading,role,team in robot_info_list:
    body = physics.RobotBody(world, ID, pos)
    size = int(body.width*conf.bg_ratio), int(body.height*conf.bg_ratio)
    role = behaviour.RobotRole(ID, role, team)
    rbl.append(body)
    rrl.append(role)

for name,pos in ball_info_list:
    body = physics.BallBody(world, name, pos)
    bbl.append(body)

print conf.build_wb_robot_data(rbl)
print conf.build_wb_object_data(bbl)