999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C++的回合制戰斗系統Combat的設計與實現

2022-05-30 04:37:33王梓嘉琪孫煉
電腦知識與技術 2022年16期

王梓嘉琪 孫煉

摘要:回合制游戲也是一款需要講究策略的游戲。在回合制游戲的設計中,需考慮玩家角色的各大方面,是否設計合理也是玩家體驗感好的關鍵原因。文章利用面向對象思想,用C++語言對基本回合制游戲進行設計與實現,用繼承與多態解決關鍵性設計問題。

關鍵詞:面向對象;C++;繼承;多態

中圖分類號:TP311? ? ? 文獻標識碼:A

文章編號:1009-3044(2022)16-0095-02

1 引言

在競技類游戲火爆全球的時候,有一款名叫《夢幻西游》的回合制游戲占據了全球游戲排行榜的第三名,說明回合制游戲也并非想象的那么簡單。回合制游戲就像是下棋,操作簡單,可每一步都需思考,沒有激烈的戰斗,但玩家可以體驗到“智斗”的樂趣。本文通過C++對簡單回合制游戲的設計和編寫,更加深入地理解C++的應用以及回合制游戲的基本原理。

2 系統設計

2.1 游戲總體分析

本文將設計一款基礎簡單的回合制游戲《Combat》。游戲中有2個軍團,每個軍團默認人數各有3人,人物角色分別為:戰士、巫師、法師,每個角色均可對敵方成員進行任意的攻擊,均可獲得經驗值及恢復生命力等。最開始任意指定一方進行攻打對方,隨后雙方輪流進行攻打,若第一回合未決出勝負,則開始下一回合,直到決出勝負。當敵方所有成員均滅亡時才判為勝利。

2.2 角色設計

Soldier戰士:

1)屬性:最大生命max HP、當前生命HP、最大體力maxima、當前體力SP、攻擊力damage、經驗exp、等級level、姓名name、藥瓶數量drugNum。

2)動作:決策makeDecision、攻擊attack、休息rest、吃藥takingDrug。

Wizard巫師:

1)屬性:有戰士的所有屬性外加最大魔法值maxMp、當前魔法值MP。

2)動作:決策makeDecision、攻擊attack、休息rest、吃藥takingDrug、魔法攻擊wizard_attack(名稱與戰士相同但操作不同)。

Master大師:

1)屬性:新增屬性有maxNp、當前內力NP,其余與戰士和巫師一樣。

2)動作:決策makeDecision、攻擊attack、休息rest、吃藥takingDrug、魔法攻擊wizard_attack、絕殺攻擊master_attack(名稱一樣但操作不同)。

WarSystem戰斗系統:

1)屬性:軍團設置(軍團A、軍團B)。

2)動作:戰斗開始startWar、回合開始startRound。

2.3 編程語言及設計環境

選擇用C++語言實現。C++是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基于對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。C++擅長面向對象程序設計的同時,還可以進行基于過程的程序設計。C++不僅擁有計算機高效運行的實用性特征,同時還致力于提高大規模程序的編程質量與程序設計語言的問題描述能力。

選擇利用Dev-C++進行編譯。Dev-C++(或者叫作 Dev-Cpp)是 Windows 環境下的一個輕量級 C/C++ 集成開發環境(IDE)。它是一款自由軟件,遵守GPL許可協議分發源代碼。它集合了功能強大的源碼編輯器、MingW64/TDM-GCC 編譯器、GDB 調試器和 AStyle 格式整理器等眾多自由軟件,適合于在教學中供 C/C++語言初學者使用,也適合于非商業級普通開發者使用。

2.4 設計思路

程序最終不展示動畫,利用文字展示出雙方戰績及戰況。

1)玩家視角:

首先展示初始界面,提示玩家可進行相關準備。

可為A、B軍團分別設置其戰士、巫師、大師的名字。

隨后玩家可看見A、B軍團初始情況。

回合開始開啟任意值抽取來決定哪一方先開始決策且先開始的一方血瓶數減少。

不同的決策會有不同顯示結果,每次決策后對雙方的影響將在選擇決策并完成后顯示。

每一回合結束后,界面會顯示每方各自角色的情況及傷亡情況。

若回合結束未決出勝負,進行下一輪對戰,新回合開始仍然以隨機數決定哪一方先進行決策。

循環回合操作直到決出勝負。

玩家每回合進行決策,思考可對敵方進行最大傷害且可以保護自己和團隊的最佳方式,只有每回合的最開始為隨機挑選首發決策方,其余時候為雙方輪流決策,而非自動回合制系統。

2)程序設計核心思路:

游戲實現的重點與難點是實現各角色間的互動,如何更正確、更便捷地區分各軍團的各角色。

采取面向對象設計的思想,將三大角色(戰士、巫師、大師)以及戰斗系統用類劃分,而非自頂而下的結構化方式。

其中戰士類可作為三大角色類的父類,其他兩個分別為直接繼承和間接繼承。而兩個子類中有與父類相同名稱的函數,則需進行重寫,而在父類中此函數設為虛函數,可實現多態。

為更好實現角色的指向互動,在戰斗系統類中,將戰士類作為整個軍團的指揮,指向整個軍團,可以直接帶出剩余的兩個角色,利用對象的雙重指針即可。

3 算法分析與實現

3.1 主函數main()中核心代碼

主函數中定義基本變量,產生最初隨機數判斷優先決策方,調用戰斗系統類函數觸發回合開始。

主函數中實現對各角色的定義,及軍團的指向的代碼:

Soldier a0,b0;

Wizard a1,b1;

Master a2,b2;

Soldier *A[3], *B[3];

A[0]=&a0;

A[1]=&a1;

A[2]=&a2;

B[0]=&b0;

B[1]=&b1;

B[2]=&b2;

主函數與戰斗系統類對象的聯系實現代碼如下:

WarSystem fight1(A,B);

主函數實現初始隨機數產生代碼如下:

srand((unsigned)time(NULL));

for(i=0; i<1; i++)

{

random=1+ rand() % 2;

}

若隨機數為1則A軍團先開始,為2則B軍團先開始

3.2 戰斗系統類WarSystem中核心代碼

戰斗系統類中函數可實現互動機制以及判斷勝負機制。

戰斗系統類聲明代碼:

class WarSystem{

private:

Soldier **pgroupA;

Soldier **pgroupB;

public:

int anygrouplose(Soldier **A,Soldier **B);//判斷是否被打敗

void startwar(int i,ofstream&ofs);//i為初始隨機數

void startround(Soldier **A,Soldier **B);

WarSystem(Soldier **A,Soldier **B);//構造函數,參數分別指向各自軍團

~WarSystem();

};

startround函數定義代碼:(實現兩軍團的互動)

void WarSystem::startround(Soldier **A,Soldier **B)

{

int i;

for(i=0;ifellownum;i++)

{

if(A[i]->getHP()>0)

A[i]->makeDecision(B);//核心代碼

}

return;

}

3.3 戰士類Soldier(父類)

戰士類作為三大角色類的父類,其中有些函數需定義為虛函數實現多態。

戰士類中核心核心成員聲明代碼如下:

virtual void makeDecision(Soldier **enemy);//決定對對方的哪個角色進行攻擊

void attack(Soldier **enemy);

virtual void rest();? ? //注意virtual關鍵字是為了實現多態

virtual void show(ofstream&ofs);//界面顯示

virtual void setname();

3.4 巫師類Wizard(繼承戰士類)

巫師從戰士繼承下的同名函數需重寫,完成不同操作。

巫師類中核心成員聲明代碼如下:

virtual void makeDecision(Soldier** enemy);//巫師角色的決策

virtual void rest();//巫師角色的休息

void Wizard_attack(Soldier** enemy);

void attack(Soldier **enemy);

virtual void show(ofstream&ofs);

void setname();

3.5 大師類Master(從巫師類繼承)

大師類中核心成員聲明代碼如下:

void Master_attack(Soldier **enemy);

void attack(Soldier **enemy);

void Wizard_attack(Soldier **enemy);

void makeDecision(Soldier** enemy);//大師類的決策,仍可實現多態

void rest();

void show(ofstream& ofs);

void setname();

4 測試與驗證

通過程序測試可以檢測程序有無編譯上和邏輯上的漏洞。

程序編寫期間,不確定是否實現基本需求時,可以設置斷點進行調試。編寫核心類WarSystem類時,在startround函數處設置斷點,查看是否實現軍團互動,經測試知軍團互動實現代碼無誤。

程序編寫全部完成后,進行最后的測試驗證。經測試,首先進入對兩軍團的命名,隨后進入戰斗系統類中對軍團進行初始化,隨機數判斷機制無誤,回合正式開始,軍團輪流決策機制無誤,每回合戰況統計無誤。

經過最終測試,本程序通過編譯后邏輯上目前未發現大問題,且運行結果界面顯示與預期一致。

5 結束語

本文基于C++對基礎回合制游戲進行設計與實現。設計過程中遇到的問題主要為如何設計兩軍中各角色的交替對戰與互動,利用繼承與多態實現了這一需求。結果表明,程序最終的界面結果展示與預期結果一致,邏輯上無大漏洞。

參考文獻:

[1] 譚浩強.C++程序設計[M].3版.北京:清華大學出版社,2015.

[2] 萬坤,蘇雪蓮,冉瑞生.基于C/S架構的五子棋游戲軟件的設計與實現[J].電腦知識與技術,2019,15(22):94-96,102.

[3] 朱悅.基于UE4的射擊類手機游戲系統的設計與實現[D].武漢:華中科技大學,2018.

[4] 王斌,遲凱,林曉慧.淺談游戲制作[J].計算機產品與流通,2019(5):273.

[5] 孫志軒.從C++的角度分析手機游戲《Fate Grand Order》中的攻擊模式[J].家庭生活指南,2018(7):58.

【通聯編輯:李雅琪】

主站蜘蛛池模板: 欧美特级AAAAAA视频免费观看| 日韩精品亚洲人旧成在线| 国产成熟女人性满足视频| 91精品免费高清在线| 久久一级电影| 激情無極限的亚洲一区免费| 久久夜色撩人精品国产| 色综合国产| 亚洲av无码片一区二区三区| 国产97视频在线观看| 18禁不卡免费网站| 乱人伦99久久| 久久精品国产精品国产一区| 国产精品手机视频一区二区| 欧美日韩导航| 欧美激情,国产精品| 九九线精品视频在线观看| 伊人中文网| 国产人成乱码视频免费观看| 国产亚洲精品自在久久不卡 | 欧美日韩va| 一级毛片基地| 欧美有码在线| 日本欧美在线观看| 老司机精品一区在线视频| 国产欧美日韩另类| 亚洲无码A视频在线| 亚洲女同欧美在线| 在线免费亚洲无码视频| 久久人体视频| 国产精品性| 日韩欧美在线观看| 欧美亚洲欧美| 欧美高清三区| 天堂成人在线视频| 亚洲av综合网| 欧美视频在线观看第一页| 国产精品入口麻豆| www亚洲天堂| 久久免费精品琪琪| 精久久久久无码区中文字幕| 日本高清在线看免费观看| 国产熟女一级毛片| 国产亚洲精品自在久久不卡| 又污又黄又无遮挡网站| 日韩欧美91| 欧美日韩亚洲国产主播第一区| 国产欧美日韩在线在线不卡视频| 亚洲精品制服丝袜二区| 99精品福利视频| 国产精品一区二区不卡的视频| 中日韩一区二区三区中文免费视频| 午夜不卡福利| 亚洲乱码精品久久久久..| 一边摸一边做爽的视频17国产| 国产91九色在线播放| 亚洲毛片一级带毛片基地| 国产欧美日韩91| 91香蕉视频下载网站| 欧美一区二区丝袜高跟鞋| 九九九久久国产精品| 毛片国产精品完整版| 国产手机在线小视频免费观看| a毛片基地免费大全| 人妻中文字幕无码久久一区| 一级毛片免费观看不卡视频| 亚欧成人无码AV在线播放| 亚洲色图欧美在线| 制服丝袜在线视频香蕉| 欧美午夜理伦三级在线观看| 欧美日韩国产系列在线观看| 1024你懂的国产精品| 中文字幕在线永久在线视频2020| AV无码无在线观看免费| 久久精品无码一区二区国产区| 欧美日韩福利| 中文字幕人成人乱码亚洲电影| 久久精品最新免费国产成人| 免费在线成人网| 视频国产精品丝袜第一页| 久久香蕉国产线看观看亚洲片| 久久久久无码精品|