#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
class CatGirl {
private:
std::string name;
int happiness;
int hunger;
int energy;
int affection; // 亲密度
int magic_power; // 魔法力量
int coding_skill; // 编程技能
int contest_wins; // 比赛胜利次数
int algorithm_skill; // 算法能力
int data_structure_skill; // 数据结构能力
int system_skill; // 系统编程能力
int web_skill; // 前端/后端能力
public:
CatGirl(std::string n) : name(n), happiness(50), hunger(50), energy(50), affection(0), magic_power(0), coding_skill(0), contest_wins(0),
algorithm_skill(0), data_structure_skill(0), system_skill(0), web_skill(0) {}
void feed() {
if (hunger > 0) {
hunger -= 20;
if (hunger < 0) hunger = 0;
happiness += 10;
if (happiness > 100) happiness = 100;
affection += 2;
std::cout << name << "开心地吃完了食物!\n";
} else {
std::cout << name << "现在不饿哦。\n";
}
}
void play() {
if (energy >= 20) {
energy -= 20;
happiness += 15;
if (happiness > 100) happiness = 100;
hunger += 10;
if (hunger > 100) hunger = 100;
affection += 5;
std::cout << "你和" << name << "愉快地玩耍了一番!\n";
} else {
std::cout << name << "太累了,需要休息一下。\n";
}
}
void rest() {
energy += 30;
if (energy > 100) energy = 100;
hunger += 5;
if (hunger > 100) hunger = 100;
std::cout << name << "舒服地伸了个懒腰,恢复了一些精力。\n";
}
void code() {
if (coding_skill < 100) {
coding_skill += 10;
if (coding_skill > 100) coding_skill = 100;
happiness += 5;
if (happiness > 100) happiness = 100;
affection += 3;
std::cout << name << "努力地学习编程!\n";
} else {
std::cout << name << "的编程技能已经达到了顶峰!\n";
}
}
void contest(int contest_type) {
switch(contest_type) {
case 1: // 算法竞赛
if (algorithm_skill >= 30) {
int win_chance = rand() % 100;
if (win_chance < algorithm_skill) {
contest_wins++;
happiness += 20;
algorithm_skill += 5;
std::cout << name << "在算法竞赛中大获全胜!\n";
} else {
happiness -= 10;
std::cout << name << "在算法竞赛中遭遇挫折,心情低落。\n";
}
} else {
std::cout << name << "的算法技能不足,无法参加算法竞赛。\n";
}
break;
case 2: // 数据结构竞赛
if (data_structure_skill >= 30) {
int win_chance = rand() % 100;
if (win_chance < data_structure_skill) {
contest_wins++;
happiness += 20;
data_structure_skill += 5;
std::cout << name << "在数据结构竞赛中大获全胜!\n";
} else {
happiness -= 10;
std::cout << name << "在数据结构竞赛中遭遇挫折,心情低落。\n";
}
} else {
std::cout << name << "的数据结构技能不足,无法参加数据结构竞赛。\n";
}
break;
case 3: // 系统编程竞赛
if (system_skill >= 30) {
int win_chance = rand() % 100;
if (win_chance < system_skill) {
contest_wins++;
happiness += 20;
system_skill += 5;
std::cout << name << "在系统编程竞赛中大获全胜!\n";
} else {
happiness -= 10;
std::cout << name << "在系统编程竞赛中遭遇挫折,心情低落。\n";
}
} else {
std::cout << name << "的系统编程技能不足,无法参加系统编程竞赛。\n";
}
break;
case 4: // 网络开发竞赛
if (web_skill >= 30) {
int win_chance = rand() % 100;
if (win_chance < web_skill) {
contest_wins++;
happiness += 20;
web_skill += 5;
std::cout << name << "在网络开发竞赛中大获全胜!\n";
} else {
happiness -= 10;
std::cout << name << "在网络开发竞赛中遭遇挫折,心情低落。\n";
}
} else {
std::cout << name << "的网络开发技能不足,无法参加网络开发竞赛。\n";
}
break;
default:
std::cout << "无效的比赛类型。\n";
break;
}
}
void study_algorithm() {
if (algorithm_skill < 100) {
algorithm_skill += 15;
if (algorithm_skill > 100) algorithm_skill = 100;
coding_skill += 5;
if (coding_skill > 100) coding_skill = 100;
happiness += 5;
if (happiness > 100) happiness = 100;
affection += 2;
std::cout << name << "深入学习了算法知识!\n";
} else {
std::cout << name << "的算法能力已经达到了顶峰!\n";
}
}
void study_data_structure() {
if (data_structure_skill < 100) {
data_structure_skill += 15;
if (data_structure_skill > 100) data_structure_skill = 100;
coding_skill += 5;
if (coding_skill > 100) coding_skill = 100;
happiness += 5;
if (happiness > 100) happiness = 100;
affection += 2;
std::cout << name << "掌握了新的数据结构!\n";
} else {
std::cout << name << "的数据结构能力已经达到了顶峰!\n";
}
}
void study_system() {
if (system_skill < 100) {
system_skill += 15;
if (system_skill > 100) system_skill = 100;
coding_skill += 5;
if (coding_skill > 100) coding_skill = 100;
happiness += 5;
if (happiness > 100) happiness = 100;
affection += 2;
std::cout << name << "学习了系统编程知识!\n";
} else {
std::cout << name << "的系统编程能力已经达到了顶峰!\n";
}
}
void study_web() {
if (web_skill < 100) {
web_skill += 15;
if (web_skill > 100) web_skill = 100;
coding_skill += 5;
if (coding_skill > 100) coding_skill = 100;
happiness += 5;
if (happiness > 100) happiness = 100;
affection += 2;
std::cout << name << "掌握了前端/后端开发!\n";
} else {
std::cout << name << "的前端/后端能力已经达到了顶峰!\n";
}
}
std::string get_mood_level(int value) {
if (value >= 90) return "极乐";
else if (value >= 80) return "愉悦";
else if (value >= 70) return "开心";
else if (value >= 60) return "平静";
else if (value >= 50) return "一般";
else if (value >= 40) return "低落";
else if (value >= 30) return "沮丧";
else if (value >= 20) return "悲伤";
else if (value >= 10) return "痛苦";
else return "绝望";
}
std::string get_hunger_level(int value) {
if (value >= 90) return "极饿";
else if (value >= 80) return "很饿";
else if (value >= 70) return "饥饿";
else if (value >= 60) return "微饿";
else if (value >= 50) return "正常";
else if (value >= 40) return "饱腹";
else if (value >= 30) return "很饱";
else if (value >= 20) return "极饱";
else if (value >= 10) return "撑胀";
else return "爆裂";
}
std::string get_energy_level(int value) {
if (value >= 90) return "精力充沛";
else if (value >= 80) return "活力四射";
else if (value >= 70) return "精神饱满";
else if (value >= 60) return "略有疲惫";
else if (value >= 50) return "一般";
else if (value >= 40) return "疲倦";
else if (value >= 30) return "很累";
else if (value >= 20) return "精疲力尽";
else if (value >= 10) return "奄奄一息";
else return "昏厥";
}
std::string get_affection_level(int value) {
if (value >= 90) return "深爱";
else if (value >= 80) return "挚爱";
else if (value >= 70) return "喜爱";
else if (value >= 60) return "亲近";
else if (value >= 50) return "友好";
else if (value >= 40) return "陌生";
else if (value >= 30) return "疏远";
else if (value >= 20) return "厌恶";
else if (value >= 10) return "仇视";
else return "恨之入骨";
}
std::string get_magic_level(int value) {
if (value >= 90) return "神级";
else if (value >= 80) return "宗师";
else if (value >= 70) return "大师";
else if (value >= 60) return "expert";
else if (value >= 50) return "熟练";
else if (value >= 40) return "入门";
else if (value >= 30) return "初学";
else if (value >= 20) return "萌新";
else if (value >= 10) return "废柴";
else return "无魔力";
}
std::string get_level(int value) {
if (value >= 90) return "S级";
else if (value >= 80) return "A级";
else if (value >= 70) return "B级";
else if (value >= 60) return "C级";
else if (value >= 50) return "D级";
else if (value >= 40) return "E级";
else if (value >= 30) return "F级";
else if (value >= 20) return "G级";
else if (value >= 10) return "H级";
else return "I级";
}
void status() {
std::cout << "\n=== " << name << " 的状态 ===\n";
std::cout << " 心情: " << get_mood_level(happiness) << "\n";
std::cout << " 饥饿: " << get_hunger_level(hunger) << "\n";
std::cout << " 精力: " << get_energy_level(energy) << "\n";
std::cout << " 亲密度: " << get_affection_level(affection) << "\n";
std::cout << " 魔力: " << get_magic_level(magic_power) << "\n";
std::cout << " 编程技能: " << get_level(coding_skill) << "\n";
std::cout << " 比赛胜利: " << contest_wins << " 场\n";
std::cout << " 算法能力: " << get_level(algorithm_skill) << "\n";
std::cout << " 数据结构: " << get_level(data_structure_skill) << "\n";
std::cout << " 系统编程: " << get_level(system_skill) << "\n";
std::cout << " 网络开发: " << get_level(web_skill) << "\n";
std::cout << "==================\n\n";
}
void event() {
int event_type = rand() % 8;
switch(event_type) {
case 0:
std::cout << name << "在角落里发现了一个小玩具。\n";
happiness += 5;
break;
case 1:
std::cout << name << "偷偷打翻了花瓶。\n";
happiness -= 5;
break;
case 2:
std::cout << name << "懒洋洋地晒着太阳。\n";
energy += 5;
break;
case 3:
std::cout << name << "突然学会了新的魔法技能!\n";
magic_power += 15;
break;
case 4:
std::cout << name << "害羞地蹭了蹭你的腿。\n";
affection += 10;
happiness += 5;
break;
case 5:
std::cout << name << "在图书馆找到了一本编程书籍!\n";
coding_skill += 15;
break;
case 6:
std::cout << name << "阅读了算法导论!\n";
algorithm_skill += 10;
coding_skill += 5;
break;
case 7:
std::cout << name << "学习了新的数据结构!\n";
data_structure_skill += 10;
coding_skill += 5;
break;
}
if (happiness > 100) happiness = 100;
if (happiness < 0) happiness = 0;
if (energy > 100) energy = 100;
if (energy < 0) energy = 0;
if (affection > 100) affection = 100;
if (magic_power > 100) magic_power = 100;
if (coding_skill > 100) coding_skill = 100;
if (algorithm_skill > 100) algorithm_skill = 100;
if (data_structure_skill > 100) data_structure_skill = 100;
if (system_skill > 100) system_skill = 100;
if (web_skill > 100) web_skill = 100;
}
bool is_alive() {
return happiness > 0 && hunger < 100;
}
// 隐藏结局检查
std::string check_hidden_endings() {
if (happiness >= 90 && affection >= 90) {
return "true_love";
} else if (magic_power >= 80 && affection >= 70) {
return "magic_girl";
} else if (happiness <= 10 && hunger >= 90) {
return "abandoned";
} else if (affection >= 100) {
return "devotion";
} else if (happiness >= 100 && energy >= 100 && hunger <= 10) {
return "perfect";
} else if (coding_skill >= 100 && contest_wins >= 5) {
return "oier";
} else if (algorithm_skill >= 100 && data_structure_skill >= 100 && system_skill >= 100 && web_skill >= 100) {
return "master";
}
return "none";
}
std::string get_name() { return name; }
int get_happiness() { return happiness; }
int get_hunger() { return hunger; }
int get_energy() { return energy; }
int get_affection() { return affection; }
int get_magic_power() { return magic_power; }
int get_coding_skill() { return coding_skill; }
int get_contest_wins() { return contest_wins; }
int get_algorithm_skill() { return algorithm_skill; }
int get_data_structure_skill() { return data_structure_skill; }
int get_system_skill() { return system_skill; }
int get_web_skill() { return web_skill; }
};
void show_ending(std::string ending_type, CatGirl& catgirl) {
std::cout << "\n==========================================\n";
std::cout << "?? 恭喜解锁隐藏结局! ??\n\n";
if (ending_type == "true_love") {
std::cout << "?? 真爱结局 ??\n";
std::cout << catgirl.get_name() << "与你建立了深厚的情感纽带。\n";
std::cout << "你们成为了最好的伙伴," << catgirl.get_name() << "会永远陪伴在你身边。\n";
std::cout << "\"谢谢你一直以来的关爱,我会永远记得这份温暖。\" — " << catgirl.get_name() << "\n";
} else if (ending_type == "magic_girl") {
std::cout << "? 魔法少女结局 ?\n";
std::cout << catgirl.get_name() << "觉醒了强大的魔法力量!\n";
std::cout << "成为了一名守护世界的魔法少女,但依然记得你的恩情。\n";
std::cout << "\"我将用这份力量保护重要的人!\" — " << catgirl.get_name() << "\n";
} else if (ending_type == "abandoned") {
std::cout << "?? 被遗弃结局 ??\n";
std::cout << "由于长期忽视," << catgirl.get_name() << "伤心地离开了。\n";
std::cout << "在某个雨夜,你听到窗外传来微弱的喵声,但再也没有见到她。\n";
std::cout << "\"为什么...要这样对我呢...\" — " << catgirl.get_name() << "\n";
} else if (ending_type == "devotion") {
std::cout << "?? 虔诚结局 ??\n";
std::cout << catgirl.get_name() << "对你产生了绝对的忠诚!\n";
std::cout << "她成为了你最忠实的伙伴,无论你去哪里都会跟随。\n";
std::cout << "\"无论何时何地,我都会在你身边守护你。\" — " << catgirl.get_name() << "\n";
} else if (ending_type == "perfect") {
std::cout << "?? 完美结局 ??\n";
std::cout << "你将" << catgirl.get_name() << "照顾得无微不至!\n";
std::cout << "她健康、快乐、充满活力,你们的关系达到了完美的平衡。\n";
std::cout << "\"有你在身边,每一天都是幸福的时光。\" — " << catgirl.get_name() << "\n";
} else if (ending_type == "oier") {
std::cout << "?? OIer 终结 ??\n";
std::cout << catgirl.get_name() << "成为了一名顶级的OI选手!\n";
std::cout << "她赢得了5次全国比赛冠军,成为编程界的传奇!\n";
std::cout << "\"我会继续努力,为编程世界贡献更多力量!\" — " << catgirl.get_name() << "\n";
} else if (ending_type == "master") {
std::cout << "?? 程序大师 终结 ??\n";
std::cout << catgirl.get_name() << "成为了一名全能的程序大师!\n";
std::cout << "她精通算法、数据结构、系统编程和前端/后端开发,成为技术界的传奇!\n";
std::cout << "\"我会继续努力,为技术世界贡献更多力量!\" — " << catgirl.get_name() << "\n";
}
std::cout << "\n==========================================\n";
}
int main() {
srand(time(0));
std::string name;
std::cout << "欢迎来到猫娘养成游戏(猫娘OIer版本)!\n";
std::cout << "请输入你的猫娘名字: ";
std::getline(std::cin, name);
CatGirl catgirl(name);
std::cout << "你好!我是" << name << ",喵~\n";
while (catgirl.is_alive()) {
std::cout << "\n请选择操作:\n";
std::cout << "1. 喂食\n";
std::cout << "2. 玩耍\n";
std::cout << "3. 休息\n";
std::cout << "4. 学习编程\n";
std::cout << "5. 参加比赛\n";
std::cout << "6. 学习算法\n";
std::cout << "7. 学习数据结构\n";
std::cout << "8. 学习系统编程\n";
std::cout << "9. 学习前端/后端\n";
std::cout << "10. 查看状态\n";
std::cout << "11. 退出游戏\n";
std::cout << "请输入选项 (1-11): ";
int choice;
std::cin >> choice;
switch (choice) {
case 1:
catgirl.feed();
break;
case 2:
catgirl.play();
break;
case 3:
catgirl.rest();
break;
case 4:
catgirl.code();
break;
case 5:
std::cout << "\n请选择比赛类型:\n";
std::cout << "1. 算法竞赛\n";
std::cout << "2. 数据结构竞赛\n";
std::cout << "3. 系统编程竞赛\n";
std::cout << "4. 网络开发竞赛\n";
std::cout << "请输入选项 (1-4): ";
int contest_choice;
std::cin >> contest_choice;
catgirl.contest(contest_choice);
break;
case 6:
catgirl.study_algorithm();
break;
case 7:
catgirl.study_data_structure();
break;
case 8:
catgirl.study_system();
break;
case 9:
catgirl.study_web();
break;
case 10:
catgirl.status();
break;
case 11:
std::cout << "感谢游玩!再见!\n";
return 0;
default:
std::cout << "无效选项,请重新选择。\n";
continue;
}
catgirl.event();
// 检查隐藏结局
std::string ending = catgirl.check_hidden_endings();
if (ending != "none") {
show_ending(ending, catgirl);
std::cout << "\n恭喜达成特殊结局!游戏继续...\n";
}
if (!catgirl.is_alive()) {
std::cout << "\n" << name << "离你而去了...\n";
std::cout << "游戏结束!\n";
}
}
return 0;
}