服务器之家

服务器之家 > 正文

C语言实现简单飞机大战

时间:2021-08-19 12:37     来源/作者:Cielfire

本文实例为大家分享了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
138
#include<stdio.h>
#include<windows.h>
#include<conio.h>
//定义全局变量
int high,width; //定义边界
int position_x,position_y; //飞机位置
int bullet_x,bullet_y; //子弹位置
int enemy_x,enemy_y;
int score;
int flag; //飞机状态
void gotoxy(int x,int y) //光标移动到(x,y)位置
{
 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
 COORD pos;
 pos.X = x;
 pos.Y = y;
 SetConsoleCursorPosition(handle,pos);
}
void HideCursor() // 用于隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第二个值为0表示隐藏光标
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
void startup() //数据初始化
{
 high=18;
 width=26;
 
 position_x=high-3;
 position_y=width/2;
 
 bullet_x=0;
 bullet_y=position_y;
 
 enemy_x=0;
 enemy_y=position_y;
 
 score=0;
 
 flag=0; //飞机完好
 
 HideCursor();
}
void show() //显示界面
{
 int i,j;
 for(i=0;i<high;i++)
 {
 for(j=0;j<width;j++)
 {
 if(flag)
 break;
 
 else if((i==position_x)&&(j==position_y)) //飞机坐标
 printf("*");
 else if((i==enemy_x)&&(j==enemy_y)) //敌机坐标
 printf("*");
 else if((i==bullet_x)&&(j==bullet_y)) //子弹坐标
 printf("|");
 else if ((j==width-1)||(i==high-1)||(j==0)||(i==0)) //打印边界
 printf("#");
 else
 printf(" ");
 }
 printf("\n");
 }
 printf("\n");
 if((position_x==enemy_x)&&(position_y==enemy_y))
 {
 flag=1; //飞机撞毁 游戏结束
 printf("得分: %d\n",score);
 printf("游戏结束");
 }
 else
 printf("得分: %d\n",score);
}
void withoutInpute() //与用户输入无关
{
 if(bullet_x>0) //子弹上升效果
 bullet_x--;
 if((bullet_x==enemy_x)&&(bullet_y==enemy_y)) //子弹命中敌机
 {
 score++;
 bullet_x=-1;
 enemy_x=1;
 enemy_y=2+rand()%width-2;
 }
 
 static int speed;
 if(speed<30) //减慢敌机速度,不影响飞机和子弹速度
 speed++;
 if(speed==30)
 {
 if(enemy_x<high)
 enemy_x++;
 else
 {
 enemy_x=0;
 enemy_y=2+rand()%width-2;
 }
 speed=0;
 }
 
}
void withInpute() //与用户输入有关
{
 char input;
 if(kbhit()) //控制飞机方向
 {
 input=getch();
 if((input=='w')&&position_x>1)
 position_x--;
 if((input=='s')&&position_x<high-2)
 position_x++;
 if((input=='a')&&position_y>1)
 position_y--;
 if((input=='d')&&position_y<width-2)
 position_y++;
 if(input==' ')
 {
 bullet_x=position_x-1;
 bullet_y=position_y;
 }
 }
}
int main()
{
 system("color 2f");
 startup(); // 数据初始化
 while(1) // 游戏循环执行
 {
 gotoxy(0,0);
 show(); // 显示画面
 withoutInpute(); // 与用户输入无关的更新
 withInpute(); // 与用户输入有关的更新
 }
 }

作者的另一段代码: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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define High 27 //定义边界
#define Width 45
#define EnemyNum 5 //敌机数目
//定义全局变量
int canvas[High][Width]={0}; //定义元素,0为空格,1为飞机,2为子弹,3为敌机,4为右下边界
int position_x,position_y; //飞机坐标
int enemy_x[EnemyNum],enemy_y[EnemyNum]; //敌机坐标
int score; //得分
int Speed; //敌机速度
int bulletwidth; //子弹宽度
void HideCursor()  //隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0};
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x,int y) //光标移动到(x,y)位置
{
 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
 COORD pos;
 pos.X = x;
 pos.Y = y;
 SetConsoleCursorPosition(handle,pos);
}
void startup() //数据初始化
{
 position_x=High-2; //初始化飞机位置
 position_y=Width/2;
 canvas[position_x][position_y]=1;
 
 bulletwidth=0; //初始化子弹宽度
 Speed=25; //敌机初始最小速度
 int k;
 for(k=0;k<EnemyNum;k++)
 {
 enemy_x[k]=rand()%2; //初始化敌机位置
 enemy_y[k]=rand()%Width;
 canvas[enemy_x[k]][enemy_y[k]]=3;
 }
 score=0; //得分初始化
 
 HideCursor();
}
void show() //显示界面
{
 int i,j;
 gotoxy(0,0);
 for(i=0;i<=High;i++)
 {
 for(j=0;j<=Width;j++)
 {
 if(canvas[i][j] == 1)
 printf("*"); //输出飞机
 else if(canvas[i][j]==2)
 printf("|"); //输出子弹
 else if(canvas[i][j]==3)
 printf("@"); //输出敌机
 else if(canvas[i][j]==4)
 printf("#"); //输出边界#
 else
 printf(" "); //输出空格
 }
 printf("\n");
 }
 printf("得分:%d\n",score);
}
void updateWithoutInput() //无需用户输入的更新
{
 int i,j,k;
 for(i=0;i<High;i++)
 {
 for(j=0;j<Width;j++)
 {
 if(canvas[i][j]==2)
 {
 for(k=0;k<EnemyNum;k++)
 {
 if(i==enemy_x[k] && j==enemy_y[k]) //击中敌机
 {
 score++;
 if(score==5||score==10) //得分达到标准子弹加宽
 bulletwidth++;
 canvas[enemy_x[k]][enemy_y[k]]=0; //生成新的敌机
 enemy_x[k]=rand()%2;
 enemy_y[k]=rand()%Width;
 canvas[enemy_x[k]][enemy_y[k]]=3;
 }
 }
 
 canvas[i][j]=0; //子弹自动上升
 if(i>0)
  canvas[i-1][j]=2;
 }
 }
 }
 for(k=0;k<EnemyNum;k++)
 {
 if(enemy_x[k]>High) //生成新的敌机
 {
 canvas[enemy_x[k]][enemy_y[k]]=0;
 enemy_x[k]=rand()%2;
 enemy_y[k]=rand()%Width;
 canvas[enemy_x[k]][enemy_y[k]]=3;
 }
 }
 static int speed=0;
 if(speed<Speed) //敌机速度
 speed++;
 if(speed==Speed)
 {
 for(k=0;k<EnemyNum;k++)
 {
 
 canvas[enemy_x[k]][enemy_y[k]]=0; //敌机自动下落
 enemy_x[k]++;
 canvas[enemy_x[k]][enemy_y[k]]=3;
 }
 speed=0;
 }
 for(k=0;k<EnemyNum;k++)
 {
 if(enemy_x[k]==position_x&&enemy_y[k]==position_y) //飞机撞毁
 {
 printf("游戏结束\n");
 exit(0);
 }
 }
}
void updateWithInput() //需用户输入的更新
{
 char input;
 if(kbhit())
 {
 input=getch();
 if(input=='w' && position_x>0) //控制飞机方向
 {
 canvas[position_x][position_y]=0;
 position_x--;
 canvas[position_x][position_y]=1;
 }
 else if(input=='s' && position_x<High-1)
 {
 canvas[position_x][position_y]=0;
 position_x++;
 canvas[position_x][position_y]=1;
 }
 else if(input=='a' && position_y>0)
 {
 canvas[position_x][position_y]=0;
 position_y--;
 canvas[position_x][position_y]=1;
 }
 else if(input=='d' && position_y<Width-1)
 {
 canvas[position_x][position_y]=0;
 position_y++;
 canvas[position_x][position_y]=1;
 }
 else if(input=' ') //space发射子弹
 {
 int left,right;
 int x;
 left=position_y-bulletwidth;
 if(left<0)
 left=0;
 right=position_y+bulletwidth;
 if(right>Width-1)
 right=0;
 for(x=left;x<=right;x++)
 canvas[position_x-1][x]=2;
 }
 }
}
int main()
{
 startup();
 system("color 2f");
 while(1)
 {
 show(); //显示界面
 updateWithoutInput(); //无需用户输入的更新
 updateWithInput(); //需用户输入的更新
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_40685101/article/details/80217977

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部