注意:在使用的时候一定要把opencv的环境配置好,没有配置opencv可能无法运行
opencv的配置配置可根据这个网址:
VS+opencv环境配置傻瓜式教程,一步一步来,没错昂_哔哩哔哩_bilibili
代码如下//role.h
#pragma #includeusing namespace std; class Role { public: //角色吸血 void recoverlife(double& life_); //角色回蓝 void recoverblue(double& blue_); //定义默认蓝条生命值 double blue = 1000, life = 1000; //定义基础伤害:法伤和物伤 double magic_attack = 10, physic_attack = 10; //定义基础防御:法抗和物抗 double magic_defense = 20, physic_defense = 20; //角色暴击率 double critical = 0; }; //凯 class Kai :public Role { public: //技能一 double skill1(); double skill2(); double skill3(); //输出角色状态 void printjuese(); }; //吕布 class Lvbu :public Role { public: //技能一 double skill1(); double skill2(); double skill3(); //输出角色状态 void printjuese(); };
//role.cpp
#include "role.h"
#pragma once
//输出角色状态
void Role::recoverlife(double& life_)
{
life = life * (1 + life_);
}
void Role::recoverblue(double& magic_)
{
blue = blue * (1 + magic_);
}
//技能一
double Kai::skill1()
{
double actual_harm;
life += 210;
actual_harm = 100 + physic_attack + magic_attack;
blue -= 150;
if (blue)return actual_harm;
else return 0;
}
double Kai::skill2()
{
double actual_harm;
life += life * 0.1;
actual_harm = 300 + physic_attack + magic_attack;
blue -= 150;
if (blue)return actual_harm;
else return 0;
}
double Kai::skill3()
{
double actual_harm;
magic_attack += 500;
physic_attack += 200;
actual_harm = 400 + physic_attack + magic_attack;
blue -= 250;
if (blue)return actual_harm;
else return 0;
}
//输出角色状态
void Kai::printjuese() {
cout << "凯当前状态:" << endl;
cout << "蓝:" << blue << " 生命:" << life << endl;
cout << "法伤: " << magic_attack << " 物伤: " << physic_attack << endl;
cout << "法抗: " << magic_defense << " 物抗: " << physic_defense << endl;
cout << "暴击率: " << critical << endl;
}
//技能一
double Lvbu::skill1()
{
double actual_harm;
life += life * 0.1;
actual_harm = 189 + physic_attack + magic_attack;
blue -= 150;
if (blue)return actual_harm;
else return 0;
}
double Lvbu::skill2()
{
double actual_harm;
life += life * 0.7;
physic_defense += 900;
magic_defense += 900;
actual_harm = 500 + physic_attack + magic_attack;
blue -= 150;
if (blue)return actual_harm;
else return 0;
}
double Lvbu::skill3()
{
double actual_harm;
magic_defense += 300;
magic_attack += 500;
actual_harm = 500 + physic_attack + magic_attack;
blue -= 250;
if (blue)return actual_harm;
else return 0;
}
//输出角色状态
void Lvbu::printjuese() {
cout << "吕布当前状态:" << endl;
cout << "蓝:" << blue << " 生命:" << life << endl;
cout << "法伤: " << magic_attack << " 物伤: " << physic_attack << endl;
cout << "法抗: " << magic_defense << " 物抗: " << physic_defense << endl;
cout << "暴击率: " << critical << endl;
}
#pragma once
//main.cpp
//1.基于面向对象思想,分二级建立王者荣耀游戏中的英雄类(抽象的英雄、特定类型的英雄)。 //2.在类中对英雄的属性(比如英雄的种类、魔法值、生命值、物理攻击值) // 及行为(比如魔法攻击、物理攻击)进行具体描述。 //3.随机建立两个英雄,设计PK规则,实现两个英雄的PK, //直至分开胜负,并且在PK过程中输出两个英雄的状态变化。 #include "role.h" #include代码使用图片//#include "myrole.h" using namespace std; //随机出装 //角色状态 #include #include using namespace std; using namespace cv; //图像几何形状绘制 void rectjianli(Rect& rect) { } void draw_demo(cv::Mat image, double life1, double life2, double blue1, double blue2) { Mat image_copy = image.clone(); int num = 10; //矩形绘制 Rect rect; //凯的血条 Mat bg = Mat::zeros(image_copy.size(), image_copy.type()); //rectangle(image, rect, Scalar(0, 0, 255), 2, 8, 0); rect.x = 50; rect.y = 200; rect.width = life1 / num; rect.height = 20; rectangle(image_copy, rect, Scalar(0, 0, 255), -1, 8);//填充 //吕布血条 Rect rect1; rect1.x = 50 + 300; rect1.y = 200; rect1.width = life2 / num; rect1.height = 20; rectangle(image_copy, rect1, Scalar(0, 0, 255), -1, 8); //凯的蓝条 Rect rect2; rect2.x = 50; rect2.y = 200 + 25; rect2.width = blue1 / num; rect2.height = 20; rectangle(image_copy, rect2, Scalar(255, 0, 0), -1, 8);//填充 //吕布蓝条 Rect rect3; rect3.x = 50 + 300; rect3.y = 200 + 25; rect3.width = blue2 / num; rect3.height = 20; rectangle(image_copy, rect3, Scalar(255, 0, 0), -1, 8);//填充 Mat dst; addWeighted(image_copy, 0.7, bg, 0.3, 0, dst); imshow("绘制", dst); } int main() { //创建背景 string path = "决斗图片.png"; Mat img = imread(path); if (img.empty()) { cout << "图片加载失败!" << endl; return -1; } //namedWindow("image", WINDOW_FREERATIO); //imshow("image", img); double value = 1000; draw_demo(img, value, value, value, value); waitKey(1000); //建立角色 Kai kai; Lvbu lvbu; lvbu.printjuese(); //lvbu.life -= 1; //lvbu.life -= kai.skill1(); while (true) { cout << "请开始攻击:1技能1 2技能2 3技能3" << endl; cout << "现在轮到凯发起进攻" << endl; //建立随机种子,随机使用技能 srand((unsigned int)time(NULL)); int num = rand() % 3 + 1; //1 ->3 if (num == 1) { lvbu.life -= kai.skill1(); cout << "发起技能1n"; } else if (num == 2) { lvbu.life -= kai.skill2(); cout << "发起技能2n"; } else if (num == 3) { lvbu.life -= kai.skill2(); cout << "发起技能3n";} lvbu.printjuese(); draw_demo(img, kai.life, lvbu.life, 800, 400); waitKey(1000); if (lvbu.life < 1) { cout << "凯胜利,游戏结束" << endl; break; } cout << "请开始攻击:1技能1 2技能2 3技能3" << endl; cout << "现在轮到吕布发起进攻" << endl; //cin >> num; //建立随机种子,随机使用技能 srand((unsigned int)time(NULL)); int num1 = rand() % 3 + 1; //1 ->3 if (num1 == 1) { kai.life -= lvbu.skill1(); cout << "发起技能1n";} else if (num1 == 2) { kai.life -= lvbu.skill2(); cout << "发起技能2n";} else if (num1 == 3) { kai.life -= lvbu.skill2(); cout << "发起技能3n";} lvbu.printjuese(); draw_demo(img, kai.life, 888, kai.blue, 215); waitKey(1000); if (kai.life < 1) { cout << "吕布胜利,游戏结束" << endl; break; } } destroyAllWindows(); return 0; }
使用图片的话,大家可以找一张喜欢的,我这个只是当时在画板上随便把两张图片拼接起来的



