本程序根据老九学堂许嵩老师的课程编写,部分功能限于时间和能力暂时还未完成。完成此程序对于游戏实现有了大体的了解,结合到平时玩的游戏,理解了一些机制的实现原理。以后有时间会逐步完善背景音乐、存档、读档、战斗系统。
/******************************** *文件名:main.cpp *描述:小公主养成记 代码实战 *作者:li *时间:2020.1.6 *版权:www.cnblogs.com/lijitao/ ********************************/ #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> #include <vector> #include <array> using namespace std; /***/ int main() { //1.为父女取名字 /** 父亲的姓名 */ string value_father_name; /** 女儿的姓名 */ string value_daughter_name; //2.为女儿录入信息(生日、星座) // 根据女儿的星座,设置游戏的基本参数(体力、智力、魅力、道德、气质) /** 女儿出生月份 */ int value_birth_month; /** 女儿出生的日期 */ int value_birth_date; /** 女儿的星座 */ string value_daughter_constell; /** 女儿的五项基本信息: 体力、智力、魅力、道德、气质 */ array<int,5> value_array_baseinfo; // 动态分配内存的数组 /** 五项基本属性名 */ array<string,5> value_array_baseinfo_names = {"体力","智力","魅力","道德","气质"}; /** 金钱 */ int value_daughter_gold = 500; /** 星座的二维数组 */ string constell_names[12][2] = { {"山羊座","水瓶座"}, //一月 {"水瓶座","双鱼座"}, //二月 {"双鱼座","白羊座"}, //三月 {"白羊座","金牛座"}, //四月 {"金牛座","双子座"}, //五月 {"双子座","巨蟹座"}, //六月 {"巨蟹座","狮子座"}, //七月 {"狮子座","处女座"}, //八月 {"处女座","天秤座"}, //九月 {"天秤座","天蝎座"}, //十月 {"天蝎座","射手座"}, //十一月 {"射手座","山羊座"}, //十二月 }; int choice,temp1,temp2,temp3; cout << "父亲的姓名:"; cin >> value_father_name; cout <<"女儿的姓名:"; cin >> value_daughter_name; cout << "女儿的生日(格式:月 日):"; 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]]; cout << endl << "女儿的信息:" << endl; cout << "姓名:" << value_daughter_name << endl; cout << "生日:1659-" << value_birth_month << "-" << value_birth_date << endl; cout << "星座:" << value_daughter_constell << endl; cout << "金币:" << value_daughter_gold << endl; if(value_daughter_constell == "白羊座" ) { value_array_baseinfo[0] = 80; value_array_baseinfo[1] = 18; value_array_baseinfo[2] = 18; value_array_baseinfo[3] = 28; value_array_baseinfo[4] = 14; } else if(value_daughter_constell == "金牛座") { value_array_baseinfo[0] = 65; value_array_baseinfo[1] = 30; value_array_baseinfo[2] = 28; value_array_baseinfo[3] = 35; value_array_baseinfo[4] = 20; } else if(value_daughter_constell == "双子座" ) { value_array_baseinfo[0] = 50; value_array_baseinfo[1] = 35; value_array_baseinfo[2] = 23; value_array_baseinfo[3] = 26; value_array_baseinfo[4] = 27; } else if(value_daughter_constell == "巨蟹座" ) { value_array_baseinfo[0] = 40; value_array_baseinfo[1] = 31; value_array_baseinfo[2] = 31; value_array_baseinfo[3] = 23; value_array_baseinfo[4] = 37; } else if(value_daughter_constell == "狮子座" ) { value_array_baseinfo[0] = 85; value_array_baseinfo[1] = 35; value_array_baseinfo[2] = 11; value_array_baseinfo[3] = 28; value_array_baseinfo[4] = 20; } else if(value_daughter_constell == "处女座" ) { value_array_baseinfo[0] = 35; value_array_baseinfo[1] = 28; value_array_baseinfo[2] = 36; value_array_baseinfo[3] = 29; value_array_baseinfo[4] = 18; } else if(value_daughter_constell == "天秤座" ) { value_array_baseinfo[0] = 42; value_array_baseinfo[1] = 33; value_array_baseinfo[2] = 25; value_array_baseinfo[3] = 24; value_array_baseinfo[4] = 32; } else if(value_daughter_constell == "天蝎座" ) { value_array_baseinfo[0] = 50; value_array_baseinfo[1] = 25; value_array_baseinfo[2] = 40; value_array_baseinfo[3] = 20; value_array_baseinfo[4] = 26; } else if(value_daughter_constell == "射手座" ) { value_array_baseinfo[0] = 57; value_array_baseinfo[1] = 31; value_array_baseinfo[2] = 25; value_array_baseinfo[3] = 26; value_array_baseinfo[4] = 29; } else if(value_daughter_constell == "山羊座" ) { value_array_baseinfo[0] = 56; value_array_baseinfo[1] = 30; value_array_baseinfo[2] = 26; value_array_baseinfo[3] = 22; value_array_baseinfo[4] = 25; } else if(value_daughter_constell == "水瓶座" ) { value_array_baseinfo[0] = 41; value_array_baseinfo[1] = 43; value_array_baseinfo[2] = 20; value_array_baseinfo[3] = 27; value_array_baseinfo[4] = 23; } else if(value_daughter_constell == "双鱼座" ) { value_array_baseinfo[0] = 41; value_array_baseinfo[1] = 40; value_array_baseinfo[2] = 29; value_array_baseinfo[3] = 25; value_array_baseinfo[4] = 23; } //3.开始游戏大循环 //游戏从1659年6月开始开始 for(int year = 1659; year <= 1659 + 7; year++) { for(int month = (year == 1659) ? 6 : 1; month <= 12; month++) { //判断本月是否是女儿的生日 if(month == value_birth_month) { cout << "本月是" << value_daughter_name <<"生日哦~" << endl; //根据用户的输入进行判断 //待写 } //显示游戏主菜单 cout << "\n 1、查看状态\n 2、安排行程\n 3、亲自谈话\n 4、存档\n 5、读档" << endl; cin >> choice; switch(choice) { case 1: //查看状态 cout << endl << "女儿的信息:" << endl; cout << "姓名:" << value_daughter_name << endl; cout << "生日:1659-" << value_birth_month << "-" << value_birth_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]; //计算实心方方框的数量 int solidCount = value_array_baseinfo[i] / 10; for(int j = 0; j < 10; j++) { if(j < solidCount) 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、学习武术\n 2、上私塾\n 3、学习礼法\n 4、出城修行\n 5、打工赚钱" << endl; cout << "请选择:"; cin >> choice; //以后补充:如果没钱就强制打工 srand(time(NULL)); if(choice == 1) // +体力 +魅力 -金钱 随机数字 { value_array_baseinfo[0] += temp1 = rand() % 10; value_array_baseinfo[2] += temp2 = rand() % 10; value_daughter_gold -= temp3 = rand() % 51; cout << value_daughter_name << "学习到了绝学!" << endl; cout << "体力+" << temp1 << ",魅力+" << temp2 << ",金钱-"<< temp3 << endl; } else if(choice == 5) { value_daughter_gold += temp3 = rand() % 101; cout << "通过努力打工,赚到了" << temp3 << "个金币!" << endl; } } break; } case 3: cout << "暂时未完成(只写了1 2 5)" << endl; break; case 4: cout << "暂时未完成(只写了1 2 5)" << endl; break; case 5: cout << "暂时未完成(只写了1 2 5)" << endl; break; default: cout << "暂时未完成(只写了1 2 5)" << endl; break; } } }//4、根据各项参数、判定游戏结果 /* 女 王: >2000 王 妃: (1800, 2000] 女 将 军:(1600, 1800] 皇家学院总裁: (1200, 1600],智力最高,且魅力>气质 公 主:(1200, 1600],气质最高,且魅力>体力 近卫骑士团长:(1200, 1600],体力最高,且气质>魅力 高级 祭司:(1200, 1600],魔法最高,且道德>武艺 国王的 宠妃:(1200, 1600],魅力最高,且气质>道德 农妇、魔法师、修女、作家、酒吧女郎:<=1200,随机分配身份 */ //计算女儿当前总的属性得分 int sum = 0; //声明女儿当前获得的金币总量 for(int j = 0; j < 10; j++) { sum += value_array_baseinfo[j]; } cout << "女儿" << value_daughter_name << "当前总的属性得分为:" << sum << endl; cout << endl; //评定女儿最终的成长等级 if(sum > 2000){ cout << "最优游戏结果:登基为女王陛下。" << endl; } else if(sum > 1800 && sum <= 2000){ cout << "游戏结果第二名:成为王妃。" << endl; } else if(sum > 1600 && sum <= 1800){ cout << "游戏结果第三名:成为女将军。" << endl; } else if(sum > 1200 && sum <= 1600) { //先求出这10个属性的最大值和最小值 int maxValue = value_array_baseinfo[0]; //声明一个最大值,并初始化为value_array_attributes收割元素的值 int maxIndex = 0; //记录最大值在数组元素中的位置 for(int i = 1; i < 10; i++) { if(maxValue < value_array_baseinfo[i]) { maxValue = value_array_baseinfo[i]; maxIndex = i; } } cout << "女儿的10个属性中,得分最高的属性在数组中的位置为" << maxIndex << ",取值为:" << maxValue << endl; if(maxValue == value_array_baseinfo[1] && value_array_baseinfo[2] > value_array_baseinfo[5]) { cout << "女儿成长为:皇家学院总裁。" << endl; //智力最高,且魅力>气质 } else if(maxValue == value_array_baseinfo[5] && value_array_baseinfo[2] > value_array_baseinfo[0]) { cout << "女儿成长为:公主。" << endl; //气质最高,且魅力>体力 } else if(maxValue == value_array_baseinfo[0] && value_array_baseinfo[5] > value_array_baseinfo[2]) { cout << "女儿成长为:近卫骑士团长。" << endl; //体力最高,且气质>魅力 } else if(maxValue == value_array_baseinfo[9] && value_array_baseinfo[3] > value_array_baseinfo[8]) { cout << "女儿成长为:高级祭司。" << endl; //魔法最高,且道德>武艺 } else if(maxValue == value_array_baseinfo[2] && value_array_baseinfo[5] > value_array_baseinfo[4]) { cout << "女儿成长为:国王的宠妃。" << endl; //魅力最高,且气质>道德 } } else if(sum <= 1200) //农妇、魔法师、修女、作家、酒吧女郎:<=1200,随机分配身份 { array<string, 5> value_daughter_role = {"农妇", "魔法师", "修女", "作家", "酒吧女郎"}; string role; //声明一个角色变量 srand((unsigned) time(NULL)); //设定随机数种子 role = value_daughter_role[rand() % 5]; cout << "女儿最终成长为:" << role << "。" << endl; } return 0; }
THE END.
来源:https://www.cnblogs.com/lijitao/p/12157937.html