本文实例为大家分享了C语言实现字符飞机大战的具体代码,供大家参考,具体内容如下
先看看效果吧
大一的时候做的,当时没有好的代码习惯,所以代码有点乱,代码直接复制就能用了,功能可以自行拓展。

代码:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main () {
int life=6;//生命
int i,j/*循环*/,plane_x,plane_y/*飞机所在坐标*/,a;
plane_x=8,plane_y=15;//初始化飞机
char getc; //方向获取
/*构造地图*/
int score=0; //得分 // 1 1 1 1 1 1 1
char Map[17][17]= { //0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//0
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//1
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//7
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//8
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//9
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//10
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//11
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//12
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//13
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//14
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//15
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};//16
for(;;) { //实现游戏循环
int x,y;//随机出现的敌机
x=rand()%15+1;
y=rand()%14+1;
Map[y][x]=4;
Map[plane_y][plane_x]=2;//初始化飞机
for(i=0; i<17; i++) { //打印地图
for(j=0; j<17; j++) {
if(Map[i][j]==1)//1为墙
printf("▓");
else if(Map[i][j]==0)
printf(" ");
else if(Map[i][j]==2)//2为飞机 初始map[15][7] (16,8)
printf("Ж");
else if(Map[i][j]==3)//3 子弹
printf("!!");
else if(Map[i][j]==4)//4 敌机
printf("Ψ");
}
printf("\n");
} //打印地图结束
printf("\n Ж生命:");
for(i=0; i<life; i++)
printf("■");
printf("\n");
printf(" 得分:%d\n\n 控制:\n w:上\ts:下\n a:左\ts:右\n e:发射子弹",score);
for(i=0; i<17; i++) { //清除子弹
for(j=0; j<17; j++) {
if(Map[i][j]==3)
Map[i][j]=0;
}
}//清除子弹结束
for(i=0; i<17; i++) { //清除飞机轨迹
for(j=0; j<17; j++) {
if(Map[i][j]==2)
Map[i][j]=0;
}
}//清除飞机轨迹 结束
if(plane_x>0&&plane_x<16&&plane_y>0&&plane_y<16) {
getc=getch();
if (getc=='d') { //wasd
++plane_x;
if(plane_x<=0)
plane_x=1;
else if(plane_x>=16)
plane_x=15;
else if(Map[plane_y][plane_x]==4) { //碰撞敌机,退出
life--;
if(life==0)
break;
}
}
if (getc=='a') {
--plane_x;
if(plane_x<=0)
plane_x=1;
else if(plane_x>=16)
plane_x=15;
else if(Map[plane_y][plane_x]==4) { //碰撞敌机,当life==0退出
life--;
if(life==0)
break;
}
}
if (getc=='w') {
--plane_y;
if(plane_y<=0)
plane_y=1;
else if(plane_y>=16)
plane_y=15;
else if(Map[plane_y][plane_x]==4) { //碰撞敌机,退出
life--;
if(life==0)
break;
}
}
if (getc=='s') {
++plane_y;
if(plane_y<=0)
plane_y=1;
else if(plane_y>=16)
plane_y=15;
else if(Map[plane_y][plane_x]==4) { //碰撞敌机,退出
life--;
if(life==0)
break;
}
}
if (getc=='e') {
for(a=plane_y-1; a>=1; a--) {
if(Map[a][plane_x]==4) { //
score++;
Map[a][plane_x]=0;//清除敌机
break;
}
Map[a][plane_x]=3;
}
}
}
system("cls");
}
system("cls");
printf("总分:%d",score);
getch();
return 0;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_40238526/article/details/100260424








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。