Не проверял, но что–то близко к этому должно нарисовать коробочку:
uses
Crt;
begin
GotoXY(2, 2);
Write(Chr(218) + Chr (196) + Chr (196) + Chr(191));
GotoXY(2, 3);
Write(Chr(179) + ' ' + Chr(179));
GotoXY(2, 4);
Write(Chr(179) + ' ' + Chr(179));
GotoXY(2, 5);
Write(Chr(192) + Chr (196) + Chr (196) + Chr(217));
end.
Чтобы сделать интерактив, обычно нужно сделать главный цикл. Например, объявить логическую переменную, присвоить ей True, затем сделать цикл while, проверяя в начале цикла, истинна ли эта переменная.
В этом цикле также должна быть задержка, чтобы время в игре шло более менее стабильно. Допустим, это будет Delay(100);
Также в цикле должны проверяться нажатия клавиш. Проверку нажатия клавиш можно сделать через if KeyPressed или while KeyPressed, и если есть нажатые клавиши, то считать их можно при помощи ReadKey. Первым делом надо сделать выход из игры по нажатию Esc. Если ReadKey = Chr(27), то присваиваем логической переменной из того, что выше, False, и программа вывалится из цикла.
Также в цикле должен быть вывод на экран. В графическом режиме EGA это было несколько муторно, надо было постоянно переключать страницы, стирать на неактивных страницах спрайты в их старом положении и рисовать в новом. В текстовом режиме всё должно работать быстро, как пуля, и можно просто делать полную перерисовку. Хотя я бы рекомендовал сначала отрисовать всё в буфере в памяти, а потом выводить на экран, иначе спрайты могут мерцать.
Буфер — это в простейшем случае массив массивов символов. И для тайлов может потребоваться массив массивов. В общем случае тайлы в символы отображаются движком, и у тайла какие–то свойства могут быть типа как у стены раздамаженность. Так что под клетку карты можно объявить запись, и из их этих записей сделать массив массивов в глобальной переменной. А при отрисовке сначала рисовать в буфере кусочек карты, а потом на этом кусочке рисовать спрайты. Начинать, впрочем, можно с массива массива символов, как у буфера.
Под спрайты можно завести запись, и из этих записей сделать одномерный массив в глобальной переменной. Массив делается с запасом, но использоваться будет только его часть, и нужна ещё одна глобальная переменная «количество спрайтов», чтобы игра могла знать, сколько реально первых элементов массива активны.
На стадии отрисовки в буфер спрайты рисуются после тайлов. Но кроме того, чтобы их отрисовать, нужно ещё обработать их игровую логику.
И на этом вроде бы всё.
У меня, таким образом, набрались такие стадии:
- Отрисовка в буфер тайлов
- Отрисовка в буфер спрайтов
- Отрисовка из буфера на экран
- Пауза
- Обработка игровой механики спрайтов
- Обработка нажатых клавиш
Их можно менять местами, но в общем случае главные циклы в играх выглядят как–то так.