武士与魔王游戏v2.0
描述:
武士与魔王游戏
武士:
血量:5000
攻击力:50-200
敏捷:20%(有20%的几率魔王攻击无效)
暴击率:10%(有10%的几率攻击翻倍)
防御:50(对方攻击时血量少扣50点)
技能:
天外飞仙:本次攻击力+100
踏雪无痕:本次敏捷+30%
金钟罩:本次防御+100
吸血鬼:本次攻击的50%血量加给武士
魔王:
血量:8000
攻击力:100-150
防御:30
技能:
狮子吼:破防御40
大力王:攻击增加50
玩游戏的流程:
每一次都有的一个流程
前奏:武士的状态复原
1、武士选择技能,根据技能选择状态的改变
2、攻击魔王
3、判断一下,魔王血量小于等于0,退出游戏
前奏:魔王状态复原
4、魔王自动选择技能,根据技能改变状态
5、攻击武士
6、判断一下,如果武士血量小于等于0,退出游戏
题目分析:
利用class定义武士和魔王,每次战斗后显示当前角色的信息。
代码如下:
#include<iostream>
#include"Soldier.h"
#include<time.h>
using namespace std;
/*int main()
{
srand((unsigned int)time(NULL));
Soldier cr;
cr.setblood(5000);
Devil king;
game g;
king.setblood(8000);//血量初始值
while (1)
{
cr.setmessages(50,2,1,50);
king.setmessages(100,30);
//第一阶段
g.start();
int select1;
cin>>select1;
g.startups(select1,cr);
g.attack1(cr,king,select1);
g.show(cr,king);
if(!g.deadd(king)) return 0;
//第二阶段
cout<<"It's devil's turn!"<<endl;
int select2=rand()%2+1;
cout<<"devil select:"<<endl;
g.startupd(select2,king,cr);
g.attack2(king,cr);
g.show(cr,king);
if(!g.deads(cr)) return 0;
}
return 0;
}*/
int main()
{
game g;
g.games();
return 0;
}
//改进后的代码只需要启动器
Soldier.h
//Soldier.h
#pragma once
#include<iostream>
#include<time.h>
using namespace std;
class Soldier
{
public:
void setblood(int b);
void setdefend(int d);
void setattack(int a);
void setmessages(int a,int f,int t,int d);
void skills(int n);
int getblood();
int getattack();
int getfast();
int gettwice();
int getdefend();
private:
int blood;
int attack;
int fast;
int twice;
int defend;
};
class Devil:public Soldier
{
public:
void setmessages(int a,int b);
void skills(int n,Soldier &s);
};
class game:public Soldier,public Devil
{
public:
void start();
void startups(int n,Soldier &s);//选择武士技能
void startupd(int n,Devil &d,Soldier &a);
void attack1(Soldier &a,Devil &b,int c);
void attack2(Devil &a,Soldier &b);
void show(Soldier &a,Devil &b);
int deads(Soldier &a);
int deadd(Devil &d);
void games();
private:
int select;
};
Soldier.cpp
//Soldier.cpp
#include "Soldier.h"
void Soldier::setblood(int b)
{
blood=b;
}
void Soldier::setdefend(int d)
{
defend=d;
}
void Soldier::setattack(int a)
{
attack=a;
}
void Soldier::setmessages(int a,int f,int t,int d)
{
attack=a;
fast=f;
twice=t;
defend=d;
attack+=rand()%150+1;//攻击力初始化
if(rand()%10<1) attack*=2;//暴击率叠加
}
void Soldier::skills(int n)
{
switch (n)
{
case 1:attack+=100;cout<<"你选择了天外飞仙!"<<endl;break;
case 2:fast+=3;cout<<"你选择了踏雪无痕!"<<endl;;break;
case 3:defend+=100;cout<<"你选择了金钟罩!"<<endl;;break;
case 4:cout<<"你选择了吸血鬼!"<<endl;break;
default:
break;
}
}
int Soldier::getblood()
{
return blood;
}
int Soldier::getattack()
{
return attack;
}
int Soldier::getfast()
{
return fast;
}
int Soldier::gettwice()
{
return twice;
}
int Soldier::getdefend()
{
return defend;
}
void Devil::setmessages(int a,int b)
{
setattack(a);
setdefend(b);
//cout << getattack() << ":attack" << endl;
setattack(getattack()+rand()%50+1);//攻击力初始化
//cout << attack << ":attack" << endl;
}
void Devil::skills(int n,Soldier &s)
{
switch (n)
{
case 1:s.setdefend(s.getdefend()-40);cout<<"1.狮吼功"<<endl;break;
case 2:setattack(getattack()+50);cout<<"2.大力王"<<endl;break;
default:
break;
}
}
void game::start()
{
cout<<"Please select your skill:"<<endl;
cout<<"1.天外飞仙:"<<endl;
cout<<"2.踏雪无痕:"<<endl;
cout<<"3.金钟罩:"<<endl;
cout<<"4.吸血鬼:"<<endl;
}
void game::startups(int n,Soldier &s)//选择武士技能
{
s.skills(n);
}
void game::startupd(int n,Devil &d,Soldier &a)
{
d.skills(n,a);
}
void game::attack1(Soldier &a,Devil &b,int c)
{
b.setblood(b.getblood()-(a.getattack()-b.getdefend()));
if(c==4)a.setblood(a.getblood()+(a.getattack()-b.getdefend())*0.5);
}
void game::attack2(Devil &a,Soldier &b)
{
if (rand()%10+1<=b.getfast())
{
cout<<"魔王攻击无效!"<<endl;
}
else b.setblood(b.getblood()-(a.getattack()-b.getdefend()));
}
void game::show(Soldier &a,Devil &b)
{
cout<<"士兵的血量是:"<<a.getblood()<<endl;
cout<<"士兵的攻击力是:"<<a.getattack()<<endl;
cout<<"士兵的敏捷是:"<<a.getfast()*10<<'%'<<endl;
cout<<"士兵的暴击率是:"<<a.gettwice()*10<<'%'<<endl;
cout<<"士兵的防御是:"<<a.getdefend()<<endl;
cout<<"魔王的血量是:"<<b.getblood()<<endl;
cout<<"魔王的攻击力是:"<<b.getattack()<<endl;
cout<<"魔王的防御是:"<<b.getdefend()<<endl;
}
int game::deads(Soldier &a)
{
if(a.getblood()<0)
{
cout<<"soldiers lose!"<<endl;
return 0;
}
}
int game::deadd(Devil &d)
{
if(d.getblood()<0)
{
cout<<"soldiers win!"<<endl;
return 0;
}
}
void game::games()
{
Soldier a;
Devil b;
srand((unsigned int)time(NULL));
a.setblood(5000);
b.setblood(8000);
while (1)
{
a.setmessages(50,2,1,50);
b.setmessages(100,30);
start();
cin>>select;
startups(select,a);
attack1(a,b,select);
show(a,b);
if(!deadd(b)) exit(1);
cout<<"It's devil's turn!"<<endl;
select=rand()%2+1;
cout<<"devil select:"<<endl;
startupd(select,b,a);
attack2(b,a);
show(a,b);
if(!deads(a)) exit(1);
}
}
总结
v2.0版本对武士、魔王和游戏用继承关系重新编写最后只需利用游戏的成员函数对游戏进行启动。