酷代码 AI
菜单
服务商

帮我写一个 C++ 2D 版我的世界代码

以下是一个简单的 C++ 2D 版我的世界风格的示例代码,这个代码创建了一个简单的 2D 世界,玩家可以在其中移动并破坏/放置方块。 ```cpp #include <iostream> #include <vector> // 定义方块类型 enum BlockType { AIR, GRASS, STONE }; // 定义世界类 class World { private: std::vector<std::vector<BlockType>> blocks; int width; int height; public: World(int w, int h) : width(w), height(h) { // 初始化世界,底部放置草方块,其余为空气 blocks.resize(height, std::vector<BlockType>(width, AIR)); for (int x = 0; x < width; ++x) { blocks[height - 1][x] = GRASS; } } // 获取指定位置的方块类型 BlockType getBlock(int x, int y) const { if (x >= 0 && x < width && y >= 0 && y < height) { return blocks[y][x]; } return AIR; } // 设置指定位置的方块类型 void setBlock(int x, int y, BlockType type) { if (x >= 0 && x < width && y >= 0 && y < height) { blocks[y][x] = type; } } // 打印世界 void print() const { for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { switch (blocks[y][x]) { case AIR: std::cout << ' '; break; case GRASS: std::cout << 'G'; break; case STONE: std::cout << 'S'; break; } } std::cout << std::endl; } } }; // 定义玩家类 class Player { private: int x; int y; World& world; public: Player(int startX, int startY, World& w) : x(startX), y(startY), world(w) {} // 移动玩家 void move(int dx, int dy) { int newX = x + dx; int newY = y + dy; if (world.getBlock(newX, newY) == AIR) { x = newX; y = newY; } } // 破坏方块 void breakBlock() { world.setBlock(x, y, AIR); } // 放置方块 void placeBlock(BlockType type) { world.setBlock(x, y, type); } // 获取玩家位置 int getX() const { return x; } int getY() const { return y; } }; int main() { // 创建一个 20x10 的世界 World world(20, 10); // 创建玩家,初始位置为 (5, 0) Player player(5, 0, world); while (true) { // 打印世界 world.print(); std::cout << "Player position: (" << player.getX() << ", " << player.getY() << ")" << std::endl; // 获取用户输入 std::cout << "Enter command (w: up, s: down, a: left, d: right, b: break, p: place): "; char command; std::cin >> command; switch (command) { case 'w': player.move(0, -1); break; case 's': player.move(0, 1); break; case 'a': player.move(-1, 0); break; case 'd': player.move(1, 0); break; case 'b': player.breakBlock(); break; case 'p': player.placeBlock(STONE); break; case 'q': return 0; } } return 0; } ``` 代码注释解释: 1. `BlockType` 枚举定义了不同的方块类型,如空气、草和石头。 2. `World` 类表示游戏世界,包含一个二维向量 `blocks` 来存储每个方块的类型。`getBlock` 和 `setBlock` 方法用于获取和设置指定位置的方块类型,`print` 方法用于打印当前世界的状态。 3. `Player` 类表示玩家,包含玩家的位置和对世界的引用。`move` 方法用于移动玩家,`breakBlock` 方法用于破坏方块,`placeBlock` 方法用于放置方块。 4. `main` 函数创建了一个世界和玩家,并进入一个循环,不断打印世界状态,获取用户输入并执行相应的操作。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 边界检查:在访问世界的方块时,要确保坐标在合法范围内,避免越界访问导致程序崩溃。 2. 输入验证:用户输入可能包含无效字符,需要进行适当的验证,以避免程序出现异常行为。 3. 内存管理:如果代码规模扩大,要注意内存的使用,避免内存泄漏和过度分配。 [2025-08-27 20:34:08 | AI写代码神器 | 1292点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]