#include
#include // 控制输出格式,设置宽度。。。
#include
#include //随机数
#include
#include
using namespace std;
int main()
{
/** 父亲的姓名 */
string value_father_name;
/** 女儿的姓名 */
string value_daughter_name;
/** 女儿生日的月份 */
int value_birth_month;
/** 女儿生日的日期 */
int value_birth_date;
/** 女儿的星座 */
string value_daughter_constell;
/** 女儿的五项基本信息值*/
array<int, 5> value_daughter_baseinfo;
//int value_daughter_baseinfos[5];
//vector value_daughter_baseinfo; //动态分配内存的数组,坏处是数组大小不固定,容易出现bug
//上面这三种定义格式都可以
/**女儿的五项基本信息名字 :体力、智力、魅力、道德、气质 */
array5> value_daughter_baseinfo_names = {"体力", "智力", "魅力", "道德", "气质"};
/** 初始金币*/
int value_daughter_money = 500;
//临时变量
int choice, temp1, temp2, temp3;
/** 星座二维数组*/
string constell_names[12][12] =
{
{"山羊座", "水瓶座"}, //一月份
{"水瓶座", "双鱼座"}, //二月份
{"双鱼座", "白羊座"}, //三月份
{"白羊座", "金牛座"}, //四月份
{"金牛座", "双子座"}, //五月份
{"双子座", "巨蟹座"}, //六月份
{"巨蟹座", "狮子座"}, //七月份
{"狮子座", "处女座"}, //八月份
{"处女座", "天秤座"}, //九月份
{"天称座", "天蝎座"}, //十月份
{"天蝎座", "射手座"}, //十一月份
{"射手座", "山羊座"}, //十二月份
};
//1、为父女取名字
cout << "父亲的姓名:";
cin >> value_father_name;
cout << "女儿的姓名:";
cin >> value_daughter_name;
cout << "女儿的生日(MM,DD): ";
cin >> value_birth_month >> value_birth_date ;
//求女儿的星座
/** 各月份的跨星座日期 */
int constell_dates[] ={20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
value_daughter_constell = constell_names[value_birth_month - 1][value_birth_date/constell_dates[value_birth_month - 1]];
//2、为女儿录入初始信息:生日、星座
// 根据女儿的星座,设置游戏的基本参数(体力、智力、魅力、道德、气质)
cout << "女儿的信息: ";
cout << "姓名: " << value_daughter_name << endl;
cout << "生日: 1659-" << value_birth_month << '-' << value_birth_date << endl;
cout << "星座: " << value_daughter_constell << endl;
if(value_daughter_constell == "白羊座")
{
//用array方式或者直接用int定义,用下面方式进行赋值
value_daughter_baseinfo[0] = 80;
value_daughter_baseinfo[1] = 15;
value_daughter_baseinfo[2] = 15;
value_daughter_baseinfo[3] = 11;
value_daughter_baseinfo[4] = 21;
/*
//用vector方式定义,用下面方式进行赋值
value_daughter_baseinfo.push_back(80);
value_daughter_baseinfo.push_back(15);
value_daughter_baseinfo.push_back(15);
value_daughter_baseinfo.push_back(11);
value_daughter_baseinfo.push_back(21);
*/
}
else if (value_daughter_constell == "狮子座")
{
value_daughter_baseinfo[0] = 75;
value_daughter_baseinfo[1] = 13;
value_daughter_baseinfo[2] = 13;
value_daughter_baseinfo[3] = 11;
value_daughter_baseinfo[4] = 15;
}
else
{
value_daughter_baseinfo[0] = 72;
value_daughter_baseinfo[1] = 15;
value_daughter_baseinfo[2] = 18;
value_daughter_baseinfo[3] = 14;
value_daughter_baseinfo[4] = 19;
}
///各种星座的初始值 省略
//3、开始游戏大循环
for(int year = 1659; year <= 1659 + 7; year++)
{
for(int month = (year == 1659)?6:1; month <= 12; month++) //判断年份是否是1659年,如果是则从6月份开始,如果不是则从1月份开始
{
//判断本月是否是女儿的生日
if(month == value_birth_month)
{
cout << "本月是" << value_daughter_name << "生日,要不要送礼物呢?" << endl;
}
}
//显示游戏主菜单
cout << "\n1、查看状态\n2、安排行程\n3、亲自谈话\n4、存档\n5、读档" << endl;
cin >> choice;
switch(choice)
{
case 1: //查看状态
cout << "女儿的信息: " << endl;
cout << "姓名: " << value_daughter_name << endl;
cout << "生日: 1659-" << value_birth_month << '-' << value_birth_date << endl;
cout << "星座: " << value_daughter_constell << endl;
cout << "金钱: " << value_daughter_money;
//打印核心属性
cout << left;
for(int i = 0; i < 5; i++)
{
cout << value_daughter_baseinfo_names[i] << ": "<< setw(2) << value_daughter_baseinfo[i];
//计算实心方框的数量
int solidCount = value_daughter_baseinfo[i] / 10;
for(int j = 0; j < 10; j++)
{
if(j <= solidCount)
cout << "■";
else
cout << "◻";
}
cout << endl;
}
break;
case 2: //安排行程:一个月最多安排三个行程
{ //如果想在case中定义变量,需要加个大括号
string month_parts[] = {"上旬", "中旬", "下旬"};
for(int i = 0; i < 3; i++)
{
//cout << "---" << month << "月---" << month_parts[i] << endl;
cout << "1、学习武艺\n2、上私塾\n3、学习礼法\n4、出城修行\n5、打工赚钱";
cout << "请选择:";
cin >> choice;
//如果没有钱,则强制打工
if(choice == 1) //+体力 +魅力 -金钱
{
value_daughter_baseinfo[0] += temp1 = rand() % 11;
value_daughter_baseinfo[2] += temp2 = rand() % 11;
value_daughter_money -= temp3 = rand() % 51;
cout << "学习张无忌好榜样!" << endl;
cout << "体力+" << temp1 << ",魅力+" << temp2 << ",金钱-" << temp3 <///5种行程安排,省略不写
}
break;
}
//5种主菜单信息,省略
}
}
//4、根据各项参数,判定游戏结果
//女王 属性总数2000以上
//王妃 属性总数1800--2000
//女将军 属性总数1600--1800
//皇家学院总裁 属性总数1200--1600,智力最高,且体力>智力
//公主 属性总数1200--1600,气质最高,且魅力>体力
// 近卫骑士团长 属性总数1200--1600,体力最高,且气质>魅力
// 高级祭司 属性总数1200--1600,道德最高,且魅力>气质
//国王的宠妃 属性总数1200--1600,魅力最高,且气质>道德
int sum = 0;
for(int i = 0; i < 5; i++)
{
sum += value_daughter_baseinfo[i];
}
if(sum >= 2000)
{
cout << "女王陛下" << endl;
}
else if (sum >= 1200 && sum < 1600)
{
int maxValue = value_daughter_baseinfo[0];
int maxIndex = 0;
for (int i = 1; i < 5; i++)
{
if(maxValue < value_daughter_baseinfo[i])
{
maxValue = value_daughter_baseinfo[i];
maxIndex = i;
}
}
if("道德" == value_daughter_baseinfo_names[maxIndex] && value_daughter_baseinfo[2] > value_daughter_baseinfo[4])
{
cout << value_daughter_name << "成功成为高级祭司";
}
}
return 0;
}