C语言初学者——飞机大战(学函数前)
这是我瞎写的一个飞机大战,就只用到了学习函数前的知识,刚学习c语言的人可以看看
编译预处理命令
这些都是比较常用的,初学者一般都需要掌握
#include<stdio.h>
#include<time.h>//srand
#include<stdlib.h>//rand
#include<windows.h>
#include<conio.h>
变量定义
1.地图构建:20*20
int i[20][20]= {0}; //0空1自2敌3弹
2.坐标表示,分数数量及判断敌机子弹是否存在的变量:
int x1=9,y1=19,x2,y2,x3,y3,di=0,fenshu=0,zidan=0;
3.循环用量(一般为i,j这里用a,b)
int a,b;//构图
4.重新开始
char cx;//重新开始
5.判断移动需要的变量
char yidong;
地图构建
20*20的地图,分为空白部分,玩家飞机,敌机,子弹,为他们分别设置位置,即坐标。x1y1为玩家坐标,x2y2为敌机坐标,x3y3为子弹坐标,具体代码如下:
for(a=0; a<20; a++)
for(b=0; b<20; b++)
i[a][b]=0;//地图重置
i[y1][x1]=1;//玩家坐标
i[y2][x2]=2;//敌机坐标
if(zidan==1) i[y3][x3]=3;//子弹坐标
for(a=0; a<20; a++) {
for(b=0; b<20; b++) {
if(i[a][b]==1)
printf("*");//玩家
else if(i[a][b]==2)
printf("※");//敌机
else if(zidan==1&&i[a][b]==3)
printf("◎");//子弹
else
printf(" ");//空格
}
printf("\n");
}
加上个死循环地图构建就完成了
玩家移动
这东西简单,话不多说,上代码
if(kbhit()) {
yidong=getch();
if(yidong=='w'&&y1>0)
y1--;
else if(yidong=='s'&&y1<19)
y1++;
else if(yidong=='a'&&x1>0)
x1--;
else if(yidong=='d'&&x1<19)
x1++;
else if(yidong==' ') {
x3=x1;
y3=y1-1;
zidan=1;//这部分不是移动,是发射子弹
}
}
tip:kbhit用来判断玩家是否按下键盘
敌机
敌机需要做到在第一排随机创建(rand函数),每次往下一格(y+1),在碰到子弹或到达底线后重新创建。
if(di==0) {
x2=rand()%20;
y2=0;
di=1;
}//第一排随机位置,di为敌机是否需要刷新的判断标准
if((y3==y2||y2==y3-1)&&x3==x2) {
fenshu++;
zidan=0;
x2=rand()%20;
y2=0;
di=1;
}//死亡判定(其实直接di=0就行了,不小心写多了)
if(y2==20)
di=0;
移动只需y2++;
即可
子弹
子弹写法和敌机写法类似,代码在移动,敌机被击中,创建地图中都已涉及到
只需添加:y3--;
即可(用于子弹移动)
Sleep
等待时间后响应
tip: s要大写!单位:毫秒
system(“cls”);
清屏
游戏失败
玩家与敌机出在同一个位置(即x1==x2&&y1==y2)时游戏结束,并设置按下空格键重新开始
if(y1==y2&&x1==x2)
break;
cx=0;
printf("游戏失败!");
printf("\n输入空格重新开始游戏");
cx=getch();
if(cx==32)
goto a; //回到总循环,虽然goto被骂的很惨,但毕竟教的比较早
完整程序
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
main() {
srand((unsigned)time(NULL));
int i[20][20]= {0}; //0空1自2敌3弹
int x1=9,y1=19,x2,y2,x3,y3,di=0,fenshu=0,zidan=0;
int a,b;//构图
char cx;//重新开始
char yidong;
a:while(1) {
if(di==0) {
x2=rand()%20;
y2=0;
di=1;
}
for(a=0; a<20; a++)
for(b=0; b<20; b++)
i[a][b]=0;
i[y1][x1]=1;
i[y2][x2]=2;
if(zidan==1) i[y3][x3]=3;
for(a=0; a<20; a++) {
for(b=0; b<20; b++) {
if(i[a][b]==1)
printf("*");
else if(i[a][b]==2)
printf("※");
else if(zidan==1&&i[a][b]==3)
printf("◎");
else
printf(" ");
}
printf("\n");
}
if((y3==y2||y2==y3-1)&&x3==x2) {
fenshu++;
zidan=0;
x2=rand()%20;
y2=0;
di=1;
}
printf("分数:%d",fenshu);
Sleep(5);
y2++;
y3--;
system("cls");
if(y2==20)
di=0;
if(y3==0)
zidan=0;
if(kbhit()) {
yidong=getch();
if(yidong=='w'&&y1>0)
y1--;
else if(yidong=='s'&&y1<19)
y1++;
else if(yidong=='a'&&x1>0)
x1--;
else if(yidong=='d'&&x1<19)
x1++;
else if(yidong==' ') {
x3=x1;
y3=y1-1;
zidan=1;
}
}Sleep(5);
if(kbhit()) {
yidong=getch();
if(yidong=='w'&&y1>0)
y1--;
else if(yidong=='s'&&y1<19)
y1++;
else if(yidong=='a'&&x1>0)
x1--;
else if(yidong=='d'&&x1<19)
x1++;
else if(yidong==' ') {
x3=x1;
y3=y1-1;
zidan=1;
}
}
if(y1==y2&&x1==x2)
break;
}
cx=0;
printf("游戏失败!");
printf("\n输入空格重新开始游戏");
cx=getch();
if(cx==32)
goto a;
}
这样一个简易的飞机大战就做成了,感谢各位观看
希望各位能留下评论和点赞哈,谢谢