目录

C学习之格斗小游戏综合案例

C++学习之格斗小游戏综合案例

C++格斗游戏效果视频

1.案例简介

https://i-blog.csdnimg.cn/direct/b3ab4602fcc34084b36510a55cd7f313.png

#include “broadSword.h”

//构造函数

BroadSword::BroadSword()

{

FileManager fm;

map<string, map<string, string» mWeapon;

fm.loadCSVData(“Weapons.csv”, mWeapon);

//武器id

string id = mWeapon[“2”][“weaponId”];

//武器名称

this->weaponName = mWeapon[id][“weaponName”];

//武器攻击力

this->baseDamage = atoi(mWeapon[id][“weaponAtk”].c_str());

//武器暴击系数

this->critPlus = atoi(mWeapon[id][“weaponCritPlus”].c_str());

//武器暴击率

this->critRate = atoi(mWeapon[id][“weaponCritRate”].c_str());

//武器吸血系数

this->suckPlus = atoi(mWeapon[id][“weaponSuckPlus”].c_str());

//武器吸血率

this->suckRate = atoi(mWeapon[id][“weaponSuckRate”].c_str());

//武器冰冻率

this->frozenRate = atoi(mWeapon[id][“weaponFrozenRate”].c_str());

}

//获取基础伤害

int BroadSword::getBaseDamage()

{

return this->baseDamage;

}

//暴击效果  返回值大于0 触发暴击 否则不触发

int BroadSword::getCrit()

{

if (isTrigger(this->critRate))

{

return this->baseDamage * this->critPlus;

}

else

{

return 0;

}

}

//吸血效果 返回值大于0 触发吸血 否则不触发

int BroadSword::getSuckBlood()

{

if (isTrigger(this->suckRate))

{

return this->baseDamage * this->suckPlus;

}

else

{

return 0;

}

}

//冰冻效果 返回true代表触发 否则不触发

bool BroadSword::getFrozen()

{

if (isTrigger(this->frozenRate))

{

return true;

}

else

{

return false;

}

}

//触发概率的算法

bool BroadSword::isTrigger(int rate)

{

int num = rand() % 100 + 1;  // 1 ~ 100

if (num <= rate)

{

return true;

}

return false;

}

https://i-blog.csdnimg.cn/direct/ae220ebb82bb48f7ad704f580cc4e50c.png

https://i-blog.csdnimg.cn/direct/ee88e31f5bbe48bbba0b85d114426830.png

2.CSV文件制作

https://i-blog.csdnimg.cn/direct/c40b524ccb81466182233a782b4decfd.png

https://i-blog.csdnimg.cn/direct/e8068bcf92bb40f1bc4aae95fb36cd43.png

3.解析单行CSV数据

https://i-blog.csdnimg.cn/direct/8a1928a543b2407ea4cd67a54a267b28.png

#include “fileManager.h”

//加载CSV格式文件

void FileManager::loadCSVData(string path, map<string, map<string, string»& mData)

{

//读文件

ifstream ifs(path);

if (!ifs.is_open())

{

cout « “文件打开失败” « endl;

return;

}

//第一个数据

string firstLine;

ifs » firstLine;

//cout « “第一行数据为: " « firstLine « endl;

//heroId,heroName,heroHp,heroAtk,heroDef,heroInfo

vectorvFirst; //第一行解析后数据放入的容器

this->parseLineToVector(firstLine, vFirst);

//测试

/*for (vector::iterator it = vFirst.begin(); it != vFirst.end(); it++)

{

cout « *it « endl;

}*/

string otherLine;

while (ifs » otherLine)

{

//cout « “otherLine = " « otherLine « endl;

vectorvOther;

this->parseLineToVector(otherLine, vOther);

map<string, string>m;

for (int i = 0; i < vFirst.size(); i++)

{

m.insert(make_pair(vFirst[i], vOther[i]));

}

//将小map容器插入到大map容器中

mData.insert(make_pair(vOther[0], m));

}

//cout « “第一个英雄姓名: " « mData[“1”][“heroName”] « endl;

//cout « “第二个英雄血量: " « mData[“2”][“heroHp”] « endl;

//cout « “第三个英雄攻击力: " « mData[“3”][“heroAtk”] « endl;

}

//解析单行数据到vector容器中

void FileManager::parseLineToVector(string line, vector& v)

{

int pos = -1;

int start = 0;

while (true)

{

pos = (int)line.find(”,”, start);

if (pos == -1)

{

//最后一个单词处理

string temp = line.substr(start);

v.push_back(temp);

break;

}

string temp = line.substr(start, pos - start);

v.push_back(temp);

start = pos + 1;

}

}

4.解析全部CSV数据

https://i-blog.csdnimg.cn/direct/2beccaffe0f74aa8b2ce8f77f9d8a22c.png

5.创建武器基类

https://i-blog.csdnimg.cn/direct/72cde57dbd5945ef9cfd07a456daf3e9.png

6.小刀类实现

https://i-blog.csdnimg.cn/direct/2c5f199341434d35a2eb2e5790aaf345.png

https://i-blog.csdnimg.cn/direct/c2920da70d5b4fc09d9445958ee5e13f.png

https://i-blog.csdnimg.cn/direct/bd755a43241e4c2792174ccd33b25f66.png

7.其他武器类实现

https://i-blog.csdnimg.cn/direct/66989f090bd5474cb1d83e95579ef597.png

https://i-blog.csdnimg.cn/direct/ec382e0e7ede4d4caea23f6700981704.png

8.英雄类实现

https://i-blog.csdnimg.cn/direct/cdf57da3fc4446229322072e0d132d37.png

https://i-blog.csdnimg.cn/direct/563191ba82384b0ca418583389b9078f.png

https://i-blog.csdnimg.cn/direct/c433e90d79254dc3acba7efbba23259c.png

https://i-blog.csdnimg.cn/direct/47f7c0327e9a4056b4708d658c95007d.png

9.怪物类实现

https://i-blog.csdnimg.cn/direct/af7cd7b455f94df39fd91c5e8fa21d47.png

https://i-blog.csdnimg.cn/direct/1a64bb1a9db140db931a818e69eb797b.png

https://i-blog.csdnimg.cn/direct/dee4c059ae4a44f29367ed42509377e1.png

10.英雄的攻击实现

https://i-blog.csdnimg.cn/direct/e3064724022249fda5621825ed70dd21.png

https://i-blog.csdnimg.cn/direct/63b15aa1a54e4be1a7e8d1cfd3dee2d9.png

https://i-blog.csdnimg.cn/direct/c6449a4ac5864febb8313c8db02cdccc.png

11.战斗交互实现

https://i-blog.csdnimg.cn/direct/88ceb10e10494165bb54a659c693520e.png

https://i-blog.csdnimg.cn/direct/9ef40a1fe830471096e555aeb1c256bc.png

https://i-blog.csdnimg.cn/direct/315c68362bc6403185fda474c581d7f0.png

https://i-blog.csdnimg.cn/direct/3fa91021d0b7451f8964bcbe0fd685b8.png