C++(11)--编程实践1-经典养成类游戏简单实践

经典养成类游戏简单实践-小公主养成记


《老九学堂C++课程》学习笔记。《老九学堂C++课程》详情请到B站搜索《老九零基础学编程C++入门》
-------------简单的事情重复做,重复的事情用心做,用心的事情坚持做(老九君)---------------
致敬:日本Gainax公司推出养成游戏,美少女梦工厂

使用控制台编写一个小游戏需要实现的基础功能

  1. 新增数据
  2. 修改数据
  3. 删除数据
  4. 查询数据

游戏规则:游戏一共运行78个月,安排每个月的行程,合理规划增加基础属性。最后主人公成为什么靠的是不同的培养模式。

将使用的技能点:分支结构,循环结构,数组,*vector/array, 指针

剧情策划-》原画-》剧情动画-》写程序把动画串起来成为场景(10几个人,2年)

/*****************************
 * 文件名:main.cpp
 * 创建人:cyy
 * 日 期:2021-01-08
 * 描 述:C++第一阶段项目《小公主养成记》
 * 修改人:somebody
 * 日 期:someday
 * 版 本:1.0.0
 * *****************************/
#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_birth_month = 7;
    /** 女儿生日的日期 */
    int value_birth_day = 5;
    /** 女儿的五项基本信息:体力、智力、魅力、道德、气质*/
    vector<int> value_daughter_baseinfos;
    /** 五项基本属性名 */
    array<string, 5> value_arrary_baseinfoname = {"体力","智力","魅力","道德","气质"};
    /** 女儿的初始金币*/
    int value_daughter_gold = 500;
    string value_daughter_constell;
    string constell_name[12][2]={
        {"山羊座", "水瓶座"}, // 一月
        {"水瓶座", "双鱼座"}, // 二月
        {"双鱼座", "白羊座"}, // 三月
        {"白羊座", "金牛座"}, // 四月
        {"金牛座", "双子座"}, // 五月
        {"双子座", "巨蟹座"}, // 六月
        {"巨蟹座", "狮子座"}, // 七月
        {"狮子座", "处女座"}, // 八月
        {"处女座", "天秤座"}, // 九月
        {"天秤座", "天蝎座"}, // 十月
        {"天蝎座", "射手座"}, // 十一月
        {"射手座", "山羊座"}, // 十二月
    };
    int choice, temp1, temp2, temp3;
    // 2.为女儿录入初始信息,
    cout << "父亲的姓名: ";
    cin >> value_father_name;
    cout << "女儿的姓名: ";
    cin >> value_daughter_name;
    cout << "女儿的生日(MM DD): ";
    cin >> value_birth_month >> value_birth_day;

    /** 每个星座的最后一天 */
    int constell_dates[] = {20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
    value_daughter_constell = constell_name[value_birth_month-1][value_birth_day / constell_dates[value_birth_month-1]];

    cout << "女儿的信息:";
    cout << "姓名:" << value_daughter_name << endl;
    cout << "生日:1659-" << value_birth_month << "-" << value_birth_day << endl;
    cout << "星座:" << value_daughter_constell << endl;
 
    // .依据女儿的星座,设置游戏的基本参数(体力,智力,魅力,道德,气质)
    if(value_daughter_constell == "山羊座" || value_daughter_constell == "双鱼座" || value_daughter_constell == "白羊座"){
        value_daughter_baseinfos.push_back(80);
        value_daughter_baseinfos.push_back(15);
        value_daughter_baseinfos.push_back(15);
        value_daughter_baseinfos.push_back(11);
        value_daughter_baseinfos.push_back(11);
    }
    else if(value_daughter_constell == "金牛座" || value_daughter_constell =="双子座" || value_daughter_constell =="巨蟹座"){
        value_daughter_baseinfos.push_back(30);
        value_daughter_baseinfos.push_back(20);
        value_daughter_baseinfos.push_back(23);
        value_daughter_baseinfos.push_back(35);
        value_daughter_baseinfos.push_back(47);
    }
    else if(value_daughter_constell == "狮子座" || value_daughter_constell =="处女座" || value_daughter_constell=="天平座"){
        value_daughter_baseinfos.push_back(12);
        value_daughter_baseinfos.push_back(13);
        value_daughter_baseinfos.push_back(23);
        value_daughter_baseinfos.push_back(32);
        value_daughter_baseinfos.push_back(21);
    }
    else{
        value_daughter_baseinfos.push_back(2);
        value_daughter_baseinfos.push_back(32);
        value_daughter_baseinfos.push_back(12);
        value_daughter_baseinfos.push_back(33);
        value_daughter_baseinfos.push_back(26);
    }
    for(int i = 0; i < 5 ; i++){
        cout << value_daughter_baseinfos[i] << "\t";
    }
    // 3. 开始游戏大循环
    // 游戏从1659年6月开始
    for(int year = 1659; year <= 1659 + 7; year++){
        for(int month = (year == 1659 ? 6 : 1); month < 13; month++){
            // 判断本月是不是女儿的生日
            if(month == value_birth_month){
                cout << "本月是" << value_daughter_name << "的生日,要不要送礼物呢?" << endl;
                // 依据用户的输入做判断  
            }
            // 显示游戏主菜单
            cout << "\n 1.查看状态 \t2.安排行程 \t3.亲自谈话 \t4.存档 \t5.读档" << endl;
            cin >> choice;
            switch(choice){
                case 1:  //1.查看状态
                    cout << "女儿的信息:";
                    cout << "姓名:" << value_daughter_name << endl;
                    cout << "生日:1659-" << value_birth_month << "-" << value_birth_day << endl;
                    cout << "星座:" << value_daughter_constell << endl;
                    cout << "金币:" << value_daughter_gold << endl;
                    //打印核心属性"
                    cout << left;
                    for(int i = 0; i < 5; i++){
                        cout << value_arrary_baseinfoname[i] << ": " << setw(4) << value_daughter_baseinfos[i];
                        // 计算实心框的百分比
                        int solidCount = value_daughter_baseinfos[i] / 10;
                        for(int j = 0; j < 10; j++){
                            if(j < solidCount){
                                cout << "✅";
                            } 
                            else
                                cout << "❌";
                        }
                        cout << endl;
                    }
                    break;
                case 2:  //2.安排行程: 一个月最多安排三个行程
                {
                    string month_parts[] = {"上旬","中旬","下旬"};
                    int num;      // 课上说case里面不能定义变量,需要打括号。但是我是可以的
                    for(int i = 0; i < 3; i++){
                        cout << "--" << month << "月--" << month_parts[i] << endl;
                        cout << "1.学习武艺\n 2.上私塾\n 3.学习礼法\n 4.出城修行\n 5.打工赚钱" << endl;
                        cout << "请选择:";
                        cin >> choice;
                        // 需要进行判断没钱的情况,强制打工
                        srand(time(NULL));
                        if(choice == 1){ // 加体力,加魅力,减金钱
                            value_daughter_baseinfos[0] += temp1 = rand() % 11;
                            value_daughter_baseinfos[2] += temp2 = rand() % 11;
                            value_daughter_gold -= temp3 = rand() % 51;
                            cout << "学习张无忌好榜样!!!!" << endl;
                            cout << "体力+" << temp1 << ",魅力+" << temp2 << ",金钱-"<< temp3 << endl;
                        }
                        else if(choice == 5){
                            value_daughter_gold -= temp3 = rand() % 101;
                            cout << "通过努力打工赚到了" << temp3 << "金币" << endl;
                        }
                    }
                    break;
                }
                case 3:  //3.亲自谈话
                    break;
                case 4:  //4.存档
                    break;
                case 5:  //5.读档
                    break;
                default:
                    break;
            }

        }
    }
    // 4. 根据各项阐述,判定游戏结果
    int sum = 0;
    for(int i = 0; i < 5; i++){
        sum += value_daughter_baseinfos[i];
    }
    if(sum >= 2000){
        cout << "最优游戏结果:登基为女王陛下" << endl;
    }
    else if(sum >= 1800 && sum < 2000)
    {
        cout << "次优游戏结果:成为王妃" << endl;
    }
    else if(sum >= 1200 && sum < 1600){
        int maxValue = value_daughter_baseinfos[0];
        int maxIdex = 0;
        for(int i = 1; i < 5; i++){
            if(maxValue < value_daughter_baseinfos[i]){
                maxValue = value_daughter_baseinfos[i];
                maxIdex = i;
            }
        }
        if ( maxIdex == 4 && value_daughter_baseinfos[2] > value_daughter_baseinfos[4]){
            cout << "经过长期的训练" << value_daughter_name << "成为一名高荣的高级祭司" << endl;
        }
    return 0; 
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值