北京大学程序设计MOOC-魔兽世界系列大作业(一)
程序设计-魔兽世界系列大作业(一)
项目OJ提交:魔兽世界-备战
课程地址:程序设计与算法(三)-C++程序设计
思路与类架构
Warrior类
有五种武士,分别是dragon 、ninja、iceman、lion、wolf,那么就可以抽象出一个武士类,具体的再实例化出对应的武士对象。
每个武士类,都有几个属性:类别(姓名),所属阵营,在该阵营的编号,武力值。然后具备一个方法,就是出生,出生是每个武士必备的过程。而本题的出生,即播报一条武士出生的信息。请根据题目要求写好出生播报的打印语句,要注意:武力值和编号之间,仅一个逗号,没有空格!
类架构中,要注意的是:
- 武力值和类别(姓名)是和阵营无关的;
- 阵营和阵营内的编号是阵营有关的。
因此,要先实例化阵营,后实例化武士,要在阵营中实现出生武士的方法,并且调用武士的出生过程。
Headquarter类
阵营类能被实例化成红蓝两个阵营,每个阵营都有的属性是:类别(姓名),生命元,武士出生顺序。
但是,为了能够生成武士,以及得到武士在阵营内的信息,还需要的属性是:当前武士的编号ID,统计武士在该阵营的数量。然后,红蓝两个阵营的生命元都是相同的。
在类架构中,需要注意的是:
- 当生命元不足以生成当前武士时,要顺延,要么后面的武士中有能生成的,要么所有武士都无法生成,触发生成终止的播报,并不再生成武士;
- 阵营和武士,是从属关系,是has的关系,阵营拥有武士,但是本题并未涉及到武士的动态变化,例如战斗,死亡等事件,因此未设计;
- 如果要设计,则需要有武士相关的成员变量,例如武士列表等。
C++代码实现
#include <cstdio>
#include <string>
#include <vector>
#include <memory>
#include <unordered_map>static
std::unordered_map<std::string, int> warriorStrength;class Warrior {private:std::string name, camp;int id, strength;public:Warrior(const std::string& name_,const std::string& camp_,int id_, int strength_) : name(name_), camp(camp_), id(id_), strength(strength_) { }void born(int timeStamp, int numsInCamp) {printf("%03d %s %s %d born with strength %d,""%d %s in %s headquarter\n", timeStamp, camp.c_str(),name.c_str(), id, strength, numsInCamp, name.c_str(), camp.c_str());}
};class Headquarter {private:std::string name;std::vector<std::string> order;std::unordered_map<std::string, int> cntWarrior;int healthMeta, curID;size_t curIdx;public:Headquarter(const std::string& name_, const std::vector<std::string>& order_,int healthMeta_, int curID_ = 1, size_t curIdx_ = 0) : name(name_), order(order_), healthMeta(healthMeta_), curID(curID_), curIdx(curIdx_) { }std::string getNextWarriorName() {size_t orderSize = order.size();for (size_t i = 0; i < orderSize; ++i) {std::string curName = order[curIdx];if (healthMeta >= warriorStrength[curName]) {return curName;}curIdx = (curIdx + 1) % orderSize;}return "NULL";}bool bornWarrior(int timeStamp) {std::string curName = getNextWarriorName();if ("NULL" == curName) {printf("%03d %s headquarter stops making warriors\n",timeStamp, name.c_str());return false;}int curStrength = warriorStrength[curName];healthMeta -= curStrength;int curNumsInCamp = ++cntWarrior[curName];std::make_shared<Warrior>(curName, name, curID, curStrength)->born(timeStamp, curNumsInCamp);curID++;curIdx = (curIdx + 1) % order.size();return true;}
};int main() {int caseNums;scanf("%d", &caseNums);for (int cs = 1; cs <= caseNums; ++cs) {int meta, dragon, ninja, iceman, lion, wolf;scanf("%d%d%d%d%d%d", &meta, &dragon, &ninja, &iceman, &lion, &wolf);warriorStrength = {{"dragon", dragon}, {"ninja", ninja}, {"iceman", iceman},{"lion", lion}, {"wolf", wolf}};Headquarter red("red", { "iceman", "lion", "wolf", "ninja", "dragon" }, meta);Headquarter blue("blue", { "lion", "dragon", "ninja", "iceman","wolf" }, meta);printf("Case:%d\n", cs);bool redOK = true, blueOK = true;for (int curTime = 0; ; ++curTime) {if (redOK) { redOK = red.bornWarrior(curTime); }if (blueOK) { blueOK = blue.bornWarrior(curTime); }if (!redOK && !blueOK) { break; }}}return 0;
}
北京大学程序设计MOOC-魔兽世界系列大作业(一)相关推荐
- 北京大学程序设计MOOC-魔兽世界大作业(二)
程序设计-魔兽世界系列大作业 上一篇作业解析与代码:魔兽世界-备战 项目OJ提交:魔兽世界-装备 课程地址:程序设计与算法(三)-C++程序设计 思路与类架构 1. 设计原则 (1)不改动测试代码,测 ...
- 西安电子科技大学c语言答案,西安电子科技大学2021春 面向对象程序设计(C++)大作业答案...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一.简答题(共 10 分) 1.(3 分)什么是引用?它与指针有什么区别? 2.(3 分)C++提供了哪些循环语句?它们各自的特点是什么? 3.(4 分) ...
- 实验报告-python文库_python程序设计与实践大作业
python程序设计与实践大作业实验报告陆阳孙勇裘升明.doc 还剩 28页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,马上远离加班 ...
- c#程序设计 大作业
第一题: 控制台程序设计题,设计一个有继承机制下类的层次化结构程序, 该程序中基类为一个圆Circle是抽象类,在Circle类中定义数据成员半径r,圆心位置坐标p(x,Y)为另外一个Point类的对 ...
- C++面向对象程序设计大作业:魔兽世界(三):开战
C++面向对象程序设计大作业:魔兽世界(三):开战 问题描述 问题分析 代码 问题描述 问题来自于北京大学郭炜老师的C++慕课的大作业 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部.两个司令部 ...
- 魔兽世界(三):开战 北京大学慕课C++大作业 代码与思路
类的组织 总体思路: 自底向上为:Weapon -> Warrior -> HeadQuarter | City -> main函数 每个司令部含有一个Warrior的vector, ...
- 东华大学java_东华大学2020秋《Java程序设计》期末大作业
东华大学继续教育学院 2020年秋季学期 远程学历教育<Java程序设计>期末大作业 一.选择题(本大题共10小题,每小题 1分, 共10分) 1. 下列哪个不是面向对象程序设计的基 ...
- c语言程序设计0039大作业答案,2019西南大学0039C语言程序设计机考大作业答案.doc...
- PAGE 1 - 西南大学网络与继续教育学院课程考试试题卷 类别: 网教 2019年 6月 课程名称[编号]: C语言程序设计 [0039] A卷 大作业 满分:100 分 一.大作业题目 1.简 ...
- python2048小游戏程序设计大作业_C语言大作业报告——2048小游戏程序
大作业题目 类型 游戏 班 号 学 号 所在院系 学 期 2020 年春季学期 任课教师 实验类型 综合设计型 实验目的: 掌握程序设计的基本算法和简单数据结构基础,能够综合运用基本控制语句.算法 ...
最新文章
- vim切换编程语言_把 Vim 打造成源代码编辑器 - C 语言编程透视
- python实时监控_使用Python监控Linux系统
- linux 产生0~9内的随机数
- linux 检测远程端口是否打开---nmap命令
- hapRroxy 安装配置详解
- SPOJ - LCS Longest Common Substring(后缀自动机)
- python arcgis 图书_arcgis python
- 视觉平衡与物理平衡_设计中的平衡理论为什么这么重要?
- Julia学习(1)——入门
- 有道词典(android)v4.3.3去广告清爽版+离线词,有道词典4.3.3安
- 金蝶eas怎么引出凭证_如何引出会计分录序时簿?
- mp4数据恢复:mp4视频格式化怎么恢复
- LeetCode 592
- 财务分析之资产负债表
- 2020.8.5丨细菌基因组二代测序组装流程梳理
- Java使用Jco连接sap详解
- Python导入arcpy包出现“ImportError: No module named arcpy”
- 安装redis时 提示执行make命令时提示 CC adlist.o /bin/sh: cc: 未找到命令
- Pdf.js body.getReader 报错问题
- 维克森林大学计算机科学专业好不好,维克森林大学计算机专业怎么样?
热门文章
- 42gears_使用Google Gears进行快速客户端搜索
- 短视频源码教程之短视频app制作如何实现合拍功能
- VUE项目中的微信扫码登录
- 3D角色硬表面建模技巧与思路分享【下】
- 嵌入式课程设计 使用 tini4412配合交叉编译环境 完成串口助手的制作(已解决主机与设备通过网线FTP连接和交叉编译环境的部署问题)
- python抓取猫眼电影评论,200多行代码,哈哈
- swift语言基础语法思维导图
- python的运维开发课程_老男孩python高级运维开发课程
- 老男孩python第九期_python学习之老男孩python全栈第九期_day004知识点总结
- mysql 视图优势_MySQL视图简介及优缺点