阶段项目---小公举养成记

项目需求:
这里写图片描述

#include <iostream>
#include <iomanip>  // 控制输出格式,设置宽度。。。
#include <cstdlib>
#include <ctime>    //随机数
#include <array>
#include <vector>
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<int> value_daughter_baseinfo;  //动态分配内存的数组,坏处是数组大小不固定,容易出现bug
    //上面这三种定义格式都可以
    /**女儿的五项基本信息名字 :体力、智力、魅力、道德、气质 */
    array<string, 5> 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 <<endl;
                    }
                    ///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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值