我必须在控制台上用C语言编写一个游戏。例如,当我按下空格键时,我想数一数。但只有在我按下键的时候。当我再次松开钥匙时,它应该停止计数,并在我再次按下时重新开始。我想要它像蛇一样,我的意思是它不会因为输入而停止,当用户按下它时,它会得到输入。
我试过使用kbhit,它计数,当我按下某个键时,它永远不会打印任何内容,即使我再次按下某个键。
while (1) {
h = kbhit();
fflush(stdin);
if (h) {
printf("%d\n", a);
a += 1;
} else {
printf("nothing\n");
}
}
我什么也不期待什么也不期待什么也不期待按下键0什么也不期待再次按下键1抓住键2 3 4
谢啦
使用
int c;
while (1)
{
或:
int c;
bool done = false;
while (!done)
{
有一个像这样的循环体:
if (kbhit())
{
switch (c = getch())
{
case 0:
case 0xE0:
switch (c = getch())
{
/* process "extended" key codes */
}
break;
/* process "normal" key codes */
case ...:
...
}
}
/* add timer delay here! */
}
在其中的某个地方,您应该从函数中设置
delay=true
或return
,但是您希望设置循环终止。(我通常建议您专门为循环体设置一个函数。)
您应该可以访问一个名为“delay”或“sleep”的函数(
sleep()
是Windows操作系统的函数),该函数允许您在循环之间进行延迟,50到100毫秒之间就足够了。
如果您希望变得非常复杂,您可以跟踪自上次循环以来经过的时间量,并适当延迟。然而,对于像Snake这样的游戏,你可以很容易地跳过所有这些,只需使用固定的延迟值。
现在,我想问一个没有被问到的问题:你为什么要玩弄旧的
从代码中,您没有将按下的键存储到变量中。请尝试一下这个方法。
前3行显示了如何将键盘命中变量存储到h中。其余的将递增a值。
while (1) {
/* if keyboard hit, get char and store it to h */
if(kbhit()){
h = getch();
}
/***
If you would like to control different directions, there are two ways to do this.
You can do it with if or switch statement.
Both of the examples are written below.
***/
/* --- if statement version --- */
if(h == 0){
printf("%d\n", a);
a += 1;
}
else{
printf("nothing\n");
}
/* --- switch statement version --- */
switch(h)
{
case 0:
printf("%d\n", a);
a += 1;
break;
default: printf("nothing\n");
break;
}
}
我尝试使用getch()和kbsit()读取用户的输入,但它似乎无法识别按键被按下。 此代码打印“开始”,按下键时不打印任何内容。使用getch()读取和打印哪怕一个字符,而不使用循环,我都不走运。
在试图使Do/While循环工作时,我很难找到正确的语法。我想用C语言编写一个计算器,让用户输入一个字符串,然后它做它的事情并打印结果,询问用户是否想再去一次。 到目前为止,我有一个简单的main函数,只是为了让Do/While循环正确,但是当我输入Y或Y时,程序只是问我是否想再次继续,它没有给我再次运行“计算器”部分的机会。我做错了什么?
这是我的设备 这是我的消息正文作者 我的问题是: 为什么结果似乎不正确?我被放在@JsonRootName(“Facility”)上,并且还启用了包装根特性 我错过了什么
我有一个线性布局(LinearLayout),其中有几个编辑文本(EditText),它们都是通过编程方式创建的(不是用XML布局),尤其是没有id。 当我在其中一个中键入,并且下一个(各自对焦)被禁用,并且我按下键盘上的Next IME按钮时,焦点前进到禁用的,但我不能在其中键入任何内容。 我所期望的是焦点前进到下一个启用的编辑文本。除了通过EditText禁用EditText之外,我还尝试了。
我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >