设计模式--MVC(C++版)
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型)-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
- View(视图) -是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
- Controller(控制器) - 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
#pragma once class Hero
{
public:
Hero();
~Hero();
//be attacked
void beAttack(int att);
//is dead?
bool dead() { return m_nHp == ; }
public:
//set no
void setNo(std::string no) { m_sNo = no; }
//get no
std::string getNo() { return m_sNo; } //set name
void setName(std::string name) { m_sName = name; }
//get name
std::string getName() { return m_sName; } //get hp
void setHp(int hp) { m_nHp = hp; }
//set hp
int getHp() { return m_nHp; } //set att
void setAtt(int att) { m_nAtt = att; }
//get att
int getAtt() { return m_nAtt; }
private: std::string m_sName;//姓名
std::string m_sNo;//游戏场号码 int m_nHp;//血量
int m_nAtt;//攻击力
};
Hero.h
#include "stdafx.h"
#include "Hero.h" //ctor
Hero::Hero()
{
} //Destructor
Hero::~Hero()
{ } void Hero::beAttack(int att)
{
if (att <= ) throw "Att Number <= 0";//safe check
m_nHp -= att;
m_nHp = m_nHp < ? : m_nHp;//safe check
}
Hero.cpp
HeroView类:
#pragma once
class HeroView
{
public:
HeroView();
~HeroView(); //show hero UI data;
void show(string no, string name,int att, int hp);
//show hero dead UI;
void dead(string no, string name);
//show heor winned UI;
void winned(string no, string name);
private:
//Hero* m_hero;
};
HeroView.h
#include "stdafx.h"
#include "HeroView.h" HeroView::HeroView()
{
} HeroView::~HeroView()
{
} void HeroView::show(string no,string name, int att, int hp)
{
cout << "Hero info:"<<"(no:"<<no<<",name:"<<name<<",att:"<<att<<",hp:"<<hp<<")" << endl;
} void HeroView::dead(string no, string name)
{
cout << "Hero Dead:" << "(no:" << no << ",name:"<<name << ")" << endl;
} void HeroView::winned(string no, string name)
{
cout << "Hero Winned:" << "(no:" << no << ",name:" << name << ")" << endl; }
HeroView.cpp
HeroController类:
#pragma once
class HeroController
{
public:
HeroController(string no, string name);
~HeroController();
void setHeroHp(int hp);//set hero hp
void setHeroAtt(int att);//set hero att
void show();//show hero info
void beAttack(int att);//be attacked by hero
void dead();//dead
void winned();//winned
public :
Hero* getHero() { return m_hero; }//get hero private:
Hero * m_hero;//hero
HeroView * m_heroView;//hero view
};
HeroController.h
#include "stdafx.h"
#include "HeroController.h" HeroController::HeroController(string no, 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());
}
HeroController.cpp
main() 测试:
// ConsoleApplication_C++1.cpp: 主项目文件。 #include "stdafx.h" using namespace System; int main()
{
//初始化一个英雄的控制器
HeroController* controller = new HeroController("","孟栋");
//设置血量100
controller->setHeroHp();
controller->setHeroAtt();
//显示一下血量
controller->show(); //初始化第二个英雄的控制器
HeroController* controller2 = new HeroController("", "黑魔王");
//设置血量100
controller2->setHeroHp();
//设置攻击力20
controller2->setHeroAtt();
//显示一下血量
controller2->show(); //hero1 attack hero2
controller2->beAttack(controller->getHero()->getAtt());
//ui更新
controller2->show(); //如果没有dead,就一直攻击
while (!controller2->getHero()->dead())
{
//hero1 attack hero2
controller2->beAttack(controller->getHero()->getAtt());
//ui更新
controller2->show();
} controller2->dead();
controller->show();
controller->winned(); return ;
}
main
Hero info : (no:, name : 孟栋, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero Dead : (no : , name : 黑魔王)
Hero info : (no : , name : 孟栋, att : , hp : )
Hero Winned : (no : , name : 孟栋)
多加点评,谢谢!
设计模式--MVC(C++版)的更多相关文章
- python设计模式第2版
python设计模式第2版 目录 第1章 设计模式简介 1 1.1 理解面向对象编程 1 1.1.1 对象 2 1.1.2 类 2 1.1.3 方法 2 1.2 面向对象编程的主要概念 3 1.2.1 ...
- 【Head-First设计模式】C#版-学习笔记-开篇及文章目录
原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证 ...
- spring mvc注解版01
spring mvc是基于servlet实现的在spring mvc xml版中已经说过了,注解版相较于xml版更加简洁灵活. web项目的jar包: commons-logging-1.1.3.ja ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- MySQL数据库(4)- 多表查询、可视化工具Navicat的使用、设计模式MVC
一.多表查询 准备工作:创建两张表,部门表(department).员工表(employee),代码和表格如下: # 创建表 create table department( id int, name ...
- Dot Net设计模式—MVC模式
1 MVC设计模式简介 MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离.MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定 ...
- iOS设计模式——MVC(Model-View-Controller)
Modol View Controller(MVC)是一种最早的也是最成功的可重用的设计模式,70年代的时候首次在smaltalk编写的程序中成功使用.基于MVC设计 模式,Cocoa整体架构可以划分 ...
- 《大话设计模式》Python版代码实现
上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的 ...
- 《大话设计模式》ruby版代码:简单工厂模式
之前有看过<ruby设计模式>,不过渐渐的都忘记了.现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下. # -*- encoding: utf-8 -*- #运 ...
随机推荐
- PDCA循环原理
1.PDCA循环原理:plan do check action 以pdca质量环模型为质量控制和保证的理论依据,对软件质量进行把控. plan计划阶段:项目质量规划 1.分析现状,找出质量问题 2 ...
- Untiy文档总结(1)-Profiling
这段时间上班了,不是什么大公司,虽说很闲但是不能断了学习,就开始看优化有关的文档,虽说自己英语渣的要死,但也要读下去,逼着自己翻译完了,里面有抄Unity圣典的,但自己是看Unity5.5文档写的,只 ...
- CSS.02 -- 样式表 及标签分类(块、行、行内块元素)、CSS三大特性、背景属性
样式表书写位置 内嵌式写法 <head> <style type="text/css"> 样式表写法 </style> </head&g ...
- css常用居中
对一个已知大小的元素上下左右居中(已知大小了,直接margin也就行了): css如下:.parent{height:100px;width:100px;background:grey;positio ...
- C语言::模拟实现strlen函数
题目要求 编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0 ...
- Flash加载ini文件!
这个帖子里有解决方案: http://bbs.9ria.com/thread-405128-1-1.html
- Android在listview添加checkbox实现单选多选操作问题
android根据View的不同状态更换不同的背景http://www.eoeandroid.com/thread-198029-1-1.html android 模仿朋友网推出的菜单效果[改进版]h ...
- windows编程初步
#include <windows.h> const char g_szClassName[] = "myWindowClass"; LRESULT CALLBACK ...
- PAT 1047
1049. Counting Ones (30) The task is simple: given any positive integer N, you are supposed to count ...
- Apriori算法介绍(Python实现)
导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...