一个对战程序的C++源代码

说明:

人物和怪物属性用结构——string名字,double力量,敏捷,速度,体质

全局变量hp[0]和hp[1],用于储存人物血量和怪物血量。

力量:影响基础攻击力

敏捷:倍击系数(根据敏捷差随机产生)

速度:速度高可以多次出手,出手次数根据速度差

体质:影响最大血量,影响免伤

人物属性和怪物属性,都是全局变量

人物属性,在主函数进行初始化;

怪物属性,第一个怪物在声明时初始化;

之后的怪物在使用的时候,进行初始化;

战斗函数(调用敏捷函数)

敏捷函数(影响倍击)

技能函数(用于释放技能,坑未埋)

人物属性函数(输出人物属性)

怪物属性函数(输出怪物属性,根据调用的怪物编号)

战斗结束函数(用于输出战斗结果)

—————————————— 以下是代码 ——————————————

#include<iostream>
#include<string>
#include<ctime>	//用clock()%100 求余,做随机数种子
using namespace std;

struct shuxing
{
	string name;	//名字
	double str;	//力量
	double dex; 	//敏捷
	double sudu;	//速度
	double tizhi; 	//体质
};

shuxing player;	//声明全局变量角色,类型为结构
shuxing enemy[10] = { "史莱姆",3,3,3,5 };//声明全局变量 怪物,类型为结构数组

double hp[2];	//声明全局变量数组hp,hp[0]为玩家的,hp[1]为怪物的
int ski;	//ski决定玩家有什么技能
double def=1;	//def防御参数,和伤害数值相乘
string laji;	//用于吃掉没意义的输入

bool combat(int);	//guai为怪物编号
void playershuxing();	//玩家属性
void guaiwushuxing(int);	//怪物属性
int minjie(int);	//敏捷带来的倍击函数
int skill();	//技能函数,用于释放技能
void combatend(int,bool);

int main()
{
	int guai = 0;
	bool zhandou;
	cout << "欢迎来到游戏世界——《LOL世界冒险》" << endl;
	cout << "请先输入你的名字:";
	getline(cin, player.name);

	player.str = 5;
	player.dex = 5;
	player.sudu = 5;
	player.tizhi = 5;
	hp[0] = int(player.tizhi * 5);	//初始化属性

	playershuxing();	//调用函数,查看用户属性

	cout << "糟糕,你遇见了第一只怪物!" << endl;
	hp[1] = int(enemy[guai].tizhi * 4);	//给怪物进行初始化血量
	guaiwushuxing(guai);	//显示怪物属性
	zhandou =combat(guai);	//战斗,并输出战斗结果
	combatend(guai, zhandou);	//输出战斗结算

	system("pause");
	return 0;
}

void playershuxing()	//查看 玩家的 属性调用本函数
{
	cout << "你好,---" << player.name << "---。你的属性为:" << endl;
	cout << "力量(影响伤害):" << player.str << endl;
	cout << "敏捷(触发倍击):" << player.dex << endl;
	cout << "速度(影响攻速):" << player.sudu << endl;
	cout << "体质(影响免伤):" << player.tizhi << endl;
	cout << "最大生命值:" << player.tizhi * 5 << "(体质的5倍)" << endl;
	if (hp[0] > player.tizhi * 5)hp[0] = player.tizhi * 5;
	cout << "当前生命值:" << hp[0] << endl;
	system("pause");
	cout << endl;
}

void guaiwushuxing(int guai)//查看 怪物 的属性调用本函数
{
	cout << "当前怪物***" << enemy[guai].name << "***的属性为:" << endl;
	cout << "力量(影响伤害):" << enemy[guai].str << endl;
	cout << "敏捷(触发倍击):" << enemy[guai].dex << endl;
	cout << "速度(影响攻速):" << enemy[guai].sudu << endl;
	cout << "体质(影响免伤):" << enemy[guai].tizhi << endl;
	cout << "最大生命值:" << enemy[guai].tizhi * 4 << "(体质的4倍)" << endl;
	if (hp[1] >enemy[guai].tizhi * 4)hp[1] = player.tizhi * 4;
	cout << "当前生命值:" << hp[1] << endl;
	system("pause");
	cout << endl;
}

bool combat(int guai)
{
	double lun = 1, V[2], v;	//lun回合数,V[2]数组(2成员,分别是玩家和怪物速度),v速度基数
	char i,act;	//i行动参数(1为怪物,0为玩家),act为行动参数
	double minguai;	//怪物攻击带来的参数
	int dam;	//dam为伤害,每次实时计算

	if (player.sudu < enemy[guai].sudu)
	{
		v = player.sudu;
	}
	else {  v = enemy[guai].sudu; }	//双方速度低的,为速度基数
	V[0] = V[1] = 0;
	cout << "进入战斗。" << endl;

	for (;hp[0] > 0 && hp[1] > 0;)	//血量都大于0,则执行战斗循环
	{
		cout << "*********** 这 *** 是 *** 新 *** 的 *** 回 *** 合 ***********" << endl;
		cout << "现在是第--->>> " << lun << " <<<---回合。" << endl;
		V[0] = V[0] + player.sudu;
		V[1] = V[1] + enemy[guai].sudu;	//回合开始,两人速度都增加
		while (V[0] >= v || V[1] >= v)	//只要有一个人速度比速度基数高,就判断速度,速度高的出手
		{
			if (V[0] < V[1]) { i = 1; }
			else { i = 0; }	//根据行动快慢,决定谁先动
			if (i == 0)	//玩家行动轮
			{
				cout << "现在轮到你行动了!" << endl;
				cout << "请决定你的动作:" << endl;
				cout << "1.攻击\n2.防御\n3.使用技能\n你的动作是: ";
				act = cin.get();
				getline(cin,laji);
				cout << endl;
				if (act == '1')	//攻击
				{
					dam = int(player.str*minjie(guai)*(player.str / enemy[guai].tizhi));
					cout << "你对 " << enemy[guai].name << " 造成了 " << dam << " 点伤害。";
					hp[1] = hp[1] - dam;
					cout << "敌人还有 " << hp[1] << " 点生命值。" << endl << endl;
					V[0] = V[0] - v;
				}
				else if (act == '2')	//防御
				{
					V[0] = 0;
					def = 0.25;
					cout << "你进行了防御,你的防御指数提高了!" << endl << endl;
				}
				else if (act == '3')	//使用技能
				{
					act=skill();
				}
				else { cout << "输入错误,请重新输入动作代码:"; }
			}
			if (i == 1)	//怪物行动轮
			{
				cout << enemy[guai].name << "  进行攻击!" << endl;

				minguai=minjie(guai);
				if (0==minguai) { minguai = 3; }
				else if (1 == minguai) { minguai = 1; }
				else if (2 == minguai) { minguai = 1 / 2; }
				else if (3 == minguai) { minguai = 1 / 3; }

				dam = int(def*enemy[guai].str*minguai*(enemy[guai].str / player.tizhi));
				hp[0] = hp[0] - dam;	//血量减少
				cout << "你受到了 " << dam << " 点伤害。你当前血量为: " << hp[0] << endl << endl;
				if(def<=1)def = def + 0.1;
				V[1] = V[1] - v;
			}
			if (hp[0] <= 0 || hp[1] <= 0)break;
		}
		lun++;//当两人速度都小于速度基数时,回合数+1
		def = 1;	//防御系数归1
	}
	if (hp[1] <= 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int skill()
{
	if (ski == 0) { cout << "你并未学会技能,行动失败。" << endl; 	return 4;}

}

int minjie(int guai)	//敏捷参数,用于计算伤害倍数
{
	double a, b;
	if (player.dex >= enemy[guai].dex * 2)return 3;
	else if (player.dex >= enemy[guai].dex*1.5)return 2;
	else if (player.dex >= enemy[guai].dex )
	{
		a = player.dex / enemy[guai].dex;	//取值范围1.5~1
		b = clock() % 100 ;	//在0~99之间随机一个数
		a = (a * 100 - 100) * 2;
		if (b <= a)return 2;
		else return 1;
	}
	else
	{
		a= player.dex / enemy[guai].dex;	//取值范围1~0
		a = a * 100;
		b = clock() % 100;	//在1~100之间随机一个数
		if (b <= a)return 1;
		else return 0;
	}
}

void combatend(int guai,bool a)
{
	double heal;
	if (a == true)
	{
		cout << "战斗结束........." ;
		system("pause");
		system("cls");
		cout << "***" << enemy[guai].name << "***死亡!你胜利啦!" << endl;
		if (hp[0] <= 0)hp[0] = 1;
		cout << "你当前生命值为:" << hp[0] << "点。" << endl;
		heal = int(player.tizhi * 2 + enemy[guai].tizhi * 1);
		hp[0] = hp[0] + heal;
		if (hp[0] >= player.tizhi * 5)hp[0] = player.tizhi * 5;
		cout << "由于战斗胜利,你获得了 " << heal << " 点治疗,你当前生命值为	" << hp[0] << " 点。" << endl;
		player.str = player.str + 1;
		player.dex = player.dex + 1;
		player.sudu = player.sudu + 1;
		player.tizhi = player.tizhi + 1;
		playershuxing();
	}
	else if (a == false)
	{
		cout << "战斗结束.........";
		system("pause");
		system("cls");
		cout << "---" << player.name << "---可耻的失败了!" << endl;
		cout << "你被一个大汉爆了菊花!" << endl;
		cout << "你被两个基佬爆了菊花!" << endl;
		cout << "你被三个人妖爆了菊花!" << endl;
		cout << "你被送到泰国,然后做了切除jj手术!" << endl;
		cout << "你被送进外国某个地下红灯区!" << endl;
		cout << "————十八禁内容————" << endl;
		cout << "真是惨不忍睹啊!" << endl;
		cout << "创世神看不下去了,将你复活了" << endl;
		player.tizhi = player.tizhi + 4;
		heal = int(player.tizhi * 2 + enemy[guai].tizhi * 1);
		hp[0] = 1;
		hp[0] = hp[0] + heal;
		if (hp[0] >= player.tizhi * 5)hp[0] = player.tizhi * 5;
		cout << "创世神对你进行了治疗,你回复了 " << heal << " 点血量。" << endl;
		cout << "你的当前血量为 " << hp[0] << " 点。" << endl;
		cout << "由于沐浴了创世神的光辉,你的体质提高了 4 点。这说明你更抗揍了。" << endl;
		playershuxing();
	}
}
时间: 2024-10-03 01:24:56

一个对战程序的C++源代码的相关文章

发送-ASP或者PHP仿战程序,有实力的来

问题描述 ASP或者PHP仿战程序,有实力的来 要求:(1)要和腾讯网一样 (2)要有开心大转盘 (3)输入验证码提示用户抽奖 (4)免弹免杀 要快要快,发送到我邮箱ilovejunhongjing@163.com 解决方案 不好意思 ,需要一个积分,倒点水 解决方案二: 你不把条件说出来 人家就发你邮箱了? 解决方案三: 你要做什么,是要坑人么 解决方案四: 你凭什么要人家帮你写代码?

有哪位大侠能提供《中国联通SGIP1.2短消息网关客户端程序》的源代码

问题描述 有哪位大侠能提供<中国联通SGIP1.2短消息网关客户端程序>的源代码,最好是C#的.....太感谢了,,,, 解决方案 解决方案二:同要同要,c#和delphi版本通吃解决方案三:java给我一份

Android应用程序安装过程源代码分析

转自 :http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中,会启动一个应用程序管理服务PackageManagerService,这个服务负责扫描系统中特定的目录,找到里面的应用程序文件,即以Apk为后缀的文件,然后对这些文件进解析,得到应用程序的相关信息,完成应用程序的安装过程,本文将详细分析这个过程.         应用程序管理服务PackageManagerService安装应用程序的过程,

(五十六)写了一个小的对战程序

#include<iostream> #include <string> using namespace std; void battle(string*, int*, int*, int*, string*, int*, int*, int*);   struct shuxing { string name; int str; int hp; int def; };       int main() { int *st, *h, *de; //定义指针*st,*h,*de str

网上收集的显示asp与php程序源代码的程序。不知能否加入精华区。

程序|精华|显示|源代码 rem view_code.asp<%  on  error  resume  next  %>  <%  function  rt_min(num1,num2)  if  num1=0  and  num2=0  then  rt_min=-1  elseif  num1=0  then  rt_min=num2  elseif  num2=0  then  rt_min=num1  elseif  num1<num2  then  rt_min=num

ASP.NET文件上传程序的源代码

asp.net|程序|上传|源代码 本文件用VB.NET编辑,在WIN2000+IIS(安装有.NET支持)中调试通过,可以上传许多常用的文件类型.如RAR.ZIP.DOC.TXT.JPG.GIF等等!直接下载保存为ASPX格式就可以------------------------------------------------------------<html><title>文件上传</title> <body><form enctype="

Android系统默认Home应用程序(Launcher)的启动过程源代码分析

转自 :http://blog.csdn.net/luoshengyang/article/details/6767736    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应用程序就是Launcher了,本文将详细分析Launcher应用程序的启动过程.         Android系统的Home应用程序Launcher是由Activity

互联网的模式之战:开放还是封闭?

开放还是封闭?保护还是侵犯隐私?谷歌与Facebook针对网络未来标准的争夺虽然因为2008年全球资本市场的风云突变,互联网短暂历史上最具统治力的公司谷歌的股价折半,但不可否认,它仍是网络上影响力最深远的一个实体.当外界侧目于其技术进步.业绩疯长时,谷歌也遭遇着所有公司都会面临的挑战:如何在商业利益与价值观之间达到微妙平衡?2008年底,<纽约时报>专栏作家兰道尔·斯特罗斯(Randall Stross)完成的新著<谷歌行星>(Planet Google)以翔实的采访与旁征博引的笔

国内PHP开源建站程序一览

国外的开源技术也影响和推动了国内开源程序的发展,上文我介绍的<国外优秀开源PHP建站程序一览>中,很多国外开源程序并不太符合中国人的使用习惯,而国内有一些厂家或个人也做了一些不错的产品,不少程序是提供源代码下载的,虽然有些在许可协议上和开源许可证有些出入,但其在使用上还是挺符合中国人的使用习惯,今天我就介绍一些国内的PHP"开源"建站程序. 论坛:Discuz Discuz非常流行,也是中国地区最多用户使用的论坛程序,论坛搭建非常简单易用,使用风格符合中国人的口味.另一个流