一個對戰程式的C++原始碼
阿新 • • 發佈:2019-02-17
說明:
人物和怪物屬性用結構——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(); } }