我正在写一个小型控制台冒险游戏,我遇到了一些问题。
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