当前位置: 首页 > news >正文

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;
}

在这个游戏中,玩家可以使用WASD键来控制中国军人小方块的移动,试图击中随机出现的小目标。当目标被击中时,它会重新生成一个新的位置。游戏会持续进行,直到玩家按下ESC键退出。

请注意,这只是一个非常基础的游戏框架,您可以根据自己的喜好和需求进一步扩展和完善它,比如添加得分系统、计时器、更多的游戏元素和交互等。同时,您还可以尝试使用EasyX提供的更多图形功能来丰富游戏的视觉效果。

http://www.lryc.cn/news/493713.html

相关文章:

  • Rust eyre 错误处理实战教程
  • 面试小札:JVM虚拟机
  • Docker扩容操作(docker总是空间不足)
  • 数字图像处理(4):FPGA中的定点数、浮点数
  • 毕昇入门学习
  • 2411C++,学习C++提示4
  • STM32-- 看门狗--介绍、使用场景、失效场景
  • 【赵渝强老师】PostgreSQL的数据库
  • linux安全管理-会话安全
  • Ubuntu监视显卡占用情况
  • 学成在线day06
  • Mac安装及合规无限使用Beyond Compare
  • 【青牛科技】2K02 电动工具专用调速电路芯片描述
  • 基于SpringBoot实现的民宿管理系统(代码+论文)
  • 安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
  • MinIO常见操作及Python实现对象的增删改查
  • 网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
  • 【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦
  • RHCE NFS
  • 【数据结构】ArrayList与顺序表
  • 互联网基础
  • ffmpeg.js视频播放(转换)
  • 后端 Java发送邮件 JavaMail 模版 20241128测试可用
  • 电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll
  • 探索 Vue 3.0中Treeshaking特性?
  • Paddle Inference部署推理(十)
  • 万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现
  • 全面+彻底解决VMware安装后没有VMnet1和VMnet8的问题
  • 什么是堆?
  • 微距动物和植物摄影后期森系风格Lr调色教程,手机滤镜PS+Lightroom预设下载!