日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

《凡人修仙传》中打斗场景(c++多态实现)

發布時間:2023/11/30 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《凡人修仙传》中打斗场景(c++多态实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 我們 要實現打斗場景,第一,我們需要有打斗的雙方,一個是英雄,一個是怪物,他們都有自己的屬性,比如攻擊,防御,血量。其次我們的英雄還會有武器。武器上有一些加成屬性,可以幫英雄更好的打怪物,武器也有多種武器可以讓英雄進行選擇。

  • 首先我們做武器類的聲明,一個武器要有名稱,還基礎傷害,其次一些武器可能會有暴擊,吸血,定身的效果,我們要對此進行判斷。由于我們并不實現武器這個類,我們僅僅希望,后面的實現的武器繼承他的屬性并實現,所以我們武器類的屬性都用純虛函數來寫。

    #pragma once #include<iostream> #include<string> using namespace std;//抽象類 class Weapon { public://獲取基礎傷害virtual int getBaseDamage() = 0;//獲取吸血virtual int getSuckBlood() = 0;//獲取是否定身virtual bool getHold()=0;//獲取是否暴擊virtual bool getCrit() = 0;string m_WeaponName; //武器名稱int m_BaseDamage;//基礎傷害};
  • 我們有了武器類,就可以細化做武器了,我們這里就做兩個武器,一個是普通的小刀,另外一個是比較厲害的屠龍刀,我們先做小刀類的聲明。小刀是武器,所以它要繼承武器類的屬性,并擁有自己的構造函數。虛函數可以實現動態多態

    #pragma once#include<iostream>#include"Weapon.h"#include<string>using namespace std;class Knife :public Weapon{public:Knife();//獲取基礎傷害virtual int getBaseDamage() ;//獲取吸血virtual int getSuckBlood() ;//獲取是否定身virtual bool getHold();//獲取是否暴擊virtual bool getCrit();};
  • 有了小刀類的聲明后,我們可以在類外實現小刀這個類,小刀沒有別的屬性,所以,我們只用在構造中,把"小刀"這個名字和基礎攻擊力賦值,然后獲取攻擊力的函數中,返回基礎攻擊力就可以。

    #include"Knife.h"Knife::Knife(){this->m_BaseDamage = 10;this->m_WeaponName = "小刀";}int Knife::getBaseDamage(){return this->m_BaseDamage;}int Knife::getSuckBlood(){return 0;}bool Knife::getHold(){return false;}bool Knife:: getCrit(){return false;}
  • 我們聲明屠龍刀類,屠龍刀依舊是繼承武器類,此外,作為一個強大的武器,它還必須具有其他的屬性,它還有吸血,暴擊,和可以讓怪物定身的能力,但是它的這些能力,并不是一定會觸發,需要一些屬性也就是概率來觸發。

    #pragma once //防止頭文件重復編譯#include<iostream>#include"Weapon.h"#include<string>using namespace std;class DragonSword :public Weapon{public:DragonSword();//獲取基礎傷害virtual int getBaseDamage();//獲取吸血virtual int getSuckBlood();//獲取是否定身virtual bool getHold();//獲取是否暴擊virtual bool getCrit();//吸血率,暴擊率,定身率int SuckRate;int holdRate;int critRate;//傳入概率 判斷是否觸發bool isTrigger(int rate);};
  • 屠龍刀的實現:再構造中,把它的基本屬性賦值,其他的屬性,我們通過一個成員函數來判斷是否觸發特效,我們在構造中把觸發特效的概率寫出來,然后在判斷概率函數中,設置一個隨機數,如果這個隨機數比概率小,則觸發特效。

    #include"DragonSword.h"DragonSword::DragonSword(){this->m_BaseDamage = 20;this->m_WeaponName = "屠龍寶刀";this->SuckRate = 20;this->holdRate = 30;this->critRate = 35;}int DragonSword::getBaseDamage(){return this->m_BaseDamage;}int DragonSword::getSuckBlood(){if (isTrigger(SuckRate)){return this->m_BaseDamage*0.5; //按照武器基礎傷害一半吸血}return 0;}bool DragonSword::getHold(){if (isTrigger(holdRate)){return true;}return false;}bool DragonSword::getCrit(){if (isTrigger(critRate)){return true;}return false;}bool DragonSword::isTrigger(int rate){//通過isTrigger判斷是否觸發特效//隨機一個0~100的數字//rand()%100 是0~99之間的隨機數 +1后是1~100之間的一個隨機數//如果產生的隨機數比設定的概率值小則發生,否則不發生int num = rand() % 100 + 1;if (num < rate){return true;}return false;}
  • 有了武器后,我們聲明英雄類,英雄除了基本屬性外,還要判斷是否有武器,有什么樣的武器

    #pragma once#include<iostream>#include"Weapon.h"#include<string>#include"Monster.h"using namespace std;class Monster;class Hero{public:Hero();string m_Name;//人名int m_Atk;//攻擊力int m_Def;//防御力int m_Hp;//血量Weapon * weapon;//武器void EquipWeapon(Weapon * weapon);void Attack(Monster * monster);};
  • 英雄類的實現。

    #include"Hero.h"Hero::Hero(){this->m_Hp = 500;this->m_Atk = 45;this->m_Def = 50;this->m_Name = "劉法師";this->weapon = NULL;}//裝備武器void Hero::EquipWeapon(Weapon * weapon){this->weapon = weapon;cout << "英雄:" << this->m_Name << "裝備了武器" << this->weapon->m_WeaponName << endl;}void Hero::Attack(Monster * monster){int damage = 0;int addHp = 0;bool isHold = false;bool isCrit = false;if (this->weapon == NULL) //武器為空,沒有加成{damage = this->m_Atk;}else{//基礎傷害damage = this->m_Atk + this->weapon->m_BaseDamage;//計算吸血addHp = this->weapon->getSuckBlood();//計算定身isHold = this->weapon->getHold();//計算暴擊isCrit = this->weapon->getCrit();if (isCrit) //暴擊 傷害加成{damage = damage * 1.5;cout << "英雄的武器觸發了暴擊效果,怪物受到了高額傷害,傷害值:" << damage << endl;}if (isHold){cout << "英雄的武器觸發了定身效果,怪物停止攻擊一回合" << endl;}if (addHp){cout << "英雄的武器觸發了吸血效果,英雄" << this->m_Name << "的血量增加了" << addHp << endl;}}//設置怪物定身monster->m_Hold = isHold;//計算真實傷害int trueDamage = (damage - monster->m_Def) > 0 ? damage - monster->m_Def : 1;monster->m_Hp -= trueDamage;this->m_Hp += addHp;cout << "英雄" << this->m_Name << "攻擊了敵人" << monster->m_Name << "造成了傷害" << trueDamage << endl;}
  • 接下來我們就要聲明怪物類,怪物里除了基本屬性外,還有一些特殊屬性,比如是否被定身。

    #pragma once#include<iostream>#include"Weapon.h"#include<string>#include"Hero.h"using namespace std;class Hero;class Monster{public:Monster();string m_Name;int m_Hp;int m_Atk;int m_Def;bool m_Hold;void Attack(Hero * hero);};
  • 怪物類的實現

    #include"Monster.h"Monster::Monster() {this->m_Hp = 300;this->m_Atk = 70;this->m_Def = 40;this->m_Hold = false;this->m_Name = "比克大魔王"; }void Monster::Attack(Hero* hero) {if (this->m_Hold){cout << "怪物" << this->m_Name << "被定身了,本回合無法攻擊" << endl;return;}//計算攻擊的傷害int damage = (this->m_Atk - hero->m_Def ) > 0 ? this->m_Atk - hero->m_Def : 1;hero->m_Hp -= damage;cout << "怪物" << this->m_Name << "攻擊了英雄" << hero->m_Name << "造成了傷害" << damage << endl; }
  • 最后就是一個打斗的實現了

    #include<iostream> #include"Hero.h" #include"Monster.h" #include"Weapon.h" #include"Knife.h" #include"DragonSword.h" using namespace std;void play() {//創建怪物Monster * monster = new Monster;//創建英雄Hero *hero = new Hero;//創建武器Weapon * kinfe = new Knife;Weapon * dragon =new DragonSword;//讓用戶選擇武器cout << "請選擇武器:" << endl;cout << "1. 赤手空拳" << endl;cout << "2. 小刀" << endl;cout << "3. 屠龍刀" << endl;int oper;cin >> oper;switch (oper){case 1:cout << "你真牛X,你還是太年輕了" << endl;break;case 2:hero->EquipWeapon(kinfe);break;case 3:hero->EquipWeapon(dragon);break;default:cout << "沒有你要選擇的武器" << endl;break;}getchar();//輸入緩沖區里有個回車,多獲取一次值int round = 1;while (true){getchar();system("cls");cout << "--當前第" << round << "回合開始-----" << endl;if (hero->m_Hp <= 0){cout << "英雄" << hero->m_Name << "已掛,游戲結束" << endl;break;}hero->Attack(monster);if (monster->m_Hp <= 0){cout << "怪物" << monster->m_Name << "已掛,順利通關" << endl;break;}monster->Attack(hero);if (hero->m_Hp <= 0){cout << "英雄" << hero->m_Name << "已掛,游戲結束" << endl;break;}cout << "英雄" << hero->m_Name << "剩余血量" << hero->m_Hp << endl;cout << "怪物" << monster->m_Name << "剩余血量" << monster->m_Hp << endl;round++;}delete monster;delete hero;delete kinfe;delete dragon;}
  • 運行結果



    總結

    以上是生活随笔為你收集整理的《凡人修仙传》中打斗场景(c++多态实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 一级片免费在线观看 | 国产一级二级三级视频 | 黄色av网址在线观看 | 亚洲精品影院在线 | 久久久久久久久久久电影 | www午夜视频 | 黄色不卡 | 无人在线观看的免费高清视频 | 91网站免费看 | 免费看欧美片 | 久久久老熟女一区二区三区91 | 国产性―交一乱―色―情人 | 国产精品麻豆成人av电影艾秋 | 青青草视频 | 久久潮 | 丝袜 亚洲 另类 国产 制服 | 男女猛烈无遮挡 | 一区二区日本视频 | 蜜桃91丨九色丨蝌蚪91桃色 | 国产主播精品 | 欧美成人做爰大片免费看黄石 | 中文字幕一区二区三区四区 | 一本色道久久综合 | 亚洲人在线观看视频 | 黄色短视频在线播放 | 最新毛片网 | 天天爽天天操 | 少妇一边呻吟一边说使劲视频 | 欧洲做受高潮免费看 | 欧美精品xx | 午夜99| 国产91精品久久久久 | 久久天天躁狠狠躁夜夜av | 欧美性教育视频 | 那里有毛片看 | 三级在线网站 | 黄色免费在线看 | 欧日韩在线观看 | 久久久久亚洲av片无码v | 亚洲视频一区二区 | www黄色在线观看 | 国产a久久麻豆入口 | 欧美伦理一区二区三区 | √天堂在线 | 福利视频导航网 | 最近国语视频在线观看免费播放 | 中文字字幕在线中文 | 伊人伊网 | 美日韩精品视频 | 久久传媒 | 欧美三级自拍 | a天堂资源在线观看 | 亚洲蜜臀av乱码久久精品蜜桃 | 久久久啊啊啊 | 久久久久久久久久久久久久久久久久 | 色婷婷av一区二区三区之红樱桃 | 人妻无码一区二区三区四区 | 亚洲国产清纯 | 波多野结衣中文字幕在线播放 | 欧美 日韩 中文 | 国产精品丝袜在线观看 | 麻豆视频免费在线 | 欧美做爰xxxⅹ性欧美大片 | 欧美黄色三级 | 欧美日韩视频一区二区 | 毛片h| 成人自拍在线 | 亚洲激情中文字幕 | 午夜在线免费观看 | 午夜狠狠干 | 暖暖视频日本 | 亚洲人成亚洲人成在线观看 | 日本成人高清 | 国产综合久久久 | 精品久久在线观看 | 亚洲最新在线视频 | 精品毛片 | 亚洲色图 欧美 | 最新黄色网址在线观看 | 日韩精品一二区 | 嫩草嫩草嫩草嫩草 | 日本伦理中文字幕 | 日韩精品在线观看中文字幕 | 国产a视频 | av一级黄色| 欧美草逼视频 | 亚洲高h | 婷婷伊人 | 美女被草出水 | 午夜免费播放观看在线视频 | 波多野结衣在线观看一区二区三区 | 日韩伦理视频 | 亚洲在线观看av | 久久精品国产99国产 | 色哟哟网站在线观看 | 欧美做爰xxxⅹ性欧美大片 | 久久靖品 | 情侣av | 午夜一区二区三区 |