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提供的更多图形功能来丰富游戏的视觉效果。
相关文章:
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// 玩家的结构…...
Rust eyre 错误处理实战教程
在《Rust 错误处理库: thiserror 和 anyhow》中我们介绍了Rust简化处理错误策略,本文解释eyre错误处理库,并通过多个实际示例进行说明,最后于anyhow库进行对比,让你更好理解其应用场景。 eyre是一个用于 Rust 的错误处理库&#x…...
面试小札:JVM虚拟机
1. 定义与基本概念 - JVM(Java Virtual Machine)即Java虚拟机,是Java程序的运行核心。它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来运行Java字节码。字节码是一种中间格式,它使得Java程序能…...
Docker扩容操作(docker总是空间不足)
Docker扩容操作(docker总是空间不足) 1、df二连,一共也就70g,总是占满93%以上。所以需要移动到其他目录上 查看docker镜像和容器存储目录的空间大小 du -sh /var/lib/docker/2、停止docker服务 systemctl stop docker3、首先创建目录并迁移 # 首先创…...
数字图像处理(4):FPGA中的定点数、浮点数
(1)定点数:小数点固定在数据的某一位置的数,可以分为定点整数和定点小数和普通定点数。定点数广泛应用于数字图像处理(图像滤波、图像缩放)和数字信号处理(如FFT、定点卷积)中。 定…...
毕昇入门学习
schemas.py 概述 这段代码主要定义了一系列基于 Pydantic 的数据模型(BaseModel),用于数据验证和序列化,通常用于构建 API(如使用 FastAPI)。这些模型涵盖了用户认证、聊天消息、知识库管理、模型配置等多…...
2411C++,学习C++提示4
结构绑定 auto [first, ...ts] std::tuple{1, 2 ,3};assert(1 first);浮点作为非类型模板参数 template<double Value> constexpr auto value Value;int main() {std::cout << value<4.2>; // prints 4.2 }template<double... Vl1s, double... Vl2s&g…...
STM32-- 看门狗--介绍、使用场景、失效场景
STM32 中的看门狗(Watchdog Timer,简称 WDG)有两种主要类型:独立看门狗(IWDG) 和 窗口看门狗(WWDG)。它们的喂狗机制各有特点,主要区别如下: 1. 独立看门狗&a…...
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都…...
linux安全管理-会话安全
文章目录 1 设置命令行界面超时退出2 配置终端登录失败策略3 配置 SSH 登录失败策略 1 设置命令行界面超时退出 1、检查内容 检查操作系统是否设置命令行界面超时退出。 2、配置要求 操作系统设置命令行界面超时退出。 3、配置方法 配置命令行界面超时时间,编辑/et…...
Ubuntu监视显卡占用情况
在终端中运行 watch -n 0.5 nvidia-smi【以下内容由大模型生成】 watch -n 0.5 nvidia-smi 是一个组合命令,用于在 Linux 终端中定期执行 nvidia-smi 命令并显示其输出。让我们分解一下这个命令的各个部分: watch: watch 是一个用于定期执行其他命令并显…...
学成在线day06
上传视屏 断点续传 通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成&…...
Mac安装及合规无限使用Beyond Compare
文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异,并支持文…...
【青牛科技】2K02 电动工具专用调速电路芯片描述
概述: 2K02 是电动工具专用调速电路。内置稳压电路,温度系数好,可以调节输出频率以及占空比的振荡输出,广泛的应用于小型电钻,割草机等工具。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 温度系数好 …...
基于SpringBoot实现的民宿管理系统(代码+论文)
🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…...
安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
本篇主要针对只使用过QT5的qmake,没有用过MSVC,VS的老同学。 建议一部分一部分安装,全部勾选安装遇到问题会中断,前功尽弃。 我自己需要的是QT5,编出的软件用在公司设备上。 QT6:建议也安装学习…...
MinIO常见操作及Python实现对象的增删改查
MinIO常见操作 MinIO是一个高性能的开源对象存储服务,它兼容Amazon S3云存储服务API。在MinIO中,常见的操作包括: 存储桶操作: 创建、列出、获取信息、删除存储桶。 对象操作: 上传、下载、列出、删除对象。 权限管理&…...
网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
目录 1,网络字节序和主机字节序 2. 函数的具体作用 2.1,htonl(Host to Network Long) 2.2,htons(Host to Network Short) 2.3,ntohl(Network to Host Long) 2.4,ntohs(Network to Host Sho…...
【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦
目录 一、low级别,直接上传木马文件 1.1、准备一个木马文件 1.2、直接上传木马文件 1.3、访问木马链接 1.4、连接蚁剑 二、medium级别:抓包文件缀名 2.1、准备一个木马文件,修改后缀名为图片的后缀名 2.2、上传文件,打开burpSuite&…...
RHCE NFS
RHCE NFS 1.11. 2 NFS 主机名格式1.3 NFS 服务器配置1.3.1 /etc/exports 配置文件1.3.1.1 导出条目1.3.1.2 默认选项1.3.1.3 默认和覆盖选项 1.4 启动 NFS 服务器1.5 练习1.5.1 配置 NFS 服务器和客户端挂载1.5.2 配置autofs自动挂载(需要时才挂载) 1.6 …...
小型电商自动化:OpenClaw+nanobot处理订单邮件
小型电商自动化:OpenClawnanobot处理订单邮件 1. 为什么选择OpenClaw处理电商订单 作为一个经营小型电商的个体商户,我每天要处理几十封来自Gmail的订单邮件。这些邮件包含客户信息、商品清单和收货地址,需要手动录入到库存表格、生成物流单…...
CloudScraper 配置优化:如何提升采集效率与稳定性
在合规采集场景中,不少用户在使用CloudScraper时,频繁出现请求卡顿、采集中断等问题。 本篇文章,LokiProxy将为您系统梳理影响CloudScraper运行效率的关键环节,并结合实际场景提出可行的优化思路,助力用户在合规框架内…...
PDF Arranger:开源PDF管理的终极解决方案,3分钟掌握高效文档处理技巧
PDF Arranger:开源PDF管理的终极解决方案,3分钟掌握高效文档处理技巧 【免费下载链接】pdfarranger Small python-gtk application, which helps the user to merge or split PDF documents and rotate, crop and rearrange their pages using an intera…...
Petalinux-build --sdk卡在assimp?手动下载源码并集成到Yocto构建系统的完整指南
解决Petalinux构建SDK时assimp源码下载失败的深度实践指南 当你在Ubuntu 18.04环境下使用Vivado 2021.2进行Petalinux开发时,执行petalinux-build --sdk命令可能会意外卡在assimp组件上。这种问题通常源于网络连接不稳定导致构建系统无法自动下载第三方依赖库。本文…...
Qwen3-ASR-1.7B部署案例:AI初创公司低成本构建ASR SaaS服务
Qwen3-ASR-1.7B部署案例:AI初创公司低成本构建ASR SaaS服务 想象一下,你是一家AI初创公司的技术负责人,老板给你下了个任务:两周内,为公司的新产品上线一个语音转文字(ASR)功能。要求是识别要准…...
如何安全升级Cura软件版本:从风险规避到价值创造的全流程指南
如何安全升级Cura软件版本:从风险规避到价值创造的全流程指南 【免费下载链接】Cura 3D printer / slicing GUI built on top of the Uranium framework 项目地址: https://gitcode.com/gh_mirrors/cu/Cura UltiMaker Cura作为全球最受欢迎的3D打印切片软件&…...
OBS高级计时器:提升直播专业度的时间管理工具
OBS高级计时器:提升直播专业度的时间管理工具 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer 在直播行业竞争日益激烈的今天,精准的时间控制是提升直播质量的关键因素之一。OBS高级计时器…...
成本对比实测:OpenClaw本地部署Qwen3.5-9B比API节省40%
成本对比实测:OpenClaw本地部署Qwen3.5-9B比API节省40% 1. 为什么我要做这个测试 上个月我给自己定了个目标:用OpenClaw实现个人知识库的自动化更新。这个任务需要每天抓取20篇行业文章,提取关键信息,整理成结构化笔记。最初我直…...
League-Toolkit完全指南:高效BP策略与全方位战绩分析实战应用
League-Toolkit完全指南:高效BP策略与全方位战绩分析实战应用 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 功能解析…...
软电话通话30秒自动挂断?一文讲透FreeSWITCH通话超时问题
当你满怀期待地搭建好FreeSWITCH,用两个软电话成功呼叫,却发现通话总是在30秒左右莫名其妙地中断——别急,这是SIP新手最常遇到的“经典Bug”。本文将为你抽丝剥茧,彻底解决这个问题,并附带其他可能引发通话异常中断的…...
