【问题标题】:How to Create asteroids on the x and y axes如何在 x 和 y 轴上创建小行星
【发布时间】:2019-07-25 19:27:17
【问题描述】:

我在C 中使用Asteroids (Atari)。我为小行星设计了ADT,所有ADT都与1个小行星有关。

我需要在随机位置创建一个小行星,但随机在(0, y)(x, 0)

我有我的功能asteroid_create():

asteroid_t *asteroid_create(float x, float y, float radio){
    asteroid_t *ast = malloc(sizeof(asteroid_t));

    ast->x_pos = x;
    ast->y_pos = y;

    ast->radio = radio;

    ast->vx = rand_float((1000/ast->radio)-100,(1000/ast->radio)+100);
    ast->vy = rand_float((1000/ast->radio)-100,(1000/ast->radio)+100);

    ast->angle = rand_float(0,2*PI);

    size_t rock_rand = rand() % ASTEROIDS_TYPES;
    ast->name_rock = rocks_dictionary[rock_rand];

    return ast;
}

这会创建一个具有某些固定变量的小行星。然后,在另一个文件中,我创建了一个小行星列表,并插入了所需数量的小行星。

bool asteroids_insert(list_t* l){
    asteroid_t *ast = asteroid_create(rand_float(0,WINDOW_WIDTH),rand_float(0,WINDOW_HIGH),AST_INITIAL_RADIO);
    if(!list_append(l,ast))
        return false;
    return true;

}

主要是:

for(size_t i=0; i< ASTEROIDS_INITIAL;i++){
        asteroids_insert(list_asteroids);
    }

通过这种方式,我可以在屏幕上的任意位置创建小行星。我只需要在 y 轴或 x 轴上生成它们。

以我的方式,我想不出我怎么能做我需要的。我该怎么做才能让 asteroid_create() 随机接收 (0, y)(x, 0) 中的参数位置?

【问题讨论】:

    标签: c malloc abstract-data-type


    【解决方案1】:

    假设您将y 轴向下弯曲到左侧,这样实际上它就变成了x 轴的“负部分”。

    -MAX_Y+MAX_X之间生成一个随机数value

    如果结果数字是0,则您的点是(0, 0);如果是肯定的,你的观点是(value, 0),否则是(0, -value)

    注意:如果您的x 轴大于y 轴,这将更有可能在x 轴上生成点。

    【讨论】:

    • 非常感谢!我正是需要那个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多