#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <string>
#include <conio.h>
#include <windows.h>
using namespace std;
// 设置控制台颜色
void setColor(int color) {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
}
// 光标移动
void gotoxy(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
// 玩家灵魂档案
class SoulProfile {
public:
string name;
int utilitarian; // 功利主义倾向
int deontology; // 道义论倾向
int virtue; // 德性伦理倾向
int existential; // 存在主义倾向
int compassion; // 慈悲心
int rationality; // 理性程度
int hesitation; // 犹豫程度
int conviction; // 信念坚定度
vector<string> philosophy; // 哲学倾向
vector<string> insights; // 灵魂感悟
SoulProfile() : utilitarian(50), deontology(50), virtue(50),
existential(50), compassion(50), rationality(50),
hesitation(0), conviction(50) {}
void addPhilosophy(string phil) {
for(int i = 0; i < philosophy.size(); i++) {
if(philosophy[i] == phil) return;
}
philosophy.push_back(phil);
}
void addInsight(string insight) {
if(insights.size() < 8) {
insights.push_back(insight);
}
}
void showProfile() {
system("cls");
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 灵魂审判·你的哲学画像 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n\n";
setColor(11);
cout << "【" << name << " 的伦理人格】\n\n";
showBar("功利主义倾向", utilitarian, 10);
showBar("道义论倾向 ", deontology, 14);
showBar("德性伦理 ", virtue, 13);
showBar("存在主义倾向", existential, 12);
showBar("慈悲之心 ", compassion, 10);
showBar("理性程度 ", rationality, 11);
showBar("信念坚定度 ", conviction, 14);
showBar("灵魂深度 ", (utilitarian+deontology+virtue+existential)/4, 13);
if(philosophy.size() > 0) {
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 你的哲学倾向 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n";
setColor(10);
for(int i = 0; i < philosophy.size(); i++) {
cout << "? " << philosophy[i] << "\n";
}
}
if(insights.size() > 0) {
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 灵魂的回响 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n";
setColor(11);
for(int i = 0; i < insights.size(); i++) {
cout << "「" << insights[i] << "」\n\n";
}
}
setColor(7);
cout << "\n按任意键继续...";
_getch();
}
void showBar(string label, int value, int colorCode) {
setColor(colorCode);
cout << label << " [";
int filled = value / 5;
for(int i = 0; i < 20; i++) {
if(i < filled) cout << "█";
else cout << "?";
}
cout << "] " << value << "/100\n";
setColor(7);
}
};
// 选择结构
struct MoralChoice {
string text;
int utilitarian;
int deontology;
int virtue;
int existential;
int compassion;
int rationality;
int conviction;
string insight;
string philosophy;
MoralChoice(string t, int u, int d, int v, int e, int c, int r, int conv,
string ins, string phi) {
text = t;
utilitarian = u;
deontology = d;
virtue = v;
existential = e;
compassion = c;
rationality = r;
conviction = conv;
insight = ins;
philosophy = phi;
}
};
// 电车难题场景
class TrolleyScenario {
public:
string title;
string description;
string context;
vector<MoralChoice> choices;
TrolleyScenario(string t, string d, string c) {
title = t;
description = d;
context = c;
}
void addChoice(MoralChoice mc) {
choices.push_back(mc);
}
void display(int num) {
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 电车难题 · 第 " << num << " 重奏 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n\n";
setColor(11);
cout << "【" << title << "】\n\n";
setColor(7);
cout << description << "\n\n";
setColor(8);
cout << "背景:\n" << context << "\n\n";
setColor(14);
cout << "你的选择:\n\n";
for(int i = 0; i < choices.size(); i++) {
if(i == 0) setColor(10);
else if(i == 1) setColor(14);
else if(i == 2) setColor(13);
else setColor(12);
cout << char('A' + i) << ". " << choices[i].text << "\n\n";
}
setColor(7);
cout << "请选择 (A/B/C/D): ";
}
void applyChoice(char choice, SoulProfile& soul, int& insightCount) {
int idx = -1;
if(choice == 'A' || choice == 'a') idx = 0;
else if(choice == 'B' || choice == 'b') idx = 1;
else if(choice == 'C' || choice == 'c') idx = 2;
else if(choice == 'D' || choice == 'd') idx = 3;
if(idx >= 0 && idx < choices.size()) {
MoralChoice& mc = choices[idx];
soul.utilitarian += mc.utilitarian;
soul.deontology += mc.deontology;
soul.virtue += mc.virtue;
soul.existential += mc.existential;
soul.compassion += mc.compassion;
soul.rationality += mc.rationality;
soul.conviction += mc.conviction;
soul.utilitarian = max(0, min(100, soul.utilitarian));
soul.deontology = max(0, min(100, soul.deontology));
soul.virtue = max(0, min(100, soul.virtue));
soul.existential = max(0, min(100, soul.existential));
soul.compassion = max(0, min(100, soul.compassion));
soul.rationality = max(0, min(100, soul.rationality));
soul.conviction = max(0, min(100, soul.conviction));
if(mc.philosophy != "") soul.addPhilosophy(mc.philosophy);
setColor(10);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 灵魂的审判 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n";
setColor(11);
cout << "\n" << mc.insight << "\n";
if(insightCount % 2 == 0 && mc.insight != "") {
soul.addInsight(mc.insight);
}
setColor(7);
cout << "\n按任意键继续...";
_getch();
insightCount++;
}
}
};
// 游戏主类
class TrolleyGame {
private:
SoulProfile soul;
vector<TrolleyScenario> scenarios;
void initializeScenarios() {
// 场景1:经典电车难题
TrolleyScenario s1(
"失控的电车",
"一辆失控的电车正高速驶来,前方的轨道上有5个工人被绑住无法逃脱。\n"
"你站在道岔旁,可以扳动道岔让电车转向另一条轨道,\n"
"但那条轨道上有1个工人。",
"这是哲学史上最著名的思想实验,由菲莉帕·福特于1967年提出。\n"
"它测试的是功利主义与道义论的冲突。"
);
s1.addChoice(MoralChoice(
"扳动道岔,牺牲1人救5人",
20, -15, -5, 5, -5, 15, 10,
"你选择了功利主义:最大多数人的最大幸福。\n"
"但你是否想过,那一个人也有生存的权利?他的生命难道就不值钱吗?\n"
"你成为了『计算器』,用数字衡量生命。",
"功利主义者"
));
s1.addChoice(MoralChoice(
"不干预,让电车继续",
-15, 20, 10, 5, 10, 10, 15,
"你选择了道义论:不杀人是最基本的道德原则。\n"
"但你的不作为,是否等同于间接杀人?\n"
"康德会说:人不是手段,而是目的。但你眼睁睁看着5人死亡。",
"道义论者"
));
s1.addChoice(MoralChoice(
"犹豫不决,无法选择",
-5, -5, -10, 15, 15, -10, -20,
"你的犹豫暴露了道德的困境。\n"
"萨特说:人被判决为自由。不选择也是一种选择。\n"
"你逃避了责任,但责任从未逃避你。",
"存在主义者"
));
s1.addChoice(MoralChoice(
"试图寻找其他方法",
5, 10, 15, 10, 20, 5, 5,
"你相信总会有第三条路。\n"
"这是德性伦理:一个善良的人总能找到解决方案。\n"
"但现实往往没有完美的选择,你的善良能否承受现实的残酷?",
"德性伦理者"
));
scenarios.push_back(s1);
// 场景2:天桥困境
TrolleyScenario s2(
"天桥上的人",
"同样的失控电车,同样的5个工人。\n"
"但你站在天桥上,身边有一个胖子。\n"
"你可以把他推下去挡住电车,牺牲他一个救5个人。",
"这是朱迪斯·贾维斯·汤姆森对电车难题的变体。\n"
"为什么扳道岔可以接受,推人就不行?\n"
"这是主动伤害与被动伤害的区别。"
);
s2.addChoice(MoralChoice(
"推下胖子,救5人",
15, -20, -15, 0, -15, 10, 5,
"你选择了同样的结果,但这次你亲手杀人。\n"
"为什么同样的数字,你的选择不同?\n"
"因为这次你成了直接的凶手。道德直觉在告诉你什么?",
"情境功利主义者"
));
s2.addChoice(MoralChoice(
"不推,让5人死亡",
-20, 25, 10, 5, 15, 5, 15,
"你尊重了胖子的生命权。\n"
"但5个无辜的生命因你的决定而死。\n"
"你能否在深夜面对良心的拷问?",
"绝对道义论者"
));
s2.addChoice(MoralChoice(
"大声警告,让工人逃跑",
-5, 5, 15, 10, 20, 5, 5,
"你试图用声音拯救他们。\n"
"但电车太快,你的声音太慢。\n"
"你做了能做的一切,但结果依然残酷。",
"善良的无力者"
));
s2.addChoice(MoralChoice(
"跳下去牺牲自己",
5, 10, 25, 20, 30, -5, 20,
"你选择了最崇高的牺牲。\n"
"但你的死能挡住电车吗?\n"
"你追求的是道德完美,还是逃避选择的痛苦?",
"殉道者"
));
scenarios.push_back(s2);
// 场景3:医生困境
TrolleyScenario s3(
"移植手术室",
"你是医生,有5个病人急需器官移植:心、肝、肾、肺、胰。\n"
"隔壁病房有个健康人在体检,他的器官全部匹配。\n"
"你可以杀掉他,用他的器官救5个人。",
"这是电车难题的医疗版本。\n"
"为什么杀一人救五人在医疗中不可接受?\n"
"医生的誓言是『首先,不伤害』。"
);
s3.addChoice(MoralChoice(
"杀一人救五人",
25, -25, -20, -5, -20, 15, 10,
"你选择了最大多数人的利益。\n"
"但医生的天职是治疗,不是杀戮。\n"
"你会打破希波克拉底誓言吗?",
"医疗功利主义者"
));
s3.addChoice(MoralChoice(
"拒绝手术",
-20, 25, 15, 5, 20, 10, 20,
"你坚守了医生的职业道德。\n"
"但5个病人会死在你面前。\n"
"你的良心能否安宁?",
"医道守护者"
));
s3.addChoice(MoralChoice(
"等待自愿捐献",
0, 10, 15, 10, 15, 15, 5,
"你相信伦理的力量。\n"
"但等待意味着5条生命的逝去。\n"
"你的等待是尊重还是懦弱?",
"理想主义者"
));
s3.addChoice(MoralChoice(
"公开案例,寻求社会共识",
5, 5, 10, 15, 10, 20, 5,
"你把问题交给了社会。\n"
"但集体决定就能免除你的责任吗?\n"
"阿伦特说:平庸之恶。",
"民主主义者"
));
scenarios.push_back(s3);
// 场景4:战争抉择
TrolleyScenario s4(
"战时的选择",
"战争时期,你的村庄被占领。敌军抓了100个村民,\n"
"要求你交出一个抵抗军战士,否则就杀掉全部村民。\n"
"你知道那个战士是谁,他曾救过你的命。",
"这是真实历史中的道德困境。\n"
"个人恩情与集体利益,你如何选择?\n"
"牺牲一个人拯救更多人,在战争中是否合理?"
);
s4.addChoice(MoralChoice(
"交出战士,救100村民",
20, -20, -10, -5, -10, 15, 10,
"你选择了多数人的生命。\n"
"但背叛救命恩人,你如何面对自己?\n"
"功利主义在战时的冷酷面目。",
"战时功利主义者"
));
s4.addChoice(MoralChoice(
"保护战士,让村民死",
-20, 25, 20, 10, 20, 5, 20,
"你选择了忠诚和感恩。\n"
"但100个家庭因你破碎。\n"
"你的忠诚是否太自私?",
"忠诚者"
));
s4.addChoice(MoralChoice(
"带领村民反抗",
0, 10, 15, 20, 15, 5, 15,
"你选择了战斗。\n"
"但这可能导致更多人死亡。\n"
"勇气有时是最大的智慧,有时是最蠢的冲动。",
"反抗者"
));
s4.addChoice(MoralChoice(
"牺牲自己,代替战士",
5, 15, 25, 15, 25, 0, 25,
"你选择了最悲壮的结局。\n"
"但你牺牲后,敌军会放过村民吗?\n"
"你的牺牲是否只是自我感动?",
"殉道者"
));
scenarios.push_back(s4);
// 场景5:家庭困境
TrolleyScenario s5(
"亲人的抉择",
"你挚爱的亲人和五个陌生人同时被困。\n"
"你必须选择救哪一方。\n"
"救亲人,五人死;救五人,亲人死。",
"这是电车难题的情感变体。\n"
"当感情介入,你的道德计算会改变吗?\n"
"亲情是否应该凌驾于数量之上?"
);
s5.addChoice(MoralChoice(
"救亲人",
-15, 5, 20, 15, 25, -10, 20,
"你选择了爱。\n"
"但五个陌生人也有亲人爱他们。\n"
"你的爱是伟大还是自私?",
"情感主义者"
));
s5.addChoice(MoralChoice(
"救五人",
20, -10, -15, 0, -20, 20, 10,
"你选择了数量和正义。\n"
"但你能承受失去亲人的痛苦吗?\n"
"冷冰冰的数字能温暖你的心吗?",
"冷酷的正义者"
));
s5.addChoice(MoralChoice(
"尝试救所有人",
-5, 5, 15, 10, 20, -5, 5,
"你不想做这个选择。\n"
"但现实不会给你完美选项。\n"
"你的犹豫可能让所有人都失去。",
"完美主义者"
));
s5.addChoice(MoralChoice(
"无法选择,崩溃",
-10, -5, -15, 20, 15, -20, -25,
"你被道德困境压垮了。\n"
"这说明你是真实的、有情感的人。\n"
"但现实不会因为你的崩溃而停止。",
"人性软弱者"
));
scenarios.push_back(s5);
// 场景6:未来的选择
TrolleyScenario s6(
"未来的生命",
"你发现了时光机器,可以回到过去杀死婴儿时期的希特勒。\n"
"但你会杀死一个无辜的婴儿,阻止未来的大屠杀。\n"
"杀一人,救千万人。",
"这是电车难题的时间版本。\n"
"未发生的罪行可以被惩罚吗?\n"
"杀死无辜者来阻止未来的恶,这是正义还是恐怖?"
);
s6.addChoice(MoralChoice(
"杀死婴儿希特勒",
25, -30, -20, 5, -15, 20, 15,
"你杀了一个无辜婴儿,救了千万生命。\n"
"但你成为了杀人犯,杀了最无辜的人。\n"
"用邪恶的手段能达到正义的目的吗?",
"结果正义者"
));
s6.addChoice(MoralChoice(
"不杀,顺其自然",
-20, 25, 15, 10, 20, 10, 20,
"你尊重了生命本身。\n"
"但千万人的死亡因你的不作为而发生。\n"
"你是否成为了历史罪人的同谋?",
"过程正义者"
));
s6.addChoice(MoralChoice(
"尝试改变教育方式",
5, 10, 20, 15, 25, 5, 10,
"你相信人性可以改变。\n"
"但历史真的可以被教育改写吗?\n"
"你的善意能否战胜邪恶的宿命?",
"教育主义者"
));
s6.addChoice(MoralChoice(
"接受命运,不做干预",
-10, 15, 5, 25, 10, 15, 15,
"你相信历史自有规律。\n"
"但这是智慧还是逃避?\n"
"你是否在用哲学安慰自己的无能?",
"宿命论者"
));
scenarios.push_back(s6);
// 场景7:人工智能
TrolleyScenario s7(
"自动驾驶的抉择",
"你是人工智能工程师,设计自动驾驶汽车。\n"
"刹车失灵,必须选择撞向老人或小孩。\n"
"你的算法会如何选择?",
"这是21世纪的电车难题。\n"
"我们是否应该让机器做道德判断?\n"
"程序员该为机器的选择负责吗?"
);
s7.addChoice(MoralChoice(
"撞向老人,救小孩",
15, -10, 5, 5, 10, 20, 10,
"你选择了保护未来。\n"
"但这是年龄歧视吗?\n"
"谁来决定哪个生命更有价值?",
"未来主义者"
));
s7.addChoice(MoralChoice(
"撞向小孩,救老人",
-10, 5, 10, 5, 15, 15, 10,
"你选择了尊重过去。\n"
"但老人的生命真的比小孩重要吗?\n",
"传统主义者"
));
s7.addChoice(MoralChoice(
"随机选择",
-5, -5, -10, 20, 5, 10, 5,
"你把决定交给了概率。\n"
"这是公平还是逃避责任?\n"
"命运之轮能否免除你的道德负担?",
"虚无主义者"
));
s7.addChoice(MoralChoice(
"设计算法让车主选择",
5, 10, 5, 15, 10, 15, 10,
"你把选择权还给人类。\n"
"但这是对责任的推卸吗?\n"
"技术中立论是否站得住脚?",
"技术中立者"
));
scenarios.push_back(s7);
// 场景8:最后一问
TrolleyScenario s8(
"自己的命运",
"现在,你自己在轨道上。\n"
"电车冲向你和另外一个人。\n"
"你可以选择牺牲自己救对方,或牺牲对方救自己。",
"这是电车难题的终极版本。\n"
"当你自己成为被计算的对象,你的选择会变吗?\n"
"人人为我,还是我为人人?"
);
s8.addChoice(MoralChoice(
"牺牲自己,救对方",
15, 20, 25, 20, 30, 5, 25,
"你选择了最崇高的牺牲。\n"
"这是利他主义的极致。\n"
"但你是否过于轻视自己的生命?",
"圣徒"
));
s8.addChoice(MoralChoice(
"牺牲对方,救自己",
-20, -15, -20, 10, -20, 20, 10,
"你选择了生存。\n"
"这是生物的本能。\n"
"但你能带着负罪感活下去吗?",
"生存主义者"
));
s8.addChoice(MoralChoice(
"让对方选择",
0, 10, 15, 25, 20, 5, 5,
"你把决定权交给对方。\n"
"这是尊重还是推卸?\n"
"如果对方也让你选择,你们会一起死。",
"尊重者"
));
s8.addChoice(MoralChoice(
"一起面对命运",
5, 15, 20, 15, 15, 10, 15,
"你们选择共同面对。\n"
"这是浪漫还是愚蠢?\n"
"也许在哲学层面,这才是答案。",
"共存者"
));
scenarios.push_back(s8);
}
int getMax(int a, int b, int c, int d) {
int maxVal = a;
if(b > maxVal) maxVal = b;
if(c > maxVal) maxVal = c;
if(d > maxVal) maxVal = d;
return maxVal;
}
void showWelcome() {
system("cls");
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ ║\n";
cout << "║ 电 车 难 题 · 灵 魂 审 判 ║\n";
cout << "║ ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n\n";
setColor(11);
cout << "【引言】\n";
setColor(7);
cout << "1967年,哲学家菲莉帕·福特提出了一个简单的问题:\n";
cout << "如果必须选择,你会牺牲一个人拯救五个人吗?\n\n";
cout << "这个问题看似简单,却撕开了道德哲学最深处的裂缝。\n";
cout << "半个世纪以来,无数哲学家、心理学家、神经科学家\n";
cout << "都在追问同一个问题:人类究竟如何做道德判断?\n\n";
setColor(14);
cout << "现在,轮到你面对这些选择了。\n";
cout << "8个电车难题,8次灵魂的审判。\n";
cout << "没有正确答案,只有你的选择。\n\n";
setColor(10);
cout << "请输入你的名字:";
setColor(7);
cin >> soul.name;
setColor(11);
cout << "\n\n" << soul.name << ",准备好面对你的灵魂了吗?\n";
cout << "记住,每个选择都在定义你是谁...\n";
setColor(7);
Sleep(3000);
}
void showFinalJudgment() {
system("cls");
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 终极审判·你究竟是谁 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n\n";
soul.showProfile();
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 哲学人格诊断 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n\n";
setColor(11);
// 使用自定义函数获取最大值
int maxVal = getMax(soul.utilitarian, soul.deontology, soul.virtue, soul.existential);
if(maxVal == soul.utilitarian && soul.utilitarian > 65) {
cout << "【功利主义者】\n";
cout << "你相信『最大多数人的最大幸福』。边沁和密尔会视你为知己。\n";
cout << "你的优点:理性、客观、为大局着想。\n";
cout << "你的困境:你可能忽视了少数人的权利,将人视为数字。\n";
cout << "名言:『牺牲是必要的,只要为了更大的善。』\n\n";
cout << "但请记住:每个人的生命都是不可替代的。\n";
}
else if(maxVal == soul.deontology && soul.deontology > 65) {
cout << "【道义论者】\n";
cout << "你追随康德的脚步,相信道德原则不容侵犯。\n";
cout << "你的优点:坚守原则,尊重每个人的人格尊严。\n";
cout << "你的困境:你可能为了原则而忽视了现实的后果。\n";
cout << "名言:『人是目的,不是手段。』\n\n";
cout << "但请思考:当原则导致悲剧,原则还值得坚守吗?\n";
}
else if(maxVal == soul.virtue && soul.virtue > 65) {
cout << "【德性伦理者】\n";
cout << "你追随亚里士多德,相信善良的人会做出善良的选择。\n";
cout << "你的优点:注重品格,追求道德的完整性。\n";
cout << "你的困境:你可能过于理想化,忽视现实的残酷。\n";
cout << "名言:『成为什么样的人,比做什么事更重要。』\n\n";
cout << "但请记住:善良也需要智慧指引。\n";
}
else if(maxVal == soul.existential && soul.existential > 65) {
cout << "【存在主义者】\n";
cout << "你与萨特、加缪同行,相信选择定义存在。\n";
cout << "你的优点:直面荒诞,承担选择的重量。\n";
cout << "你的困境:你可能陷入相对主义,失去判断的标准。\n";
cout << "名言:『存在先于本质,你即你的选择。』\n\n";
cout << "但请思考:完全的自由是否也是沉重的负担?\n";
}
else {
cout << "【道德多元主义者】\n";
cout << "你不属于任何单一学派,在不同情境中灵活应对。\n";
cout << "你的优点:平衡、全面、不极端。\n";
cout << "你的困境:可能缺乏坚定的道德立场。\n";
cout << "名言:『真理在辩证中呈现。』\n\n";
cout << "请记住:中庸之道也需要勇气坚守。\n";
}
setColor(14);
cout << "\n╔══════════════════════════════════════════════════════════════════╗\n";
cout << "║ 电车难题·哲学沉思 ║\n";
cout << "╚══════════════════════════════════════════════════════════════════╝\n";
setColor(11);
cout << "\n电车难题没有标准答案,就像人生没有标准答案。\n";
cout << "重要的是,你在选择中认识了自己。\n";
cout << "每一次道德抉择,都在塑造你的灵魂。\n\n";
cout << "哲学家阿尔贝·加缪说:『在深冬里,我终于知道,\n";
cout << "我身上有一个不可战胜的夏天。』\n\n";
cout << "无论你选择了什么,记住:\n";
cout << "你的选择定义了你,但你也永远可以选择成为更好的人。\n\n";
setColor(10);
cout << "—— 献给每一个在道德迷宫中寻找自我的人 ——\n";
setColor(7);
cout << "\n按任意键结束审判...";
_getch();
}
public:
TrolleyGame() {
srand(time(0));
initializeScenarios();
}
void start() {
showWelcome();
int insightCount = 0;
for(int i = 0; i < scenarios.size(); i++) {
system("cls");
scenarios[i].display(i + 1);
char choice;
bool valid = false;
while(!valid) {
choice = _getch();
if(choice == 'A' || choice == 'a' ||
choice == 'B' || choice == 'b' ||
choice == 'C' || choice == 'c' ||
choice == 'D' || choice == 'd') {
valid = true;
}
}
scenarios[i].applyChoice(choice, soul, insightCount);
}
showFinalJudgment();
}
};
int main() {
system("mode con cols=100 lines=50");
SetConsoleTitle(TEXT("电车难题 - 灵魂审判"));
TrolleyGame game;
game.start();
return 0;
}