#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <cstring>
#include <chrono>
#include <thread>
#include <windows.h>
using namespace std;
// ===================== 全局常量 =====================
// 基础属性
const int MAX_BASE_HEALTH = 20; // 初始最大生命值
const int MAX_HUNGER = 20; // 最大饥饿值
const int MAX_SATURATION = 5; // 初始最大饱和度
const int EXP_PER_LEVEL = 100; // 每级基础经验
const int DAY_DURATION = 10; // 白天时长(游戏回合)
const int NIGHT_DURATION = 5; // 夜晚时长(游戏回合)
// 物品类型枚举(扩展版,补充缺失的枚举)
enum ItemType {
// 基础资源
ITEM_WOOD, ITEM_STONE, ITEM_IRON_ORE, ITEM_GOLD_ORE, ITEM_DIAMOND_ORE,
ITEM_COAL, ITEM_REDSTONE, ITEM_LAPIS, ITEM_EMERALD, ITEM_CLAY, ITEM_SAND, ITEM_WOOL,
ITEM_STRING, ITEM_FLINT, ITEM_FEATHER, ITEM_LEATHER,
// 加工资源
ITEM_PLANK, ITEM_STICK, ITEM_IRON_INGOT, ITEM_GOLD_INGOT, ITEM_DIAMOND,
ITEM_GLASS, ITEM_BRICK, ITEM_OBSIDIAN, ITEM_COBBLESTONE,
// 食物
ITEM_APPLE, ITEM_BREAD, ITEM_COOKED_BEEF, ITEM_RAW_BEEF, ITEM_CARROT,
ITEM_POTATO, ITEM_COOKED_POTATO, ITEM_MELON, ITEM_SWEET_BERRIES,
ITEM_ROTTEN_FLESH, // 补充缺失的腐肉枚举
// 工具(镐/斧/锹/锄)
TOOL_WOODEN_PICKAXE, TOOL_STONE_PICKAXE, TOOL_IRON_PICKAXE, TOOL_DIAMOND_PICKAXE,
TOOL_WOODEN_AXE, TOOL_STONE_AXE, TOOL_IRON_AXE, TOOL_DIAMOND_AXE,
TOOL_WOODEN_SHOVEL, TOOL_STONE_SHOVEL, TOOL_IRON_SHOVEL, TOOL_DIAMOND_SHOVEL,
TOOL_WOODEN_HOE, TOOL_STONE_HOE, TOOL_IRON_HOE, TOOL_DIAMOND_HOE,
// 武器
WEAPON_WOODEN_SWORD, WEAPON_STONE_SWORD, WEAPON_IRON_SWORD, WEAPON_DIAMOND_SWORD,
WEAPON_BOW, WEAPON_ARROW, WEAPON_TRIDENT,
// 防具
ARMOR_IRON_HELMET, ARMOR_IRON_CHESTPLATE, ARMOR_IRON_LEGGINGS, ARMOR_IRON_BOOTS,
ARMOR_DIAMOND_HELMET, ARMOR_DIAMOND_CHESTPLATE, ARMOR_DIAMOND_LEGGINGS, ARMOR_DIAMOND_BOOTS,
// 建筑方块
BLOCK_WOOD, BLOCK_STONE, BLOCK_BRICK, BLOCK_GLASS, BLOCK_OBSIDIAN,
BLOCK_CHEST, BLOCK_FURNACE, BLOCK_CRAFTING_TABLE, BLOCK_BED,
// 特殊物品
ITEM_POTION_HEAL, ITEM_POTION_SPEED, ITEM_ENCHANTMENT_TABLE, ITEM_ANVIL,
ITEM_GUNPOWDER, // 补充缺失的火药枚举
ITEM_DRAGON_EGG, // 补充缺失的龙蛋枚举
// 任务物品
ITEM_QUEST_EMERALD, ITEM_QUEST_DIAMOND,
// 占位符
ITEM_UNKNOWN
};
// 生物类型枚举
enum EntityType {
// 被动生物
ENTITY_COW, ENTITY_PIG, ENTITY_SHEEP, ENTITY_CHICKEN, ENTITY_VILLAGER, ENTITY_WOLF,
// 敌对生物
ENTITY_ZOMBIE, ENTITY_SKELETON, ENTITY_CREEPER, ENTITY_SPIDER, ENTITY_ENDERMAN,
// BOSS
ENTITY_ENDER_DRAGON,
// 中立生物
ENTITY_IRON_GOLEM
};
// 生物群系枚举
enum BiomeType {
BIOME_FOREST, BIOME_PLAINS, BIOME_MOUNTAINS, BIOME_DESERT, BIOME_JUNGLE,
BIOME_SWAMP, BIOME_TAIGA, BIOME_SNOWY_TAIGA, BIOME_OCEAN, BIOME_NETHER, BIOME_END
};
// 天气类型枚举
enum WeatherType {
WEATHER_CLEAR, WEATHER_RAIN, WEATHER_THUNDER, WEATHER_SNOW
};
// 难度枚举
enum Difficulty {
DIFFICULTY_PEACEFUL, DIFFICULTY_EASY, DIFFICULTY_NORMAL, DIFFICULTY_HARD
};
// 成就枚举
enum AchievementType {
ACHIEVEMENT_FIRST_WOOD, ACHIEVEMENT_FIRST_STONE, ACHIEVEMENT_FIRST_IRON,
ACHIEVEMENT_FIRST_DIAMOND, ACHIEVEMENT_BUILD_SHELTER, ACHIEVEMENT_DEFEAT_ZOMBIE,
ACHIEVEMENT_DEFEAT_ENDER_DRAGON, ACHIEVEMENT_MAX
};
// 任务状态枚举
enum QuestStatus {
QUEST_NOT_STARTED, QUEST_IN_PROGRESS, QUEST_COMPLETED, QUEST_FAILED
};
// ===================== 工具函数 =====================
// 物品类型转字符串
string itemTypeToString(ItemType type) {
switch (type) {
case ITEM_WOOD: return "木头";
case ITEM_STONE: return "石头";
case ITEM_IRON_ORE: return "铁矿石";
case ITEM_GOLD_ORE: return "金矿石";
case ITEM_DIAMOND_ORE: return "钻石矿";
case ITEM_COAL: return "煤炭";
case ITEM_PLANK: return "木板";
case ITEM_STICK: return "木棍";
case ITEM_IRON_INGOT: return "铁锭";
case ITEM_DIAMOND: return "钻石";
case ITEM_APPLE: return "苹果";
case ITEM_RAW_BEEF: return "生牛肉";
case ITEM_COOKED_BEEF: return "熟牛肉";
case ITEM_ROTTEN_FLESH: return "腐肉"; // 补充腐肉字符串转换
case ITEM_GUNPOWDER: return "火药"; // 补充火药字符串转换
case ITEM_DRAGON_EGG: return "龙蛋"; // 补充龙蛋字符串转换
case TOOL_WOODEN_PICKAXE: return "木镐";
case TOOL_STONE_PICKAXE: return "石镐";
case TOOL_IRON_PICKAXE: return "铁镐";
case TOOL_DIAMOND_PICKAXE: return "钻石镐";
case TOOL_WOODEN_AXE: return "木斧";
case TOOL_IRON_AXE: return "铁斧";
case WEAPON_WOODEN_SWORD: return "木剑";
case WEAPON_IRON_SWORD: return "铁剑";
case WEAPON_DIAMOND_SWORD: return "钻石剑";
case ARMOR_IRON_HELMET: return "铁头盔";
case ARMOR_IRON_CHESTPLATE: return "铁胸甲";
case BLOCK_CRAFTING_TABLE: return "工作台";
case BLOCK_FURNACE: return "熔炉";
case BLOCK_BED: return "床";
default: return "未知物品";
}
}
// 生物类型转字符串
string entityTypeToString(EntityType type) {
switch (type) {
case ENTITY_COW: return "牛";
case ENTITY_PIG: return "猪";
case ENTITY_SHEEP: return "羊";
case ENTITY_ZOMBIE: return "僵尸";
case ENTITY_SKELETON: return "骷髅";
case ENTITY_CREEPER: return "爬行者";
case ENTITY_ENDER_DRAGON: return "末影龙";
default: return "未知生物";
}
}
// 补充:生物群系转字符串(缺失的函数)
string biomeTypeToString(BiomeType type) {
switch (type) {
case BIOME_FOREST: return "森林";
case BIOME_PLAINS: return "平原";
case BIOME_MOUNTAINS: return "山地";
case BIOME_DESERT: return "沙漠";
case BIOME_JUNGLE: return "丛林";
case BIOME_SWAMP: return "沼泽";
case BIOME_TAIGA: return "针叶林";
case BIOME_SNOWY_TAIGA: return "积雪针叶林";
case BIOME_OCEAN: return "海洋";
case BIOME_NETHER: return "下界";
case BIOME_END: return "末地";
default: return "未知生物群系";
}
}
// 补充:天气类型转字符串(缺失的函数)
string weatherTypeToString(WeatherType type) {
switch (type) {
case WEATHER_CLEAR: return "晴朗";
case WEATHER_RAIN: return "下雨";
case WEATHER_THUNDER: return "雷雨";
case WEATHER_SNOW: return "下雪";
default: return "未知天气";
}
}
// 随机数生成
int randomInt(int min, int max) {
return rand() % (max - min + 1) + min;
}
// 延迟函数(模拟游戏动画)
void wait(int ms) {
this_threadsleep_for(chronomilliseconds(ms));
}
// 清屏函数(跨平台)
void clearScreen() {
#ifdef _WIN32
system("cls");
#else
system("clear");
#endif
}
// ===================== 物品结构体 =====================
struct Item {
string name; // 名称
ItemType type; // 类型
int durability; // 当前耐久
int maxDurability; // 最大耐久
int quantity; // 数量
int stackSize; // 最大堆叠数
bool isEnchanted; // 是否附魔
string enchantment; // 附魔效果
int damage; // 伤害值
int defense; // 防御值
int hungerRestore; // 恢复饥饿值
int healthRestore; // 恢复生命值
bool isEdible; // 是否可食用
bool isCraftable; // 是否可制作
bool isSmeltable; // 是否可烧制
};
// ===================== 配方结构体 =====================
struct CraftingRecipe {
Item result; // 制作结果
map<ItemType, int> ingredients; // 原料(类型+数量)
bool isShapeless; // 是否无序配方
};
// ===================== 烧制配方结构体 =====================
struct SmeltingRecipe {
ItemType input; // 输入物品
ItemType output; // 输出物品
int inputQty; // 输入数量
int outputQty; // 输出数量
int cookTime; // 烧制时间(秒)
};
// ===================== 物品管理器 =====================
class ItemManager {
private:
vector<CraftingRecipe> craftingRecipes; // 制作配方
vector<SmeltingRecipe> smeltingRecipes; // 烧制配方
public:
ItemManager() {
initCraftingRecipes();
initSmeltingRecipes();
}
};
// ===================== 玩家类 =====================
class Player {
private:
string username; // 用户名
int health; // 当前生命值
int maxHealth; // 最大生命值
int hunger; // 饥饿值
int saturation; // 饱和度
int experience; // 经验值
int level; // 等级
Difficulty difficulty; // 难度
bool hasShelter; // 是否有庇护所
int daysSurvived; // 生存天数
public:
vector<Item> inventory; // 背包
};
// ===================== 生物类 =====================
class Entity {
private:
EntityType type; // 生物类型
int health; // 生命值
int maxHealth; // 最大生命值
int damage; // 伤害值
bool isHostile; // 是否敌对
bool isDead; // 是否死亡
public:
Entity(EntityType t) : type(t), isDead(false) {
// 初始化生物属性
switch (type) {
case ENTITY_COW:
maxHealth = 10; damage = 0; isHostile = false; break;
case ENTITY_ZOMBIE:
maxHealth = 20; damage = 3; isHostile = true; break;
case ENTITY_SKELETON:
maxHealth = 20; damage = 4; isHostile = true; break;
case ENTITY_CREEPER:
maxHealth = 20; damage = 6; isHostile = true; break;
case ENTITY_ENDER_DRAGON:
maxHealth = 200; damage = 10; isHostile = true; break;
default:
maxHealth = 10; damage = 0; isHostile = false; break;
}
health = maxHealth;
}
};
// ===================== 世界类 =====================
class World {
private:
int day; // 当前天数
bool isNight; // 是否夜晚
int timeCounter; // 时间计数器
WeatherType weather; // 当前天气
BiomeType currentBiome; // 当前生物群系
vector<Entity> entities; // 当前生物列表
public:
World() : day(1), isNight(false), timeCounter(0), weather(WEATHER_CLEAR) {
// 初始化生物群系
currentBiome = (BiomeType)randomInt(0, 5);
// 生成初始生物
spawnEntities();
}
};
// ===================== 游戏主类 =====================
class MinecraftGame {
private:
Player player; // 玩家
World world; // 世界
ItemManager itemManager; // 物品管理器
bool isRunning; // 游戏运行状态
public:
MinecraftGame(string username = "玩家") : player(username), isRunning(true) {
srand((unsigned int)time(0)); // 初始化随机数
cout << "欢迎来到我的世界生存游戏!" << endl;
cout << "你的目标是生存下去,收集资源,击败末影龙!" << endl;
}
};
// ===================== 主函数 =====================
int main() {
SetConsoleOutputCP(65001); // 加上这一行
SetConsoleCP(65001); // 再加这一行
cout << "请输入你的用户名:";
string username;
cin >> username;
MinecraftGame game(username);
game.run();
return 0;
}