目录
前言
正文
一、利用scanf控制飞机移动
二、getch控制飞机移动
三、显示复杂的飞机图案
四、发射激光
五、打靶练习
写在最后
前言
在前面弹跳小球的基础上实现一个简单的飞机游戏,主要包括飞机的显示、控制移动、显示复杂图案、发射激光、打靶练习等功能。
目前的飞机还很简单,大家不要着急,一步一步来,在后面会实现更复杂的飞机游戏效果。比如
- 如何让靶子移动起来?
- 如何统计和显示击中得分?
- 如何实现子弹散弹效果” />
最基础的代码如下
#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;}
写在最后
点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!