c语言飞机大战游戏代码
时间: 2023-10-29 09:00:00 浏览: 150
以下是一个简单的基于 C 语言的飞机大战游戏代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define WIDTH 40 /* 游戏区宽度 */
#define HEIGHT 20 /* 游戏区高度 */
#define PLAYER 'A' /* 玩家飞机形状 */
#define ENEMY '*' /* 敌机形状 */
#define BULLET '|' /* 子弹形状 */
#define SPEED 100 /* 游戏速度 */
#define ENEMY_NUM 10 /* 敌机数量 */
int score = 0; /* 得分 */
int x, y; /* 玩家飞机坐标 */
int bullet_x, bullet_y; /* 子弹坐标 */
int enemy_x[ENEMY_NUM], enemy_y[ENEMY_NUM]; /* 敌机坐标 */
int is_shooting = 0; /* 是否发射子弹 */
void SetCursorPosition(int x, int y) /* 光标移动函数 */
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void DrawPlayer() /* 绘制玩家飞机函数 */
{
SetCursorPosition(x, y);
printf("%c", PLAYER);
}
void DrawBullet() /* 绘制子弹函数 */
{
SetCursorPosition(bullet_x, bullet_y);
printf("%c", BULLET);
}
void DrawEnemy(int i) /* 绘制敌机函数 */
{
SetCursorPosition(enemy_x[i], enemy_y[i]);
printf("%c", ENEMY);
}
void Initialize() /* 游戏初始化函数 */
{
x = WIDTH / 2;
y = HEIGHT - 1;
bullet_y = y - 1;
for (int i = 0; i < ENEMY_NUM; i++)
{
enemy_x[i] = rand() % WIDTH;
enemy_y[i] = rand() % (HEIGHT - 5) - HEIGHT;
}
}
void UpdatePlayer() /* 更新玩家飞机位置函数 */
{
if (_kbhit())
{
switch (_getch())
{
case 'a':
if (x > 0) x--;
break;
case 'd':
if (x < WIDTH - 1) x++;
break;
case ' ':
if (!is_shooting)
{
is_shooting = 1;
bullet_x = x;
}
break;
}
}
}
void UpdateBullet() /* 更新子弹位置函数 */
{
if (is_shooting)
{
bullet_y--;
if (bullet_y == 0)
{
is_shooting = 0;
}
}
}
void UpdateEnemy(int i) /* 更新敌机位置函数 */
{
enemy_y[i]++;
if (enemy_y[i] == HEIGHT)
{
enemy_x[i] = rand() % WIDTH;
enemy_y[i] = rand() % (HEIGHT - 5) - HEIGHT;
score++;
}
}
void CollisionDetection() /* 碰撞检测函数 */
{
for (int i = 0; i < ENEMY_NUM; i++)
{
if ((bullet_x == enemy_x[i]) && (bullet_y == enemy_y[i]))
{
is_shooting = 0;
enemy_x[i] = rand() % WIDTH;
enemy_y[i] = rand() % (HEIGHT - 5) - HEIGHT;
score += 10;
}
if ((x == enemy_x[i]) && (y == enemy_y[i]))
{
printf("\nGame Over!\n");
printf("Your score is %d\n", score);
exit(0);
}
}
}
int main()
{
srand((unsigned)time(NULL));
Initialize();
while (1)
{
SetCursorPosition(0, 0);
printf("Score: %d", score);
DrawPlayer();
UpdatePlayer();
if (is_shooting)
{
DrawBullet();
UpdateBullet();
}
for (int i = 0; i < ENEMY_NUM; i++)
{
DrawEnemy(i);
UpdateEnemy(i);
}
CollisionDetection();
Sleep(SPEED);
system("cls");
}
return 0;
}
```
该代码使用了 Windows.h 库中的一些函数,可能不兼容其他操作系统。你可以在 Windows 操作系统上编译运行该代码,使用 WASD 控制飞机移动,空格键发射子弹,避免与敌机碰撞,得分越高越好!
阅读全文