经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
用C语言制作一个最简单的飞机游戏!
来源:IT程序员小文  时间:2018/12/17 10:38:46  对本文有异议

第一步,控制飞机移动

还记得小时候玩的飞机大战游戏吗?按a、s、d、w键后控制飞机的上下左右移动。

在这里我们通过按a、s、d、w键来改变坐标x,y的值,从而控制飞机的移动。

下面是代码:

1.jpg

下面是实现效果:可以实现飞机的上下左右移动

2.jpg

(小编推荐一个学C语言/C++的学习群:788649720,入群即送C/C++全套学习资料,满满的干货!)

在上面的代码中,用到了以下几个函数:

1:输入函数getch(),头文件(#include<conio.h>)

与scanf函数相比,getch()不需要回车就可以得到输入的字符。

2:kbhit()函数

它的作用是在用户有键盘输入时返回1,否则返回0;在没有键盘输入时if(kbhit())下面的语句不会运行,从而避免了用户不输入,游戏就暂停的情况

至于输出飞机图案的那段代码,就不用细说了吧?就是数学问题。

看着挺多,其实可以分为两个部分,一部分是输出飞机图案,另外一部分是控制飞机的移动。

第二步,让飞机发射激光

我们接下来要实现的是当我们按下空格键时,飞机可以发射激光子弹。

在这里我们通过定义一个变量"isFire"用来记录飞机是否处于发射子弹的状态。

这里我们要对两个部分都增加一部分代码:

第一部分,新增加了一个变量isFire,同时利用了if判断语句,

当变量isFire为0时,即没有发射子弹,执行与原来一样的操作,输出飞机上面的空格即可。

而当变量isFire为1时,飞机发射子弹。我们就需要执行else下面的操作,输出激光。

3.jpg

第二部分,增加当用户输入空格时,变量isFire的值变为1。

4.jpg

这是最后的执行效果:

5.jpg

第三步,增加打靶操作

我们可以增加一个靶子‘+’,来控制我们的飞机发射激光击中它。

在这里,我们新增一个变量isKilled用来储存靶子是否被击中。

当isKilled为0时显示靶子,当isKilled为1时靶子消失。

这是我们要增加的代码:

首先新增两个变量,

6.jpg

增加输出靶子的代码:

7.jpg

增加击中靶子后的效果:

8.jpg

这是最后的效果图:

9.jpg

(小编推荐一个学C语言/C++的学习群:788649720,入群即送C/C++全套学习资料,满满的干货!)

如果有像我一样,想要自学C语言的,可以关注我,不定期放教程,由简入难,一起学习,一起进步!

这是本文的源码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. int main()
  5. {
  6. int i, j;
  7. int x = 20;
  8. int y = 20;
  9. char input;
  10. int isFire = 0;
  11. int k = 20; //设立一个靶子,放在第一行的k列上。
  12. int isKilled = 0 ;
  13. while(1)
  14. system("cls"); //清屏函数
  15. if(!isKilled) //输出靶子。
  16. for(j=0;j<k;j++)
  17. printf(" ");
  18. printf("+ ");
  19. }
  20. if(isFire == 0)
  21. for(i=0;i<x;i++)
  22. printf(" "); //输出飞机上面的空格
  23. else
  24. for(i=0;i<x;i++) //输出激光
  25. for(j=0;j<y;j++)
  26. printf(" | ");
  27. if(y+2==k) //+2是因为激光在飞机的正中间,距离飞机最左边两个坐标。
  28. isKilled = 1;
  29. isFire = 0;
  30. //输出飞机图案
  31. printf(" * ");
  32. printf("***** ");
  33. printf(" * * ");
  34. //控制飞机移动
  35. if(kbhit()) //判断键盘是否有输入
  36. input = getch();
  37. if(input == 'a')
  38. y--;
  39. if(input == 'd')
  40. y++;
  41. if(input == 'w')
  42. x--;
  43. if(input == 's')
  44. x++;
  45. if(input == ' ')
  46. isFire = 1;
  47. return 0 ;


 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号