防御塔攻击小兵,C++观察者模式
Posted 每天告诉自己要努力
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防御塔攻击小兵,C++观察者模式相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <string>
#include <list>
using namespace std;
//通知者抽象类
class Subject;
//观察者抽象类
class Observer
public:
Observer(string name, Subject* sub)
this->name = name;
this->sub = sub;
virtual void update() = 0;
protected:
string name;
Subject* sub;
;
//通知者抽象类
class Subject
public:
string action;
virtual void attach(Observer*) = 0;
virtual void detach(Observer*) = 0;
virtual void notify() = 0;
protected:
list<Observer*> observers; //观察者列表
;
//具体观察者
class Tower: public Observer
public:
Tower(string name, Subject* sub) : Observer(name, sub)
void update()
cout << name << "收到消息:" << sub->action << endl;
if (sub->action == "小兵进塔了")
cout << name << ": 攻击小兵" << endl;
;
//具体通知者
class Soldier: public Subject
public:
void attach(Observer* obs)
observers.push_back(obs);
void detach(Observer* obs)
observers.remove(obs);
void notify()
for (auto it : observers)
it->update();
;
int main()
//小兵是一个通知者
Subject* soldier = new Soldier();
//被观察的对象
Observer* A_tower1 = new Tower("防御塔A1", soldier);
Observer* A_tower2 = new Tower("防御塔A2", soldier);
Observer* B_tower = new Tower("防御塔B", soldier);
//把三个塔添加到观察队列中
soldier->attach(A_tower1);
soldier->attach(A_tower2);
soldier->attach(B_tower);
//小兵发起行动,并通知各位观察者
soldier->action = "小兵进塔了";
soldier->notify();
cout << endl;
//小兵发起行动,并通知各位观察者
soldier->action = "小兵没进塔";
soldier->notify();
cout << endl;
//把A1塔移出观察者队列,小兵发起行动,并通知各位观察者
soldier->detach(A_tower1 );
soldier->action = "小兵进塔了";
soldier->notify();
return 0;
结果:
以上是关于防御塔攻击小兵,C++观察者模式的主要内容,如果未能解决你的问题,请参考以下文章
hdu 4976 A simple greedy problem.
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共进行m次操作,二狗每次操作选择一个数k,