Po pierwsze potrzebujesz mapy kafelkowej, a po drugie implementacji. Jeśli chcesz stworzyć mapy to możesz albo ręcznie (w pliku txt wypisywać numerki) albo użyć jakiegoś generatora. Sam kiedyś napisałem takowy projekt na kolanie więc możesz skorzystać z gotowego:
https://forum.pasja-informatyki.pl/243762/edytor-map-kafelkowych-c-c%23-cr
Jeśli chodzi o implementację, to potrzebujesz klasy kafelka i mapy. W mapie przyda się jakiś kontener danych na kafelki (np. std::vector jeśli mowa o C++) i musisz wczytywać te dane z pliku tekstowego i w zależności od tego jaki aktualnie zasysasz numerek to tworzysz taką taki kafel na określonej pozycji.
Tutaj masz przykładowy kod stworzenia mapy kafelkowej, lecz z domyślną teksturą (stanem). Wystarczy, że przerobisz delikatnie jego działanie i będzie śmigać
void MapManager::createWorld(uint8_t defaultStateNumber)
{
for (int j = 0; j < unitWorldSize.y; j++)
{
for (int i = 0; i < unitWorldSize.x; i++)
{
map.emplace_back(sf::Vector2i{i,j}, cellDimensions, defaultStateNumber);
}
}
}
PS:
mapa przechowuje kafelki (Cell)
unitPosition (i oraz j) to numery pozycji, na których leży kafelek, do tego musisz dorzucić wymiary pojedynczego kafelka, dlatego dorzucam konstruktor Cell'a
object.setTexture(*mv::TypesManager::getInstance().getAtlasCache().get("data/textures/cellAtlas.png"));
if (!TypesManager::getInstance().isTypeExist(stateNumber))
{
Logger::Log(constants::error::stateSystem::STATE_DOES_NOT_EXIST, Logger::STREAM::BOTH, Logger::TYPE::ERROR);
state = constants::defaults::DEFAULT_STATE_NUMBER;
}
else
{
state = stateNumber;
object.setTextureRect(sf::IntRect(stateNumber*cellDimensions.x, 0, cellDimensions.x, cellDimensions.y));
}
object.setPosition(unitPosition.x*cellDimensions.x, unitPosition.y*cellDimensions.y);
object.setOrigin(object.getGlobalBounds().width / 2, object.getGlobalBounds().height / 2);
Pełny kod znajdziesz tutaj:
github