做一个飞机游戏,怎样让飞机等待键盘输入同时子弹继续运动???

xjbwd 2005-01-27 09:31:36
看了一些解决方法,好像是用while(!kbhit()){游戏主体程序}
可是小弟试了很长时间还是子弹也在等待键盘输入后才运动

那位大虾能帮忙写段小程序明示一下,谢了!
...全文
423 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
idler 2005-01-27
  • 打赏
  • 举报
回复
while(1)
{
int kb_code;

kb_code = kbhit();
if (kb_code != 0) {
/* 处理键盘输入 */
}

/* 绘画等其他内容 */

delay(/*若干时间,决定于帧频率*/)
}
xjbwd 2005-01-27
  • 打赏
  • 举报
回复
我顶阿
xjbwd 2005-01-27
  • 打赏
  • 举报
回复
我是初学者啊
KeepRun 2005-01-27
  • 打赏
  • 举报
回复
可能是没用对或者函数有问题,你用汇编试试
xjbwd 2005-01-27
  • 打赏
  • 举报
回复
kbhit就是监测键盘的
KeepRun 2005-01-27
  • 打赏
  • 举报
回复
kbhit是不是检测键盘是否有输入?

你用
mov ah , 01h
int 16h
看看
xjbwd 2005-01-27
  • 打赏
  • 举报
回复
在线等啊!
Behard 2005-01-27
  • 打赏
  • 举报
回复
int Get_Key(void)
/* Uses the BIOS to read the next keyboard character */
{
int key, lo, hi;

key = bioskey(0);
lo = key & 0X00FF;
hi = (key & 0XFF00) >> 8;
return((lo == 0) ? hi + 256 : lo);
} /* Get_Key */
Behard 2005-01-27
  • 打赏
  • 举报
回复
需要使用 bioskey 才能检查 Ctrl 等键的
prgmBaggio 2005-01-27
  • 打赏
  • 举报
回复
idler(偶是豆子。。。)
你是做游戏的啊?
你在北京吗??
寻开心 2005-01-27
  • 打赏
  • 举报
回复
如果你是在dos下,还可以有办法做
在dos系统下,系统内存当中有一个地址保存的是所有的键盘输入数据,这个地方就是键盘缓冲区
而这个系统的内存地址,因为是dos模式嘛, 谁都可以访问
直接就可以找到键盘缓冲里面的内容,
键盘缓冲区是一个循环队列,用数组形式组织的,有一个内存记录当前的位置和结束的位置
因此你可以直接判断里面的内容,你可以自己写一个函数FindKeyBuffer来查找这个缓冲区,看里面是否有你要的数据。
比如在你的游戏当中,你只允许用户使用ABCD四个键盘,那么你可以在FindKeyBuffer函数当中发现非指定按键存在就删除它,或者进行其他的处理
整个处理循环就是:
while (1)
{
Render();
switch ( FindKeyBuffer())
{
case a:
....
break;
case b:
....
break;

}
}
KeepRun 2005-01-27
  • 打赏
  • 举报
回复
如果刷屏还是挺复杂的。我以前上大一的时候做过一个DOS的飞行设计游戏,那时水平比较差,其他没什么问题,就是图形太丑。如果你想做得好,就首先要解决内存和图片资源问题,这个应该还比较简单。然后最好能直接写显存,可以利用一块内存做缓冲。一点一点画到屏幕上效果不好,弄得不好会比较闪。
idler 2005-01-27
  • 打赏
  • 举报
回复
多线程的同学,人家是在DOS环境下用Turbo C吧。。。
  • 打赏
  • 举报
回复
如果是DOS程序就用INT 16取键值,
如果是Windows程序的话,对于游戏,最好的办法是GetAsyncKeyState。

xjbwd 2005-01-27
  • 打赏
  • 举报
回复
up
Li_Dinosaur 2005-01-27
  • 打赏
  • 举报
回复
我做过类似的程序.
while(m_flag) //
{
while(bioskey(1)!=0)
/*如果有输入,就处理相应的操作 ,bioskey(1)是得到键盘是否有输.不用等待*/
{
key=getkey();
switch(key)
{
case 25: ...
case 28: ...
}
}
}
echobf 2005-01-27
  • 打赏
  • 举报
回复
不知可不可以这样,
检查键盘缓冲区,如有用户的输入,处理,否则刷屏
庄鱼 2005-01-27
  • 打赏
  • 举报
回复
你可以使用计数器啊。在计数器的触发事件中,你可以处理一个通用序列。这样,你就可以将飞行、子弹轨迹、运动方式作为一组队列交给计数器处理,键盘事件也是这样提交给序列,通过一个简单的轮巡操作就可以解决这些问题,感觉上很像是并行处理!关键在于你所有的事件处理必须做到是相容的,不然容易出现打架的情况。
寻开心 2005-01-27
  • 打赏
  • 举报
回复
看楼主的描述,感觉还是在玩dos这样的东西哪

windows系统是多线程的,消息处理机制就可以避免这个问题

关键是不要等待键盘处理返回才继续运行程序,常规的标准的c语言函数和键盘或者输入相关的,都是在等待输入结构的返回,因为这个是不是windows消息模式,而是流程模式,没有办法多事件并发的。

topcattempid 2005-01-27
  • 打赏
  • 举报
回复

http://www.12Yeah.com/default2.htm?user=yefeiisme
上看看,这种问题的解决方法多的是
加载更多回复(1)

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧