如何在C中创建连续循环,其中循环的每次迭代在循环内部都发生一次

时间:2019-04-28 13:44:39

标签: loops while-loop statements

我正在用c创建游戏。游戏具有一个名为loop()的函数,该函数调用其他函数,并在每个游戏循环中更新它们。 游戏角色只是一个字符图像。 我遇到的问题是,我希望此char图像在进行1次按键后可以连续地沿一个方向移动,但是,我似乎只能使其每次按键移动一次,这意味着需要将其按住不断运动。

我尝试过的事情: 我做了一个while循环,以指定char将连续移动直到它到达屏幕上的边界为止......我这里遇到的问题是while循环嵌套在整个游戏的while循环中,这意味着嵌套循环,在外循环执行一次之前循环遍历嵌套循环范围内的所有迭代,这意味着游戏角色立即跳到游戏边界。

使用if语句尝试了该语句,该语句仅执行一次。

一旦按键,我也尝试使用布尔值读取true,并尝试了几种不同的版本。

我只需要有关如何使char图像根据其存储的速度连续移动并在整个游戏循环的每次迭代中使图像步进一次的想法。

1 个答案:

答案 0 :(得分:0)

int is_moving = 0, speed = 0;
char direction = '0';
while(1){ //game loop
    if(/* north keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 'n';
    }
    else if(/* east keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 'e';
    }
    else if(/* south keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 's';
    }
    else if(/* west keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 'w';
    }

    for(int steps = 0; steps < speed && is_moving; ++steps){
        /* movement logic and other checks go here */
    }
    ++speed;
}

一旦角色停止移动,请确保将is_moving设置为0。显然,这只是一个简单的示例,但听起来好像已经知道了速度的方向分量。
编辑:
在for循环的主体内,您需要检查direction的值,然后适当移动字符。