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