基于c++与EASY-X实现飞机大战小游戏:击败一架敌机记一分,飞机与敌机碰撞后结束游戏,此时记录下得分,得分储存在txt文件里,结束界面显示历史最高分
时间: 2024-01-02 18:02:37 浏览: 33
好的,这是一个关于飞机大战小游戏的问题。我们可以使用C++和EasyX图形库来实现此游戏。具体实现步骤如下:
1. 引入EasyX图形库,在main函数中初始化窗口,并设置游戏界面的背景。
```c++
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
initgraph(640, 480); // 初始化窗口大小
setbkcolor(WHITE); // 设置游戏界面的背景
cleardevice(); // 清空屏幕
getch(); // 等待用户按键
closegraph(); // 关闭窗口
return 0;
}
```
2. 实现飞机和敌机的绘制。
```c++
IMAGE imgPlane; // 飞机图片
IMAGE imgEnemy; // 敌机图片
void drawPlane(int x, int y)
{
putimage(x, y, &imgPlane); // 将飞机图片绘制到指定位置
}
void drawEnemy(int x, int y)
{
putimage(x, y, &imgEnemy); // 将敌机图片绘制到指定位置
}
```
3. 实现飞机和敌机的移动。
```c++
int planeX = 320; // 飞机的初始位置
int planeY = 400;
int enemyX = 0; // 敌机的初始位置
int enemyY = 0;
void movePlane(int dx, int dy)
{
planeX += dx; // 改变飞机的位置
planeY += dy;
}
void moveEnemy()
{
enemyY += 5; // 改变敌机的位置
}
```
4. 实现键盘控制飞机的移动。
```c++
while (1)
{
if (kbhit()) // 判断是否有键盘输入
{
char ch = getch(); // 获取键盘输入
switch (ch)
{
case 'a': // 左移
movePlane(-5, 0);
break;
case 'd': // 右移
movePlane(5, 0);
break;
case 'w': // 上移
movePlane(0, -5);
break;
case 's': // 下移
movePlane(0, 5);
break;
}
}
drawPlane(planeX, planeY); // 绘制飞机
drawEnemy(enemyX, enemyY); // 绘制敌机
moveEnemy(); // 移动敌机
Sleep(50); // 休眠50毫秒
}
```
5. 实现飞机和敌机的碰撞检测和得分记录。
```c++
int score = 0; // 记录得分
void checkCollision()
{
if (planeX + 50 >= enemyX && planeX <= enemyX + 50 && planeY + 50 >= enemyY && planeY <= enemyY + 50) // 判断飞机和敌机是否碰撞
{
FILE* fp = fopen("score.txt", "w"); // 打开文件
fprintf(fp, "%d", score); // 将得分写入文件
fclose(fp); // 关闭文件
exit(0); // 结束游戏
}
if (enemyY >= 480) // 敌机飞出屏幕,得分+1
{
score++;
enemyY = 0; // 重置敌机位置
enemyX = rand() % 590; // 随机生成敌机位置
}
}
```
6. 实现结束界面和历史最高分的显示。
```c++
int maxScore = 0; // 历史最高分
void gameOver()
{
settextstyle(30, 0, "黑体"); // 设置字体样式
settextcolor(RED); // 设置字体颜色
outtextxy(240, 200, "游戏结束"); // 显示游戏结束文字
FILE* fp = fopen("score.txt", "r"); // 打开文件
fscanf(fp, "%d", &maxScore); // 读取历史最高分
fclose(fp); // 关闭文件
char str[20];
sprintf(str, "历史最高分:%d", maxScore); // 将历史最高分转化为字符串
outtextxy(240, 250, str); // 显示历史最高分
}
```
最后,在主循环中加入以上函数的调用即可完成游戏的制作。