飞机游戏
作者:互联网
此博客链接:
飞机游戏
慕课地址:https://www.icourse163.org/course/HHU-1206797807 。
1.分析
飞机大战游戏中,要求包括移动飞机、发射子弹、敌机移动、消灭敌机、被敌机撞击。
可以根据要求一步一步完成。
2.设计
- 实现移动的飞机。这里以一个*代替飞机。首先在控制台中显示一个*,其次在控制台中规定飞机移动的边界,最后在固定位置显示一个飞机,通过控制*的坐标实现在不同位置显示飞机。通过控制键盘输入的字符来改变飞机移动的方向。
- 给飞机添加子弹。子弹刚被发射时,应该在飞机上方,并且和飞机在同一列。当按键盘某个键时,才应该触发发射子弹,并且子弹在打出之后,应该按照原来的横坐标向上走。以|表示子弹。
- 添加敌机,首先在屏幕的上方显示一个敌机,这里以@表示敌机。其次敌机是可以自动下落的。每次出现的敌机应该在不同位置出现,这样更能增加游戏的趣味性。
- 消灭敌机,当子弹的横坐标和敌机的横坐标相同并且纵坐标相同时,表示子弹击中敌机,这时敌机应该消失。
- 被敌机碰撞。当敌机的横坐标和飞机的横坐标相同,敌机的纵坐标和飞机的纵坐标相同时,表示敌机与玩家飞机碰撞,这时游戏应该结束。
3.关键技术和代码片段
3.1显示飞机,子弹和敌机
3.1.1说明
在显示飞机时,使用双重循环(双重循环的是飞机可移动的范围),第一层循环控制横坐标即空格。第二层循环控制纵坐标即换行。在循环中判断是否到达应该显示飞机的位置,如果到达则显示飞机,同理可现实子弹和敌机。
3.1.2代码片段
for(i=0;i<bord_y;i++) { for(j=0;j<bord_x;j++) { if((i==flay_y)&&(j==flay_x)){//显示飞机 printf("*"); } else if((i==zidan_y)&&(j==zidan_x)){//显示子弹 printf("|"); } else if((i==diji_y)&&(j==diji_x)){ //显示敌机 printf("@"); } else{ printf(" "); } } printf("\n"); }
3.2控制飞机和敌机不同速度
3.2.1说明
飞机和敌机应该是不同速度的,按理说敌机速度应该慢一点,飞机速度应该快一点,这样可以降低游戏难度。可以把敌机速度变慢,这样飞机速度也就相对变快。给敌机增加一个速度的变量,当变量增加到一定的值时,敌机才下落一次就可以实现敌机速度变慢。
3.2.2代码
if(speed<5) { speed++; } if(speed==5){ //敌机边界监测 if((diji_y>bord_y)) { diji_y=0; diji_x=rand()%20; } else diji_y=diji_y++; speed=0; }
4.测试及调试代码
4.1新建运行程序
刚新建一个项目,编辑运行就报错。是 因为程序还在运行,所以链接器写exe文件失败。
重现bug,当正在运行的程序没有关闭,再次编译运行时,就会出现这个错误。把进程结束,重新编译运行就可以解决报错。
4.2测试敌机下落
4.2.1说明
当敌机下降,发射子弹时,按键盘时,控制台就不动了。
4.2.2调试
看代码没有问题呢,查看视频,发现我判断输入时,在每个判断中使用的是当前从键盘获取的字符,所以每次判断不正确时,也需要从键盘重新输入字符。
4.3测试消灭敌机
4.3.1说明
消灭敌机时,发现敌机的速度太快了,我跟不上,降低敌机速度,又发现飞机超出边界时,就没有飞机了,这个边界条件没有考虑。
4.3.1调试
修改边界条件。敌机速度太快在写消灭敌机功能时,没有想好怎样修改。在后面才知道怎么做的。
4.4测试敌机和飞机碰撞
4.4.1说明
当敌机和飞机碰撞后,我想暂停一下,让用户选择是继续游戏还是退出游戏,当输入c时,继续游戏,当输入e时结束游戏,但是从键盘获取输入的字符时,获取不到键盘输入的字符。
4.4.2调试
添加断点发现是getch()没有获取到键盘输入的字符,无论点击任何字符程序都会退出。但是感觉程序一点错也没有,后来请教师弟,经过一番测试,原来是因为我在main()函数中,在循环程序前添加了一个判断分数的语句,当分数小于0时,游戏结束。所以无论我按什么,都显示程序结束。
4.5速度问题
4.5.1说明
当希望敌机速度变慢时,加了sleep()函数,但是飞机速度也会跟着变化,这需要把敌机和飞机的速度分开,当敌机速度变慢时并不影响飞机的速度。
4.5.2设计
给敌机下降添加一个速度判断,如果敌机程序执行5次,敌机才下降一次。
5.效果动态图
6.psp
7.全部代码
git地址:https://github.com/yangping2019102953/planegame.git 。
标签:飞机,游戏,子弹,横坐标,速度,敌机 来源: https://www.cnblogs.com/ping2yingshi/p/14065965.html