当前位置: 首页 > news >正文

Day06_C++编程

01.思维导图

02.将鸟笼放飞所有鸟类的题,改成观察者模式

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>//写一个鸟类:有一个多态函数:run
//写一个企鹅类,继承自鸟类:重写run 函数
//写一个鸵鸟类,继承自你啊嘞,重写run
//写一个老鹰类,继承自鸟类,重写run
//写一个鸟笼,能够存放 不同的鸟类对象
//鸟笼是什么类型的自己想
//鸟笼初始化的时候,4个不同的鸟类,至少有一个对象在鸟笼里面
//写一个函数,叫做 opencage
//实现效果:放跑里面的所有鸟类,让所有鸟runusing namespace std;//鸟类基类,同时作为观察者接口
class Bird{
private:public://多态函数,不同鸟类有不同行为virtual void run()=0;virtual ~Bird(){}
};//企鹅类
class qier:public Bird{
public:void run(){cout<<"01.企鹅:我不会飞,但我会游泳"<<endl;}};//鸵鸟类
class tuoniao:public Bird{
public:void run(){cout<<"02.鸵鸟:我不会飞,但我会奔跑"<<endl;}};//老鹰类
class laoying:public Bird{
public:void run(){cout<<"03.老鹰:我能翱翔天空并俯冲捕猎"<<endl;}};//鸟笼类
class BirdCage{
private:Bird* list[10];int len=0;
public://将鸟添加到鸟笼void addBird(Bird* bird){list[len]=bird;len++;}//打开鸟笼,通知所有鸟执行run方法void open_the_cage(){cout<<"00.打开鸟笼释放鸟类"<<endl;for(int i=0;i<3;i++){list[i]->run();}}
};int main(int argc, const char** argv)
{//创建不同的鸟类对象qier q;tuoniao t;laoying l;//创建鸟笼并添加鸟类对象BirdCage cage;cage.addBird(&q);cage.addBird(&t);cage.addBird(&l);//打开鸟笼cage.open_the_cage();return 0;
}

 03.

使用 策略模式 + 简单工厂模式实现以下功能
有一个英雄类,拥有私有成员: hp ,atk,dep
英雄可以打怪掉落武器:怪物可以掉落3种武器:
长剑,匕首,斧头
英雄装备长剑,获得2点hp
英雄装备匕首,获得2点atk
英雄装备斧头,获得2点def
英雄装备不同的武器,使用策略模式去实现
注意:测试的时候,英雄在更换武器的时候,记得使用策略模式,将英雄之间装备的武器属性扣除后,再增加新属性
打败怪物掉落什么武器,自己设计,但是要求怪物掉落武器是一个简单工厂模式

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>using namespace std;//武器策略接口
class WeaponStrategy{
public://纯虚函数virtual void equip(class Hero& hero)=0;virtual void unequip(class Hero& hero)=0;//虚析构函数virtual ~WeaponStrategy(){}//virtual ~WeaponStrategy()=default;
};//英雄类
class Hero{
private:int hp;int atk;int def;WeaponStrategy* currentWeapon;
public://Hero构造函数的初始化Hero(int hp=100,int atk=10,int def=5):hp(hp),atk(atk),def(def),currentWeapon(nullptr){}//Hero 武器拾取void equipWeapon(WeaponStrategy* weapon){if(currentWeapon){currentWeapon->unequip(*this);//释放之前武器的内存delete currentWeapon;}weapon->equip(*this);currentWeapon=weapon;}void showStats() const{cout<<"HP:"<<hp<<",ATK:"<<atk<<",DEF"<<def<<endl;}int& getHp(){return hp;}int& getAtk(){return atk;}int& getDef(){return def;}//添加释放武器内存的公共方法void releaseWeapon(){if(currentWeapon){currentWeapon->unequip(*this);delete currentWeapon;currentWeapon=nullptr;}}
};
//长剑策略类
class LongSword:public WeaponStrategy{
public:void equip(Hero& hero){hero.getHp()+=2;cout<<"装备长剑,HP增加2"<<endl; }void unequip(Hero& hero){hero.getHp()-=2;cout<<"卸下长剑,HP减少2"<<endl;}
};//匕首策略类
class Dagger:public WeaponStrategy{
public:void equip(Hero& hero){hero.getAtk()+=2;cout<<"装备匕首,ATK增加2"<<endl;}void unequip(Hero& hero){hero.getAtk()-=2;cout<<"卸下匕首,ATK减少2"<<endl;}
};//斧头策略类
class Axe:public WeaponStrategy{
public:void equip(Hero& hero){hero.getDef()+=2;cout<<"装备斧头,DEF增加2"<<endl;}void unequip(Hero& hero){hero.getDef()-=2;cout<<"卸下斧头,DEF减少2"<<endl;}
};//武器工厂类
class WeaponFactory{
public:static WeaponStrategy* createWeapon(int type){switch(type){case 1:return new LongSword();case 2:return new Dagger();case 3:return new Axe();default:return nullptr;}}
};//怪物类
class Monster{
public://打败怪物后掉落武器WeaponStrategy* dropWeapon(){//随机生成1到3之间的整数,代表不同武器类型int weaponType=rand()%3+1;return WeaponFactory::createWeapon(weaponType);}
};int main(int argc, const char** argv)
{Hero hero;cout<<"初始属性:";hero.showStats();Monster monster;for(int i=0;i<5;i++){cout<<"\n第"<<i+1<<"次打败怪兽,怪物掉落武器..."<<endl;WeaponStrategy* droppedWeapon=monster.dropWeapon();hero.equipWeapon(droppedWeapon);cout<<"当前属性:";hero.showStats();}//调用公共方法释放武器内存hero.releaseWeapon();return 0;
}

http://www.dtcms.com/a/306678.html

相关文章:

  • 9《MySQL 教程》MySQL 的数据类型(2)
  • 云原生环境里的显示变革:Docker虚拟浏览器与cpolar穿透技术实战
  • 赵义弘-----补题报告
  • 【python】Python爬虫入门教程:使用requests库
  • 【git】在 GitLab 上如何把 A 分支(如 feature/xxx)合并到 B 分支(如 trunk)
  • Scala实现常用排序算法
  • 深入理解 Kotlin Flow:异步数据流处理的艺术
  • MidJourney精选图集与提示词生成器:AI创意灵感与高效提示词工具
  • composer 常用命令
  • 高防CDN与高防IP的选择
  • docker可视化管理工具lazydocker
  • 【百卷编程】Go语言大厂高级面试题集
  • 3GPP TS 38.331 V18.6.0 (2025-06)中文版
  • 工业5G路由器赋能高速公路实时监控
  • 【问题未解决-寻求帮助】VS Code 中使用 Conda 环境,运行 Python 后 PowerShell 终端输出内容立即消失
  • 《Java 程序设计》第 12 章 - 异常处理
  • T113-i Linux系统完整构建指南:从SDK开箱到内核镜像量产烧录全流程
  • 2025年湖北中级注册安全工程师报考那些事
  • docker 用于将镜像打包为 tar 文件
  • 【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
  • 【公有云部署模型】yolo模型公有云部署
  • 用聊天方式聊聊msvcr100.dll丢失的解决方法有哪些?msvcr100.dll是什么
  • 7.pcl滤波(一)
  • Python在Web开发领域的崛起与生态探索:从脚本语言到全栈利器
  • Unity Standard Shader 解析(四)之ForwardAdd(简化版)
  • 机器视觉halcon7-缺陷检测
  • SpringCloud -- MQ高级
  • 关于获取某目录及子目录下所有文件且不包含隐藏文件
  • dify + mcp 实现图片 ocr 识别
  • Apache RocketMQ 的核心概念(Core Concepts)