我正在寫一個小型控制檯冒險遊戲,我遇到了一些問題。
1.輸入有點遲緩,我使用while循環(while(getch()=='w'))。第一次按下某個鍵後,沒有任何事情發生(必須按兩下),並且如果您切換方向(按A/D/S鍵),它也不會在第一次響應。如果你拿着鑰匙,它可以正常工作。這怎麼解決?
2.這是我用來刷新遊戲的功能(當按下一個鍵渲染遊戲場景):C++控制檯遊戲輸入&&刷新功能
void refresh(char map[Y][X])
{
system("cls");
for (int i = 0; i<UP; i++)
{
cout<<endl;
}
for (int i = 0; i<Y; i++)
{
for (int k = 0; k<LEFT; k++)
{
cout<<" ";
}
for (int j = 0; j<X; j++)
{
cout<<map[i][j];
}
cout<<endl;
}
}
當我使用這個函數一次,它的確定,但是當他們鍵被按下或持有多時間 - 遊戲場開始閃爍。我認爲我只需要重繪一部分場地(進行改變/移動的場地),而不是整個場地。你能提供任何想法如何做到這一點?
輸入的示例代碼:
while(getch() == 'w')
{
if (map[y-1][x]!= WALL)
{
map[y-1][x] = CHARACTER;
map [y][x] = ' ';
y--;
refresh(map);
Sleep(SPEED); // this is unnecessary, SPEED is 0, I just kept it for tests
}
}
基本上,主要功能如下:
int main()
{
(...) Variables (...)
generateMap(FROM FILE);
refresh(); // First initialization of the field
while (getch() != 'q') // While not quitting
{
while(getch() == 'w')
{
if (THE FIELD ABOVE IS NOT OCCUPIED)
{
setSomeVariables();
refresh(THE GAMEFIELD);
}
}
}
while(getch() == 's')
{
if (THE FIELD BELOW IS NOT OCCUPIED)
{
setSomeVariables();
refresh(THE GAMEFIELD);
}
}
}
while(getch() == 'a')
{
if (THE FIELD ON THE LEFT IS NOT OCCUPIED)
{
setSomeVariables();
refresh(THE GAMEFIELD);
}
}
}
while(getch() == 'd')
{
if (THE FIELD ON THE RIGHT IS NOT OCCUPIED)
{
setSomeVariables();
refresh(THE GAMEFIELD);
}
}
}
return 0;
}
'getch()'第一次返回的值是多少? – Vlad 2010-10-28 09:10:14
第一次它不返回任何東西(循環不運行),我已經添加了上面的代碼。 – Winis 2010-10-28 12:12:23