C++实战——小公举养成记

本次实战只是学习C++的一个小练习

游戏规则:

  • 游戏一共进行78个月
  • 安排每月行程,合理规划增加基础属性等等…

用到的技能点:
分支结构、循环结构、数组、* vector / array、指针…

代码如下:

/**
*项目名称:我的小公举
*/
#include <iostream>
#include <iomanip>
#include <ctime>
#include <vector>
#include <array>
#include <cstdlib>
using namespace std;

int main()
{
    /** 定义基础变量 **/
    //1.为妇女取名字
    string value_father_name;   //父亲的姓名
    string value_daughter_name;  //女儿的姓名
    int value_brith_month = 6;      //女儿生日的月份
    int value_brith_date = 6;       //女儿生日的日期
    string value_daughter_constell;  //女儿的星座

    //动态分配内存数组
    array<int, 5> value_array_baseinfo;    //女儿的五项基本信息——体力、智力、魅力、道德、气质
    array<string, 5> value_array_baseinfo_names = {"体力", "智力", "魅力", "道德", "气质"};   //五项基本属性名
    int choice, temp1, temp2, temp3, temp4, temp5;
    int value_daughter_gold = 1000;  //金币

    /** 星座二维数组 **/
    string constell_names[12][2] = {
        {"山羊座", "水瓶座"},     //1月
        {"水瓶座", "双鱼座"},     //2月
        {"双鱼座", "白羊座"},     //3月
        {"白羊座", "金牛座"},     //4月
        {"金牛座", "双子座"},     //5月
        {"双子座", "巨蟹座"},     //6月
        {"巨蟹座", "狮子座"},     //7月
        {"狮子座", "处女座"},     //8月
        {"处女座", "天秤座"},     //9月
        {"天秤座", "天蝎座"},     //10月
        {"天蝎座", "射手座"},     //11月
        {"射手座", "山羊座"},     //12月

    };
    /** 进入游戏 **/
    cout << "《进入小公举养成记》" << endl;
    //2.为女儿录入初始信息(生日、星座)
    cout << "父亲的姓名:";
    cin >> value_father_name;
    cout << "女儿的姓名:";
    cin >> value_daughter_name;
    cout << "女儿的生日(MM DD)";
    cin >> value_brith_month >> value_brith_date;

    //各月份的跨星座日期
    int constell_dates[]{20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
    value_daughter_constell = constell_names[value_brith_month - 1][value_brith_date / constell_dates[value_brith_month - 1]];

    /** 显示基本信息 **/
    cout << "女儿的信息:" << endl;
    cout << "姓名:" << value_daughter_name << endl;
    cout << "生日:1659-" << value_brith_month << '-' << value_brith_date << endl;
    cout << "星座:" << value_daughter_constell << endl;

    /** 根据女儿的星座,设置游戏的基本参数————体力、智力、魅力、道德、气质 **/
     if(value_daughter_constell == "白羊座"){
        value_array_baseinfo[0] = 80;
        value_array_baseinfo[1] = 15;
        value_array_baseinfo[2] = 15;
        value_array_baseinfo[3] = 11;
        value_array_baseinfo[4] = 21;
    }else if(value_daughter_constell == "金牛座"){
        value_array_baseinfo[0] = 46;  value_array_baseinfo[1] = 30; value_array_baseinfo[2] = 28; value_array_baseinfo[3] = 20; value_array_baseinfo[4] = 29;
    }else if(value_daughter_constell == "双子座"){
        value_array_baseinfo[0] = 50;  value_array_baseinfo[1] = 35; value_array_baseinfo[2] = 23; value_array_baseinfo[3] = 8;  value_array_baseinfo[4] = 20;
    }else if(value_daughter_constell == "巨蟹座"){
        value_array_baseinfo[0] = 40;  value_array_baseinfo[1] = 31; value_array_baseinfo[2] = 33; value_array_baseinfo[3] = 17; value_array_baseinfo[4] = 33;
    }else if(value_daughter_constell == "狮子座"){
        value_array_baseinfo[0] = 85;  value_array_baseinfo[1] = 9 ; value_array_baseinfo[2] = 11; value_array_baseinfo[3] = 20; value_array_baseinfo[4] = 37;
    }else if(value_daughter_constell == "处女座"){
        value_array_baseinfo[0] = 35;  value_array_baseinfo[1] = 28; value_array_baseinfo[2] = 36; value_array_baseinfo[3] = 18; value_array_baseinfo[4] = 40;
    }else if(value_daughter_constell == "天秤座"){
        value_array_baseinfo[0] = 42;  value_array_baseinfo[1] = 33; value_array_baseinfo[2] = 25; value_array_baseinfo[3] = 32; value_array_baseinfo[4] = 28;
    }else if(value_daughter_constell == "天蝎座"){
        value_array_baseinfo[0] = 50;  value_array_baseinfo[1] = 25; value_array_baseinfo[2] = 40; value_array_baseinfo[3] = 18; value_array_baseinfo[4] = 17;
    }else if(value_daughter_constell == "射手座"){
        value_array_baseinfo[0] = 57;  value_array_baseinfo[1] = 31; value_array_baseinfo[2] = 15; value_array_baseinfo[3] = 19; value_array_baseinfo[4] = 20;
    }else if(value_daughter_constell == "山羊座"){
        value_array_baseinfo[0] = 56;  value_array_baseinfo[1] = 21; value_array_baseinfo[2] = 16; value_array_baseinfo[3] = 25; value_array_baseinfo[4] = 23;
    }else if(value_daughter_constell == "水瓶座"){
        value_array_baseinfo[0] = 43;  value_array_baseinfo[1] = 43; value_array_baseinfo[2] = 20; value_array_baseinfo[3] = 23; value_array_baseinfo[4] = 17;
    }else if(value_daughter_constell == "双鱼座"){
        value_array_baseinfo[0] = 41;  value_array_baseinfo[1] = 21; value_array_baseinfo[2] = 29; value_array_baseinfo[3] = 23; value_array_baseinfo[4] = 32;
    }

    //3.开始游戏大循环
    //从1659年6月开始
    for(int year = 1659; year <= 1659 + 7; year++)
    {
        for(int month = (year == 1659) ? 6 : 1; month <= 12; month++)
        {
            //判断本月是否是女儿的生日
            if(month == value_brith_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_brith_month << '-' << value_brith_date << endl;
                    cout << "星座:" << value_daughter_constell << endl;
                    cout << "金币:" << value_daughter_gold << endl;
                    //打印核心属性
                    cout << left;
                    for(int i = 0; i < 5; i++)
                    {
                        cout << value_array_baseinfo_names[i] << ":" << setw(2) << value_array_baseinfo[i] << "\t";
                        //计算实心方框的数量
                        int soliCount = value_array_baseinfo[i] / 10;
                        for(int j = 0; j < 10; j++)
                        {
                            if(j < soliCount)
                                cout << "■";
                            else
                                cout << "□";
                        }
                        cout << endl;
                    }
                    break;
            case 2:{//安排行程,一个月最多安排3个行程
                string month_parts[] = {"上旬", "中旬", "下旬"};
                for(int i = 0; i < 3; i++)
                {
                    cout << year << "年" << "-- " << month << "月 --" << month_parts[i] << endl;
                    cout << "1.学习武艺\n2.上私塾\n3.学习礼法\n4.出城修行\n5.打工赚钱" << endl;
                    cout << "请选择:";
                    cin >> choice;
                    //判断有没有钱
                    srand(time(NULL));//生成一个随机数
                    if(choice == 1)//+体力,+魅力,-金钱
                    {
                        if(value_daughter_gold < 51)
                        {
                            cout << "钱包都空了,还敢来学武艺????" << endl;
                        }else{
                            value_array_baseinfo[0] += temp1 = rand() % 11;
                            value_array_baseinfo[2] += temp2 = rand() % 11;
                            value_daughter_gold -= temp3 = rand() % 51;
                            cout << "学习张无忌好榜样!!!" << endl;
                            cout << "体力+" << temp1 << ",魅力+" << temp2 << ",金钱-" << temp3 << endl;
                        }
                    }else if(choice == 2)//+智力, + 道德, -金币
                    {
                        if(value_daughter_gold < 101){
                            cout << "没钱还来学校干嘛??学校可是专门坑你钱的地方,资料费你交得起吗???" << endl;
                        }else{
                            value_array_baseinfo[1] += temp1 = rand() % 11;
                            value_array_baseinfo[3] += temp2 = rand() % 11;
                            value_daughter_gold -= temp3 = rand() % 101;
                            cout << "好好学习,天天向上!!" << endl;
                            cout << "智力+" << temp1 << ",道德+" << temp2 << ",金钱-" << temp3 << endl;
                        }
                    }else if(choice == 3)//+气质, + 魅力, -金币
                    {
                        if(value_daughter_gold < 151){
                            cout << "我们这可都是超有素质的人,没钱你学你马呢??" << endl;
                        }else{
                            value_array_baseinfo[2] += temp1 = rand() % 11;
                            value_array_baseinfo[4] += temp2 = rand() % 11;
                            value_daughter_gold -= temp3 = rand() % 151;
                            cout << "我要多才多艺,将来给婆婆端茶倒水!!!" << endl;
                            cout << "魅力+" << temp1 << ",气质+" << temp2 << ",金钱-" << temp3 << endl;
                        }
                    }else if(choice == 4)//+体力, + 智力, +魅力, -金币
                    {
                        if(value_daughter_gold < 201){
                            cout << "没钱还出城?想被劫色吗????" << endl;
                        }else{
                            value_array_baseinfo[0] += temp1 = rand() % 11;
                            value_array_baseinfo[1] += temp2 = rand() % 11;
                            value_array_baseinfo[2] += temp4 = rand() % 11;
                            value_daughter_gold -= temp3 = rand() % 201;
                            cout << "经过10天的外出锻炼,收获了很多异性朋友!!" << endl;
                            cout << "体力+" << temp1 << ",智力+" << temp2 << ",魅力+" << temp4 << ",金钱-" << temp3 << endl;
                        }
                    }
                    else if(choice == 5)
                    {
                         value_daughter_gold += temp3 = rand() % 101;
                         cout << "通过努力打工,赚到了" << temp3 << "个金币!" << endl;
                    }
                }
                break;
                }
            case 3://亲子谈话
                cout << "父亲:" << "........" << endl;
                cout << "女儿:" << "........" << endl;
                cout << "父亲:" << "........" << endl;
                cout << "女儿:" << "........" << endl;
                cout << "父亲:" << "........" << endl;
                cout << "亲子谈话之后................";
                //体力、智力、魅力、道德、气质
                value_array_baseinfo[0] -= temp1 = 4;
                value_array_baseinfo[1] -= temp2 = 10;
                value_array_baseinfo[2] -= temp3 = 8;
                value_array_baseinfo[3] -= temp4 = 20;
                value_array_baseinfo[4] += temp5 = 10;
                cout << "体力-" << temp1 << ",智力-" << temp2 << ",魅力-" << temp3 << ",道德-" << temp4 << ",气质+"<< temp5 << endl;
                break;
            case 4://存档

                break;
            case 5://读档

                break;
            default:
                    break;
            }
        }
    }

    /** 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_array_baseinfo[i];
    }
    if(sum >= 2000)
    {
        cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "登基为女王陛下!" << endl;
    }else if(sum >= 1800 && sum < 2000){
        cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为王妃!" << endl;
    }else if(sum >= 1600 && sum < 1800){
        cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为女将军!" << endl;
    }else if(sum >= 1200 && sum < 1600){
        int maxValue = value_array_baseinfo[0];
        int maxIndex = 0;
        for(int i = 0; i < 5; i++)
        {
            if(maxValue < value_array_baseinfo[i]){
                maxValue = value_array_baseinfo[i];
                maxIndex = i;
            }
        }
        //皇家学院总裁	属性总数1200-1600,智力最高,且体力>智力
        if("智力" == value_array_baseinfo_names[maxIndex] && value_array_baseinfo[0] > value_array_baseinfo[1]){
            cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为光荣的皇家学院总裁!" << endl;
            }
        //公主	属性总数1200-1600,气质最高,且魅力>体力
        if("气质" == value_array_baseinfo_names[maxIndex] && value_array_baseinfo[2] > value_array_baseinfo[0]){
            cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为光荣的公主!" << endl;
            }
        //近卫骑士团长	属性总数1200-1600,体力最高,且气质>魅力
        if("体力" == value_array_baseinfo_names[maxIndex] && value_array_baseinfo[4] > value_array_baseinfo[2]){
            cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为光荣的近卫骑士团长!" << endl;
            }

        //高级祭祀:属性总数1200-1600,道德最高,且魅力>气质
        if("道德" == value_array_baseinfo_names[maxIndex] && value_array_baseinfo[2] > value_array_baseinfo[4]){
            cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为光荣的高级祭祀!" << endl;
            }
        //国王的宠妃:属性总数1200-1600,魅力最高,且气质>道德
        if("魅力" == value_array_baseinfo_names[maxIndex] && value_array_baseinfo[4] > value_array_baseinfo[3]){
            cout << "经过长期艰苦的成长,恭喜:" << value_daughter_name << "成为光荣的国王的宠妃!" << endl;
            }
    }else{
        cout << "我咋长成了个废物!算了,找个厂上班吧!!!" << endl;
    }
    return 0;
}

最终养成之后:

在这里插入图片描述

经过本次实战,比较难的就是星座二维数组(一个月包含两个星座)、各月份的跨星座日期的计算;

最麻烦的就是设置游戏的基本参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值