В WinAPI, среди множества прочих, есть функция GetConsoleOutput, которая возвращает текущее содержимое (символы и их цвета) указанной области консоли. Сигнатура:
Код: Выделить всё
BOOL WINAPI ReadConsoleOutput(
__in HANDLE hConsoleOutput,
__out PCHAR_INFO lpBuffer,
__in COORD dwBufferSize,
__in COORD dwBufferCoord,
__inout PSMALL_RECT lpReadRegion
);
В этой функции массив структур CHAR_INFO, описывающих символ, записывается в область памяти, предоставленную по указателю lpBuffer. Выполняемая функцией задача достаточно схожа с задачей бурно обсуждаемой GenMap; по меньшей их можно сравнить-свериться, в MS тоже наверняка не с потолка взяли.
Ок, до того, что область памяти, куда будет записана карта, надо передавать в библиотеку, методом тыка дошли =) На самом деле, ну по крайней мере мне так кажется, это вообще единственно разумный способ. Ведь черт его знает, как и откуда память была выделена и кто потом за нее будет ответственный. Бывает, библиотеки предоставляют еще и функцию для освобождения памяти, но тогда может пострадать кроссплатформенность -- в самом простом случае какой-нибудь язык со сборщиком мусора может попросту подмести отданный в его ведение блок памяти, а может и проигнорировать.
Второй момент, который странно, что еще никто не заметил -- это какбы CHAR_INFO. Слабо верится, что библиотеке навсегда хватит восьми бит на одну ячейку карты. Стены всегда будут одинаковые? Стен с царапинами, обшарпанных и заляпанных не предвидится? Расставленные по уровню факелы всегда будут одного цвета и яркости? Вода в ручейке одной глубины?
Кроме того, в ячеках карты рано или поздно появятся предметы; казалось бы, при чем тут генератор уровней, но астролябия в подземелье, кучи готовой городской еды в джунглях и прочие преступления против тематики? Не спорю, полноценная работа с предметами -- это прерогатива самой игры, я же имею в виду что-то типа классов предметов и своеобразных предметных уников. При генерации карты у генератора есть куда больше информации о том, что это за ячейка-место-область и он может куда качественнее расставить предметы или вообще сгенерировать комнату с охраной вокруг какого-нибудь артефакта подороже. Что, в свою очередь, подталкивает к мысли, что генератор неплохо бы как-нибудь параметризовать при вызове: насколько пустынна или еще чего-нибудь местность (в игре с небольшими уровнями, если мы двигается от города в лес, логично сделать один-два промежуточных, переходных), сколько на уровне тех или иных ключевых мест. Попасть на уровень, по трем тайлам опознать тип местности и точно знать, что на этом уровне два алтаря в разных углах? С другой стороны, полный рандом на усмотрение генератора тоже нехорошо -- в одной игре алтарь на каждом уровне может быть непозволительной роскошью, в то время как в другой они являются сюжетно обоснованным расходным материалом.
Я к тому, что char, byte или даже unsigned long long -- это несерьезно для проекта с хоть какими-то амбициями.