我是一个新手编码器,我有问题,使我的小游戏更新帧每次我选择和加载后,我想要的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,不起作用。
1条答案
按热度按时间ruarlubt1#
控制没有从
contador
返回,因此您的游戏无法继续。控件没有离开
contador
,因为它有一个有效的无限循环:字符串
这将一直持续到胜利条件
vitoria(m)
,但可能没有办法到达胜利条件,因为在这个循环中没有发生任何会改变游戏状态的事情。所以你永远被困在这个循环中,除了contaPassos
在你按下一个键时变大之外,什么都没有改变。