#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
const int CART_PRICE = 960;
struct Xiangzi {
int health;
int money;
int morale;
int reputation;
bool has_cart;
int day;
bool married;
bool met_cao;
bool met_xiaofuzi;
bool xiaofuzi_alive;
bool liu_siye_angry;
bool helped_erqiang;
int baoyue_type;
string chechang;
bool rent_cart;
};
Xiangzi player;
void initGame();
void showStatus();
void dailyChoice();
void pullCart();
void rest();
void buyCart();
void rentCart();
void returnCart();
void randomEvent();
void checkGameOver();
void showEnding();
void tigerGirlEvent();
void mrCaoEvent();
void xiaofuziEvent();
void chooseBaoyue();
void liuSiyeEvent();
void erqiangziEvent();
void chechangEvent();
int main() {
srand(time(0));
cout << "============================================================" << endl;
cout << " 《骆驼祥子》文字冒险游戏 " << endl;
cout << "============================================================" << endl;
cout << " 按回车键开始游戏... " << endl;
cin.ignore();
initGame();
while (true) {
cout << "\n======================= 第 " << player.day << " 天 =======================" << endl;
showStatus();
if (player.day == 15 && !player.married)
liuSiyeEvent();
if (player.day == 18 && !player.married)
tigerGirlEvent();
if (!player.met_cao && player.morale < 50 && rand() % 3 == 0)
mrCaoEvent();
if (player.day == 30 && player.baoyue_type == 0)
chooseBaoyue();
if (player.day >= 40 && !player.met_xiaofuzi && player.married)
erqiangziEvent();
if (player.day >= 45 && !player.met_xiaofuzi && player.married)
xiaofuziEvent();
dailyChoice();
randomEvent();
checkGameOver();
if (player.rent_cart)
player.money -= 5;
if (player.has_cart && player.chechang != "")
player.money -= 2;
if (player.money < 0)
player.money = 0;
player.day++;
cout << "\n按回车键进入下一天...";
cin.ignore();
}
return 0;
}
void initGame() {
player.health = 80;
player.money = 20;
player.morale = 90;
player.reputation = 50;
player.has_cart = false;
player.day = 1;
player.married = false;
player.met_cao = false;
player.met_xiaofuzi = false;
player.xiaofuzi_alive = true;
player.liu_siye_angry = false;
player.helped_erqiang = false;
player.baoyue_type = 0;
player.chechang = "人和车厂";
player.rent_cart = true;
}
void showStatus() {
cout << "\n【状态】" << endl;
cout << "健康:" << player.health << " 金钱:" << player.money << " 士气:" << player.morale << endl;
cout << "口碑:" << player.reputation << " 车厂:" << player.chechang << endl;
cout << "有车:" << (player.has_cart ? "是" : "否")
<< " 租车:" << (player.rent_cart ? "是" : "否")
<< " 婚姻:" << (player.married ? "已婚" : "未婚") << endl;
cout << "小福子:" << (player.xiaofuzi_alive ? "存活" : "离世")
<< " 包月:";
if (player.baoyue_type == 1) cout << "曹先生";
else if (player.baoyue_type == 2) cout << "杨宅";
else if (player.baoyue_type == 3) cout << "王家";
else cout << "无";
cout << endl;
}
void dailyChoice() {
int choice;
cout << "\n【行动】" << endl;
cout << "1.拉车 2.休息 3.车厂" << endl;
if (player.money >= CART_PRICE && !player.has_cart)
cout << "4.买车" << endl;
cout << "请选择:";
cin >> choice;
if (choice == 1) pullCart();
else if (choice == 2) rest();
else if (choice == 3) chechangEvent();
else if (choice == 4 && player.money >= CART_PRICE) buyCart();
}
void pullCart() {
int base = 10;
if (player.has_cart) base += 10;
base += player.reputation / 5;
if (player.baoyue_type == 1) { base += 12; player.morale += 3; }
if (player.baoyue_type == 2) { base += 20; player.morale -= 10; player.reputation -=5; }
if (player.baoyue_type == 3) { base += 15; }
int earn = base + rand()%10 -5;
if(earn <0) earn=0;
int cost = 5 + rand()%5;
if(player.married) cost -=3;
player.health -= cost;
if(player.health <0) player.health=0;
player.money += earn;
cout << "拉车赚了:" << earn << " 健康消耗:" << cost << endl;
}
void rest() {
int rec = 12 + rand()%8;
if(player.married) rec +=5;
if(player.xiaofuzi_alive && player.met_xiaofuzi) rec +=3;
player.health += rec;
if(player.health>100) player.health=100;
if(player.married) player.morale -=6;
else player.morale +=2;
player.money -= (player.married ? 6 : 3);
if(player.money<0) player.money=0;
cout << "休息恢复健康:" << rec << endl;
}
void buyCart() {
int cost = CART_PRICE;
if(player.married) cost -=250;
if(player.liu_siye_angry && player.chechang=="人和车厂") cost +=100;
player.money -= cost;
player.has_cart = true;
player.rent_cart = false;
player.morale +=25;
cout << "买车成功!花费:" << cost << endl;
}
void chechangEvent() {
int c;
cout << "\n1.换车厂 2.租车 3.还车 选择:";
cin >> c;
if(c==1) {
cout << "1.人和车厂 2.仁和车厂:";
cin >> c;
if(c==1) player.chechang="人和车厂";
else player.chechang="仁和车厂";
}
else if(c==2) {
if(!player.rent_cart && player.money >=15) {
player.money -=15;
player.rent_cart=true;
cout << "租车成功\n";
}
}
else if(c==3) {
player.rent_cart=false;
cout << "已还车\n";
}
}
void liuSiyeEvent() {
cout << "\n【刘四爷】\n1.恭敬 2.冷淡:";
int c; cin>>c;
if(c==1) { player.reputation +=10; player.liu_siye_angry=false; }
else { player.reputation -=15; player.liu_siye_angry=true; }
}
void tigerGirlEvent() {
cout << "\n【虎妞逼婚】\n1.同意 2.拒绝:";
int c; cin>>c;
if(c==1) {
player.married=true;
player.money +=200;
player.liu_siye_angry=true;
} else {
player.morale -=45;
player.reputation -=20;
}
}
void mrCaoEvent() {
player.met_cao=true;
cout << "\n【曹先生】\n1.拉包月 2.拒绝:";
int c; cin>>c;
if(c==1) {
player.baoyue_type=1;
player.money +=50;
player.morale +=30;
}
}
void erqiangziEvent() {
cout << "\n【二强子借钱】\n1.帮 2.不帮:";
int c; cin>>c;
if(c==1) {
player.money -=20;
player.helped_erqiang=true;
} else {
player.helped_erqiang=false;
player.morale -=10;
}
}
void xiaofuziEvent() {
player.met_xiaofuzi=true;
cout << "\n【小福子】\n1.帮助她 2.拒绝:";
int c; cin>>c;
if(c==1) {
player.xiaofuzi_alive=true;
if(!player.helped_erqiang) player.money -=30;
player.morale +=40;
} else {
player.xiaofuzi_alive=false;
player.morale -=70;
}
}
void chooseBaoyue() {
cout << "\n【选择包月】\n1.曹先生 2.杨宅 3.王家:";
cin >> player.baoyue_type;
}
void randomEvent() {
if(rand()%3 !=0) return;
int e = rand()%8;
if(e==0) { cout<<"下雨没生意\n"; player.money -=3; }
if(e==1) { cout<<"遇到好主顾\n"; player.money +=10; player.morale +=8; }
if(e==2) { cout<<"生病\n"; player.health -=20; player.money -=10; }
if(e==3) { cout<<"被敲诈\n"; player.money -=10; player.morale -=15; }
if(e==4 && player.has_cart) { cout<<"车被抢!\n"; player.has_cart=0; player.morale -=50; }
if(e==5 && player.baoyue_type==1) { cout<<"曹先生被盯上,你跑路花钱\n"; player.money -=30; }
if(e==6 && player.married) { cout<<"虎妞给你钱\n"; player.money +=20; }
if(e==7 && player.xiaofuzi_alive) { cout<<"小福子给你送吃的\n"; player.morale +=15; }
}
void checkGameOver() {
if(player.health <=0 || player.morale <=0 || player.day>120) {
showEnding();
exit(0);
}
}
void showEnding() {
cout << "\n==================== 结局 ====================\n";
if(player.has_cart && player.xiaofuzi_alive && player.morale>60) {
cout << "【完美结局】你有车,小福子活着,过上安稳日子!\n";
} else if(!player.xiaofuzi_alive) {
cout << "【悲剧结局】小福子死了,你彻底堕落。\n";
} else if(player.baoyue_type==1) {
cout << "【普通结局】跟着曹先生,安稳过一生。\n";
} else {
cout << "【底层结局】一生拉车,苦苦挣扎。\n";
}
cout << "================ 游戏结束 =================\n";
}