设计模式--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 -*- #运 ...
随机推荐
- JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘
一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...
- 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件
简介 马三最近换到了一家新的公司撸码,新的公司 UI 部分采用的是 NGUI 插件,而之前的公司用的一直是 Unity 自带的 UGUI,因此马三利用业余时间学习了一下 NGUI 插件的使用,并把知识 ...
- Fireworks快捷键大全和ps查看切图的坐标颜色
记住后方便了许多
- [Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:<> [Android]使用RecyclerView替代ListView(四:SeizeRecyclerView) 在RecyclerV ...
- C#研究OpenXML之路(2-DocumentFormat.OpenXml命名空间)
一.OpenXML对象结构预览 昨天感受了一下OpenXML的编程,今天开始准备一头扎进OpenXML了.在了解一门新的知识前,首先最重要的是理清逻辑结构,否则学习起来会感觉摸不着北. 1.首先打开V ...
- 分享一个低配VPS下运行的mysql配置文件
在各种内存CPU核心只有1/2核,内存只有512M/1G的vps下,内存.CPU.硬盘都不是太充裕.因此主要思路是,禁止吃内存大户innodb引擎,默认使用MyISAM.禁止吃硬盘大户log-bin, ...
- 非负矩阵分解(1):准则函数及KL散度
作者:桂. 时间:2017-04-06 12:29:26 链接:http://www.cnblogs.com/xingshansi/p/6672908.html 声明:欢迎被转载,不过记得注明出处哦 ...
- Git与Github的使用学习
摘要 本文讲解下Git的使用,包括使用Git上传项目工程到Github,文末有彩蛋哦. 1.安装Git 使用apt-get安 sudo apt-get update sudo apt-get inst ...
- python作业设计:多级菜单,并可依次进入各级子菜单
'''作业三:多级菜单 三级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 ''' data = { "北京":{ "昌平":{ "沙河&qu ...
- Android使用Path实现仿最新淘宝轮播广告底部弧形有锯齿的问题以及解决办法
在前面一篇博文<Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程>中已经基本介绍了实现轮播广告的基本思路和过程,但是仔细观察淘宝的轮播广告栏,发现在轮播广告栏的底部有个小小的 ...