C语言飞机大战游戏
辉小歌 人气:0一、项目描述和最终的成果展示
项目描述: 显示出一个飞机,并可以控制移动,发出激光,打靶练习。
效果展示:
二、输出一个飞机模型
先输出一个飞机模型。后面再进一步完成控制飞机的功能。
代码如下:
//输出飞机图案 #include<stdio.h> #include<stdlib.h> #include<conio.h> int main(void) { int i,j; int x=10; int y=10; char input; //输出飞机上面的空行 for(i=0;i<x;i++) { printf("\n"); } //输出飞机左边的空格 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"); return 0; }
效果图如下:
三、实现控制飞机移动的功能
用scanf()函数来实现控制飞机移动的功能
代码如下:
#include<stdio.h> #include<stdlib.h> //用scanf来完成飞机的移动 int main(void) { 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(" *\n"); for(j=0;j<y;j++) { printf(" "); } printf("*****\n"); for(j=0;j<y;j++) { printf(" "); } printf(" * * \n"); scanf("%c",&input); if(input == 'a' || input == 'A') { y--; } if(input == 'd' || input == 'D') { y++; } if(input == 'w' || input == 'W') { x--; } if(input == 's' || input == 'S') { x++; } } return 0; }
效果图如下:
你会发现一个弊端 就是它会显示你输入了啥,这样是特别的不友好的。
所以我们要用 getch() 这个函数, 它是不会显示回显的。即,不会出现我们输入的是啥。
这样就很好了,达到了我们的目的。
用getch()函数来实现控制飞机移动的功能
代码如下:
#include<stdio.h> #include<stdlib.h> #include<conio.h> //用scanf来完成飞机的移动 int main(void) { 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(" *\n"); for(j=0;j<y;j++) { printf(" "); } printf("*****\n"); for(j=0;j<y;j++) { printf(" "); } printf(" * * \n"); input=getch(); if(input == 'a' || input == 'A') { y--; } if(input == 'd' || input == 'D') { y++; } if(input == 'w' || input == 'W') { x--; } if(input == 's' || input == 'S') { x++; } } return 0; }
效果图如下:
四、添加发射激光功能
代码如下:
#include<stdio.h> #include<stdlib.h> #include<conio.h> //用getch来完成飞机的移动 int main(void) { int i,j; int x=10; int y=10; char input; int isFire=0;//用来判断是否发射 while(1) { 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"); input=getch(); fflush(stdin); system("cls"); if(input == 'a' || input == 'A') { y--; } if(input == 'd' || input == 'D') { y++; } if(input == 'w' || input == 'W') { x--; } if(input == 's' || input == 'S') { x++; } if( input == ' ') isFire = 1; } return 0; }
效果图如下:
五、添加靶子和分数统计功能
代码如下:
#include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<time.h> #include<conio.h> //用getch来完成飞机的移动 int main(void) { int i,j; int x=10; int y=10; char input; int isFire=0;//用来判断是否发射 int score=10; int ny = 30; // 靶子的位置 int isKilled = 0; //判断是否击中 int yanshi=0; // 延时靶子的时间 system("color 09"); while(1) { if(yanshi<66)//延时 让靶子显示 { yanshi++; } else { srand(time(0)); ny=rand()%80+5; yanshi=0; } printf("分数:%d\n",score); if(!isKilled)//没有击中靶子,继续显示靶子 { for(j=0;j<ny;j++) { printf(" "); } printf("▼\n"); } else//说明击中靶子,刷新靶子 { yanshi=66; isKilled=0; } 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"); input=getch(); fflush(stdin); system("cls"); if(input == 'a' || input == 'A') { y--; } if(input == 'd' || input == 'D') { y++; } if(input == 'w' || input == 'W') { x--; } if(input == 's' || input == 'S') { x++; } if( input == ' ') isFire = 1; if( (ny==y+2) && (input==' ') )//判断是否击中靶子 { isKilled=1; score=score+5;//分数增加 } } return 0; }
效果图如下:
加载全部内容