C++实践课作业-----三国游戏开发
作业要求如下: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++实践课作业-----三国游戏开发相关推荐
- lua游戏开发实践指南光盘_Godot游戏开发实践之三:容易被忽视的Resource
一.前言 首先,特大喜讯,奔走相告, Godot 爱好者们又有新的窝了--我们国人自建的 Godot 论坛:Godot中文社区已经正式开放,这里有一手的开发资源,最新的科技动向,开发上有啥问题可以随时 ...
- lua游戏开发实践指南光盘_Godot游戏开发实践之一:用High Level Multiplayer API制作多人游戏(上)
一.前言 距离上一次发文已经稳稳超过一年了,去年一直在做 #¥@#*!%--%#&-%&^# 然后待在家里了!偶尔写写 BUG ,一直默默关注着 Godot ,这不已经 3.2.2 版 ...
- [libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画
前文章节列表: 使用libGDX进行游戏开发(11)-高级编程技巧 使用libGDX进行游戏开发(10)-音乐音效不求人,程序员也可以DIY 使用libGDX进行游戏开发(9)-场景过渡 使用li ...
- Android游戏开发起步(译文)
英文 http://dev.chinamobile.com/cmdn/bbs/thread-13718-1-1.html 如果你有兴趣为Android平台开发游戏,有很多你需要了解的东西.我是Ligh ...
- C++ “武将游戏”开发
完整源码 #include <iostream> #include <algorithm> #include <string> #include <cstdl ...
- HTML5期末大作业:宠物网站设计——布偶猫(7页)带留言板 HTML+CSS+JavaScript web结课作业的源码 web网页设计实例作业 html大学生网站开发实践作业...
常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 军 ...
- 信息系统开发与实践课现状调研 批发零售领域中的信息系统实践现状调研 大学编程作业(TUST 天津科技大学 2023年)
信息系统开发与实践课现状调研 批发零售领域中的信息系统实践现状调研 大学编程作业(TUST 天津科技大学 2023 年) 信息系统开发与实践课现状调研 批发零售领域中的信息系统实践现状调研 大学编程作 ...
- 【Web编程实践课第二次作业】体育新闻世界
夢に敗れた幼き人 被梦想打败的幼稚的人 憧れたヒーローには 是无法变成自己 成れやしないんだ 所憧憬的英雄的 現実に叩き起された時 被现实叫醒的时候 理想郷は離れて 理想的桃花源便会离去 崩れ落ちてき ...
- android 实现 3d 文字,android 3d 游戏 开发 基础 第10课-2D文字显示.ppt
<android 3d 游戏 开发 基础 第10课-2D文字显示.ppt>由会员分享,可在线阅读,更多相关<android 3d 游戏 开发 基础 第10课-2D文字显示.ppt(1 ...
- 【Web编程实践课第一次作业】体育新闻爬虫
僕の世界から君を無くしたら 如果我的世界没有你 意味が無いから 无论何事都尽失意义 君の世界まで僕が向かうから 我会向着你的世界奔去 待っててくれるかな 请你等着我好吗 --<君のいない夜を越え ...
最新文章
- np.random.seed用法
- matlab错误原因,matlab常见错误分析
- android ListView适配器之SimpleAdapter的用法
- java中的json_java中的json使用
- WEB效能测试和负载测试部分截图
- [css] 你有用过table布局吗?说说你的感受
- Waymo自动驾驶数据集介绍与使用教程
- python做些什么项目内容_现在比较流行的python做什么项目最适合?
- 微信小游戏出台最严健康游戏管理 未成年游戏时间金额受限制
- 电脑怎么彻底删除软件_彻底删除的微信聊天记录怎么恢复?有哪些方法能做到...
- hadoop05---进程线程
- python可变类型和不可变深浅拷贝类型_理解python可变类型vs不可变类型,深拷贝vs浅拷贝...
- Data Binding 实践
- (day 13 - 双指针or递归)剑指 Offer 24. 反转链表
- C++ set 多级排序 多维度排序
- 最新emoji表情代码大全_抖音不用考虑我我没感受铁打的图片,最新表情包高清大全[多图]-软件教程...
- Java 将HTML转成PDF的方法
- 短视频SDK:视频编辑SDK,AE模版SDK,绿幕抠图SDK,AI人像分割SDK,VLOG模版SDK
- manjaro顶部显示网速
- Window11一键安装APK应用详细教程,及错误解决
热门文章
- centos7挂载ntfs文件系统_CentOS7挂载NTFS格式的硬盘
- JavaScript对象 、堆与栈
- Chatopera 张凯:创业的信念,为了小家和大家
- position: relative相对定位
- Caused by: redis.clients.jedis.exceptions.JedisConnectionException: JedisPubSub was not subscribed t
- String---自我理解
- 轩小陌的Python笔记-Pandas时间序列与日期
- 神兵利器——敏感文件发现工具
- 如何禁止Apache静态文件缓存
- Android EditText 获得焦点不显示光标