c/c++ 用easyx图形库写一个射击游戏
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
// 定义游戏窗口的大小
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
// 定义玩家和目标的尺寸
#define PLAYER_SIZE 50
#define TARGET_SIZE 20
// 玩家的结构体
typedef struct {
int x, y;
int speed;
} Player;
// 目标的结构体
typedef struct {
int x, y;
int active;
} Target;
// 初始化游戏
void initGame(Player *player, Target *target) {
// 初始化随机数种子
srand((unsigned)time(NULL));
// 初始化玩家
player->x = WINDOW_WIDTH / 2 - PLAYER_SIZE / 2;
player->y = WINDOW_HEIGHT - PLAYER_SIZE - 10;
player->speed = 5;
// 初始化目标
target->x = rand() % (WINDOW_WIDTH - TARGET_SIZE);
target->y = rand() % (WINDOW_HEIGHT - TARGET_SIZE);
target->active = 1;
}
// 绘制游戏元素
void drawGame(Player player, Target target) {
// 清屏
cleardevice();
// 绘制玩家(中国军人,用矩形表示)
setfillcolor(BLACK); // 假设我们用黑色代表中国军人的简约风格
bar(player.x, player.y, player.x + PLAYER_SIZE, player.y + PLAYER_SIZE);
// 绘制目标(小圆点)
if (target.active) {
setfillcolor(RED); // 用红色表示目标
fillcircle(target.x + TARGET_SIZE / 2, target.y + TARGET_SIZE / 2, TARGET_SIZE / 2);
}
}
// 更新游戏状态
void updateGame(Player *player, Target *target, char input) {
// 根据用户输入移动玩家
if (input == 'a' && player->x > 0) {
player->x -= player->speed;
}
if (input == 'd' && player->x < WINDOW_WIDTH - PLAYER_SIZE) {
player->x += player->speed;
}
if (input == 'w' && player->y > 0) {
player->y -= player->speed;
}
if (input == 's' && player->y < WINDOW_HEIGHT - PLAYER_SIZE) {
player->y += player->speed;
}
// 检查玩家是否击中目标
if (target->active &&
player->x < target->x + TARGET_SIZE &&
player->x + PLAYER_SIZE > target->x &&
player->y < target->y + TARGET_SIZE &&
player->y + PLAYER_SIZE > target->y) {
target->active = 0; // 目标被击中,设置为不活动状态
// 可以在这里添加击中目标的逻辑,比如得分、重新生成目标等
}
// 如果目标被击中或不活动,可以重新生成一个新目标
if (!target->active) {
target->x = rand() % (WINDOW_WIDTH - TARGET_SIZE);
target->y = rand() % (WINDOW_HEIGHT - TARGET_SIZE);
target->active = 1;
}
}
int main() {
// 初始化图形窗口
initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);
setbkcolor(WHITE); // 设置背景色为白色
// 创建玩家和目标
Player player;
Target target;
initGame(&player, &target);
// 游戏主循环
char input;
while (1) {
// 获取用户输入
if (_kbhit()) {
input = _getch();
if (input == 27) break; // 如果按下ESC键,则退出游戏
}
// 更新游戏状态
updateGame(&player, &target, input);
// 绘制游戏元素
drawGame(player, target);
// 延迟一段时间,控制游戏速度
Sleep(30);
}
// 关闭图形窗口
closegraph();
return 0;
}
在这个游戏中,玩家可以使用W
、A
、S
、D
键来控制中国军人小方块的移动,试图击中随机出现的小目标。当目标被击中时,它会重新生成一个新的位置。游戏会持续进行,直到玩家按下ESC
键退出。
请注意,这只是一个非常基础的游戏框架,您可以根据自己的喜好和需求进一步扩展和完善它,比如添加得分系统、计时器、更多的游戏元素和交互等。同时,您还可以尝试使用EasyX提供的更多图形功能来丰富游戏的视觉效果。