( сам топик игрушки
https://vk.com/topic-97344238_34362285 )
вот не хочу тайловую карту делать
не то что не умею. криво это, имхо.
почему нельзя сделать с абсолютными координатами?
можно.
а чтобы уместить описание каждого объекта в 4 байта?
тоже можно, смотрим как.
у нас скрин 800*600, пусть будет 600*600, 200 отрежем для боковой панели упр-я
сколько "экранов" будет достаточно для игрового мира?
допустим, 50*50, это будет игровой мир площадью 2500 экранов 600*600
думаю, хватит.
смотрим как можно все это уместить.
под координаты объектов по X и Y можно отвести 15 бит, т.е. макс абсолютные координаты по X и по Y будут 32767, это даже 54 экрана по 600 пискелей влезет
свободные биты (их получается 2, с каждого 16-разрядного "слова" по биту, а всего у нас 2 "слова", 2*16 = 32 бита = 4 байта) - это же дофига данных можно уместить, целых 2^2=4 состояния, 00, 01, 11, 10 и в это можно втиснуть тип объекта
а объекты какие?
- здание
- юнит
- скопление металла (разрушенный юнит)
- что-то непроходимое, напр. скопление воды (нагромождение камней)*
* скопления металла так же непроходимы
теперь как рендерить уровень на экране или как обсчитывать механику уровня
огромная 54*54 экрана карта не что иное как (условно) космическое разреженное пространство, в которое можно уместить 16к объектов (чтобы в 64кб влезть, 16384 объекта *4 байта на объект=64к, условные 64к, понимаю, что можно и 64Мб, но нафига?)
вот возьмем например скопления металла
по началу, случайно раскидывам случайные по плотности скопления металла по карте
X и Y - случайны, тип объекта = скопление металла
что дальше?
создаем отдельный массив на скопления, в который кидаем X,Y,N, где N - плотность скопления (1 байт)
или же проще - номер объекта "скопление металла" в глобальной карте, по порядку его там нахождения
при этом конечно придется все время прочесывать эти 64к на перечисление объектов
.............
, отдельный байт под Z (высоту), и 1 байт на объекты, не?
продолжение следует