目录

前言

正文

一、利用scanf控制飞机移动

二、getch控制飞机移动

三、显示复杂的飞机图案

四、发射激光

五、打靶练习

写在最后


前言

在前面弹跳小球的基础上实现一个简单的飞机游戏,主要包括飞机的显示、控制移动、显示复杂图案、发射激光、打靶练习等功能。

目前的飞机还很简单,大家不要着急,一步一步来,在后面会实现更复杂的飞机游戏效果。比如

  1. 如何让靶子移动起来?
  2. 如何统计和显示击中得分?
  3. 如何实现子弹散弹效果” />

    最基础的代码如下

    #include#includeint main(){int i,j;int x=5;int y=10;char input;while(1){system("cls");//输出飞机上面的空行for(i=0;i<x;i++)   printf("\n");//输出飞机左边的空格 for(j=0;j<y;j++)   printf(" ");printf("*");//输出飞机 printf("\n");scanf("%c",&input);if(input=='a');   y--;if(input=='d');   y++;if(input=='w');   x--;if(input=='s');   x++;}return 0; } 

    二、getch控制飞机移动

    scanf()函数要求每输入一个字符按回车键后才能执行,交互效果不好,因此第二步使用一个新的输入函数getch()(#include),不需要回车就可以得到输入的控制字符。另外,kbhit()函数在用户有键盘输入时返回1,否则返回 0;在没有键盘输入时 if(kbhit())下面的语句不会运行,从而避免出现用户不输入,游戏就暂停的情况。

    #include#include#include int main(){int i,j;int x=5;int y=10;char input;while(1){system("cls");for(i=0;i<x;i++)   printf("\n");//输出飞机上面的空行for(j=0;j<y;j++)   printf(" ");//输出飞机左边的空格 printf("*");//输出飞机 printf("\n");#include#include#include int main(){int i,j;int x=5;int y=10;char input;while(1){system("cls");for(i=0;i<x;i++)   printf("\n");//输出飞机上面的空行for(j=0;j<y;j++)   printf(" ");//输出飞机左边的空格 printf("*");//输出飞机 printf("\n");if(kbhit())  // 判断是否有输入{input = getch();  // 根据用户的不同输入来移动,不必输入回车if (input == 'a')   y--;  // 位置左移if (input == 'd')y++;  // 位置右移if (input == 'w')x--;  // 位置上移if (input == 's')x++;  // 位置下移}}return 0; } }return 0; } 

    三、显示复杂的飞机图案

    四、发射激光

    空格键后让飞机发射激光子弹,即在飞机上方显示一列竖线’|’。第四步定义变量isFire,用来记录飞机是否处于发射子弹的状态。

    • 当isFire等于1时,将在飞机的正上方输出激光竖线。
    #include#include#include int main(){int i,j;int x=5;int y=10;char input;int isFire;while(1){system("cls");if(isFire==0){   for(i=0;i<x;i++)      printf("\n");}else{    for(i=0;i<x;i++){for(j=0;j<y;j++)   printf(" ");printf("  |\n");}     isFire=0;} //下面输出一个复杂的飞机图案for(j=0;j<y;j++)   printf(" ");// 输出飞机上面的空行  printf("  *\n");//头for(j=0;j<y;j++)   printf(" ");//头下一行左边的空格 printf("*****\n");//身子 for(j=0;j<y;j++)   printf(" ");printf(" * * \n");     if(kbhit())  // 判断是否有输入{input = getch();  // 根据用户的不同输入来移动,不必输入回车if (input == 'a')   y--;  // 位置左移if (input == 'd')y++;  // 位置右移if (input == 'w')x--;  // 位置上移if (input == 's')x++;  // 位置下移if (input == ' ')isFire = 1;}}return 0; } 

    五、打靶练习

    第五步在第一行通过定义一个变量ny,增加一个靶子‘十‘,控制飞机发射激光击中它,变量isKilled 用来存储是否被击。

    • isKilled 等于0显示靶子;
    • isKilled 等于1时不再显示靶子
    #include #include #include int main(){int i,j;int x = 5; int y = 10;char input;int isFire = 0;int ny = 5; // 一个靶子,放在第一行,ny列上int isKilled = 0;while (1){system("cls");   // 清屏函数if (!isKilled)  // 输出靶子{for (j=0;j<ny;j++)printf(" ");printf("+\n");}if (isFire==0) // 输出飞机上面的空行{for(i=0;i<x;i++)printf("\n");}else   // 输出飞机上面的激光竖线{for(i=0;i<x;i++){for (j=0;j<y;j++)printf(" ");printf("  |\n");}if (y+2==ny)  // +2是因为激光在飞机的正中间,距最左边2个坐标isKilled = 1; // 击中靶子isFire = 0;}// 下面输出一个复杂的飞机图案for (j=0;j<y;j++)printf(" ");printf("  *\n");for (j=0;j<y;j++)printf(" ");printf("*****\n");for (j=0;j<y;j++)printf(" ");printf(" * * \n");if(kbhit())  // 判断是否有输入{input = getch();  // 根据用户的不同输入来移动,不必输入回车if (input == 'a')   y--;  // 位置左移if (input == 'd')y++;  // 位置右移if (input == 'w')x--;  // 位置上移if (input == 's')x++;  // 位置下移if (input == ' ')isFire = 1;}}return 0;}

    写在最后

    点赞,你的认可是我创作的动力!

    ⭐收藏,你的青睐是我努力的方向!

    ✏️评论,你的意见是我进步的财富!