问题描述
假设你将负责一款三国游戏武将系统的设计。三国中有名有姓的武将大概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<cstring>
#include<algorithm>
#include<iomanip>
using namespace std;
class Player
{public:void input(Player p[],int);void display(Player p[],int);void chazhao1(Player p[],int);void chazhao2(Player p[],int);void chazhao3(Player p[],int);void chazhao4(Player p[],int);void chazhao5(Player p[],int);void zidianxu_sort(Player p[],int);void choose(Player p[],int);int  insert1(Player p[],int);int  delete1(Player p[],int);void mohu1(Player p[],int);void mohu2(Player p[],int);void mohu3(Player p[],int);void mohu4(Player p[],int);string name;int age;int power;int intell;int fight;
};
void title()
{cout<<"*欢迎登录三国游戏*"<<endl;
}
void Player::input(Player p[],int n)
{int i=0;for(i=0;i<n;i++){string a,b;a=rand()%('Z'-'A'+1)+'A';b=rand()%('Z'-'A'+1)+'A';a.append(b);p[i].name=a;p[i].age=rand()%101;p[i].power=rand()%101;p[i].intell=rand()%101;p[i].fight=rand()%101;}
}
void Player::display(Player p[],int sum)
{cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;for(int j=0;j<sum;j++){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<j+1<<setw(5)<<p[j].name<<setw(5)<<p[j].age<<setw(5)<<p[j].power<<setw(5)<<p[j].intell<<setw(5)<<p[j].fight<<endl;}
}
void Player::chazhao1(Player p[],int sum)
{cout<<"请输入你要查找的武将姓名:"<<endl;string str;cin>>str;int f=0;for(int j=0;j<sum;j++){if(str==p[j].name){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<j+1<<setw(5)<<p[j].name<<setw(5)<<p[j].age<<setw(5)<<p[j].power<<setw(5)<<p[j].intell<<setw(5)<<p[j].fight<<endl;f=1;break;}}if(f==0) {cout<<"不存在该武将"<<endl;}
}
void Player::chazhao2(Player p[],int sum)
{cout<<"请输入你要查找的武将年龄:"<<endl;int n;cin>>n;int f=0;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;for(int j=0;j<sum;j++){if(n==p[j].age){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<j+1<<setw(5)<<p[j].name<<setw(5)<<p[j].age<<setw(5)<<p[j].power<<setw(5)<<p[j].intell<<setw(5)<<p[j].fight<<endl;f=1;}}if(f==0) {cout<<"不存在该武将"<<endl;}
}
void Player::chazhao3(Player p[],int sum)
{cout<<"请输入你要查找的武将体力:"<<endl;int n;cin>>n;int f=0;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;for(int j=0;j<sum;j++){if(n==p[j].power){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<j+1<<setw(5)<<p[j].name<<setw(5)<<p[j].age<<setw(5)<<p[j].power<<setw(5)<<p[j].intell<<setw(5)<<p[j].fight<<endl;f=1;}}if(f==0) {cout<<"不存在该武将"<<endl;}
}
void Player::chazhao4(Player p[],int sum)
{cout<<"请输入你要查找的武将智力:"<<endl;int n;cin>>n;int f=0;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;for(int j=0;j<sum;j++){if(n==p[j].intell){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<j+1<<setw(5)<<p[j].name<<setw(5)<<p[j].age<<setw(5)<<p[j].power<<setw(5)<<p[j].intell<<setw(5)<<p[j].fight<<endl;f=1;}}if(f==0) {cout<<"不存在该武将"<<endl;}
}
void Player::chazhao5(Player p[],int sum)
{cout<<"请输入你要查找的武将武力:"<<endl;int n;cin>>n;int f=0;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;for(int j=0;j<sum;j++){if(n==p[j].fight){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<j+1<<setw(5)<<p[j].name<<setw(5)<<p[j].age<<setw(5)<<p[j].power<<setw(5)<<p[j].intell<<setw(5)<<p[j].fight<<endl;f=1;}}if(f==0) {cout<<"不存在该武将"<<endl;}
}
void Player::zidianxu_sort(Player p[],int sum)//由两个字母组成的名字,逐字母比较
{int t=0,f=0;Player temp;char a[10],b[10];for(int j=0;j<sum;j++){for(int k=j+1;k<sum;k++){strcpy(a,(p[j].name).c_str());t=a[0];strcpy(b,(p[k].name).c_str());f=b[0];if(t>f){temp=p[j];p[j]=p[k];p[k]=temp;}else if(t==f){t=a[1];f=b[1];if(t>f){temp=p[j];p[j]=p[k];p[k]=temp;}}}}cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;for(int o=0;o<sum;o++){cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<o+1<<setw(5)<<p[o].name<<setw(5)<<p[o].age<<setw(5)<<p[o].power<<setw(5)<<p[o].intell<<setw(5)<<p[o].fight<<endl;}
}
int  Player::insert1(Player p[],int m)
{cout<<"您要增加的武将个数:"<<endl;int n;cin>>n;cout<<"请输入您要增加的武将的信息:"<<endl;for(int j=m;j<m+n;j++){cin>>p[j].name>>p[j].age>>p[j].power>>p[j].intell>>p[j].fight;}p[m+n].display(p,m+n);return (m+n);
}
int  Player::delete1(Player p[],int m)
{cout<<"请输入您要删除的武将姓名:"<<endl;Player c;cin>>c.name;int t=0;for(int j=0;j<m;j++){if(c.name==p[t].name){t++;j--;continue;}else{p[j].name=p[t].name;p[j].age=p[t].age;p[j].power=p[t].power;p[j].intell=p[t].intell;p[j].fight=p[t].fight;t++;}}p[m-1].display(p,m-1);return m-1;
}
void Player::mohu1(Player p[],int sum)
{cout<<"请输入您要查找的区间:"<<endl;int m,n;cin>>m>>n;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;int f=0;for(int i=0;i<sum;i++){if(p[i].age>=m&&p[i].age<=n){f=1;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<i+1<<setw(5)<<p[i].name<<setw(5)<<p[i].age<<setw(5)<<p[i].power<<setw(5)<<p[i].intell<<setw(5)<<p[i].fight<<endl;}}if(f==0) {cout<<"不存在该年龄区间的武将"<<endl;}
}
void Player::mohu2(Player p[],int sum)
{cout<<"请输入您要查找的区间:"<<endl;int m,n;cin>>m>>n;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;int f=0;for(int i=0;i<sum;i++){if(p[i].power>=m&&p[i].power<=n){f=1;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<i+1<<setw(5)<<p[i].name<<setw(5)<<p[i].age<<setw(5)<<p[i].power<<setw(5)<<p[i].intell<<setw(5)<<p[i].fight<<endl;}}if(f==0) {cout<<"不存在该体力区间的武将"<<endl;}
}
void Player::mohu3(Player p[],int sum)
{cout<<"请输入您要查找的区间:"<<endl;int m,n;cin>>m>>n;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;int f=0;for(int i=0;i<sum;i++){if(p[i].intell>=m&&p[i].intell<=n){f=1;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<i+1<<setw(5)<<p[i].name<<setw(5)<<p[i].age<<setw(5)<<p[i].power<<setw(5)<<p[i].intell<<setw(5)<<p[i].fight<<endl;}}if(f==0) {cout<<"不存在该智力区间的武将"<<endl;}
}
void Player::mohu4(Player p[],int sum)
{cout<<"请输入您要查找的区间:"<<endl;int m,n;cin>>m>>n;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;int f=0;for(int i=0;i<sum;i++){if(p[i].fight>=m&&p[i].fight<=n){f=1;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<i+1<<setw(5)<<p[i].name<<setw(5)<<p[i].age<<setw(5)<<p[i].power<<setw(5)<<p[i].intell<<setw(5)<<p[i].fight<<endl;}}if(f==0) {cout<<"不存在该武力区间的武将"<<endl;}
}
bool comp1(Player p,Player q)
{return (p.age<q.age);
}
bool comp2(Player p,Player q)
{return (p.age>q.age);
}
bool comp3(Player p,Player q)
{return (p.power<q.power);
}
bool comp4(Player p,Player q)
{return (p.power>q.power);
}
bool comp5(Player p,Player q)
{return (p.intell<q.intell);
}
bool comp6(Player p,Player q)
{return (p.intell>q.intell);
}
bool comp7(Player p,Player q)
{return (p.fight<q.fight);
}
bool comp8(Player p,Player q)
{return (p.fight>q.fight);
}
void how()
{cout<<endl;cout<<setfill('*')<<setw(43)<<"*"<<endl;cout<<setfill(' ')<<setw(7)<<" "<<"请选择:"<<endl;cout<<setfill(' ')<<setw(7)<<" "<<"1.自定义武将(以#为输入结束标记)"<<endl;cout<<setfill(' ')<<setw(7)<<" "<<"2.随机生成武将"<<endl;cout<<setfill('*')<<setw(43)<<"*"<<endl;cout<<endl;
}
void i_function()
{cout<<endl;cout<<setfill('*')<<setw(48)<<"*"<<endl;cout<<setfill(' ')<<setw(10)<<" "<<"请选择您需要的功能:"<<endl;cout<<setfill(' ')<<setw(10)<<" "<<"1.增删武将"<<endl;cout<<setfill(' ')<<setw(10)<<" "<<"2.查找武将信息"<<endl;cout<<setfill(' ')<<setw(10)<<" "<<"3.依据某属性对武将进行排序"<<endl;cout<<setfill(' ')<<setw(10)<<" "<<"4.模糊查找"<<endl;cout<<setfill(' ')<<setw(10)<<" "<<"5.结束"<<endl;cout<<setfill('*')<<setw(48)<<"*"<<endl;cout<<endl;
}
void zidingyi()
{cout<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"1.增加"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"2.删除"<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<endl;
}
void paixu()
{cout<<endl;cout<<setfill('*')<<setw(30)<<"*"<<endl;cout<<setfill(' ')<<setw(8)<<" "<<"1.姓名字典序"<<endl;cout<<setfill(' ')<<setw(8)<<" "<<"2.年龄"<<endl;cout<<setfill(' ')<<setw(8)<<" "<<"3.体力"<<endl;cout<<setfill(' ')<<setw(8)<<" "<<"4.智力"<<endl;cout<<setfill(' ')<<setw(8)<<" "<<"5.武力"<<endl;cout<<setfill('*')<<setw(30)<<"*"<<endl;cout<<endl;
}
void way1()
{cout<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"1.升序"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"2.降序"<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<endl;
}
void way2()
{cout<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"1.年龄"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"2.体力"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"3.智力"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"4.武力"<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<endl;
}
void way3()
{cout<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"1.姓名"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"2.年龄"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"3.体力"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"4.智力"<<endl;cout<<setfill(' ')<<setw(3)<<" "<<"5.武力"<<endl;cout<<setfill('*')<<setw(15)<<"*"<<endl;cout<<endl;
}
void Player::choose(Player p[],int sum)
{while(1){i_function();int n;cin>>n;if(n==1){zidingyi();int m;cin>>m;if(m==1) {sum=p[sum].insert1(p,sum);}else {sum=p[sum].delete1(p,sum);}}else if(n==2){way3();int m;cin>>m;if(m==1) {p[sum].chazhao1(p,sum);}else if(m==2) {p[sum].chazhao2(p,sum);}else if(m==3) {p[sum].chazhao3(p,sum);}else if(m==4) {p[sum].chazhao4(p,sum);}else if(m==5) {p[sum].chazhao5(p,sum);}}else if(n==3){paixu();int m;cin>>m;if(m==1) {p[sum].zidianxu_sort(p,sum);}else{way1();int t;cin>>t;if(m==2&&t==1) {sort(p,p+sum,comp1);p[sum].display(p,sum);}else if(m==2&&t==2) {sort(p,p+sum,comp2);p[sum].display(p,sum);}else if(m==3&&t==1) {sort(p,p+sum,comp3);p[sum].display(p,sum);}else if(m==3&&t==2) {sort(p,p+sum,comp4);p[sum].display(p,sum);}else if(m==4&&t==1) {sort(p,p+sum,comp5);p[sum].display(p,sum);}else if(m==4&&t==2) {sort(p,p+sum,comp6);p[sum].display(p,sum);}else if(m==5&&t==1) {sort(p,p+sum,comp7);p[sum].display(p,sum);}else if(m==5&&t==2) {sort(p,p+sum,comp8);p[sum].display(p,sum);}}}else if(n==4){way2();int o;cin>>o;if(o==1) {p[sum].mohu1(p,sum);}else if(o==2) {p[sum].mohu2(p,sum);}else if(o==3) {p[sum].mohu3(p,sum);}else if(o==4) {p[sum].mohu4(p,sum);}}else {break;}}}
int main()
{int sum=0;title();how();Player p[5000];int n;cin>>n;if(n==1){cout<<"请输入您定义的武将信息:"<<endl;cout<<setiosflags(ios::left)<<setfill(' ')<<setw(5)<<"序号"<<setw(5)<<"姓名"<<setw(5)<<"年龄"<<setw(5)<<"体力"<<setw(5)<<"智力"<<setw(5)<<"武力"<<endl;int i=0;for(i=0;i<5000;i++){cin>>p[i].name;if(p[i].name=="#") {break;}cin>>p[i].age>>p[i].power>>p[i].intell>>p[i].fight;}sum=i;p[sum].display(p,sum);}else{cout<<"请输入您想要随机生成武将的数量:";int m;cin>>m;sum=m;p[5000].input(p,sum);p[5000].display(p,sum);}p[5000].choose(p,sum);return 0;
}

C++程序设计实验之三国游戏相关推荐

  1. c语言设计贪吃蛇实验报告,贪吃蛇游戏程序设计实验报告

    <贪吃蛇游戏程序设计实验报告>由会员分享,可在线阅读,更多相关<贪吃蛇游戏程序设计实验报告(11页珍藏版)>请在人人文库网上搜索. 1.Windows编程大作业贪吃蛇设计与实现 ...

  2. c语言猜拳游戏实训报告,Java猜拳小游戏程序设计实验报告.doc

    Java程序设计实验报告 班级: 学号: 姓名: 实验题目:猜拳小游戏 实验要求: 用java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 实验 ...

  3. java红牛农场答案_Java面向对象程序设计实验指导与习题解答(21世纪高等学校计算机专业实用规划教材)...

    导语 <Java面向对象程序设计实验指导与习题解答>是<Java面向对象程序设计>(作者耿祥义,清华大学出版社出版,2010)的配套实验指导和习题解答,目的是通过一系列实验练习 ...

  4. 计算机程序设计实验报告4答案,程序设计实验报告4

    篇2:<网络程序设计>教师实验报告 <网络程序设计>教师实验报告 本文关键词:实验,教师,报告,网络程序设计 <网络程序设计>教师实验报告 本文简介:<网络程 ...

  5. python输入一组数据找出被七除余一的数_C程序设计实验-1-7.doc

    C++程序设计实验 实验报告要求 红色为实验报告必包括内容 502:10 实验一 熟悉vc++开发环境和C++程序的调试过程. 一.理解体会例1-1,输入并运行. 二.参照例1-2,用结构化方法编程实 ...

  6. Java程序设计 实验三

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1353       姓名:李海空  学号:20135329 成绩:             指 ...

  7. for循环程序设计实验四

    A-A+B用于输入-输出实践(II) 描述 您的任务是计算 a+b 输入 输入一个数n表示接下来a,b的组数,之后输入n组待测的a和b. 输出 对于每对输入整数a和b,应在一行中输出a和b的总和,并在 ...

  8. 猜数游戏c语言程序流程图,C语言程序设计之猜数游戏.ppt

    C语言程序设计之猜数游戏 编程人员演示 C语言程序设计之猜数游戏 --软工一班 第二小组 程序功能简介 程序思路导引 程序流程图 程序N-S图 组员名单及其具体分工 end page 程序功能简介(1 ...

  9. .NET 程序设计实验 含记事本通讯录代码

    实验一  .NET 程序设计基本流程 [实验内容] 一.控制台.Windows 应用程序.ASP.NET 程序开发流程 1.熟悉开发平台 2.分别开发控制台.Windows 应用程序.ASP.NET ...

最新文章

  1. http权威指南-http连接管理
  2. [转]C++ 使用Makefile文件
  3. 在上位计算机控制时不能将s7-200,PLC控制统编程题库.doc
  4. 独家下载!《零售数据中台通关指南》,带你玩转新零售
  5. 树莓派利用Django搭建聊天网页服务器 —— 准备篇
  6. openjdk platform binary是什么进程_基于pytest实现appium多进程兼容性测试
  7. c语言的指针详解ppt,最全的C语言指针详解.ppt
  8. 机器人环境感知算法发展概述
  9. 基于jquery,bootstrap数据验证插件bootstrapValidator 教程
  10. idea项目中使用URule 规则引擎的简单例子
  11. 第一届FME模板开发者大赛
  12. 【机器学习】损失函数MAE
  13. 使用虚拟机搭建Centos7
  14. CSS 字体粗细 font-weight属性
  15. android应用是非正式版本,Androidstudio 打包apk安装失败 应用是非正式发布版本,当前设备不支持安装...
  16. 南阳oj入门题-A+B Problem
  17. listview增大条目间距
  18. stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解)
  19. 淘宝电商api接口获取商品评论
  20. 文档结构图 字体大小调节

热门文章

  1. c++创建线程:CreateThread 和pthread_create和 _beginthreadex
  2. Ubuntu 系统下查看CPU和GPU温度
  3. js逆向案例-某数美
  4. 用PHP写一个学生学籍管理系统
  5. KBU1010-ASEMI高端适配器扁桥KBU1010
  6. 爱学习的程序员都关注了这些
  7. TH2827A/TH2827B/TH2827C高频LCR数字电桥测试仪技术参数
  8. linux中添加一个用户名和密码,uClinux中添加Telnetd登陆时的用户名和密码
  9. linux忘记了root用户的密码怎么办
  10. linux tty pty pts tts概念 区别