1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Помощь начинающему, Нужна помощь в освоении Pascal'я
Всем доброго времени суток! Решил ознакомится со столь удивительной вещью, как Pascal! Но проблема в том, что я не знаю с чего начать! По этому, я обращаюсь к великим гуру и прошу наставить на путь истинный. Все, что касается этой темы приветствуется. P.S: Все, что надо для начало работы я скачал, мне нужен только учебный материал.
Если в текстовом режиме, то через модуль Crt. Курсор по экрану перемещается процедурой GotoXY, затем на экран выводятся символы самым обычным Write. Графика в текстовом режиме рисуется символами псевдографики, их коды можно посмотреть в таблице 866. Чтобы получить символ с каким–то номером, можно воспользоваться функцией Chr, либо написать их номер после решётки. Переключать цвет можно при помощи TextColor и TextBackground. Перед началом игры имеет смысл переключить режим при помощи TextMode(C80 + Font8x8), чтобы знакоместо стало более квадратным, и можно было уместить больше информации на экране.
Не проверял, но что–то близко к этому должно нарисовать коробочку:
Чтобы сделать интерактив, обычно нужно сделать главный цикл. Например, объявить логическуюпеременную, присвоить ей True, затем сделать цикл while, проверяя в начале цикла, истинна ли эта переменная.
В этом цикле также должна быть задержка, чтобы время в игре шло более менее стабильно. Допустим, это будет Delay(100);
Также в цикле должны проверяться нажатия клавиш. Проверку нажатия клавиш можно сделать через ifKeyPressed или whileKeyPressed, и если есть нажатые клавиши, то считать их можно при помощи ReadKey. Первым делом надо сделать выход из игры по нажатию Esc. Если ReadKey = Chr(27), то присваиваем логической переменной из того, что выше, False, и программа вывалится из цикла.
Также в цикле должен быть вывод на экран. В графическом режиме EGA это было несколько муторно, надо было постоянно переключать страницы, стирать на неактивных страницах спрайты в их старом положении и рисовать в новом. В текстовом режиме всё должно работать быстро, как пуля, и можно просто делать полную перерисовку. Хотя я бы рекомендовал сначала отрисовать всё в буфере в памяти, а потом выводить на экран, иначе спрайты могут мерцать.
Буфер — это в простейшем случае массивмассивовсимволов. И для тайлов может потребоваться массив массивов. В общем случае тайлы в символы отображаются движком, и у тайла какие–то свойства могут быть типа как у стены раздамаженность. Так что под клетку карты можно объявить запись, и из их этих записей сделать массив массивов в глобальной переменной. А при отрисовке сначала рисовать в буфере кусочек карты, а потом на этом кусочке рисовать спрайты. Начинать, впрочем, можно с массива массива символов, как у буфера.
Под спрайты можно завести запись, и из этих записей сделать одномерный массив в глобальной переменной. Массив делается с запасом, но использоваться будет только его часть, и нужна ещё одна глобальная переменная «количество спрайтов», чтобы игра могла знать, сколько реально первых элементов массива активны.
На стадии отрисовки в буфер спрайты рисуются после тайлов. Но кроме того, чтобы их отрисовать, нужно ещё обработать их игровую логику.
И на этом вроде бы всё.
У меня, таким образом, набрались такие стадии:
Отрисовка в буфер тайлов
Отрисовка в буфер спрайтов
Отрисовка из буфера на экран
Пауза
Обработка игровой механики спрайтов
Обработка нажатых клавиш
Их можно менять местами, но в общем случае главные циклы в играх выглядят как–то так.
--------------------
If you want to get to the top, you have to start at the bottom