поэтому я работаю над созданием игрового движка, следуя некоторым учебникам YouTube. Я кодирую на C ++ и использую библиотеки текстур SDL2 и SDL2 для функциональности. Для генерации шума я использую заголовок A и .cpp, называемый Fast Noise, полученный от GitHub. .Cpp я использую, чтобы нарисовать карту ниже
#include "Map.h"#include "TextureManager.h"#include "FastNoise.h"
int lvl1[20][25] = {{ 0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
};
Map::Map()
{
dirt = TextureManager::LoadTexture("Assets/TileSets/Dirt.png");
grass = TextureManager::LoadTexture("Assets/TileSets/Grass.png");
water = TextureManager::LoadTexture("Assets/TileSets/Water.png");LoadMap(lvl1);
src.x = src.y = 0;
src.w = dest.w = 32;
src.h = dest.h = 32;
dest.x = dest.y = 0;
}
void Map::LoadMap(int arr[20][25])
{
for (int row = 0; row < 20; row++)
{
for (int column = 0; column < 25; column++)
{
map[row][column] = arr[row][column];
}
}}
void Map::DrawMap()
{
int type = 0;
for (int row = 0; row < 20; row++)
{
for (int column = 0; column < 25; column++)
{
type = map[row][column];
dest.x = column * 32;
dest.y = row * 32;
switch (type)
{
case 0:
TextureManager::Draw(water, src, dest);
break;
case 1:
TextureManager::Draw(grass, src, dest);
break;
case 2:
TextureManager::Draw(dirt, src, dest);default:
break;
}
}
}
}
Код для создания шума
FastNoise myNoise; // Create a FastNoise object
myNoise.SetNoiseType(FastNoise::SimplexFractal); // Set the desired noise
type
float heightMap[32][32]; // 2D heightmap to create terrain
for (int x = 0; x < 32; x++)
{
for (int y = 0; y < 32; y++)
{
heightMap[x][y] = myNoise.GetNoise(x,y);
}
}
Я борюсь с тем, как реализовать это так, чтобы вместо использования массива lvl1 int он сохранял и использовал значения, созданные шумом, для рисования ландшафта. Если по посту это не очевидно, я довольно новичок в программировании, созданный мной игровой движок достаточно функционален, но я хочу создать процедурно сгенерированный ландшафт, а не делать его вручную.
Задача ещё не решена.
Других решений пока нет …