1. 程式人生 > >一個對戰程式的C++原始碼

一個對戰程式的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();
	}
}