C++打怪小游戏

news2024/9/21 14:40:49

这是一款用C++代码写出来的打怪游戏。

上图片👇

在这里插入图片描述![](https://i-blog.csdnimg.cn/direct/6a4497c784ff4ba7a3332bc97d433789.png
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一个11岁小朋友,爆肝532行,11小时完成代码,内部14个函数,5个结构体,三连帮助一下!😘😘😘

// 古文波原创 // 
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>

using namespace std;

int now_zombies = 0;
int now_WuQi = 0;
bool fuli;

struct Me {
	int HP;
	int Attack;
	int Lvl;
	int Exp;
	int EXP_MAX;
	int QH;
} My;

struct zombie {
	int HP;
	int Attack;
	string Name;
	int hard;
} a[10007];

struct WU {
	string name;
	int add_Att;
	int add_HP;
	int kind;
	bool have;
} w[10007];

struct Ku {
	int wuqi_id;
	int fangjv_id;
	int zuoqi_id;
} WuQi_Ku;

struct SheZhi {
	bool Fast;
	bool Buff;
} SZ;

void cls() {
	system("cls");
}

void new_(int hp, int att, string name, int Hard) {
	int t = ++now_zombies;
	a[t].HP = hp;
	a[t].Attack = att;
	a[t].Name = name;
	a[t].hard = Hard;
}

void _new(string n, int add_1, int add_2, int kinds) {
	int t = ++now_WuQi;
	w[t].name = n;
	w[t].add_Att = add_1;
	w[t].add_HP = add_2;
	w[t].kind = kinds;
	w[t].have = false;
}

int Me_Attack(int x) {
	int r = rand() % 100 + 1;
	int attack = 1;
	if(r <= 20) {
		attack = My.Attack * 2;
		printf("你:暴击!对敌方造成%d点高额伤害", attack); 
		return attack;
	}
	if(r >= 21 && r <= 25) {
		attack = My.Attack * 5;
		printf("你:大招!对敌方造成%d点爆炸伤害", attack);
		return attack;
	}
	if(r >= 26 && r <= 95) {
		attack = My.Attack;
		printf("你:对敌方造成%d点伤害", attack);
		return attack;
	}
	if(r >= 96 && r <= 100) {
		attack = x / 2;
		printf("你:使用毒素攻击!敌方血量减半");
		return attack;
	}
} 

int Di_Attack(int x, int att) {
	int r = rand() % 100 + 1;
	int attack = 1;
	if(r <= 20) {
		attack = att * 2;
		printf("敌:暴击!对你造成%d点高额伤害", attack); 
		return attack;
	}
	if(r >= 21 && r <= 25) {
		attack = att * 5;
		printf("敌:大招!对你造成%d点爆炸伤害", attack);
		return attack;
	}
	if(r >= 26 && r <= 95) {
		attack = att;
		printf("敌:对你造成%d点伤害", attack);
		return attack;
	}
	if(r >= 96 && r <= 100) {
		attack = x / 2;
		printf("敌:使用毒素攻击!你的血量减半");
		return attack;
	}
} 

int Zombie_Attack(int att) {
	int r = rand() % 100 + 1;
	printf("怪物对你造成%d点伤害", att);
	if(r <= 20) {
		printf("\n攻击被格挡,伤害减半");
		att /= 2; 
	}
	if(r >= 21 && r <= 25) {
		printf("\n攻击被闪避");
		att = 0;
	}
	return att;
}

void ccc(string s) {
	for(int i = 0; i < s.size(); i++) {
		cout << s[i];
		Sleep(20);
	}
	cout << "\n";
}

void slow(string s) {
	int f;
	if(SZ.Fast) f = 1;
	else f = 2;
	for(int i = 0; i < s.size(); i++) {
		cout << s[i];
		Sleep(150 * f);
	}
	cout << "\n";
}

void Game() {
	srand((unsigned)time(NULL));
	cls();
	ccc("欢迎英雄回家!");
	Sleep(1000);
	cls();
	ccc("请选择你想要操作:");
	ccc("1.关卡 2.查看我的信息 3.强化 4.双人对战 5.装备区 6.更新日志 7.新手福利 8.自定义设置");
	string s;
	cin >> s;
	if(s == "1") {
		cls();
		int t = 0, r = 0;
		for(int i = 1; i <= 3; i++) {
			cout << "已加载" << i * 30 << "%~\n";
			t = r;
			r = rand() % 6 + 1;
			if(r == t) r = rand() % 6 + 1; 
			if(r == 1) printf("主线关卡和双人对战获胜均可获得经验值~\n");
			if(r == 2) printf("强化可以增加20%的属性~\n");
			if(r == 3) printf("毒素非常厉害,可以让怪物血量砍半~\n");
			if(r == 4) printf("可以在主页看到自己的等级~\n");
			if(r == 5) printf("Boss关卡难度很高,可以重复打之前的关卡升级再打~\n");
			if(r == 6) printf("对方的攻击是可能被格挡或闪避的哦~\n"); 
			slow("->->->");
			cls();
		}
		ccc("选择关卡");
		for(int i = 1; i <= now_zombies; i++) {
			printf("%d. ", i);
			cout << a[i].Name;
			cout << "\t";
			if(i < 6 || i > 9) cout << "\t";
			cout << "难度:";
			for(int j = 1; j <= a[i].hard; j++) cout << "☆";
			cout << "\n";
		}
		int x;
		cin >> x;
		if(x < 1 || x > now_zombies) {
			cls();
			system("color 04");
			slow("Error!");
			Sleep(1000);
			system("color 09");
			Game();
		}
		else {
			cls();
			slow("战斗准备中~~~");
			cout << "\n";
			int zombie_HP = a[x].HP;
			int zombie_Attack = a[x].Attack;
			int My_HP = My.HP;
			int My_Attack = My.Attack;
			while(1) {
				zombie_HP -= Me_Attack(zombie_HP);
				printf("\n怪物还剩%d点血\n\n", zombie_HP);
				Sleep(1000);
				if(zombie_HP <= 0) {
					cls();
					slow("获得胜利!");
					Sleep(1000);
					My.Exp += 100 << x;
					My.QH += 5 << x - 1; 
					if(My.Exp >= My.EXP_MAX) {
						cls();
						slow("升级了");
						My.Exp -= My.EXP_MAX;
						My.EXP_MAX <<= 1;
						My.Lvl++;
						My.Attack *= 1.5;
						My.HP *= 1.5; 
						printf("你现在%d级", My.Lvl);
						Sleep(1000);
						break;
					}
					break;
				}
				My_HP -= Zombie_Attack(zombie_Attack);
				printf("\n你还剩%d点血\n\n", My_HP);
				Sleep(1000);
				if(My_HP <= 0) {
					cls();
					slow("You Die!");
					My.Exp /= 2;
					break;
				}
			}
			Game();
		}
	}
	if(s == "2") {
		cls();
		ccc("基本信息如下");
		printf("\n等级:%d\n经验值:%d\n经验值上限:%d\n攻击力:%d\n生命值:%d\n\n", My.Lvl, My.Exp, My.EXP_MAX, My.Attack, My.HP);
		ccc("请按任意键继续~~~");
		char c = getch();
		Game();
	}
	if(s == "3") {
		cls();
		printf("你有%d个强化点,强化需要10强化点\n", My.QH);
		Sleep(1000);
		if(My.QH < 10) {
			ccc("强化点不足,无法进行强化");
			Game();
		}
		ccc("输入:1. 强化攻击 2. 强化生命");
		char c = getch();
		if(c == '1') My.Attack = My.Attack * 6 / 5;
		else My.HP = My.HP * 6 / 5; 
		My.QH -= 10;
		cls();
		slow("强化成功!");
		Game();
	}
	if(s == "4") {
		cls();
		for(int i = 1; i <= 3; i++) {
			cout << "正在联网寻找对手";
			slow("->->->");
			cls();
		}
		int r = rand() % 10 + 1;
		cout << "你 VS ";
		if(r == 1) cout << "烟柳一枝花";
		if(r == 2) cout << "英雄小五";
		if(r == 3) cout << "笑的很甜蜜";
		if(r == 4) cout << "北风吹";
		if(r == 5) cout << "别打了";
		if(r == 6) cout << "你干嘛~";
		if(r == 7) cout << "牢大坠机啦!";
		if(r == 8) cout << "秋风萧瑟";
		if(r == 9) cout << "为神马0505";
		if(r == 10) cout << "江洋大盗重彪脸";
		Sleep(1000);
		cls();
		int My_HP = My.HP;
		int Di_Att = (rand() % (My.Lvl * 15) + 10) / 5 * 5;
		int Di_HP = My.Lvl * 100 - Di_Att;
		while(1) {
			Di_HP -= Me_Attack(Di_HP);
			printf("\n敌方还剩%d点血\n\n", Di_HP);
			Sleep(1000);
			if(Di_HP <= 0) {
				cls();
				slow("Win!!!");
				My.Exp += pow(10, My.Lvl + 1) * 2;
				My.QH += 5 << My.Lvl - 1; 
				if(My.Exp >= My.EXP_MAX) {
					cls();
					slow("升级了");
					My.Exp -= My.EXP_MAX;
					My.EXP_MAX <<= 1;
					My.Lvl++;
					My.Attack *= 1.5;
					My.HP *= 1.5; 
					printf("你现在%d级", My.Lvl);
					Sleep(1000);
					break;
					}
				Game(); 
			}
			My_HP -= Di_Attack(My_HP, Di_Att);
			printf("\n你还剩%d点血\n\n", My_HP);
			Sleep(1000);
			if(My_HP <= 0) {
				cls();
				slow("Lose!!!");
				Game();
			}
		}
	}
	if(s == "5") {
		cls();
		ccc("您有如下装备");
		cout << "\n";
		bool f = false;
		for(int i = 1; i <= now_WuQi; i++) {
			if(w[i].have) {
				cout << w[i].name << "\n\n";
				f = true;
			}
		}
		if(!f) {
			Sleep(1000);
			ccc("啊嘞?空空如也");
		}
		cout << "\n";
		ccc("已装备:");
		int t1 = WuQi_Ku.wuqi_id, t2 = WuQi_Ku.fangjv_id, t3 = WuQi_Ku.zuoqi_id;
		cout << "武器:" << w[t1].name << "\n";
		cout << "防具:" << w[t2].name << "\n";
		cout << "坐骑:" << w[t3].name << "\n";
		ccc("你要装上装备吗?(Y/N)");
		char c = getch();
		if(c == 'Y') {
			cls();
			ccc("装上哪个编号的?");
			for(int i = 1; i <= now_WuQi; i++) {
				cout << i << ". " << w[i].name;
				printf(" 攻击加成:%d 生命加成:%d 拥有状态:", w[i].add_Att, w[i].add_HP);
				if(w[i].have) cout << "Yes";
				else cout << "No";
				cout << "\n";
			}
			int x;
			cin >> x;
			if(!w[x].have) {
				cls();
				ccc("你未拥有");
				Sleep(1000);
				Game();
			}
			if(w[x].kind == 1) {
				WuQi_Ku.wuqi_id = x;
				My.Attack += w[x].add_Att;
				My.HP += w[x].add_HP;
			}
			if(w[x].kind == 2) {
				WuQi_Ku.fangjv_id = x;
				My.Attack += w[x].add_Att;
				My.HP += w[x].add_HP;
			}
			if(w[x].kind == 3) {
				WuQi_Ku.zuoqi_id = x;
				My.Attack += w[x].add_Att;
				My.HP += w[x].add_HP;
			}
			Game();
		}
		else Game(); 
	}
	if(s == "6") {
		cls();
		ccc("v1.0.0 最基本的游戏");
		ccc("v1.0.3 加载画面修改");
		ccc("v1.1.2 新增强化功能");
		ccc("v1.1.5 修复已知问题,初始化界面修改");
		ccc("v1.1.9 增加关卡到10个");
		ccc("v1.3.1 增加双人对战模式");
		ccc("v1.4.9 增加武器库功能");
		ccc("v1.5.1 新增新人福利活动");
		ccc("v1.6.3 新增自定义设置"); 
		ccc("请按任意键继续~~~"); 
		char c = getch();
		Game();
	}
	if(s == "7") {
		cls();
		if(fuli) {
			slow("已领取~");
			Sleep(1000);
			Game();
		}
		ccc("推出新人福利活动!十件超强装备随机派送!");
		ccc("请按任意键领取");
		char c = getch();
		cls();
		slow("恭喜获得");
		int r = rand() % now_WuQi + 1;
		cout << w[r].name << "!";
		ccc("奖励已经发放到武器库~");
		w[r].have = true;
		fuli = true;
		Sleep(3000);
		Game(); 
	}
	if(s == "8") {
		cls();
		ccc("可设置:1.快速加载 2.外挂模式(关闭将初始化)");
		int x;
		cin >> x;
		if(x == 1) {
			if(SZ.Fast) {
				ccc("已关闭快速加载");
				SZ.Fast = false;
			}
			else {
				ccc("已开启快速加载");
				SZ.Fast = true;
			}
			Sleep(1000);
		}
		if(x == 2) {
			if(SZ.Buff) {
				ccc("已关闭外挂模式");
				SZ.Buff = false;
				My.Attack = 10;
				My.HP = 100;
			}
			else {
				ccc("已开启外挂模式");
				SZ.Buff = true;
				My.Attack = 114514;
				My.HP = 114514;
			}
			Sleep(1000);
		}
		Game();
	}
}

void My_inti() {
	My.Attack = 10;
	My.HP = 100;
	My.Lvl = 1;
	My.Exp = 0;
	My.EXP_MAX = 1000;
	My.QH = 0;
}

void zombies_inti() {
	new_(100, 10, "Cai XuKun", 1);
	new_(250, 25, "Lao Da", 2);
	new_(500, 30, "Ri Ben", 3);
	new_(600, 50, "Lao Liu", 3);
	new_(1000, 88, "Little Boss", 4);
	new_(1200, 100, "Chinese Teacher", 5);
	new_(500, 300, "Maths Teacher", 5);
	new_(2000, 50, "English Teacher", 5);
	new_(1500, 150, "I Have No NAME", 5);
	new_(3000, 300, "BIG BOSS!!!", 7);
}

void WuQi_inti() {
	w[0].name = "Null";
	_new("Qing Hong Sword", 30, -10, 1);
	_new("Green Dragon Crescent Blade", 50, 0, 1);
	_new("AK-47", 20, 0, 1);
	_new("Rattan Beetle", -10, 150, 2);
	_new("Chi Tu Horse", 10, 100, 3);
	_new("Gold Beetle", 0, 100, 2);
	_new("Di Du Horse", -10, 150, 3);
	_new("Ba Zu KA", 200, -50, 1);
	WuQi_Ku.wuqi_id = WuQi_Ku.fangjv_id = WuQi_Ku.zuoqi_id = 0;
}

void inti() {
	zombies_inti();
	My_inti();
	WuQi_inti();
	system("color 09");
	slow("By GuWenBo");
	Sleep(1000);
	cls();
	for(int i = 1; i <= 2; i++) {
		cls();
		cout << "Loading~~~\n";
		slow("->->->");
	}
	Sleep(300);
	Game();
}

int main() { inti();}

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

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

相关文章

ffmpeg使用x11录屏

version #define FFMPEG_VERSION "6.1.1" note x11视频采集结构:AVInputFormat ff_xcbgrab_demuxer code void CFfmpegOps::CaptureVideo(const char *outFileName) {const AVInputFormat *iFmt nullptr;size_t n 0;AVFormatContext *iFmtCtx nullptr;AVDict…

三十九、大数据技术之Kafka3.x(2)

&#x1f33b;&#x1f33b; 目录 一、Kafka 生产者1.1 生产者消息发送流程1.1.1 发送原理1.1.2 生产者重要参数列表 1.2 异步发送API1.2.1 普通异步发送1.2.2 带回调函数的异步发送 1.3 同步发送 API1.4 生产者分区1.4.1 分区好处1.4.2 生产者发送消息的分区策略1.4.3 自定义分…

使用Leaks定位iOS内存泄漏问题并解决

使用Leaks定位iOS内存泄漏问题并解决 前言 内存泄漏问题一直是程序开发中最令人头疼的问题&#xff0c;特别是C/C。虽然C/C在C11之后引入了许多新特性&#xff0c;包括智能指针&#xff0c;自动类型推导等&#xff0c;但C中动态内存的分配和释放仍然需要程序员来显式地进行。…

Linux线程thread详解(线程池)

在我们的进程虚拟地址的代码区&#xff0c;对于代码中的每个函数都有对应的地址&#xff0c;每个函数中的每行代码都有对应的代码&#xff0c;并且每个函数中的每行代码的地址都是连续的。既然代码是连续的&#xff0c;也就意味着我们可以将我们代码分块&#xff0c;分成不同的…

机器学习笔记:序列到序列学习[详细解释]

介绍 本节我们使用两个循环神经网络的编码器和解码器&#xff0c; 并将其应用于序列到序列&#xff08;sequence to sequence&#xff0c;seq2seq&#xff09;类的学习任务。遵循编码器&#xff0d;解码器架构的设计原则&#xff0c; 循环神经网络编码器使用长度可变的序列作为…

Jeecgboot3.6.3的vue3版本的一种flowable动态增加一个用户任务节点的方法(二)前端代码实现

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 这部分主要讲前端的功能实现 1、前端选择新增任务类型界面,点击新增节点 /*** 动态新增用户任务节点*/function handleAddTask(record: Recordable) {if (record.finishTime != null) {createMess…

在 .NET 8.0 中使用 xUnit 进行数据驱动测试

1. 前言 xUnit是一个功能强大且易于使用的单元测试框架。在.NET开发中&#xff0c;单元测试是非常重要的一部分&#xff0c;它可以帮助我们确保代码的正确性和可靠性。使用xUnit可以帮助我们编写更高效、更有效的单元测试&#xff0c;并提高代码质量和可维护性。 2. 特性 x…

Git-GitLab-Jenkins结合

目录 1.Git-GitLab-Jenkins结合2. 在pycharm配置git3. 实现提交代码后触发自动化测试&#xff08;1&#xff09;打开gitlab&#xff08;2&#xff09;Jenkins配置Git&#xff08;3&#xff09;选择需要的远程仓库 4.报告存在问题&#xff1a;5.也可以在Jenkins中设置定时触发&a…

OpenCV图像滤波(10)Laplacian函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 计算图像的拉普拉斯值。 该函数通过使用 Sobel 运算符计算出的 x 和 y 的二阶导数之和来计算源图像的拉普拉斯值&#xff1a; dst Δ src ∂…

Elasticsearch:引入 Serverless 精简索引分片

作者&#xff1a;来自 Elastic Tanguy Leroux 在本文中&#xff0c;我们将介绍 Elasticsearch 的精简索引分片&#xff08;thin indexing shards&#xff09;&#xff0c;这是我们为 Elastic Cloud Serverless 开发的一种新型分片&#xff0c;允许将 Elasticsearch 索引存储在云…

大数据技术现场工程师特色实训室解决方案

一、引言 在大数据时代背景下&#xff0c;数据已成为新的生产要素&#xff0c;驱动着各行各业的创新发展。面对这一趋势&#xff0c;市场对于既掌握大数据理论知识又具备实战能力的大数据技术人才的需求急剧增加。为了应对这一挑战&#xff0c;唯众精心设计了一套全面的大数据…

国产 麒麟 ARM 环境编译 RocketMQ-Client-CPP

1.环境 系统版本&#xff1a;Linux 5.4.18-87.76-generic KYLINOS SMP Thu Aug 31 09:05:44 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux GCC: gcc (Ubuntu 9.3.0-10kylin2) 9.3.0 G: g (Ubuntu 9.3.0-10kylin2) 9.3.0 RocketMQ服务端版本&#xff1a;5.1.1 RocketMQ-cpp …

修改docker的/var/lib/docker/overlay2储存路径

目录 目录 1.准备新的存储位置 1.创建新的存储目录 2.修改目录权限 2. 配置 Docker 使用新的存储位置 1.停止 Docker 服务 2.编辑 Docker 配置文件 3.迁移现有 Docker 数据 1.将现有的 Docker 数据从系统盘移动到新目录 2.启动 Docker 服务 3. 验证更改 4. 清理旧的…

RAGFlow v0.9 重磅升级,支持 GraphRAG,开启下一代 RAG 之旅!

一、引言 前面我们介绍过很多的关于大模型和RAG相关的技术&#xff0c;通过其关注程度足以看到市场上对RAG框架和成熟产品的迫切需求&#xff0c;因为想要个人独立从0开始实现一个RAG产品并非易事&#xff0c;虽然有相当多的RAG或者知识库开源产品&#xff0c;大部分其实很难应…

使用 Elasticsearch RestHighLevelClient 进行查询

Elasticsearch 提供了多种客户端库&#xff0c;以方便不同编程语言的用户进行操作。其中&#xff0c;Java 的 RestHighLevelClient 是 Elasticsearch 官方推荐的客户端之一&#xff0c;用于 Java 应用程序中。本文将介绍如何使用 Java 的 RestHighLevelClient 进行 Elasticsear…

Docker Hub 镜像代理加速

因为未知原因&#xff0c;docker hub 已经不能正常拉取镜像&#xff0c;可以使用以下代理服务来进行&#xff1a; "https://docker.m.daocloud.io", "https://noohub.ru", "https://huecker.io", "https://dockerhub.timeweb.cloud"…

深入浅出消息队列----【顺序消息的实现原理】

深入浅出消息队列----【顺序消息的实现原理】 何为顺序发消息的顺序性存储消息的顺序性消费消息的顺序性顺序消息消费的三把锁第一把锁&#xff1a;分布式锁第二把锁&#xff1a;Synchronized第三把锁&#xff1a;ReentrantLock 本文仅是文章笔记&#xff0c;整理了原文章中重要…

vue3仿飞书头像,根据不同名称生成不同的头像背景色

效果展示&#xff1a; 传递三个参数&#xff1a; name&#xff1a;要显示的名称&#xff1b;size&#xff1a;头像的大小&#xff1b;cutNum&#xff1a;分割当前名称的最后几位数&#xff1b; 代码如下&#xff1a; <template><div:style"{color: #fff,borde…

VMware虚拟机下安装Ubuntu22.04以及汉化配置保姆级教程

目录 一.VMware和Ubuntu下载 二.在VMware中创建Ubuntu 1.点击 创建新的虚拟机 2.选择典型 3.选择Ubuntu镜像包&#xff08;自定义存放的位置&#xff09; 4.创建个人信息&#xff08;密码一定要牢记&#xff09; 5.选择虚拟机的安装位置 6.其他配置项&#xff08;默认下…

在数字浪潮中扬帆远航,软件行业就业前景如何?

随着数字化转型的加速和信息技术的广泛应用&#xff0c;对于软件开发人员的需求持续增长。不仅传统IT企业需要大量的软件开发人才&#xff0c;各行各业的企业也普遍需要自主研发软件以满足其业务需求。对于具备较好的学习能力和适应能力的人来说&#xff0c;这个行业提供了更多…