MC备份1

发布时间:2026/6/10 22:02:27

MC备份1 // 【修复1】所有头文件移到代码最顶部,禁止嵌套在函数内 #includeiostream #include GLFW/glfw3.h #include glm/gtc/noise.hpp #include unordered_map #include vector using namespace glm; using namespace std; // ================== 方块类型 ================== enum BlockID { AIR = 0, GRASS = 1, DIRT = 2, STONE = 3, BEDROCK = 4, WOOD = 5, LEAVES = 6, WATER = 7 }; struct Block { BlockID id = AIR; }; const int CHUNK_SIZE = 16; const int CHUNK_HEIGHT = 24; // 【新增】常量定义,提高可读性 struct Chunk { Block blocks[CHUNK_SIZE][CHUNK_HEIGHT][CHUNK_SIZE] = { AIR }; bool modified = false; }; unordered_mapivec3, Chunk world; // ================== 玩家系统 ================== vec3 cameraPos = vec3(0, 20, 0); vec3 cameraFront = vec3(0, 0, -1); vec3 cameraUp = vec3(0, 1, 0); float yaw = -90.0f, pitch = 0.0f; float lastX = 640.0f, lastY = 360.0f; bool firstMouse = true; float moveSpeed = 4.317f; float gravity = -19.8f; float jumpForce = 8.0f; float velocityY = 0.0f; bool onGround = false; float deltaTime = 0.0f; float lastFrame = 0.0f; // 物品栏 int hotbar[9] = { GRASS, DIRT, STONE, BEDROCK, WOOD, LEAVES, WATER, AIR, AIR }; int selectedSlot = 0; // ================== 立方体顶点 ================== float cubeVertices[] = { -0.5f,-0.5f,-0.5f, 0.5f,-0.5f,-0.5f, 0.5f, 0.5f,-0.5f, 0.5f, 0.5f,-0.5f, -0.5f, 0.5f,-0.5f, -0.5f,-0.5f,-0.5f, -0.5f,-0.5f, 0.5f, 0.5f,-0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f,-0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f,-0.5f, -0.5f,-0.5f,-0.5f, -0.5f,-0.5f,-0.5f, -0.5f,-0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,-0.5f, 0.5f,-0.5f,-0.5f, 0.5f,-0.5f,-0.5f, 0.5f,-0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f,-0.5f,-0.5f, 0.5f,-0.5f,-0.5f, 0.5f,-0.5f, 0.5f, 0.5f,-0.5f, 0.5f, -0.5f,-0.5f, 0.5f, -0.5f,-0.5f,-0.5f, -0.5f, 0.5f,-0.5f, 0.5f, 0.5f,-0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f,-0.5f }; // ================== 工具函数 ================== bool isAir(int x, int y, int z) { int cx = x / 16; int cy = y / CHUNK_HEIGHT; // 【修复3】Y坐标按区块高度计算 int cz = z / 16; if (!world.count({ cx, cy, cz })) return true; auto c = world[{ cx, cy, cz }]; int bx = x 15; int by = y % CHUNK_HEIGHT; // 【修复3】Y坐标取模,防止数组越界 int bz = z 15; // 边界判断 if(bx 0 || bx =16 || by 0 || by =CHUNK_HEIGHT || bz 0 || bz =16) return true; return c.blocks[bx][by][bz].id == AIR || c.blocks[bx][by][bz].id == WATER; } // 判断是否为实心方块(用于碰撞) bool isSolid(int x, int y, int z) { return !isAir(x, y, z); } int getHeight(int x, int z) { float n = glm::simplex(vec2(x * 0.017f, z * 0.017f)); return 10 + (int)(n * 5.0f); } // ================== 地形生成 ================== void generateChunk(int cx, int cz) { Chunk ch; for (int x = 0; x 16; x++) { for (int z = 0; z 16; z++) {

相关新闻