社区
新手乐园
帖子详情
做一个飞机游戏,怎样让飞机等待键盘输入同时子弹继续运动???
xjbwd
2005-01-27 09:49:45
看了一些解决方法,好像是用while(!kbhit()){游戏主体程序}
可是小弟试了很长时间还是子弹也在等待键盘输入后才运动
那位大虾能帮忙写段小程序明示一下,谢了!
...全文
209
7
打赏
收藏
做一个飞机游戏,怎样让飞机等待键盘输入同时子弹继续运动???
看了一些解决方法,好像是用while(!kbhit()){游戏主体程序} 可是小弟试了很长时间还是子弹也在等待键盘输入后才运动 那位大虾能帮忙写段小程序明示一下,谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuziyu
2005-01-27
打赏
举报
回复
转贴,呵呵
yuziyu
2005-01-27
打赏
举报
回复
C语言设计并行处理
发表日期:2003年4月22日 出处:TC256网站 作者:吴进 已经有3028位读者读过此文
C语言设计并行处理
2002-8-12
要编写一个好的游戏,必需使用到并行机制。并行机制要涉及到一个重要的语句,那就是While语句。你可能不禁会问:那不就是循环吗?对,并行机制就是要利用循环,即游戏循环(Game Loop)。实际上,所有程序并行的本质就是循环,连Windows也不例外。Windows号称多任务操作系统,实际上,在一个时间内CPU只能执行一条指令。所谓多任务,不过是并行的假象而已。在一个循环中分别执行各程序的一条语句,由于执行完该循环速度极快,于是看起来好象是多个任务同时工作一样。还有...,哎,不用费口舌了。相信你对并行有了一个初步应像,这就可以了,让我们继续。
不是有一种for循环吗,为什么不用它呢?对,for循环也可以。只要可以构成死循环的语句都可以。死循环呀,听起来有点可怕。其实解决死循环简单的很,用break语句,再不行用goto语句,一切死循环都轻松搞定。现在就让我们来练一下兵:
main()
{ int key;
while(1)
{if(kbhit())
{key=getch();
if(key==0){getch();continue;}
if(key==27)break;
if(key==13)printf("\n");/*支持回车*/
if(key==8&&wherex()>0)
{gotoxy(wherex()-1,wherey());/*支持退格*/
putch(' ');
}
printf("%c",key);/*输出字符*/
}
}
}
上面就是一个典型的文本编辑器界面,现在让我们来修改一下该程序,在屏幕右上角做一个计时器和一个计算击键次数的计数器,该计时器与计数器与文本编辑互不干扰,达到并行的效果。
main()
{ int key,x,y,n=0;
clrscr();
while(1)
{if(kbhit())
{key=getch();
if(key==0){getch();continue;}
if(key==27)break;
if(key==13)printf("\n");/*支持回车*/
if(key==8&&wherex()>0)
{gotoxy(wherex()-1,wherey());/*支持退格*/
putch(' ');
gotoxy(wherex()-1,wherey());
continue;
}
printf("%c",key);/*输出字符*/
n++;/*计数*/
}
x=wherex();y=wherey();
gotoxy(55,1);
printf(" %d sec,keydown times %d ",clock()/18,n);/*记时,显示*/
gotoxy(x,y);
}
}
现在我们实现了简单的并行机制。然而,该循环有个缺点:太耗CPU,如果不按下任何键,CPU也会不停地刷新计数与记时器。于是我们引入了周期的概念,使一个周期只执行一次语句,这样即节省CPU,使用要求执行速度不同的并行语句也容易控制。程序入下:
/*并行结构*/
#define delay_time 4; /*定义的周期长度*/
main()
{ long now_time=0,old_time,time_count=0;
char done=0; /*使用done标志使每一个周期只执行一次指令*/
clrscr();
old_time=clock();
while(!kbhit())
{now_time=clock();
if(now_time-old_time {if(!done)
{puts("计算!"); /*该语句可替换为自己需要并行的语句块*/
done=1;
}
}
else
{old_time=now_time;done=0;}
}
}
如果上面的puts语句换成两个沿对角线移动小球的语句,不就可以实现两个小球同时运动了吗?在程序中动态地调整delay_time的值,还可以确定小球移动的快慢。这只是一个提示,只要遵循该结构,还可以实现好多有趣的效果,读者可以自己去研究。
liu_jun_
2005-01-27
打赏
举报
回复
给分,我就告诉你。:)
我估计你把子弹运动的程序写在kbhit()之后的函数中了。
我就建议你把子弹运动写成一个完整的函数,一直运动到目标。
而且while(!kbhit()){游戏主体程序}这中结构可是不行的。
你不按的时候就执行,按的时候就不执行。
这样
while(1)
{kbhit();
case 如果是ESC就 break;
case 按开火 就 fire();
}
来吧给分吧。
zdwaiter
2005-01-27
打赏
举报
回复
多线程
zhaoray
2005-01-27
打赏
举报
回复
另开辟一个线层
xjbwd
2005-01-27
打赏
举报
回复
在线等啊!
xjbwd
2005-01-27
打赏
举报
回复
up
【C++】
做
一个
飞机
空战小
游戏
(一)——使用getch()函数获得键盘码值
最近想用c++
做
一个
小
游戏
,
游戏
的主要内容是利用键盘控制
一个
飞机
躲避和击落屏幕顶部随机掉落敌方炮弹,
飞机
被敌方炮弹击中则减掉一条命,
飞机
也可以发射炮弹反击,每击落
一个
敌方炮弹,则有相应积分。
游戏
的思路就是利用w、s、a、d四个按键来控制
飞机
的移动方向,w——向上,s——向下,a——向左,d——向右;按空格键
飞机
发射反击炮弹。 那么程序如何知道键盘哪个键被按下了呢?c++中getch()这个函数可以实现这个功能,当键盘某个按键(或某个组合按键)被按下时,利用这个函数可以获得该按键(组合)值。
C语言实现
飞机
大战
游戏
Demo
效果图 O表示玩家,W表示敌机 源代码 //Control.h文件 #ifndef Console_h #define Console_h //光标跳转到指定位置 void gotoxy(int x, int y) { COORD pos = {y,x}; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄 SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体
#打
飞机
游戏
打
飞机
游戏
这个
游戏
的原理比较简单,我们要实现这个
游戏
,首先要实现的就是怎么打印出
飞机
,和怎么操控
飞机
的移动,显然这些用简单的循环语句和分支语句就能实现。而敌机出现的话就更简单了,只要随机生成敌机的水平坐标,竖直坐标就让敌机从顶部落下(当然,你也可以随机生成竖直坐标),我们只需要控制随机数的范围就好了 例如 rand()%30; 随机生成0-29范围内的随机数。 其次,我们要
做
的就是如何...
c语言入门级小
游戏
·
飞机
(2.0版)| 激发你的编程兴趣(100~150行代码)
声明:本
游戏
参考《c语言课程设计与
游戏
开发实践教程》。首先放
一个
小
游戏
视频效果(右边界有点凌乱,影响美观,但不影响效果,多多见谅😋)game
飞机
2.0版如何?这个单单用字符来完成的简略版小
游戏
,很适合c语言的新手锻炼实践能力(理论即可)。这个2.0版的
飞机
小
游戏
实际上是在我上次发的1.0版基础上优化的()相比之下,2.0版不再有画面和光标的频闪问题,发射方式从激光变成
子弹
,障碍物可移动并重现,有计分功能。
Python初学者---
飞机
大战小
游戏
--------------------------------------Python初学者 学习历程分享------------------------------------ 小
游戏
-
飞机
大作战
游戏
说明: 1.敌机随机发射
子弹
2.玩家
飞机
可以按上下左右或者按字母‘a’,‘s’,‘w’,‘d’键控制
飞机
位置,按空格键发射
子弹
3.
飞机
碰到对方
子弹
时,
游戏
结束,程序退出(因为还不会写弹出提示的窗口) 思路说明: 1,创建
一个
飞类机,派生出敌机和玩家
飞机
,
飞机
有移动,发射
子弹
,显示的行为 2,创建
一个
子
新手乐园
33,316
社区成员
41,770
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章