#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;

void fix() {
    system("chcp 936 > nul");
    system("cls");
}

// ==================== 枚举定义(整合所有版本,去重扩容) ====================
enum Block {
    AIR, STONE, DIRT, GRASS_BLOCK, LOG, PLANKS, COBBLESTONE,
    IRON_BLOCK, GOLD_BLOCK, DIAMOND_BLOCK, NETHERITE_BLOCK,
    CRAFTING_TABLE, FURNACE, CHEST, SMITHING_TABLE,
    REDSTONE_WIRE, REDSTONE_TORCH, LEVER, STONE_BUTTON, WOODEN_BUTTON,
    PRESSURE_PLATE, PISTON, STICKY_PISTON, DISPENSER, DROPPER,
    ANCIENT_DEBRIS, SCULK_SENSOR, SHULKER_BOX, END_PORTAL_FRAME, PALE_LOG,
    TRIAL_CHEST // 试炼宝箱(保留核心特色)
};

enum Item {
    // 基础材料
    LOG_ITEM, PLANKS_ITEM, COBBLESTONE_ITEM,
    IRON_INGOT, GOLD_INGOT, DIAMOND, NETHERITE_INGOT,
    // 武器/工具
    WOOD_SWORD, STONE_SWORD, IRON_SWORD, GOLD_SWORD, DIAMOND_SWORD, NETHERITE_SWORD,
    WOOD_PICKAXE, STONE_PICKAXE, IRON_PICKAXE, GOLD_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE,
    WOOD_AXE, STONE_AXE, IRON_AXE, DIAMOND_AXE, NETHERITE_AXE,
    // 盔甲
    IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS,
    DIAMOND_HELMET, DIAMOND_CHESTPLATE, DIAMOND_LEGGINGS, DIAMOND_BOOTS,
    NETHERITE_HELMET, NETHERITE_CHESTPLATE, NETHERITE_LEGGINGS, NETHERITE_BOOTS,
    // 食物
    BREAD, APPLE, STEAK, COOKED_PORKCHOP, CARROT, POTATO, GOLDEN_APPLE, HONEY_BOTTLE,
    // 红石物品
    REDSTONE, REDSTONE_TORCH_ITEM, LEVER_ITEM, BUTTON_ITEM, PISTON_ITEM,
    // 锻造/特殊
    STICK, SMITHING_TABLE_ITEM, NETHERITE_UPGRADE_TEMPLATE,
    SHULKER_SHELL, ELYTRA, CREAKING_MEMBRANE, SILENT_BOOTS, PALE_PLANKS,
    // 掉落物
    ARROW, GUNPOWDER, ENDER_PEARL, SCULK_CATALYST, DRAGON_EGG,
    // 试炼厅专属
    SPEAR, HAMMER, DENSE_HAMMER, WIND_BULLET, HEAVY_CORE, DENSE_TEMPLATE,
    EMPTY // 占位符
};

enum Mob {
    // 主世界被动
    PIG, COW, CHICKEN, SHEEP, HORSE, DONKEY, MULE, LLAMA, WOLF, CAT, OCELOT,
    FOX, PANDA, BEE, DOLPHIN, TURTLE, AXOLOTL, GOAT, CAMEL, SNIFFER, FROG, RABBIT,
    VILLAGER, IRON_GOLEM, SNOW_GOLEM,
    // 主世界敌对
    ZOMBIE, HUSK, DROWNED, SKELETON, STRAY, SPIDER, CAVE_SPIDER, CREEPER, SLIME, MAGMA_CUBE,
    WITCH, PHANTOM, VINDICATOR, PILLAGER, EVOKER, VEX, RAVAGER, ENDERMAN, ENDERMITE,
    GUARDIAN, ELDER_GUARDIAN, ALLAY, WARDEN,
    // 下界
    ZOMBIFIED_PIGLIN, PIGLIN, PIGLIN_BRUTE, GHAST, BLAZE, HOGLIN, ZOGLIN, STRIDER, WITHER_SKELETON,
    // 末地
    ENDER_DRAGON, SHULKER,
    // 新增
    CREAKING
};

enum Enchant {
    SHARPNESS, UNBREAKING, POWER, WIND, STORM // 保留附魔系统
};

enum SmithingTemplate { NETHERITE_UPGRADE, ARMOR_TRIM, WEAPON_TRIM };

// ==================== 玩家结构体(整合所有状态) ====================
struct Player {
    int hp = 20, max_hp = 20;
    int hunger = 20, max_hunger = 20;
    int exp = 0, level = 0;
    int x = 5, y = 60, z = 5; // 扩容Z轴,保留Y高度用于重锤伤害

    // 状态标记
    bool has_silent_boots = false;
    bool in_pale_garden = false;
    bool is_sneaking = false;
    bool trial_boss_defeated = false; // 试炼BOSS击败标记

    // 物品/方块/附魔
    map<Item, int> inv;
    map<Block, int> blocks;
    map<Item, map<Enchant, int>> ench;
    map<SmithingTemplate, int> templates;
    
    // 红石系统
    map<Block, bool> powered;
    map<Block, int> redstone_signal;

    int world[20][20][20]; // 扩容为20×20×20三维世界
} p;

// ==================== 名称映射(整合所有版本,去重) ====================
map<Block, string> block_name = {
    {AIR,"空气"},{STONE,"石头"},{DIRT,"泥土"},{GRASS_BLOCK,"草方块"},
    {LOG,"原木"},{PLANKS,"木板"},{COBBLESTONE,"圆石"},
    {IRON_BLOCK,"铁块"},{GOLD_BLOCK,"金块"},{DIAMOND_BLOCK,"钻石块"},{NETHERITE_BLOCK,"下界合金块"},
    {CRAFTING_TABLE,"工作台"},{FURNACE,"熔炉"},{CHEST,"箱子"},{SMITHING_TABLE,"锻造台"},
    {REDSTONE_WIRE,"红石粉"},{REDSTONE_TORCH,"红石火把"},{LEVER,"拉杆"},{STONE_BUTTON,"石头按钮"},
    {WOODEN_BUTTON,"木质按钮"},{PRESSURE_PLATE,"压力板"},{PISTON,"活塞"},{STICKY_PISTON,"粘性活塞"},
    {DISPENSER,"发射器"},{DROPPER,"投掷器"},{ANCIENT_DEBRIS,"远古残骸"},{SCULK_SENSOR,"幽匿传感器"},
    {SHULKER_BOX,"潜影盒"},{END_PORTAL_FRAME,"末地传送门框架"},{PALE_LOG,"苍白原木"},
    {TRIAL_CHEST,"试炼宝箱"}
};

map<Item, string> item_name = {
    // 基础材料
    {LOG_ITEM,"原木"},{PLANKS_ITEM,"木板"},{COBBLESTONE_ITEM,"圆石"},
    {IRON_INGOT,"铁锭"},{GOLD_INGOT,"金锭"},{DIAMOND,"钻石"},{NETHERITE_INGOT,"下界合金锭"},
    // 武器/工具
    {WOOD_SWORD,"木剑"},{STONE_SWORD,"石剑"},{IRON_SWORD,"铁剑"},{GOLD_SWORD,"金剑"},
    {DIAMOND_SWORD,"钻石剑"},{NETHERITE_SWORD,"下界合金剑"},
    {WOOD_PICKAXE,"木镐"},{STONE_PICKAXE,"石镐"},{IRON_PICKAXE,"铁镐"},{GOLD_PICKAXE,"金镐"},
    {DIAMOND_PICKAXE,"钻石镐"},{NETHERITE_PICKAXE,"下界合金镐"},
    {WOOD_AXE,"木斧"},{STONE_AXE,"石斧"},{IRON_AXE,"铁斧"},{DIAMOND_AXE,"钻石斧"},{NETHERITE_AXE,"下界合金斧"},
    // 盔甲
    {IRON_HELMET,"铁头盔"},{IRON_CHESTPLATE,"铁胸甲"},{IRON_LEGGINGS,"铁护腿"},{IRON_BOOTS,"铁靴"},
    {DIAMOND_HELMET,"钻石头盔"},{DIAMOND_CHESTPLATE,"钻石胸甲"},{DIAMOND_LEGGINGS,"钻石护腿"},{DIAMOND_BOOTS,"钻石靴"},
    {NETHERITE_HELMET,"下界合金头盔"},{NETHERITE_CHESTPLATE,"下界合金胸甲"},{NETHERITE_LEGGINGS,"下界合金护腿"},{NETHERITE_BOOTS,"下界合金靴"},
    // 食物
    {BREAD,"面包"},{APPLE,"苹果"},{STEAK,"牛排"},{COOKED_PORKCHOP,"熟猪排"},{CARROT,"胡萝卜"},{POTATO,"土豆"},
    {GOLDEN_APPLE,"金苹果"},{HONEY_BOTTLE,"蜂蜜瓶"},
    // 红石物品
    {REDSTONE,"红石粉"},{REDSTONE_TORCH_ITEM,"红石火把"},{LEVER_ITEM,"拉杆"},{BUTTON_ITEM,"按钮"},{PISTON_ITEM,"活塞"},
    // 锻造/特殊
    {STICK,"木棍"},{SMITHING_TABLE_ITEM,"锻造台"},{NETHERITE_UPGRADE_TEMPLATE,"下界合金升级模板"},
    {SHULKER_SHELL,"潜影壳"},{ELYTRA,"鞘翅"},{CREAKING_MEMBRANE,"嘎吱膜"},{SILENT_BOOTS,"静音靴"},{PALE_PLANKS,"苍白木板"},
    // 掉落物
    {ARROW,"箭"},{GUNPOWDER,"火药"},{ENDER_PEARL,"末影珍珠"},{SCULK_CATALYST,"幽匿催化体"},{DRAGON_EGG,"龙蛋"},
    // 试炼厅专属
    {SPEAR,"长矛"},{HAMMER,"重锤"},{DENSE_HAMMER,"致密重锤"},{WIND_BULLET,"风弹"},
    {HEAVY_CORE,"沉重核心"},{DENSE_TEMPLATE,"致密模板"},
    {EMPTY,"无"}
};

map<Mob, string> mob_name = {
    {PIG,"猪"},{COW,"牛"},{CHICKEN,"鸡"},{SHEEP,"羊"},{HORSE,"马"},{DONKEY,"驴"},{MULE,"骡"},{LLAMA,"羊驼"},
    {WOLF,"狼"},{CAT,"猫"},{FOX,"狐狸"},{PANDA,"熊猫"},{BEE,"蜜蜂"},{DOLPHIN,"海豚"},{TURTLE,"海龟"},
    {AXOLOTL,"美西螈"},{GOAT,"山羊"},{CAMEL,"骆驼"},{SNIFFER,"嗅探兽"},{FROG,"青蛙"},{RABBIT,"兔子"},
    {VILLAGER,"村民"},{IRON_GOLEM,"铁傀儡"},{SNOW_GOLEM,"雪傀儡"},
    {ZOMBIE,"僵尸"},{HUSK,"尸壳"},{DROWNED,"溺尸"},{SKELETON,"骷髅"},{STRAY,"流浪者"},{SPIDER,"蜘蛛"},
    {CAVE_SPIDER,"洞穴蜘蛛"},{CREEPER,"苦力怕"},{SLIME,"史莱姆"},{WITCH,"女巫"},{PHANTOM,"幻翼"},
    {PILLAGER,"掠夺者"},{VINDICATOR,"卫道士"},{EVOKER,"唤魔者"},{VEX,"恼鬼"},{RAVAGER,"劫掠兽"},
    {ENDERMAN,"末影人"},{WARDEN,"监守者"},{GUARDIAN,"守卫者"},{ELDER_GUARDIAN,"远古守卫者"},
    {ZOMBIFIED_PIGLIN,"僵尸猪灵"},{PIGLIN,"猪灵"},{PIGLIN_BRUTE,"猪灵蛮兵"},{GHAST,"恶魂"},{BLAZE,"烈焰人"},
    {HOGLIN,"疣猪兽"},{ZOGLIN,"僵尸疣猪兽"},{STRIDER,"炽足兽"},{WITHER_SKELETON,"凋灵骷髅"},
    {ENDER_DRAGON,"末影龙"},{SHULKER,"潜影贝"},{CREAKING,"嘎吱怪"}
};

map<Enchant, string> ench_name = {
    {SHARPNESS,"锋利"},{UNBREAKING,"耐久"},{POWER,"力量"},{WIND,"风"},{STORM,"风暴"}
};

// ==================== 数值配置(整合所有版本) ====================
struct MobAttr {
    int hp;
    int attack;
    Item drop_item;
    int drop_count;
};
map<Mob, MobAttr> mob_attr = {
    {PIG,{10,0,COOKED_PORKCHOP,1}},
    {COW,{10,0,STEAK,1}},
    {CHICKEN,{4,0,EMPTY,0}},
    {ZOMBIE,{20,3,IRON_INGOT,1}},
    {SKELETON,{20,2,ARROW,2}},
    {CREEPER,{20,6,GUNPOWDER,2}},
    {ENDERMAN,{40,7,ENDER_PEARL,1}},
    {WARDEN,{500,30,SCULK_CATALYST,1}}, // 扩容血量,保留试炼BOSS核心
    {CREAKING,{80,15,CREAKING_MEMBRANE,2}},
    {ENDER_DRAGON,{2000,50,DRAGON_EGG,1}},
    {SHULKER,{30,4,SHULKER_SHELL,1}}
};

map<Item, int> base_dmg = {
    {WOOD_SWORD,4}, {STONE_SWORD,5}, {IRON_SWORD,7}, {GOLD_SWORD,4}, {DIAMOND_SWORD,8}, {NETHERITE_SWORD,10},
    {SPEAR,7}, {HAMMER,6}, {DENSE_HAMMER,12}, {WIND_BULLET,5}
};

// ==================== 核心工具函数(整合所有版本) ====================
// 判断是否在试炼厅(X8~12, Y8~12, Z5)
bool is_in_trial_hall() {
    return (p.x >=8 && p.x <=12 && p.y >=8 && p.y <=12 && p.z == 5);
}

// 初始化三维世界(生成石头+试炼厅+试炼宝箱)
void init_world() {
    // 初始全是石头
    for(int i=0;i<20;i++)
        for(int j=0;j<20;j++)
            for(int k=0;k<20;k++)
                p.world[i][j][k] = STONE;
    // 试炼厅区域改为空气
    for(int i=8;i<=12;i++)
        for(int j=8;j<=12;j++)
            p.world[i][j][5] = AIR;
    // 试炼宝箱放在试炼厅中心
    p.world[10][10][5] = TRIAL_CHEST;
}

// 饥饿消耗(整合新版饥饿逻辑)
void hunger_loss() {
    if (p.hunger > 0) p.hunger--;
    if (p.hunger == 0 && p.hp > 0) p.hp--;
    if (p.hp < 0) p.hp = 0;
}

// 初始化游戏(整合所有初始物品)
void init() {
    srand(time(0));
    init_world();
    // 整合所有版本的初始物品,避免空背包
    p.inv[LOG_ITEM] = 64;
    p.inv[PLANKS_ITEM] = 32;
    p.inv[IRON_INGOT] = 64;
    p.inv[GOLD_INGOT] = 32;
    p.inv[DIAMOND] = 20;
    p.inv[NETHERITE_INGOT] = 10;
    p.inv[REDSTONE] = 64;
    p.inv[REDSTONE_TORCH_ITEM] = 32;
    p.inv[LEVER_ITEM] = 16;
    p.inv[APPLE] = 32;
    p.inv[BREAD] = 64;
    p.inv[STEAK] = 16;
    p.inv[SPEAR] = 1;
    p.inv[HAMMER] = 1;
    p.inv[WIND_BULLET] = 16;
    p.templates[NETHERITE_UPGRADE] = 5;
    p.inv[CREAKING_MEMBRANE] = 8;
    p.inv[PALE_PLANKS] = 32;
}

// 打开试炼宝箱(需击败BOSS)
void open_trial_chest() {
    if (!is_in_trial_hall()) {
        cout << "? 不在试炼厅,无法打开试炼宝箱!\n";
        return;
    }
    if (p.world[p.y][p.x][p.z] != TRIAL_CHEST) {
        cout << "? 这里没有试炼宝箱!\n";
        return;
    }
    if (!p.trial_boss_defeated) {
        cout << "? 先击败试炼厅BOSS(监守者)才能开宝箱!\n";
        return;
    }

    // 宝箱奖励
    p.inv[DENSE_TEMPLATE] += 1;
    p.inv[HEAVY_CORE] += 3;
    p.inv[DIAMOND] += 5;
    p.world[p.y][p.x][p.z] = AIR; // 宝箱打开后消失
    cout << "?? 打开试炼宝箱!获得:致密模板×1 + 沉重核心×3 + 钻石×5\n";
}

// 计算重锤伤害(高度加成+风暴附魔)
int get_hammer_damage(Item hammer_type) {
    int damage = base_dmg[hammer_type] + p.y * 2; // Y高度每格+2伤害
    // 风暴附魔翻倍
    if (p.ench[hammer_type].count(STORM) && p.ench[hammer_type][STORM] >=1) {
        damage *= 2;
        cout << "? 风暴附魔触发!伤害翻倍!\n";
    }
    return damage;
}

// ==================== 游戏功能函数(整合所有版本) ====================
// 显示玩家状态(整合血条/饥饿/坐标/试炼厅/静音靴)
void status() {
    cout << "\n==================== 玩家状态 ====================\n";
    cout << "生命值: " << p.hp << "/" << p.max_hp << "  ";
    for(int i=0; i<p.hp/2; i++) cout << "?";
    for(int i=p.hp/2; i<10; i++) cout << "?";
    cout << "\n饥饿值: " << p.hunger << "/" << p.max_hunger << "  ";
    for(int i=0; i<p.hunger/2; i++) cout << "●";
    for(int i=p.hunger/2; i<10; i++) cout << "○";
    cout << "\n等级: " << p.level << " 经验: " << p.exp << " 坐标: X=" << p.x << " Y=" << p.y << " Z=" << p.z;
    if(is_in_trial_hall()) cout << " ?? 试炼厅";
    if(p.trial_boss_defeated) cout << " ? 已击败试炼BOSS";
    cout << "\n静音靴: " << (p.has_silent_boots ? "? 已装备" : "? 未装备");
    cout << "\n==================================================\n";
}

// 显示物品栏(分类展示,整合所有物品)
void inventory() {
    cout << "\n==================== 物品栏 ====================\n";
    cout << "[基础材料]\n";
    for (auto& i : p.inv) {
        if ((i.first >= LOG_ITEM && i.first <= NETHERITE_INGOT) || i.first == PALE_PLANKS) {
            if (i.second > 0) cout << item_name[i.first] << " x" << i.second << "\n";
        }
    }
    cout << "\n[武器/工具]\n";
    for (auto& i : p.inv) {
        if ((i.first >= WOOD_SWORD && i.first <= NETHERITE_AXE) || 
            i.first == SPEAR || i.first == HAMMER || i.first == DENSE_HAMMER) {
            if (i.second > 0) {
                cout << item_name[i.first];
                // 显示附魔
                if (p.ench.count(i.first)) {
                    cout << " [";
                    for (auto& ench_pair : p.ench[i.first]) {
                        cout << ench_name[ench_pair.first] << "I";
                    }
                    cout << "]";
                }
                cout << " x" << i.second << "\n";
            }
        }
    }
    cout << "\n[红石物品]\n";
    for (auto& i : p.inv) {
        if (i.first >= REDSTONE && i.first <= PISTON_ITEM) {
            if (i.second > 0) cout << item_name[i.first] << " x" << i.second << "\n";
        }
    }
    cout << "\n[食物]\n";
    for (auto& i : p.inv) {
        if (i.first >= BREAD && i.first <= HONEY_BOTTLE) {
            if (i.second > 0) cout << item_name[i.first] << " x" << i.second << "\n";
        }
    }
    cout << "\n[试炼厅专属]\n";
    for (auto& i : p.inv) {
        if (i.first == HEAVY_CORE || i.first == DENSE_TEMPLATE || i.first == WIND_BULLET) {
            if (i.second > 0) cout << item_name[i.first] << " x" << i.second << "\n";
        }
    }
    cout << "==================================================\n";
}

// 移动(支持X/Y/Z轴,保留Y高度,移动消耗饥饿)
void move(char dir) {
    if (dir == 'w' && p.y > 0) p.y--;
    if (dir == 's' && p.y < 19) p.y++;
    if (dir == 'a' && p.x > 0) p.x--;
    if (dir == 'd' && p.x < 19) p.x++;
    if (dir == 'q' && p.z > 0) p.z--;
    if (dir == 'e' && p.z < 19) p.z++;

    // 进入试炼厅提示
    if (is_in_trial_hall()) {
        cout << "?? 进入【试炼厅】!击败监守者可解锁试炼宝箱!\n";
    }
    cout << "? 移动成功!当前坐标:X=" << p.x << " Y=" << p.y << " Z=" << p.z << "\n";
    
    // 移动消耗饥饿
    hunger_loss();
}

// 挖矿(三维坐标,支持挖试炼宝箱)
void mine() {
    Block current_block = (Block)p.world[p.y][p.x][p.z];
    if (current_block == AIR) {
        cout << "? 这里是空的,挖不到东西!\n";
        return;
    }

    // 挖试炼宝箱触发打开逻辑
    if (current_block == TRIAL_CHEST) {
        open_trial_chest();
        hunger_loss();
        return;
    }

    // 挖到方块存入方块栏
    p.blocks[current_block]++;
    p.world[p.y][p.x][p.z] = AIR;
    cout << "? 挖到:" << block_name[current_block] << "!\n";
    
    // 挖矿消耗饥饿
    hunger_loss();
}

// 放置方块
void place(string block_name_input) {
    // 查找要放置的方块
    Block target_block = AIR;
    bool block_exist = false;
    for (auto& block_pair : block_name) {
        if (block_pair.second == block_name_input) {
            target_block = block_pair.first;
            block_exist = true;
            break;
        }
    }

    if (!block_exist) {
        cout << "? 没有这个方块!\n";
        return;
    }

    // 检查是否有该方块
    if (p.blocks[target_block] <= 0) {
        cout << "? 没有足够的" << block_name_input << "!\n";
        return;
    }

    // 放置方块
    p.blocks[target_block]--;
    p.world[p.y][p.x][p.z] = target_block;
    cout << "? 放置:" << block_name_input << "成功!\n";
    hunger_loss();
}

// 丢弃物品
void drop(string item_name_input) {
    // 查找要丢弃的物品
    Item target_item = EMPTY;
    bool item_exist = false;
    for (auto& item_pair : item_name) {
        if (item_pair.second == item_name_input) {
            target_item = item_pair.first;
            item_exist = true;
            break;
        }
    }

    if (!item_exist) {
        cout << "? 没有这个物品!\n";
        return;
    }

    // 检查是否有该物品
    if (p.inv[target_item] <= 0) {
        cout << "? 没有这个物品可以丢弃!\n";
        return;
    }

    // 丢弃物品
    p.inv[target_item]--;
    cout << "? 丢弃:" << item_name_input << "成功!\n";
    hunger_loss();
}

// 合成系统(整合所有版本配方)
void craft(string target) {
    // 基础合成
    if (target == "木板") {
        if (p.inv[LOG_ITEM] >= 1) {
            p.inv[LOG_ITEM]--;
            p.inv[PLANKS_ITEM] += 4;
            cout << "? 1原木 → 4木板\n";
        } else cout << "? 缺原木\n";
    } else if (target == "木棍") {
        if (p.inv[PLANKS_ITEM] >= 2) {
            p.inv[PLANKS_ITEM] -= 2;
            p.inv[STICK] += 4;
            cout << "? 2木板 → 4木棍\n";
        } else cout << "? 缺木板\n";
    } else if (target == "红石火把") {
        if (p.inv[REDSTONE] >= 1 && p.inv[STICK] >= 1) {
            p.inv[REDSTONE]--;
            p.inv[STICK]--;
            p.inv[REDSTONE_TORCH_ITEM]++;
            cout << "? 红石+木棍 → 红石火把\n";
        } else cout << "? 缺红石或木棍\n";
    } else if (target == "木剑") {
        if (p.inv[PLANKS_ITEM] >= 2 && p.inv[STICK] >= 1) {
            p.inv[PLANKS_ITEM] -= 2;
            p.inv[STICK]--;
            p.inv[WOOD_SWORD]++;
            cout << "? 合成木剑\n";
        } else cout << "? 缺木板或木棍\n";
    } else if (target == "静音靴") {
        if (p.inv[CREAKING_MEMBRANE] >= 4) {
            p.inv[CREAKING_MEMBRANE] -= 4;
            p.has_silent_boots = true;
            cout << "? 合成静音靴!苍白树林完全静音\n";
        } else cout << "? 缺嘎吱膜\n";
    } else if (target == "锻造台") {
        if (p.inv[COBBLESTONE_ITEM] >= 4 && p.inv[IRON_INGOT] >= 2) {
            p.inv[COBBLESTONE_ITEM] -= 4;
            p.inv[IRON_INGOT] -= 2;
            p.inv[SMITHING_TABLE_ITEM]++;
            cout << "? 合成锻造台\n";
        } else cout << "? 缺圆石或铁锭\n";
    }
    // 试炼厅专属合成
    else if (target == "重锤") {
        if (p.inv[IRON_INGOT] >= 3 && p.inv[PLANKS_ITEM] >= 2) {
            p.inv[IRON_INGOT] -= 3;
            p.inv[PLANKS_ITEM] -= 2;
            p.inv[HAMMER]++;
            cout << "? 合成成功!获得重锤 ×1\n";
        } else {
            cout << "? 材料不足!需要铁锭 ×3 + 木板 ×2\n";
        }
    } else if (target == "致密重锤") {
        if (!is_in_trial_hall()) {
            cout << "? 必须在试炼厅内合成致密重锤!\n";
            return;
        }
        if (p.inv[HAMMER] >=1 && p.inv[HEAVY_CORE]>=1 && p.inv[DENSE_TEMPLATE]>=1) {
            p.inv[HAMMER]--;
            p.inv[HEAVY_CORE]--;
            p.inv[DENSE_TEMPLATE]--;
            p.inv[DENSE_HAMMER]++;
            cout << "? 合成成功!获得致密重锤 ×1\n";
        } else {
            cout << "? 材料不足!需要重锤 ×1 + 沉重核心 ×1 + 致密模板 ×1\n";
        }
    } else if (target == "长矛") {
        if (p.inv[PLANKS_ITEM]>=2 && p.inv[IRON_INGOT]>=1) {
            p.inv[PLANKS_ITEM]-=2;
            p.inv[IRON_INGOT]--;
            p.inv[SPEAR]++;
            cout << "? 合成成功!获得长矛 ×1\n";
        } else {
            cout << "? 材料不足!需要木板 ×2 + 铁锭 ×1\n";
        }
    } else {
        cout << "? 无此合成配方\n";
    }
    hunger_loss();
}

// 锻造系统(钻石剑→下界合金剑)
void smith() {
    if(p.inv[DIAMOND_SWORD] >= 1 && p.inv[NETHERITE_INGOT] >= 1 && p.templates[NETHERITE_UPGRADE] >= 1) {
        p.inv[DIAMOND_SWORD]--;
        p.inv[NETHERITE_INGOT]--;
        p.templates[NETHERITE_UPGRADE]--;
        p.inv[NETHERITE_SWORD]++;
        cout << "? 锻造成功:下界合金剑\n";
    } else {
        cout << "? 材料不足!需要钻石剑×1 + 下界合金锭×1 + 下界合金升级模板×1\n";
    }
    hunger_loss();
}

// 附魔风暴(致密重锤专属)
void enchant_storm() {
    if (!is_in_trial_hall()) {
        cout << "? 必须在试炼厅内附魔!\n";
        return;
    }
    if (p.inv[DENSE_HAMMER] < 1 || p.inv[DIAMOND] < 5) {
        cout << "? 材料不足!需要致密重锤 ×1 + 钻石 ×5\n";
        return;
    }

    // 消耗钻石,添加风暴附魔
    p.inv[DIAMOND] -= 5;
    p.ench[DENSE_HAMMER][STORM] = 1;
    cout << "? 成功给致密重锤附魔【风暴I】!\n";
    hunger_loss();
}

// 红石系统(激活拉杆/活塞)
void redstone_activate(string device) {
    if (device == "拉杆") {
        if (p.inv[LEVER_ITEM] >= 1) {
            p.inv[LEVER_ITEM]--;
            p.powered[LEVER] = true;
            p.redstone_signal[LEVER] = 15;
            p.powered[REDSTONE_WIRE] = true;
            p.redstone_signal[REDSTONE_WIRE] = 15;
            cout << "? 拉杆激活!红石信号:15\n";
        } else cout << "? 没有拉杆\n";
    } else if (device == "活塞") {
        if (p.powered[REDSTONE_WIRE] && p.inv[PISTON_ITEM] >= 1) {
            p.inv[PISTON_ITEM]--;
            cout << "? 活塞推出!\n";
        } else if (!p.powered[REDSTONE_WIRE]) {
            cout << "? 活塞未充能\n";
        } else {
            cout << "? 没有活塞\n";
        }
    } else {
        cout << "? 不支持该红石设备\n";
    }
    hunger_loss();
}

// 吃食物(整合新版逻辑,支持更多食物)
void eat(string food_name) {
    Item target_food = EMPTY;
    int hunger_add = 0;

    // 匹配食物
    if (food_name == "苹果") {
        target_food = APPLE;
        hunger_add = 4;
    } else if (food_name == "面包") {
        target_food = BREAD;
        hunger_add = 5;
    } else if (food_name == "牛排") {
        target_food = STEAK;
        hunger_add = 8;
    } else {
        cout << "? 不能吃这个东西!\n";
        return;
    }

    // 检查食物数量
    if (p.inv[target_food] < 1) {
        cout << "? 没有" << food_name << "了!\n";
        return;
    }

    // 吃食物恢复饥饿(不超过上限)
    p.inv[target_food]--;
    p.hunger += hunger_add;
    if (p.hunger > p.max_hunger) p.hunger = p.max_hunger;

    cout << "?? 吃了一个" << food_name << "!饥饿值+" << hunger_add << ",当前饥饿:" << p.hunger << "\n";
    hunger_loss();
}

// 发射风弹
void wind_shot() {
    if (p.inv[WIND_BULLET] < 1) {
        cout << "? 没有风弹了!\n";
        return;
    }

    p.inv[WIND_BULLET]--;
    cout << "??? 风弹发射!造成 5 点范围伤害,击飞周围生物!\n";
    p.hunger -= 2; // 风弹消耗更多饥饿
    hunger_loss();
}

// 战斗系统(整合所有版本,保留重锤高度伤害+试炼BOSS)
void fight(string mob_str) {
    // 匹配生物
    Mob mob;
    bool mob_exist = true;
    if (mob_str == "僵尸") mob = ZOMBIE;
    else if (mob_str == "骷髅") mob = SKELETON;
    else if (mob_str == "苦力怕") mob = CREEPER;
    else if (mob_str == "末影人") mob = ENDERMAN;
    else if (mob_str == "监守者") mob = WARDEN;
    else if (mob_str == "嘎吱怪") mob = CREAKING;
    else if (mob_str == "末影龙") mob = ENDER_DRAGON;
    else {
        cout << "? 不存在该生物\n";
        return;
    }

    // 监守者只在试炼厅出现
    if (mob == WARDEN && !is_in_trial_hall()) {
        cout << "? 监守者只在试炼厅内出现!\n";
        return;
    }

    MobAttr attr = mob_attr[mob];
    int damage = 1; // 默认拳头伤害

    // 判断使用的武器(优先级:致密重锤 > 普通重锤 > 长矛 > 剑 > 拳头)
    if (p.inv[DENSE_HAMMER] >= 1) {
        damage = get_hammer_damage(DENSE_HAMMER);
        cout << "?? 用致密重锤攻击!造成 " << damage << " 点伤害!\n";
    } else if (p.inv[HAMMER] >= 1) {
        damage = get_hammer_damage(HAMMER);
        cout << "?? 用重锤攻击!造成 " << damage << " 点伤害!\n";
    } else if (p.inv[SPEAR] >= 1) {
        damage = base_dmg[SPEAR];
        cout << "??? 用长矛攻击!造成 " << damage << " 点伤害!\n";
    } else if (p.inv[NETHERITE_SWORD] >= 1) {
        damage = base_dmg[NETHERITE_SWORD];
        cout << "??? 用下界合金剑攻击!造成 " << damage << " 点伤害!\n";
    } else if (p.inv[DIAMOND_SWORD] >= 1) {
        damage = base_dmg[DIAMOND_SWORD];
        cout << "??? 用钻石剑攻击!造成 " << damage << " 点伤害!\n";
    } else if (p.inv[IRON_SWORD] >= 1) {
        damage = base_dmg[IRON_SWORD];
        cout << "??? 用铁剑攻击!造成 " << damage << " 点伤害!\n";
    } else if (p.inv[WOOD_SWORD] >= 1) {
        damage = base_dmg[WOOD_SWORD];
        cout << "??? 用木剑攻击!造成 " << damage << " 点伤害!\n";
    } else {
        cout << "? 用拳头攻击!造成 " << damage << " 点伤害!\n";
    }

    // 生物剩余血量
    int mob_remaining_hp = attr.hp - damage;
    cout << "? 你攻击了 " << mob_name[mob] << "(剩余血量:" << (mob_remaining_hp > 0 ? mob_remaining_hp : 0) << ")\n";

    // 生物反击
    p.hp -= attr.attack;
    if (p.hp < 0) p.hp = 0;
    cout << "?? 受到 " << mob_name[mob] << " 反击,损失 " << attr.attack << " 点伤害!当前血量:" << p.hp << "\n";

    // 掉落物
    if (attr.drop_count > 0 && mob_remaining_hp <= 0) {
        p.inv[attr.drop_item] += attr.drop_count;
        cout << "?? 掉落:" << item_name[attr.drop_item] << " x" << attr.drop_count << "\n";
    }

    // 获得经验
    int exp_gain = attr.hp / 2;
    p.exp += exp_gain;
    p.level = p.exp / 100;
    cout << "? 获得 " << exp_gain << " 经验!等级:" << p.level << "\n";

    // 击败监守者解锁宝箱
    if (mob == WARDEN && mob_remaining_hp <= 0) {
        p.trial_boss_defeated = true;
        cout << "?? 恭喜!击败试炼厅BOSS(监守者)!试炼宝箱已解锁!\n";
    }

    // 玩家死亡
    if (p.hp == 0) {
        cout << "\n??  你被 " << mob_name[mob] << " 击败了!游戏结束!\n";
        exit(0);
    }

    hunger_loss();
}

// 帮助菜单(整合所有指令)
void help() {
    cout << "\n==================== 指令大全 ====================\n";
    cout << "基础指令:退出 | 帮助 | 状态 | 物品栏\n";
    cout << "移动指令:w(降Y) | a(左X) | s(升Y) | d(右X) | q(降Z) | e(升Z)\n";
    cout << "采集建造:挖矿 | 放置 [方块名] | 丢弃 [物品名]\n";
    cout << "合成指令:木板 | 木棍 | 红石火把 | 木剑 | 静音靴 | 锻造台 | 重锤 | 致密重锤 | 长矛\n";
    cout << "锻造指令:锻造(钻石剑→下界合金剑)\n";
    cout << "附魔指令:附魔风暴(致密重锤专属)\n";
    cout << "红石指令:红石 拉杆 | 红石 活塞\n";
    cout << "生存指令:吃 苹果 | 吃 面包 | 吃 牛排\n";
    cout << "战斗指令:打 僵尸 | 打 骷髅 | 打 监守者 | 打 嘎吱怪 | 打 末影龙 | 风弹\n";
    cout << "==================================================\n";
}

// ==================== 主函数(整合所有指令) ====================
int main() {
    fix();
    init();
    cout << "===== 我的世界 C++ 终极完整版 =====\n";
    cout << "? 三维世界 | ? 全生物/物品 | ? 红石系统 | ? 试炼厅 | ? 重锤高度伤害 | ? 饥饿/血条\n";
    cout << "输入「帮助」查看所有指令!\n\n";

    string cmd, arg;
    while (true) {
        cout << "> ";
        cin >> cmd;

        // 基础指令
        if (cmd == "退出") {
            cout << "?? 游戏结束!\n";
            break;
        }
        if (cmd == "帮助") help();
        if (cmd == "状态") status();
        if (cmd == "物品栏") inventory();

        // 移动指令(支持X/Y/Z轴)
        if (cmd == "w" || cmd == "a" || cmd == "s" || cmd == "d" || cmd == "q" || cmd == "e") move(cmd[0]);

        // 采集建造
        if (cmd == "挖矿") mine();
        if (cmd == "放置") { cin >> arg; place(arg); }
        if (cmd == "丢弃") { cin >> arg; drop(arg); }

        // 合成/锻造/附魔
        if (cmd == "合成") { cin >> arg; craft(arg); }
        if (cmd == "锻造") smith();
        if (cmd == "附魔风暴") enchant_storm();

        // 红石系统
        if (cmd == "红石") { cin >> arg; redstone_activate(arg); }

        // 生存指令
        if (cmd == "吃") { cin >> arg; eat(arg); }

        // 战斗指令
        if (cmd == "打") { cin >> arg; fight(arg); }
        if (cmd == "风弹") wind_shot();

        // 无效指令提示
        if (cmd != "退出" && cmd != "帮助" && cmd != "状态" && cmd != "物品栏" &&
            cmd != "w" && cmd != "a" && cmd != "s" && cmd != "d" && cmd != "q" && cmd != "e" &&
            cmd != "挖矿" && cmd != "放置" && cmd != "丢弃" && cmd != "合成" && cmd != "锻造" &&
            cmd != "附魔风暴" && cmd != "红石" && cmd != "吃" && cmd != "打" && cmd != "风弹") {
            cout << "? 未知指令!输入「帮助」查看所有可用指令\n";
        }
    }

    return 0;
}

5 条评论

  • 1