#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;
}