当前位置:   article > 正文

C语言——简单的飞机小游戏_c语言飞机小游戏代码

c语言飞机小游戏代码

目录

前言

一、先看代码

二、代码解析

1、飞机图案的打印

2、控制飞机移动

getch() 函数

kbhit() 函数

3、发射激光

4、打击靶子

总结


前言

代码参考了《C语言课程设计与游戏开发实践教程》

飞机小游戏介绍:

玩家通过输入"WSAD,空格"来控制飞机的上下左右移动和发射激光,击落随机出现的目标。这里我们先实现简单的飞机移动,发射激光和打击目标后靶子消失。

一、先看代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <time.h>
  5. int main()
  6. {
  7. int i, j;
  8. int X = 5;
  9. int y = 10; // 飞机的初始位置
  10. int speed = 1; // 飞机的移动速度
  11. char input; // 用户输入的字符,来判断飞机的移动方向
  12. int isFire = 0; // 通过数值来判断飞机是否开火,即发射激光
  13. int ny = 5; // 一个靶子,放在第一行,ny列上
  14. int isKilled = 0; // 目标是否被击中消灭
  15. while (1)
  16. {
  17. system("cls"); // 清屏函数
  18. if (!isKilled) // 输出靶子
  19. {
  20. for (j = 0; j < ny; j++)
  21. printf(" ");
  22. printf("+\n");
  23. }
  24. if (isFire == 0) // 输出飞机上面的空行
  25. {
  26. for (i = 0; i < X; i++)
  27. printf("\n");
  28. }
  29. else // 输出飞机上面的激光竖线
  30. {
  31. for (i = 0; i < X; i++)
  32. {
  33. for (j = 0; j < y; j++)
  34. printf(" ");
  35. printf(" |\n");
  36. }
  37. if (y + 2 == ny) // +2是因为激光在飞机的正中间,距最左边2个坐标
  38. isKilled = 1; // 击中靶子
  39. isFire = 0;
  40. }
  41. // 下面输出一个比较复杂的飞机图案
  42. for (j = 0; j < y; j++)
  43. printf(" ");
  44. printf(" *\n");
  45. for (j = 0; j < y; j++)
  46. printf(" ");
  47. printf("*****\n");
  48. for (j = 0; j < y; j++)
  49. printf(" ");
  50. printf(" * * \n");
  51. if (kbhit()) // 判断是否有输入
  52. {
  53. input = getch(); // 根据用户的不同输入来移动,不必输入回车
  54. if (input == 'a')
  55. y -= speed; // 位置左移
  56. if (input == 'd')
  57. y += speed; // 位置右移
  58. if (input == 'w')
  59. X -= speed; // 位置上移
  60. if (input == 's')
  61. X += speed; // 位置下移
  62. if (input == ' ')
  63. isFire = 1;
  64. }
  65. }
  66. return 0;
  67. }

可以先将代码运行,然后再看注释来理解这个代码。接下来我会对这段代码进行解释。

二、代码解析

1、飞机图案的打印

        这个就是我们飞机的样子,可以理解为是在 3*5 的空间中用空格和 " * " 来表示。当我们理解这个后,就可以知道怎么来输出这个飞机图案了。

        首先,将光标通过 for 循环来移动到需要打印飞机图案的行和列(这里我让光标移动到第5行,第10列的位置);接下来就是打印第一行的飞机图案( printf("  *\n"); );做完这些后你会发现光标已经到飞机图案第二行所在的行的最前面,这个时候就要用 for 循环来让光标移动到飞机第二行图案的前面,其他的位置用空格来占位,打印飞机的第二行符号( printf("*****\n"); );做完这些后按同样的方法将飞机最后一行的符号打印出来( printf(" * * \n"); )。这样我们的飞机图案就出来了。代码如下:

  1. // 下面输出一个比较复杂的飞机图案
  2. for (j = 0; j < y; j++)
  3. printf(" ");
  4. printf(" *\n");
  5. for (j = 0; j < y; j++)
  6. printf(" ");
  7. printf("*****\n");
  8. for (j = 0; j < y; j++)
  9. printf(" ");
  10. printf(" * * \n");

2、控制飞机移动

        上面我们实现了飞机的图案打印,接下来我们来实现飞机的移动。这里我们使用 getch() 函数来实现玩家从键盘输入字符 "WSAD" 来控制飞机的移动。

getch() 函数

getch()——从控制台读取一个字符,但不显示在 屏幕 上,想了解更多看这里

这里我们使用 getch() 函数来输入字符是为了不出现所输入的字符。

kbhit() 函数

kbhit() 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。

想了解更多看这里

 代码如下:

  1. if (kbhit()) // 判断是否有输入
  2. {
  3. input = getch(); // 根据用户的不同输入来移动,不必输入回车
  4. if (input == 'a')
  5. y -= speed; // 位置左移
  6. if (input == 'd')
  7. y += speed; // 位置右移
  8. if (input == 'w')
  9. X -= speed; // 位置上移
  10. if (input == 's')
  11. X += speed; // 位置下移
  12. }

3、发射激光

        实现飞机移动后我们来实现飞机的发射激光。这里我们让玩家按下空格键后飞机发射 " | " 表示激光。同上面飞机的移动,只需在原来的 for 循环中再加一个 if() 判断玩家是否按下了空格键。如果按下我们就让之前定义用来表示飞机是否发射激光的变量变为 1 。通过 0(飞机没有发射激光) 和 1(飞机发射激光) 表示飞机是否发射激光。

代码如下:

  1. if (kbhit()) // 判断是否有输入
  2. {
  3. input = getch(); // 根据用户的不同输入来移动,不必输入回车
  4. if (input == 'a')
  5. y -= speed; // 位置左移
  6. if (input == 'd')
  7. y += speed; // 位置右移
  8. if (input == 'w')
  9. X -= speed; // 位置上移
  10. if (input == 's')
  11. X += speed; // 位置下移
  12. if (input == ' ')
  13. isFire = 1;
  14. }

4、打击靶子

        实现飞机发射激光后,就要来实现飞机打靶了。先定义一个靶子 ny 表示靶子在第一行, 第  ny 列。同上面打印飞机的图案,我们来打印靶子 " + " 。

代码如下:

  1. if (!isKilled) // 输出靶子
  2. {
  3. for (j = 0; j < ny; j++)
  4. printf(" ");
  5. printf("+\n");
  6. }
  7. if (isFire == 0) // 输出飞机上面的空行
  8. {
  9. for (i = 0; i < X; i++)
  10. printf("\n");
  11. }
  12. else // 输出飞机上面的激光竖线
  13. {
  14. for (i = 0; i < X; i++)
  15. {
  16. for (j = 0; j < y; j++)
  17. printf(" ");
  18. printf(" |\n");
  19. }
  20. if (y + 2 == ny) // +2是因为激光在飞机的正中间,距最左边2个坐标
  21. isKilled = 1; // 击中靶子
  22. isFire = 0;
  23. }

这里我把实现飞机发射激光,打印靶子和判断激光是否击中靶子的代码一起放出来。

最后我们将之前的代码组合起来就可以了。

总结

这里我们主要用到了 for 循环,if 判断,getch() 函数输入的知识。

这里我只让靶子生成一次,接下来就是对这个小游戏的升级了,下次再见。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/358946
推荐阅读
相关标签
  

闽ICP备14008679号