400行 C++游戏:少女计划 养成游戏

400行 C++实现的养女儿游戏:少女计划
实现功能
记录生日,体力值等数据
多种操作,每种操作随机增加体力等数据
到生日的月份可以选择是否送礼物,花钱,增加数据
结算数据,阈值评价

//
// main.cpp
// 少女计划
//
// Created by 还有醋v on 2019/1/22.
// Copyright © 2019 还有醋v. All rights reserved.
//

#include <iostream>
#include <vector>
#include <ctime>
#include <array>
#include <cstdlib>
#include <string>

using namespace std;
string get_constellation(int date_birth_month, int date_birth_day){
/*
计算星座
date_birth_month 生日月份
date_birth_day 生日天
*/
string constellation_names[12][2] = { // 定义星座
{“摩羯座”, “水瓶座”}, // 1月
{“水瓶座”, “双鱼座”}, // 2月
{“双鱼座”, “白羊座”}, // 3月
{“白羊座”, “金牛座”}, // 4月
{“金牛座”, “双子座”}, // 5月
{“双子座”, “巨蟹座”}, // 6月
{“巨蟹座”, “狮子座”}, // 7月
{“狮子座”, “处女座”}, // 8月
{“处女座”, “天秤座”}, // 9月
{“天秤座”, “天蝎座”}, // 10月
{“天蝎座”, “射手座”}, // 11月
{“射手座”, “摩羯座”}, // 12月
};
int constellation_day[12]{20,19,21,20,21,22,23,23,23,24,23,22}; // 跨星座的日期
return constellation_names[date_birth_month-1][date_birth_day/constellation_day[date_birth_month-1]];
}

array<int, 11> init_infos(string constellation, array<int, 11> infos_array){
/*
初始化属性
constellation 星座
infos_array 属性集合
*/
infos_array[10] = 300; // 钱(10)
if(constellation == “水瓶座”){
// 体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)
infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 4; infos_array[4] = 3; infos_array[5] = 1; infos_array[6] = 2; infos_array[7] = 1; infos_array[8] = 5; infos_array[9] = 3;
}else if (constellation == “双鱼座”){
infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 0; infos_array[4] = 2; infos_array[5] = 3; infos_array[6] = 5; infos_array[7] = 2; infos_array[8] = 1; infos_array[9] = 3;
}else if (constellation == “白羊座”){
infos_array[0] = 6; infos_array[1] = 1; infos_array[2] = 5; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 1; infos_array[6] = 2; infos_array[7] = 0; infos_array[8] = 4; infos_array[9] = 3;
}else if (constellation == “金牛座”){
infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 3; infos_array[4] = 2; infos_array[5] = 2; infos_array[6] = 2; infos_array[7] = 3; infos_array[8] = 1; infos_array[9] = 3;
}else if (constellation == “双子座”){
infos_array[0] = 5; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 2; infos_array[4] = 4; infos_array[5] = 2; infos_array[6] = 4; infos_array[7] = 2; infos_array[8] = 2; infos_array[9] = 4;
}else if (constellation == “巨蟹座”){
infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 3; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 3; infos_array[6] = 3; infos_array[7] = 2; infos_array[8] = 1; infos_array[9] = 4;
}else if (constellation == “狮子座”){
infos_array[0] = 5; infos_array[1] = 2; infos_array[2] = 1; infos_array[3] = 2; infos_array[4] = 2; infos_array[5] = 3; infos_array[6] = 1; infos_array[7] = 2; infos_array[8] = 3; infos_array[9] = 2;
}else if (constellation == “处女座”){
infos_array[0] = 3; infos_array[1] = 2; infos_array[2] = 3; infos_array[3] = 1; infos_array[4] = 3; infos_array[5] = 4; infos_array[6] = 3; infos_array[7] = 3; infos_array[8] = 1; infos_array[9] = 3;
}else if (constellation == “天秤座”){
infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 2; infos_array[4] = 3; infos_array[5] = 2; infos_array[6] = 2; infos_array[7] = 1; infos_array[8] = 2; infos_array[9] = 3;
}else if (constellation == “天蝎座”){
infos_array[0] = 5; infos_array[1] = 2; infos_array[2] = 4; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 1; infos_array[6] = 3; infos_array[7] = 1; infos_array[8] = 1; infos_array[9] = 4;
}else if (constellation == “射手座”){
infos_array[0] = 5; infos_array[1] = 1; infos_array[2] = 1; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 2; infos_array[6] = 2; infos_array[7] = 2; infos_array[8] = 2; infos_array[9] = 3;
}else if (constellation == “摩羯座”){
infos_array[0] = 5; infos_array[1] = 1; infos_array[2] = 1; infos_array[3] = 2; infos_array[4] = 5; infos_array[5] = 2; infos_array[6] = 1; infos_array[7] = 4; infos_array[8] = 2; infos_array[9] = 1;
}
return infos_array;
}

void print_infos(string name_daugher, int age, int date_birth_month ,int date_birth_day, array<int, 11> infos_array){
/*
查看状态
name_daugher 女儿姓名
age 年龄
date_birth_month 生日月份
date_birth_day 生日天
money 钱
infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
*/
cout << “\n信息如下:” << endl;
cout << “\t姓名:” << name_daugher << endl;
cout << “\t年龄:” << age << endl;
cout << “\t生日:” << date_birth_month << “月” << date_birth_day << “日” << endl;
cout << “\t钱:” << infos_array[10] << endl;
array<string, 10> infos_name_array {“\t体力:”,”\t智力:”,”\t魅力:”,”\t自尊:”,”\t道德:”,”\t气质:”,”\t感受:”,”\t体贴:”,”\t武术:”,”\t魔法:”};
cout << left;
for(int i=0; i<10; i++){
cout << infos_name_array[i] << infos_array [i] << “\t\t”;
int solid_count = infos_array[i] / 10; // 计算实心方框的个数
for (int j = 0; j<10; j++) {
if(j<solid_count){
cout << “■”;
}else{
cout << “□”;
}
}
cout << endl;
}
}

array<int, 11> travel_arrangements(int month, array<int, 11> infos_array){
/*
安排行程
month 月份
infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
*/
array<string, 3> meadow {“上旬”,”中旬”,”下旬”};
int choice; // 选择变量
int temp1,temp2,temp3,temp4,temp5,temp6; // 临时变量
for(int i=0;i<3;){
cout << “\n” << month << “月” << meadow[i] << “要干什么:” << endl;
cout << “1.学习礼法\n2.学习武艺\n3.学习法术\n4.打工赚钱\n请选择操作:”;
cin >> choice;
switch (choice) {
case 1: // 学习礼法 -钱(10) +魅力(2) +自尊(3) +道德(4) +气质(5) +体贴(7)
infos_array[10] -= temp1=rand()%(50-25+1)+25; // rand() % (b-a+1)+a a~b之间随机整数
if (infos_array[10]+temp1 < temp1) {
cout << “钱不够了,快去打工吧!” << endl;
infos_array[10] += temp1;
break;
}
i++;
infos_array[2] += temp2=rand()%4;
infos_array[3] += temp3=rand()%4;
infos_array[4] += temp4=rand()%7+3;
infos_array[5] += temp5=rand()%4;
infos_array[7] += temp6=rand()%4;
cout << “\n子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?”” << endl;
cout << month << “月” << meadow[i] << “,学习了礼法,花了:” << temp1 << “,魅力增加了:” << temp2 << “,自尊增加了:” << temp3 << “,道德增加了:” << temp4 << “,气质增加了:” << temp5 << “,体贴增加了:” << temp6 << endl;
break;
case 2: // 学习武艺 -钱(10) +体力(0) +气质(5) +武术(8)
infos_array[10] -= temp1=rand()%21+30;
if (infos_array[10]+temp1 < temp1) {
cout << “钱不够了,快去打工吧!” << endl;
infos_array[10] += temp1;
break;
}
i++;
infos_array[0] += temp2=rand()%4+2;
infos_array[5] += temp3=rand()%4;
infos_array[8] += temp4=rand()%6+4;
cout << “\n站如松,坐如钟,行如风,卧如弓” << endl;
cout << month << “月” << meadow[i] << “,学习了武艺,花了:” << temp1 << “,体力增加了:” << temp2 << “,气质增加了:” << temp3 << “,武术增加了:” << temp4 << endl;
break;
case 3: // 学习法术 -钱(10) +智力(1) +魔法(9)
infos_array[10] -= temp1=rand()%51+50;
if (infos_array[10]+temp1 < temp1) {
cout << “钱不够了,快去打工吧!” << endl;
infos_array[10] += temp1;
break;
}
i++;
infos_array[1] += temp2=rand()%5;
infos_array[9] += temp3=rand()%6+4;
cout << “\n要学神仙,驾鹤飞天,点石成金,妙不可言” << endl;
cout << month << “月” << meadow[i] << “,学习了法术,花了:” << temp1 << “,智力增加了:” << temp2 << “,魔法增加了:” << temp3 << endl;
break;
case 4: // 打工赚钱 +钱(10) +体力(0)
infos_array[10] += temp1=rand()%31+30;
infos_array[0] += temp2=rand()%5;
i++;
cout << “\n打工是不可能打工的!” << endl;
cout << month << “月” << meadow[i] << “,打工赚了:” << temp1 << “,体力增加了:” << temp2 << endl;
break;
default:
break;
}
}
return infos_array;
}

array<int, 11> parent_talk(array<int, 11> infos_array){
/*
亲子谈话
infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
*/
int choice; // 选择变量
int temp1,temp2,temp3; // 临时变量
cout << “\n进行亲子对话:” << endl;
cout << “1.打招呼\n2.温柔说话\n3.严厉训斥\n4.给零花钱\n请选择操作:”;
cin >> choice;
switch (choice) {
case 1: // 打招呼 没有什么软用
cout << “\n向女儿打了招呼,然鹅并没有什么软用” << endl;
break;
case 2: // 温柔说话 +感受(6) +体贴(7)
cout << “\n最近怎么样?” << endl;
infos_array[6] += temp1=rand()%5;
infos_array[7] += temp2=rand()%5;
cout << “和女儿聊了聊天,感受增加了:” << temp1 << “,体贴增加了:” << temp2 << endl;
break;
case 3: // 严厉教育 -感受(6) -体贴(7) +道德(4)
cout << “\[email protected]#3$5%^&*9({[email protected]#`~|^&*}!” << endl;
infos_array[6] -= temp1=rand()%5;
infos_array[7] -= temp2=rand()%5;
infos_array[4] += temp3=rand()%15+5;
cout << “进过了严厉的教育,感受减少了:” << temp1 << “,体贴减少了:” << temp2 << “,道德增加了:” << temp3 << endl;
break;
case 4: // 给零花钱 -钱(10)
if (infos_array[10] < 100) {
cout << “钱不够了,快去打工吧!” << endl;
break;
}
infos_array[10] -= 100;
cout << “给了女儿100零花钱” << endl;
int buy = rand()%4;
switch (buy) {
case 0: // 买了喜之郎果冻 +体力(0) +自尊(3)
infos_array[0] += temp1=rand()%5+1;
infos_array[3] += temp2=rand()%3;
cout << “\n女儿用零花钱买了喜之郎果冻,体力增加了:” << temp1 << “,自尊增加了” << temp2 << endl;
break;
case 1: // 买了漂亮的衣服 +魅力(2) +自尊(3) +气质(5)
infos_array[2] += temp1=rand()%5+1;
infos_array[3] += temp2=rand()%3;
infos_array[5] += temp3=rand()%5+1;
cout << “\n女儿用零花钱买了漂亮的衣服,魅力增加了:” << temp1 << “,自尊增加了” << temp2 << “,气质增加了:” << temp3 << endl;
break;
case 2: // 买了书 +智力(1) +自尊(3) +道德(4)
infos_array[1] += temp1=rand()%5+1;
infos_array[3] += temp2=rand()%3;
infos_array[4] += temp3=rand()%5+1;
cout << “\n女儿用零花钱买了书,智力增加了:” << temp1 << “,自尊增加了” << temp2 << “,道德增加了:” << temp3 << endl;
break;
case 3: // 买了《葵花宝典》 +自尊(3) +魔法(9)
infos_array[3] += temp1=rand()%3;
infos_array[4] += temp2=rand()%5+15;
cout << “\n女儿用零花钱买了《葵花宝典》,自尊增加了:” << temp1 << “,经过学习,魔法增加了” << temp2 << endl;
break;
case 4: // 钱掉了 -自尊(3) -感受(6)
infos_array[3] -= temp1=rand()%3;
infos_array[6] -= temp2=rand()%5+1;
cout << “\n女儿的零花钱不小心丢了,自尊减少了:” << temp1 << “,感受减少了” << temp2 << endl;
break;
default:
break;
}
break;
}
return infos_array;
}

array<int, 11> reset_infos(array<int, 11> infos_array){
/*
重置属性
infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
*/
for (int i=0; i<10; i++) {
if(infos_array[i] > 100)
infos_array[i] = 100;
}
return infos_array;
}

void settlement(array<int,11> infos_array){
/*
结算
infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
*/
int sum = 0;
for (int i=0; i<=infos_array.size()-2; i++) {
sum += infos_array[i];
}
if (sum < 100) {
cout << “你真是个失败的爸爸!” << endl;
}else if (sum>=100 && sum<500){
cout << “还需继续努力!” << endl;
}else if (sum>=500 && sum<700){
cout << “你是个合格的爸爸!” << endl;
}else if (sum>=700 && sum<900){
cout << “你是个良好的爸爸!” << endl;
}else if (sum>=900){
cout << “你是个优秀的爸爸!” << endl;
}
}

int main(){
/*
1.初始化信息(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
2.游戏大循环
3.根据参数,判定游戏结果
*/

// 定义信息
string name_father, name_daugher; // 姓名
int date_birth_month, date_birth_day; // 生日
int age = 11;
string constellation; // 星座
array<int, 11> infos_array; // 女儿初始属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10))
int temp1,temp2,temp3,temp4; // 临时变量
int choice; // 选择变量

// 初始化
cout << “请输入爸爸的姓名:”;
cin >> name_father; // 输入爸爸姓名
cout << “请输入女儿的姓名:”;
cin >> name_daugher; // 输入女儿姓名
cout << “请输入生日的月份:” ;
cin >> date_birth_month; // 输入生日月份
cout << “请输入生日的天数:” ;
cin >> date_birth_day; // 输入生日天数
constellation = get_constellation(date_birth_month, date_birth_day); // 获得星座
infos_array = init_infos(constellation, infos_array); // 初始化属性

// 游戏主体
cout << “\n爸爸的姓名是:” << name_father << endl;
print_infos(name_daugher, age, date_birth_month, date_birth_day, infos_array); // 打印信息函数

bool is_settlement = false; // 是否结算标记
for(int year = 2018;year <= 2018+8;year++){
if (is_settlement) {
break;
}
bool is_gift = false; // 送礼物状态标记
for(int month = (year == 2018)?6:1; month<=12;) {
if (is_settlement) {
break;
}

if(month > date_birth_month){
age++;
}
// 自动结算
for (int i=0; i<=infos_array.size()-2; i++) {
if (infos_array[i] != 100) {
break;
}
char input_Y_or_N;
cout << “女儿的全部属性已满,是否结算?(Y/N):”;
cin >> input_Y_or_N;
if (input_Y_or_N == ‘Y’ || input_Y_or_N == ‘y’) {
settlement(infos_array);
}
}
if (age == 19) {
cout << “女儿已经成年了,有了男朋友” << endl;
settlement(infos_array);
}

// 判断生日
cout << “\n本月是” << month << “月” << endl;
if(month == date_birth_month && is_gift == false){
char input_Y_or_N;
cout << “本月” << date_birth_day << “号是” << name_daugher << “的生日,要不要送礼物呢?(Y/N):”;
// 判断送不送
cin >> input_Y_or_N;
if(input_Y_or_N == ‘Y’ || input_Y_or_N == ‘y’){ // 买了礼物 -钱(10) +魅力(2) +气质(5) +感受(6) +体贴(7)
is_gift = true; // 选择送礼物,标记为送过了
if(infos_array[10] >= 100){
infos_array[10] -= 100;
infos_array[2] += temp1=rand()%10;
infos_array[5] += temp2=rand()%10;
infos_array[6] += temp3=rand()%10;
infos_array[7] += temp4=rand()%10;
cout << “给女儿买了生日礼物花了100,女儿很高兴” << endl;
cout << “魅力增加了:” << temp1 << “,气质增加了:” << temp2 << “,感受增加了:” << temp3 << “,体贴增加了:” << temp4 << endl;
infos_array = reset_infos(infos_array);
}else{
cout << “买礼物需要100,钱不够了,快去打工吧!” << endl;
}
}
}
// 主菜单
cout << “\n1.查看状态\n2.安排行程\n3.亲子谈话\n4.结算\n请选择操作:”;
cin >> choice;

int counter = 0; // 对话次数的计数器
switch (choice) {
case 1: // 查看状态
print_infos(name_daugher, age, date_birth_month, date_birth_day, infos_array);
break;
case 2: // 安排行程
infos_array = travel_arrangements(month, infos_array);
month++;
infos_array = reset_infos(infos_array);
break;
case 3: // 亲子谈话
if (counter <= 5) {
infos_array = parent_talk(infos_array);
counter++; // 计数器+1
}else{
cout << “\n本月已经进行过5次谈话了,快去安排行程吧!” << endl;
}
infos_array = reset_infos(infos_array);
break;
case 4: // 结算
infos_array = reset_infos(infos_array);
print_infos(name_daugher, age, date_birth_month, date_birth_day, infos_array);
settlement(infos_array);
is_settlement = true;
break;
}
infos_array = reset_infos(infos_array);
}
infos_array = reset_infos(infos_array);
is_gift = false; // 新的一年,重置送礼物的状态
if (age == 19) {
cout << “女儿已经成年了,有了男朋友” << endl;
settlement(infos_array);
}
}
char response;
cout << “输入任意字符退出!” << endl;
cin >> response;
————————————————
版权声明:本文为CSDN博主「还有醋v」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_15546045/article/details/86618149

0

评论0

请先

没有账号? 忘记密码?

社交账号快速登录

'); })();