T74994.Minecraft方块世界
2025-09-20 19:16:26
发布于:北京
题目描述
你需要编写一个C++程序来模拟Minecraft中的简单世界生成。程序需要根据给定的种子值(seed)生成一个二维的方块世界,并输出该世界的俯视图。
世界由以下方块类型组成:
'G':草方块 (Grass)
'D':泥土 (Dirt)
'S':沙子 (Sand)
'W':水 (Water)
'B':基岩 (Bedrock)
输入格式
第一行包含三个整数:世界宽度w(5≤w≤50),世界高度h(5≤h≤50)和种子值s(0≤s≤1000)
第二行包含一个整数n(1≤n≤10),表示要生成的层数
输出格式
输出生成的世界俯视图,一个h×w的字符矩阵
每行代表世界的一行,字符之间用空格分隔
说明/提示
世界生成规则:
最外层必须是基岩(B)
从外向内,第n层是水(W)
第n+1层是沙子(S)
第n+2层是泥土(D)
最内层是草方块(G)
如果层数超过世界尺寸,则从外向内依次填充
可以使用取模运算和种子值s来增加随机性,例如:
对于坐标(i,j),可以使用(i*j+s)%5来决定是否替换默认方块类型
建议使用二维数组来存储世界数据
注意边界条件处理
代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
char determineBlock(int distance, int n, int i, int j, int seed) {
if (distance == 0) return 'B';
if (distance <= n) return 'W';
if (distance == n + 1) return 'S';
if (distance == n + 2) return 'D';
int randomFactor = (i * j + seed) % 5;
if (randomFactor == 0 && distance > n + 2) return 'G';
return distance > n + 2 ? 'G' : 'D';
}
void generateMinecraftWorld(int width, int height, int seed, int layers) {
vector<vector<char>> world(height, vector<char>(width));
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
int minDist = min({i, height-1-i, j, width-1-j});
world[i][j] = determineBlock(minDist, layers, i, j, seed);
}
}
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
cout << world[i][j];
if (j < width-1) cout << " ";
}
cout << endl;
}
}
int main() {
int width, height, seed, layers;
cin >> width >> height >> seed >> layers;
generateMinecraftWorld(width, height, seed, layers);
return 0;
}
输出:
B B B B B B B B B B
B W W W W W W W W B
B W W W W W W W W B
B W W W W W W W W B
B W W W W W W W W B
B W W W W W W W W B
B W W W W W W W W B
B B B B B B B B B B
这里空空如也
有帮助,赞一个