作业要求如下:ps(名字虽说比较夸张,但实际要求却易于实现)

        三国游戏开发

假设你将负责一款三国游戏武将系统的设计。三国中有名有姓的武将大概1000人。你需要为这些武将设计一定的属性值(如,武力、智力等,可以参考游戏《三国志13》),然后能给予一个文字浏览界面,在该界面下能够按照任意属性为主键进行升序或者降序排列,可用Excel来验证排序结果。

具体要求:
(1)从键盘输入若干武将信息(要求支持不低于1000个),每个武将信息至少包括姓名(姓名为拼音)、年龄、武力值、智力值和体力值(可根据自己设计予以增加,由自己设计文档决定)。以#作为结束标记。输入格式参考如下:

//姓名 年龄 体力 智力 武力
LB 35 84 85 85
GY 34 95 88 95
LS 46 84 85 85
ZL 27 90 85 92
ZF 31 95 85 85
ZY 39 90 90 92

(2)给予一个合适的格式化交互界面,能够方便浏览武将信息(请思考,如何才能方便浏览,格式化输出仅仅是基础,你的设计体现方便才能高分)。

(3)能够按照条件,达成依照某个属性作为主键进行升序或者降序排列,其中,姓名为字典序(条件请自行设计,比如,大多数类似下图的三国游戏中,你只需要点击一次武力,就能按武力升序排列,再点击一次,则可按照武力进行降序排列,这里的条件就是点击武力次数。当然,你只需要给用户一个合理的条件交互方式,然后输出一个字符界面)。

(4)支持自定义武将(即,具备插入/删除新武将到系统的能力)
(5)支持武将查找功能。至少支持根据姓名查找武将的功能。

(6)附加加分项:完成以下项目可以酌情加分。
设计并实现合适文字交互界面的浏览方式(思考,多于屏幕显示内容时,如何方便浏览)
设计并实现更多的模糊查找功能,比如根据武力值区间查找等(思考你所玩过的游戏,他们都有什么查找功能)。

效果如下


按体力排序

退出

完整程序代码如下

#include<iostream>
#include<vector>
#include<string>
#include<fstream>
#include<sstream>
#include<iomanip>
#include<algorithm>
using namespace std;struct hero//定义人物属性表
{string name;int age;int strength;int intelligence;int force;int sum;//能力值总和(除年龄)
};void interface();//界面显示函数
void sortAge(const vector<hero> lst);//显示年龄排序
void sortStrength(const vector<hero> lst);//显示体力排序
void sortIntelligence(const vector<hero> lst);//显示智力排序
void sortForce(const vector<hero> lst);//显示武力排序
void sortSum(const vector<hero> lst);//显示能力值总量排序
void sortName(const vector<hero> lst);//显示名字排序(增序,其他为降序)
void readData(const string filename, vector<hero>& lst);//读入文件数据
void addHero(vector<hero>& lst);//增加武将
void deleHero(vector<hero>& lst);//删除武将
void showHero(const vector<hero>& lst);//查看初始未排序整体武将属性
void search(const vector<hero>& lst);//搜索特定武将
void searchRange(const vector<hero>& lst);//按属性进行范围搜索
void sec(string filename,vector<hero> &lst);//与玩家交互的选择设置int main()
{vector<hero> lst;readData("data.txt", lst);interface();sec("data.txt",lst);}void readData(const string filename, vector<hero>& lst)
{ifstream fin(filename);if (fin.good()){string attribute,st;getline(fin,attribute);//略过数据文档的第一行(属性表)while (!fin.eof())//读入文档数据{hero ac;fin >> ac.name >> ac.age >> ac.strength >> ac.intelligence >> ac.force;ac.sum = ac.force + ac.intelligence + ac.strength;lst.push_back(ac);}}fin.close();
}void interface()
{system("CLS");//每次显示主界面前清空当前界面cout << "**********欢迎来到三国游戏开发**********" << endl << endl;cout << "选择1:查看人物整体属性" << endl;cout << "选择2:以人物年龄排序(降序)" << endl;cout << "选择3:以人物体力排序(降序)" << endl;cout << "选择4:以人物智力排序(降序)" << endl;cout << "选择5:以人物武力排序(降序)" << endl;cout << "选择6:以人物能力值总和排序(降序)" << endl;cout << "选择7:以人物姓名排序(增序)" << endl;cout << "选择8:查找人物" << endl;cout << "选择9:按区间查找人物" << endl;cout << "选择10:增加人物" << endl;cout << "选择11:删除人物" << endl;cout << "选择12:退出游戏开发" << endl;
}void sec(string filename,vector<hero>& lst)
{while (1){cout << endl;cout << "*******请输入选择*******" << endl;int sec;int flag = 0;cin >> sec;switch (sec){case 1:showHero(lst);break;case 2:sortAge(lst);break;case 3:sortStrength(lst);break;case 4:sortIntelligence(lst);break;case 5:sortForce(lst);break;case 6:sortSum(lst);break;case 7:sortName(lst);break;case 8:search(lst);break;case 9:searchRange(lst);break;case 10:addHero(lst);break;case 11:deleHero(lst);break;case 12:flag = 1;}if (flag) break;//选择12退出游戏int i;cin >> i;switch (i)//函数返回后根据所选选项选择继续游戏(1)或退出(0){case 0:flag = 1;break;case 1:interface();}if (flag) break;}
}void addHero(vector<hero>& lst)
{system("CLS");//每次显示界面前清空当前界面hero ac;cout <<endl<<endl<< "******请按顺序输入武将的名字(按大写字母开头 如:刘邦 LB)年龄,体力,智力,武力值******"<< endl;cin >> ac.name >>ac.age>> ac.strength >> ac.intelligence >> ac.force;ac.sum = ac.force + ac.intelligence + ac.strength;lst.push_back(ac);cout << endl << "已增加此武将";cout << endl << endl << "******退出游戏请输入0,返回主界面请输入1******" << endl;
}void deleHero(vector<hero>& lst)
{system("CLS");cout << endl<<endl << "******请输入要删除武将的姓名(如刘邦 输入 LB)******" << endl;string dename;cin >> dename;int flag = 0;for (int i = 0; i < lst.size(); i++){if (lst[i].name == dename){lst.erase(lst.begin() + i);flag = 1;break;}}if (flag)//判定是否删除成功{cout << "已删除";}else{cout << "无此武将";}cout << endl << endl << "******退出游戏请输入0,返回主界面请输入1******" << endl;
}void printEntry()//输出属性表的函数
{cout << setw(5) << left << "姓名";cout << setw(5) << left << "年龄";cout << setw(5) << left << "体力";cout << setw(5) << left << "智力";cout << setw(5) << left << "武力";cout << setw(5) << left << "能力值总和" << endl;
}void showHero(const vector<hero>& lst)
{system("CLS");cout << "*******退出游戏请输入0,返回主界面请输入1******" << endl << endl;printEntry();for (int i = 0; i < lst.size(); i++){cout << setw(5) << left << lst[i].name;cout << setw(5) << left << lst[i].age;cout << setw(5) << left << lst[i].strength;cout << setw(5) << left << lst[i].intelligence;cout << setw(5) << left << lst[i].force;cout << setw(5) << left << lst[i].sum<<endl<<endl;}
}void sortAge(const vector<hero> lst)
{vector<hero> lst1=lst;bool ss3(hero a, hero b);//先声明ss3函数sort(lst1.begin(), lst1.end(), ss3);showHero(lst1);
}bool ss3(hero a, hero b)//实现age的降序排序sort里的函数参数
{return a.age > b.age;
}void sortStrength(const vector<hero> lst)
{vector<hero> lst1=lst;bool ss1(hero a, hero b);sort(lst1.begin(), lst1.end(), ss1);showHero(lst1);
}bool ss1(hero a, hero b)
{return a.strength > b.strength;
}void sortIntelligence(const vector<hero> lst)
{vector<hero> lst1=lst;bool ss2(hero a, hero b);sort(lst1.begin(), lst1.end(), ss2);showHero(lst1);
}bool ss2(hero a, hero b)
{return a.intelligence > b.intelligence;
}void sortForce(const vector<hero> lst)
{vector<hero> lst1=lst;bool ss4(hero a, hero b);sort(lst1.begin(), lst1.end(), ss4);showHero(lst1);
}bool ss4(hero a, hero b)
{return a.force > b.force;
}void sortSum(const vector<hero> lst)
{vector<hero> lst1=lst;bool ss5(hero a, hero b);sort(lst1.begin(), lst1.end(), ss5);showHero(lst1);
}bool ss5(hero a, hero b)
{return a.sum > b.sum;
}void sortName(const vector<hero> lst)
{vector<hero> lst1=lst;bool ss6(hero a, hero b);sort(lst1.begin(), lst1.end(), ss6);showHero(lst1);
}bool ss6(hero a, hero b)
{return a.name < b.name;
}void search(const vector<hero>& lst)
{system("CLS");cout <<endl<<endl<< "*******请输入所要搜索的武将姓名*******"<<endl<<endl;string heroName;cin >> heroName;int i,flag = 0;for (i = 0; i < lst.size(); i++){if (lst[i].name == heroName){flag = 1;break;}}if (flag){cout << endl;printEntry();cout << setw(5) << left << lst[i].name;cout << setw(5) << left << lst[i].age;cout << setw(5) << left << lst[i].strength;cout << setw(5) << left << lst[i].intelligence;cout << setw(5) << left << lst[i].force;cout << setw(5) << left << lst[i].sum << endl;}else{cout << endl << "无此武将" << endl;}cout <<endl<< "******退出游戏请输入0,返回主界面请输入1******" << endl;
}void print(hero z)//实现单一武将输出代码复用
{cout << setw(5) << left << z.name;cout << setw(5) << left << z.age;cout << setw(5) << left << z.strength;cout << setw(5) << left << z.intelligence;cout << setw(5) << left << z.force;cout << setw(5) << left << z.sum << endl;
}void searchRange(const vector<hero>& lst)
{system("CLS");void print(hero z);cout <<endl<<endl<< "********输入查找的属性(如:age  strength  intelligence  force 其中的一个)********"<<endl;string section;cin >> section;cout <<endl<< "输入属性的范围" << endl;int l, r;cin >> l >> r;char op = section[0];cout<<endl<<endl << "(若为空则表示无此范围内武将)" << endl;printEntry();if (section == "sum"){for (int i = 0; i < lst.size(); i++){if (lst[i].sum >= l && lst[i].sum <= r) print(lst[i]);}}else{switch (op){case 'a':for (int i = 0; i < lst.size(); i++){if (lst[i].age >= l && lst[i].age <= r) print(lst[i]);}break;case 's':for (int i = 0; i < lst.size(); i++){if (lst[i].strength >= l && lst[i].strength <= r) print(lst[i]);}break;case 'i':for (int i = 0; i < lst.size(); i++){if (lst[i].intelligence >= l && lst[i].intelligence <= r) print(lst[i]);}break;case 'f':for (int i = 0; i < lst.size(); i++){if (lst[i].force >= l && lst[i].force <= r) print(lst[i]);}break;}}cout <<endl<< endl << "******退出游戏请输入0,返回主界面请输入1******" << endl;
}

C++实践课作业-----三国游戏开发相关推荐

  1. lua游戏开发实践指南光盘_Godot游戏开发实践之三:容易被忽视的Resource

    一.前言 首先,特大喜讯,奔走相告, Godot 爱好者们又有新的窝了--我们国人自建的 Godot 论坛:Godot中文社区已经正式开放,这里有一手的开发资源,最新的科技动向,开发上有啥问题可以随时 ...

  2. lua游戏开发实践指南光盘_Godot游戏开发实践之一:用High Level Multiplayer API制作多人游戏(上)

    一.前言 距离上一次发文已经稳稳超过一年了,去年一直在做 #¥@#*!%--%#&-%&^# 然后待在家里了!偶尔写写 BUG ,一直默默关注着 Godot ,这不已经 3.2.2 版 ...

  3. [libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画

    前文章节列表: 使用libGDX进行游戏开发(11)-高级编程技巧  使用libGDX进行游戏开发(10)-音乐音效不求人,程序员也可以DIY  使用libGDX进行游戏开发(9)-场景过渡 使用li ...

  4. Android游戏开发起步(译文)

    英文 http://dev.chinamobile.com/cmdn/bbs/thread-13718-1-1.html 如果你有兴趣为Android平台开发游戏,有很多你需要了解的东西.我是Ligh ...

  5. C++ “武将游戏”开发

    完整源码 #include <iostream> #include <algorithm> #include <string> #include <cstdl ...

  6. HTML5期末大作业:宠物网站设计——布偶猫(7页)带留言板 HTML+CSS+JavaScript web结课作业的源码 web网页设计实例作业 html大学生网站开发实践作业...

    常见网页设计作业题材有 ​​个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 军 ...

  7. 信息系统开发与实践课现状调研 批发零售领域中的信息系统实践现状调研 大学编程作业(TUST 天津科技大学 2023年)

    信息系统开发与实践课现状调研 批发零售领域中的信息系统实践现状调研 大学编程作业(TUST 天津科技大学 2023 年) 信息系统开发与实践课现状调研 批发零售领域中的信息系统实践现状调研 大学编程作 ...

  8. 【Web编程实践课第二次作业】体育新闻世界

    夢に敗れた幼き人 被梦想打败的幼稚的人 憧れたヒーローには 是无法变成自己 成れやしないんだ 所憧憬的英雄的 現実に叩き起された時 被现实叫醒的时候 理想郷は離れて 理想的桃花源便会离去 崩れ落ちてき ...

  9. android 实现 3d 文字,android 3d 游戏 开发 基础 第10课-2D文字显示.ppt

    <android 3d 游戏 开发 基础 第10课-2D文字显示.ppt>由会员分享,可在线阅读,更多相关<android 3d 游戏 开发 基础 第10课-2D文字显示.ppt(1 ...

  10. 【Web编程实践课第一次作业】体育新闻爬虫

    僕の世界から君を無くしたら 如果我的世界没有你 意味が無いから 无论何事都尽失意义 君の世界まで僕が向かうから 我会向着你的世界奔去 待っててくれるかな 请你等着我好吗 --<君のいない夜を越え ...

最新文章

  1. np.random.seed用法
  2. matlab错误原因,matlab常见错误分析
  3. android ListView适配器之SimpleAdapter的用法
  4. java中的json_java中的json使用
  5. WEB效能测试和负载测试部分截图
  6. [css] 你有用过table布局吗?说说你的感受
  7. Waymo自动驾驶数据集介绍与使用教程
  8. python做些什么项目内容_现在比较流行的python做什么项目最适合?
  9. 微信小游戏出台最严健康游戏管理 未成年游戏时间金额受限制
  10. 电脑怎么彻底删除软件_彻底删除的微信聊天记录怎么恢复?有哪些方法能做到...
  11. hadoop05---进程线程
  12. python可变类型和不可变深浅拷贝类型_理解python可变类型vs不可变类型,深拷贝vs浅拷贝...
  13. Data Binding 实践
  14. (day 13 - 双指针or递归)剑指 Offer 24. 反转链表
  15. C++ set 多级排序 多维度排序
  16. 最新emoji表情代码大全_抖音不用考虑我我没感受铁打的图片,最新表情包高清大全[多图]-软件教程...
  17. Java 将HTML转成PDF的方法
  18. 短视频SDK:视频编辑SDK,AE模版SDK,绿幕抠图SDK,AI人像分割SDK,VLOG模版SDK
  19. manjaro顶部显示网速
  20. Window11一键安装APK应用详细教程,及错误解决

热门文章

  1. centos7挂载ntfs文件系统_CentOS7挂载NTFS格式的硬盘
  2. JavaScript对象 、堆与栈
  3. Chatopera 张凯:创业的信念,为了小家和大家
  4. position: relative相对定位
  5. Caused by: redis.clients.jedis.exceptions.JedisConnectionException: JedisPubSub was not subscribed t
  6. String---自我理解
  7. 轩小陌的Python笔记-Pandas时间序列与日期
  8. 神兵利器——敏感文件发现工具
  9. 如何禁止Apache静态文件缓存
  10. Android EditText 获得焦点不显示光标