练习03 创建型+结构型+其它(以step0_src中代码为基础) 1. 在代码中大量地使用了cout, 这限定了程序只能输出到控制台屏幕,同时也限定了程序中大部分类只能在控制台程序中被复用。为更好提高Menu等类的复用性,并适应多种输出设备,如输出到流设备(含控制台)、输出到打印机、输出到窗口等, 可以将输出独立出来。请根据给出的类图,设计并实现相关类(PrinterDevice、WindowDevice不用实现,暂不考虑cin的处理),并修改原程序,使得输出结果不变。 2. 若希望输出各菜单时,左端都增加一些空格或Tab,使得显示更美观一些,如下图所示。请使用装饰模式扩展1中的类。 转变成 3. 考虑1中的PrinterDevice,若系统中没有本地打印机,而是使用网络打印机;在网络上打印机有多台,当有打印需要时,由系统根据情况选择一台打印。现希望维持OutDevice等类接口的一致,同时让用户在适应打印设备时,感觉与本地打印“一样”。请使用代理模式,给出相关部分的类图并简要加以说明。 4. 现希望在Process各Menu时,增加一些额外的操作:如在菜单之前显示一个Head,例如主菜单可能显示为: ========================= = = ========================= 主菜单 1: New 2: Load 3: Save 4: Option 5: Play..." 6: Change To EF 0: Exit Your selected: 也可能在菜单显示时,循环播放背景音乐,离开菜单时,停止播放。 现将Menu中的Process改为virtual,通过复用已有的各Menu,给Menu增加一些额外的功能。请使用装饰模式进行扩展,使得Process各Menu时,都循环播放背景音乐,离开菜单时,停止播放;同时显示主菜单时,显示如上图(Window下可使用PlaySound API函数,另由于LoadMenu类名与Windows中的LoadMenu API函数重名,可将菜单LoadMenu 类改为其它名字或使用名字空间避免重名)。 5. 现添加Player。作为Demo,可设为2-3个player,如第1号是HumanPlayer;第2号玩家是AutoPlayer,第3号玩家是AutoPlayer。当选择MainMenu->Play时,各Player依次Play;轮到AutoPlayer时,显示当前Map,然后转下一个player;轮到HumanPlayer时,显示PlayMenu菜单,如下: PlayMenu 1. Go… 2. Load 3. Save 4. Back To MainMenu Your selected: 选择1时,显示当前Map; 选择2时,进入LoadMenu;选择3时,进入SaveMenu (SaveMenu可从MainMenu的子菜单中移除掉);选择4时,进入MainMenu。请完成实现代码。实现时,需将MainMenu的子菜单SaveMenu移到PlayMenu的子菜单;修改LoadMenu的动作,当返回时,不再返回到MainMenu,而是直接执行MainMenu的Play过程;
- 1
- 粉丝: 43
- 资源: 40
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- python tkinter-08-盒子模型.ev4.rar
- Doozy UI Manager 2023
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现无线传感器网络无需测距定位算法matlab源代码 包括apit,dv-hop,amorphous在内的共7个
- 基于python的yolov5实现的旋转目标检测
- 基于matlab实现无线传感器网络 CAB定位仿真程序 这是无线传感器节点定位CAB算法的仿真程序,由matlab完成.rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- springcodespringcodespringcodespringcode
- 基于matlab实现权值的MAXDEV无线传感器网络定位算法研究 MAXDEV 无线传感器 定位 算法.rar