本次实战只是学习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;
}
最终养成之后:
经过本次实战,比较难的就是星座二维数组(一个月包含两个星座)、各月份的跨星座日期的计算;
最麻烦的就是设置游戏的基本参数