014 C++中的MVC模式

#pragma once
#include "string"

//MVC的Modle(模型)
class Hero
{
public:
//构造函数
Hero();
//析构函数
~Hero();
//收到多少点的攻击
void beAttack(int att);
//人物是否死亡
bool isDead() { return m_nHp == 0; }

public:
//设置编号
void setNo(std::string no) { m_sNo = no; }
//获取编号
std::string getNo() { return m_sNo; }

//设置名字
void setName(std::string name) { m_sName = name; }
//获取名字
std::string getName() { return m_sName; }

//设置生命值
void setHp(int hp) { m_nHp = hp; }
//获取生命值
int getHp() { return m_nHp; }

//设置攻击力
void setAtt(int att) { m_nAtt = att; }
//获取攻击力
int getAtt() { return m_nAtt; }

private:

std::string m_sName;//姓名
std::string m_sNo;//ID
int m_nHp;//血量
int m_nAtt;//攻击力
};

 

#include "stdafx.h"
#include "Hero.h"

//构造函数
Hero::Hero()
{
}

//析构函数
Hero::~Hero()
{

}

//收到攻击
void Hero::beAttack(int att)
{
if (att <= 0) throw "Att Number <= 0";//safe check
m_nHp -= att;
m_nHp = m_nHp < 0 ? 0 : m_nHp;//safe check
}

 

#pragma once
#include "string"

//MVC的View(视图)
class HeroView
{
public:
//构造函数
HeroView();
//析构函数
~HeroView();

//显示人物的信息
void show(std::string no, std::string name, int att, int hp);
//显示死亡人物的信息
void dead(std::string no, std::string name);
//显示获取者的信息;
void winned(std::string no, std::string name);
};

 

#include "stdafx.h"
#include "HeroView.h"
#include "iostream"

//构造函数
HeroView::HeroView()
{
}

//析构函数
HeroView::~HeroView()
{
}

//显示人物的信息
void HeroView::show(std::string no, std::string name, int att, int hp)
{
std::cout << "Hero info:" << "(no:" << no << ",name:" << name << ",att:" << att << ",hp:" << hp << ")" << std::endl;
}

//显示死亡人物的信息
void HeroView::dead(std::string no, std::string name)
{
std::cout << "Hero Dead:" << "(no:" << no << ",name:" << name << ")" << std::endl;
}

//显示获取者的信息;
void HeroView::winned(std::string no, std::string name)
{
std::cout << "Hero Winned:" << "(no:" << no << ",name:" << name << ")" << std::endl;

}

 

#pragma once
#include "string"
#include "Hero.h"
#include "HeroView.h"

//MVC的Controller(控制器)
class HeroController
{
public:
//构造函数
HeroController(std::string no, std::string name);
//析构函数
~HeroController();

//设置人物血量
void setHeroHp(int hp);
//设置人物攻击力
void setHeroAtt(int att);//set hero att

//显示人物信息
void show();
//被攻击
void beAttack(int att);
//显示死亡信息
void dead();
//显示获胜信息
void winned();

//控制器控制的人物
Hero * getHero() { return m_hero; }

private:
//人物类
Hero * m_hero;
//人物视图类
HeroView * m_heroView;
};

 

#include "stdafx.h"
#include "HeroController.h"

//构造函数
HeroController::HeroController(std::string no, std::string name)
{
m_heroView = new HeroView();
m_hero = new Hero();
m_hero->setNo(no);
m_hero->setName(name);
}

//析构函数
HeroController::~HeroController()
{
}

//设置血量
void HeroController::setHeroHp(int hp)
{
m_hero->setHp(hp);
}

//设置攻击力
void HeroController::setHeroAtt(int att)
{
m_hero->setAtt(att);
}

//显示人物信息
void HeroController::show()
{
m_heroView->show(m_hero->getNo(), m_hero->getName(), m_hero->getAtt(), m_hero->getHp());
}

//被攻击
void HeroController::beAttack(int att)
{
m_hero->beAttack(att);
}

//死亡
void HeroController::dead()
{
m_heroView->dead(m_hero->getNo(), m_hero->getName());
}

//获胜
void HeroController::winned()
{
m_heroView->winned(m_hero->getNo(), m_hero->getName());
}

 

// ConsoleApplication_C++1.cpp: 主项目文件。

#include "stdafx.h"
#include "HeroController.h"


int main()
{
//初始化一个英雄的控制器
HeroController* controller = new HeroController("2017", "小郭");
//设置血量100
controller->setHeroHp(100);
controller->setHeroAtt(40);
//显示一下血量
controller->show();


//初始化第二个英雄的控制器
HeroController* controller2 = new HeroController("2016", "黑魔王");
//设置血量100
controller2->setHeroHp(200);
//设置攻击力20
controller2->setHeroAtt(20);
//显示一下血量
controller2->show();

//小郭攻击黑魔王
controller2->beAttack(controller->getHero()->getAtt());
//视图更新
controller2->show();

//如果没有dead,就一直攻击
while (!controller2->getHero()->isDead() || !controller->getHero()->isDead())
{
//小郭攻击
controller->beAttack(controller2->getHero()->getAtt());
//u视图更新
controller->show();

//黑魔王攻击
controller2->beAttack(controller->getHero()->getAtt());
//u视图更新
controller2->show();
}

//黑魔王死亡
if (controller2->getHero()->isDead() && !controller->getHero()->isDead())
{
//显示死亡者
controller2->dead();
//显示获胜者信息
controller->show();
//显示获胜者
controller->winned();
}
//小郭死亡
else if (controller->getHero()->isDead() && !controller2->getHero()->isDead())
{
//显示死亡者
controller->dead();
//显示获胜者信息
controller2->show();
//显示获胜者
controller2->winned();
}
else
{
//平局
}

return 0;
}

转载于:https://www.cnblogs.com/guojun/p/9828945.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值