c++ 控制台应用程序游戏在调用另一个函数中的函数后不会更新帧

kq0g1dla  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(106)

我是一个新手编码器,我有问题,使我的小游戏更新帧每次我选择和加载后,我想要的Map移动,这开始发生后,我呼吁功能“contador”(计数器)内的功能“sokoban”(是的,板条箱游戏),所以contador功能可以写的步骤,我已经采取了一个文件名为“passos.txt”(步骤)。
我相信问题可能出在这两个函数上,但如果需要的话,我会提供完整的代码,这不是荒谬的长,但它的600多行。

int contador(int m[10][10]) // conta o número de passos
{

    ofstream aqpassos; // cria o stream ofstream para gravação
    aqpassos.open("passos.txt"); // abre o arquivo passos.txt
    int contaPassos = 0; // conta o número de passos
    int x = 0, y = 0; // posição inicial do personagem
    char tecla; // tecla pressionada
    do
    {
        if (_kbhit()) { // se alguma tecla for pressionada
            tecla = _getch(); // pega a tecla pressionada
            if (tecla == 77 || tecla == 75 || tecla == 80 || tecla == 72) { // se a tecla for uma das setas
                contaPassos++; // conta o número de passos
                aqpassos << contaPassos << endl; // grava o número de passos no arquivo passos.txt

            }
        }
    } while (!vitoria(m)); // enquanto o jogo não for vencido, o jogo continua
    //aqpassos.close(); // fecha o arquivo passos.txt
    return contaPassos; // retorna o número de passos

} // it wont write the steps to passos.txt

void sokoban(int m[10][10], int& x, int& y, bool& jogando)
{
    int contaPassos = 0;
    while (!vitoria(m))
    {
        imprimir(m, x, y); // imprime o mapa
        posicaoxy(0, 0); /// posiciona a escrita no console no eixo x,y. A posição 0,0 é a do canto superior esquerdo.
        movimentar(m, x, y); // movimenta o personagem
        contador(m); // conta o número de passos.
    }

    jogando = false;
    system("cls");
    cout << "\nVocê venceu!\nAperte qualquer tecla para retornar ao menu.\n";

    char tecla = _getch();
    system("cls");
    menu(m, x, y, jogando);
}

个字符
我尝试在while之外调用contador函数,不起作用,尝试移动contador函数,不起作用,尝试在contador函数中将do-while变为just a while,不起作用。

ruarlubt

ruarlubt1#

控制没有从contador返回,因此您的游戏无法继续。
控件没有离开contador,因为它有一个有效的无限循环:

do
    {
        if (_kbhit()) { // se alguma tecla for pressionada
            tecla = _getch(); // pega a tecla pressionada
            if (tecla == 77 || tecla == 75 || tecla == 80 || tecla == 72) { // se a tecla for uma das setas
                contaPassos++; // conta o número de passos
                aqpassos << contaPassos << endl; // grava o número de passos no arquivo passos.txt

            }
        }
    } while (!vitoria(m));

字符串
这将一直持续到胜利条件vitoria(m),但可能没有办法到达胜利条件,因为在这个循环中没有发生任何会改变游戏状态的事情。所以你永远被困在这个循环中,除了contaPassos在你按下一个键时变大之外,什么都没有改变。

相关问题