c++打地鼠游戏代码

c++打地鼠游戏代码

#include <graphics.h> //引入easyx图形库
#include <conio.h>
#include <time.h>
#include <stdlib.h>#define WINDOW_WIDTH 800 //窗口宽度
#define WINDOW_HEITH 600 //窗口高度#define LITTLE_MOUSE_BEGIN_X 100 //小地鼠起始横坐标
#define LITTLE_MOUSE_BEGIN_Y 100 //小地鼠起始纵坐标
#define LITTLE_MOUSE_SPACE 200 //小地鼠间隔
#define LITTLE_MOUSE_HEITH 100 //小地鼠高度#define MID_MOUSE_BEGIN_X 50 //中地鼠起始横坐标
#define MID_MOUSE_BEGIN_Y 250 //中地鼠起始纵坐标
#define MID_MOUSE_SPACE 250 //中地鼠间隔
#define MID_MOUSE_HEITH 150 //中地鼠高度#define BIG_MOUSE_BEGIN_X 0 //大地鼠起始横坐标
#define BIG_MOUSE_BEGIN_Y 400 //大地鼠起始纵坐标
#define BIG_MOUSE_SPACE 300 //大地鼠间隔
#define BIG_MOUSE_HEITH 200 //大地鼠高度HWND hWnd; //窗口句柄//图片变量
IMAGE top, mid_up, mid_down, bottom; //背景图片
IMAGE top_y, mid_up_y, mid_down_y, bottom_y; //背景图片的掩码
IMAGE little_mouse, mid_mouse, big_mouse; //地鼠图片
IMAGE little_mouse_y, mid_mouse_y, big_mouse_y; //地鼠图片的掩码
IMAGE hammer, hammer_down, hammer_y, hammer_down_y; //锤子图片和掩码//地鼠类
class DiShu {
public:int x, y; //坐标IMAGE img, img_y; //图片和掩码bool fx; //方向,true为下,false为上bool isLive; //是否存活//地鼠绘制自己void draw() {putimage(x, y, &img_y, SRCAND);putimage(x, y, &img, SRCPAINT);}//地鼠向上移动void moveUp() {y -= 3;}//地鼠向下移动void moveDown() {y += 3;}
};//锤子类
class ChuiZi {
public:int x, y; //坐标IMAGE img, img_y; //图片和掩码bool isDown; //是否落下//锤子绘制自己void draw() {putimage(x, y, &img_y, SRCAND);putimage(x, y, &img, SRCPAINT);}
};DiShu ds[9]; //9个地鼠对象
ChuiZi cz; //一个锤子对象
int m; //当前活动的地鼠索引//初始化游戏
void initGame() {//创建窗口hWnd = initgraph(WINDOW_WIDTH, WINDOW_HEITH, SHOWCONSOLE);//加载图片loadimage(&top, "top.bmp");loadimage(&mid_up, "mid_up.bmp");loadimage(&mid_down, "mid_down.bmp");loadimage(&bottom, "bottom.bmp");loadimage(&top_y, "top_y.bmp");loadimage(&mid_up_y, "mid_up_y.bmp");loadimage(&mid_down_y, "mid_down_y.bmp");loadimage(&bottom_y, "bottom_y.bmp");loadimage(&little_mouse, "little_mouse.bmp");loadimage(&mid_mouse, "mid_mouse.bmp");loadimage(&big_mouse, "big_mouse.bmp");loadimage(&little_mouse_y, "little_mouse_y.bmp");loadimage(&mid_mouse_y, "mid_mouse_y.bmp");loadimage(&big_mouse_y, "big_mouse_y.bmp");loadimage(&hammer, "hammer.bmp", 40, 40, true);loadimage(&hammer_down, "hammer_down.bmp", 40, 40, true);loadimage(&hammer_y, "hammer_y.bmp", 40, 40, true);loadimage(&hammer_down_y, "hammer_down_y.bmp", 40, 40, true);//初始化地鼠for (int i = 0; i < 9; i++) {if (i >= 0 && i < 3) {ds[i].x = LITTLE_MOUSE_BEGIN_X + i * LITTLE_MOUSE_SPACE;ds[i].y = LITTLE_MOUSE_BEGIN_Y;ds[i].img = little_mouse;ds[i].img_y = little_mouse_y;}if (i >= 3 && i < 6) {ds[i].x = MID_MOUSE_BEGIN_X + (i - 3) * MID_MOUSE_SPACE;ds[i].y = MID_MOUSE_BEGIN_Y;ds[i].img = mid_mouse;ds[i].img_y = mid_mouse_y;}if (i >= 6 && i < 9) {ds[i].x = BIG_MOUSE_BEGIN_X + (i - 6) * BIG_MOUSE_SPACE;ds[i].y = BIG_MOUSE_BEGIN_Y;ds[i].img = big_mouse;ds[i].img_y = big_mouse_y;}ds[i].fx = false; //初始方向为上ds[i].isLive = true; //初始状态为存活}//随机选择一个地鼠srand(time(NULL));m = rand() % 9;//初始化锤子cz.x = 100;cz.y = 100;cz.isDown = false;cz.img = hammer;cz.img_y = hammer_y;
}//显示游戏
void showGame() {BeginBatchDraw(); //开启批量绘图//绘制背景putimage(0, 0, &top_y, SRCAND);putimage(0, 0, &top, SRCPAINT);//绘制地鼠for (int i = 0; i < 9; i++) {if (ds[i].isLive) {ds[i].draw();}}//绘制锤子cz.draw();//显示分数,生命值,目标分数settextcolor(WHITE); //设置文字颜色为白色settextstyle(20, 0, _T("宋体")); //设置文字样式outtextxy(10, 10, _T("得分:")); //输出文字TCHAR str[10]; //定义一个字符串变量_stprintf_s(str, _T("%d"), score); //将分数转换为字符串outtextxy(60, 10, str); //输出字符串outtextxy(10, 40, _T("生命值:")); //输出文字_stprintf_s(str, _T("%d"), life); //将生命值转换为字符串outtextxy(80, 40, str); //输出字符串outtextxy(10, 70, _T("目标分数:")); //输出文字_stprintf_s(str, _T("%d"), target); //将目标分数转换为字符串outtextxy(90, 70, str); //输出字符串//显示剩余时间timer();EndBatchDraw(); //结束批量绘图
}//控制游戏
void ctolGame() {//控制地鼠移动if (ds[m].fx) { //向下移动ds[m].moveDown();if (0 <= m && m < 3) { //小地鼠if (ds[m].y >= (LITTLE_MOUSE_BEGIN_Y)) {ds[m].fx = false; //改变方向为上m = rand() % 9; //随机选择下一个地鼠}}else if (3 <= m && m < 6) { //中地鼠if (ds[m].y >= (MID_MOUSE_BEGIN_Y)) {ds[m].fx = false;m = rand() % 9;}}else if (6 <= m && m < 9) { //大地鼠if (ds[m].y >= (BIG_MOUSE_BEGIN_Y)) {ds[m].fx = false;m = rand() % 9;}}}else { //向上移动ds[m].moveUp();if (0 <= m && m < 3) { //小地鼠if (ds[m].y <= (LITTLE_MOUSE_BEGIN_Y - LITTLE_MOUSE_HEITH)) {ds[m].fx = true; //改变方向为下}}else if (3 <= m && m < 6) { //中地鼠if (ds[m].y <= (MID_MOUSE_BEGIN_Y - MID_MOUSE_HEITH)) {ds[m].fx = true;}}else if (6 <= m && m < 9) { //大地鼠if (ds[m].y <= (BIG_MOUSE_BEGIN_Y - BIG_MOUSE_HEITH)) {ds[m].fx = true;}}}//控制锤子移动moveChuiZi();//判断是否击中地鼠isHit();//计时器函数,控制游戏时间timer();
}//控制锤子移动
void moveChuiZi() {//获取鼠标的位置和状态MOUSEMSG m = GetMouseMsg();//如果鼠标左键按下if (m.uMsg == WM_LBUTTONDOWN) {//改变锤子的图片和坐标cz.img = hammer_down;cz.img_y = hammer_down_y;cz.x = m.x - 20;cz.y = m.y - 20;cz.isDown = true; //锤子落下}//如果鼠标左键松开else if (m.uMsg == WM_LBUTTONUP) {//改变锤子的图片和坐标cz.img = hammer;cz.img_y = hammer_y;cz.x = m.x - 20;cz.y = m.y - 20;cz.isDown = false; //锤子抬起}//如果鼠标移动else if (m.uMsg == WM_MOUSEMOVE) {//改变锤子的坐标cz.x = m.x - 20;cz.y = m.y - 20;}
}//判断是否击中地鼠
void isHit() {//如果锤子落下if (cz.isDown) {//遍历所有地鼠for (int i = 0; i < 9; i++) {//如果地鼠存活if (ds[i].isLive) {//判断锤子和地鼠是否碰撞if (isCollide(cz.x, cz.y, cz.x + 40, cz.y + 40, ds[i].x, ds[i].y, ds[i].x + 100, ds[i].y + 100)) {//击中地鼠ds[i].isLive = false; //地鼠死亡score++; //分数加一}}}}
}//碰撞检测函数,判断两个矩形是否重叠
bool isCollide(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {//如果两个矩形的水平方向或垂直方向没有重叠,就返回falseif (x1 > x4 || x2 < x3 || y1 > y4 || y2 < y3) {return false;}//否则返回truereturn true;
}//计时器函数,控制游戏时间
void timer() {//获取当前时间time_t now = time(NULL);//计算剩余时间int remain = gameTime - (now - startTime);//如果剩余时间小于等于0,游戏结束if (remain <= 0) {gameOver = true; //游戏结束标志remain = 0; //剩余时间为0}//在窗口右上角显示剩余时间settextcolor(WHITE); //设置文字颜色为白色settextstyle(20, 0, _T("宋体")); //设置文字样式outtextxy(WINDOW_WIDTH - 100, 10, _T("剩余时间:")); //输出文字TCHAR str[10]; //定义一个字符串变量_stprintf_s(str, _T("%d"), remain); //将剩余时间转换为字符串outtextxy(WINDOW_WIDTH - 40, 10, str); //输出字符串
}//主函数
int main() {//初始化游戏initGame();//游戏循环while (1) {//显示游戏showGame();//控制游戏ctolGame();//如果游戏结束,跳出循环if (gameOver) {break;}//延时10毫秒,降低CPU占用率Sleep(10);}//清屏cleardevice();//显示最终的分数settextcolor(WHITE); //设置文字颜色为白色settextstyle(40, 0, _T("宋体")); //设置文字样式outtextxy(200, 200, _T("游戏结束,你的分数是:")); //输出文字TCHAR str[10]; //定义一个字符串变量_stprintf_s(str, _T("%d"), score); //将分数转换为字符串outtextxy(500, 200, str); //输出字符串//等待用户按任意键退出_getch();//关闭图形窗口closegraph();//返回0return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树-遍历-单独精讲

遍历:遍历每个元素。 寻常遍历root只会指一次。 而二叉树遍历每个元素则会指三次。 中序遍历-节点的中序 void traveres(TreeNode* root){if(!root)return;traveres(root->left);cout << root->val << endl;traveres(root->right);}中序遍历亦叫节点的中…

Python 自学(六) 之函数

目录 1. python函数的基本结构 P168 2. python函数的可变参数(不定长) *parameter P169 3. python函数的返回值(单个或多个) P173 4. python的匿名函数 lambda P177 1. python函数的基本结构 P168 2. python函数的可变参数(不定…

一文读懂「Attention」注意力机制

前言:Self-Attention是 Transformer 的重点,因此需要详细了解一下 Self-Attention 的内部逻辑。 一、什么是注意力机制? Attention(注意力)机制如果浅层的理解,核心逻辑就是「从关注全部到关注重点」。 Attention 机制很像人类看图片的逻辑,当我们看一张图片的时候,我…

服务器操作系统介绍

1、基本概念 OS ( operating system&#xff0c;操作系统)是管理计算机硬件与软件资源的计算机程序&#xff0c;同时也是计算机系统的内核与基石。 操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作…

SD-WAN是如何工作的?

SD-WAN软件定义的广域网&#xff0c;其目的是帮助企业组建更为灵活和高效的网络框架。它与传统的广域网相比&#xff0c;具备更快的网络加速能力&#xff0c;更强的安全性和更便捷的使用方式。因此&#xff0c;随着企业在数字化转型的过程中&#xff0c;企业组网需求的不断提升…

用Postman实现接口自动化测试

postman使用 开发中经常用postman来测试接口&#xff0c;一个简单的注册接口用postman测试&#xff1a; 接口正常工作只是最基本的要求&#xff0c;经常要评估接口性能&#xff0c;进行压力测试。 同时&#xff0c;在这我为大家准备了一份软件测试视频教程&#xff08;含面试…

适用于任何公司的网络安全架构

1.第一等级:基础级 优势 可防范基本有针对性的攻击&#xff0c;使攻击者难以在网络上推进。将生产环境与企业环境进行基本隔离。 劣势 默认的企业网络应被视为潜在受损。普通员工的工作站以及管理员的工作站可能受到潜在威胁&#xff0c;因为它们在生产网络中具有基本和管理…

UE4 4.21-4.27使用编辑器蓝图EditorBlueprint方法

在UE4 4.21中&#xff0c;编辑器蓝图&#xff08;Editor Blueprint&#xff09;是一个强大的工具&#xff0c;允许开发者扩展和自定义Unreal编辑器的功能。通过编辑器蓝图&#xff0c;我们可以创建自定义的工具和功能&#xff0c;以优化开发流程。 本教程将指导您如何在UE4 4.…

大模型LLM训练的数据集

引言 2021年以来&#xff0c;大预言模型的开发和生产使用呈现出爆炸式增长。除了李开复、王慧文、王小川等“退休”再创业的互联网老兵&#xff0c;在阿里巴巴、腾讯、快手等互联网大厂的中高层也大胆辞职&#xff0c;加入这波创业浪潮。 通用大模型初创企业MiniMax完成了新一…

JHipster - Spring Boot 的快速开发利器

产品介绍&#xff1a; JHipster是一个开源的、全面的应用程序生成器&#xff0c;它能够帮助开发者快速生成Spring Boot Angular/React/Vue.js的完整应用程序。它不仅提供了一个简单的界面来定义应用程序的配置&#xff0c;还提供了一组强大的代码生成器&#xff0c;可以在数分…

Go语言中的切片魔法:解密高效数据处理的利器

Go语言中的切片魔法&#xff1a;解密高效数据处理的利器 Go语言中的切片&#xff08;slice&#xff09;是一种灵活且动态的数据结构&#xff0c;用于表示相同类型元素的序列。它是建立在Go的数组类型之上的&#xff0c;提供了一种更方便的方式来处理数据集合。 在Go中声明切片…

vue简体繁体互转无需做字库

第一种方法 vue-i18n 需要自己写字库库很麻烦,而且不支持后端传值 第二种 opencc 这个库前端去使用的时候 数据较多的情况非常慢.影响使用 第三种 language-hk-loader npm i language-hk-loader 从其他博客中看到的一种,很方便不需要写字库,但是在打包的时候去整体的去翻译…

VG7050EAN 可编程压控晶体振荡器 (VCXO) 输出:LV-PECL

可编程电压控制振荡器&#xff1a; VG7050EAN是一个低抖动可编程的VCXO在任何频率。VG7050EAN由VCXO、PLL和LVPECL的输出缓冲区组成。它的输出频率可编程从50 MHz到800 MHz&#xff0c;分辨率接近2 ppb。VCXO为PLL提供稳定的参考时钟。VCXO的Kv可以通过I进行编程2C接口。PLL由低…

【解决---module ‘labelme.utils‘ has no attribute ‘draw_label‘--制作自己的车道线数据集】

项目场景&#xff1a; 在使用labelme进行数据标注时&#xff0c;需要进行labelme_json_to_dataset&#xff0c;以此来进行数据格式的转换&#xff0c;然而在运行 &#xff1a; python json2dataset.py /home/l/label_line/save_vedio_frame/label_2 报错了&#xff01;&#…

LaTex的下载与安装(Texlive+TexStudio,2023版)

目录 1. Texlive的下载与安装2. TexStudio的下载与安装 LaTex的下载与安装涉及到环境配置和编辑器安装&#xff0c;本文主要根据一下两个较为常用的组合进行下载和安装&#xff1a; Texlive&#xff08;是必须安装的LaTex环境&#xff09;&#xff1b;TexStudio&#xff08;是…

jenkins 自由风格部署vue项目,参数化构建vue项目

1. 丢弃旧的构建 2. 是否需要install 3. git 4. 配置node16: 5. 脚本&#xff1a; 脚本&#xff1a; #进入Jenkins工作空间下项目目录 cd /var/lib/jenkins/workspace/你的任务名称 node -v #检测node版本&#xff08;此条命令非必要&#xff09; npm -v #检测npm版本&#x…

Move 向未来,2024 开发者大会热潮涌动

1 月 13 日至 14 日&#xff0c;「2024 Move 开发者大会&#xff1a;Move 生态关键的一年」将于上海举办。本次大会由 MoveFuns 、OpenBuild 和 MoveBit 主办&#xff0c;Rooch、AptosGlobal、alcove、zkMove、TinTinLand 和云赛空间协办&#xff0c;并得到 Aptos、Sui 和亚马逊…

花为缘积萨伯爵名表工艺之美,传承卓越

腕表是时间的载体&#xff0c;也是品味的象征。在现代人眼中&#xff0c;它们不仅仅是时间的工具&#xff0c;更是一种艺术形式。在制表工艺的殿堂中&#xff0c;花为缘积萨伯爵名表以其独特的创造力和严谨缜密的要求&#xff0c;创作了一系列典范之作&#xff0c;将技术与美学…

【APP抓包】IOS应用抓包防护绕过实战教程

文章目录 1. 写在前面2. 测试机越狱2.1. 爱思助手2.2. checkra1n 3. 代理抓包3.1. 安装CA证书 4. 客户端证书绑定绕过4.1. SSLKillSwitch4.2. Objection 5. 双向证书绑定绕过5.1. 绕过服务端 6. 越狱检测绕过6.1. Liberty Lite绕过检测6.2. Hestia绕过检测6.3. HideJB绕过检测6…

毛概笔记。

一、 毛泽东思想是马中化的第一果&#xff0c;是关于搞革命&#xff0c;搞改造&#xff0c;搞建设的理论。 二、新民主主义革命 新民主主义革命的三大法宝&#xff1a;1.统一战线 2. 武装斗争 3.党的建设 政治纲领 经济纲领 文化纲领 乱世造英雄 三、社会主义改造理论&#xff…