IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Помощь начинающему, Нужна помощь в освоении Pascal'я
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


Всем доброго времени суток! Решил ознакомится со столь удивительной вещью, как Pascal! Но проблема в том, что я не знаю с чего начать! По этому, я обращаюсь к великим гуру и прошу наставить на путь истинный. Все, что касается этой темы приветствуется.
P.S: Все, что надо для начало работы я скачал, мне нужен только учебный материал.


--------------------
Пора убить в себе человека...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 188
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Если в текстовом режиме, то через модуль Crt. Курсор по экрану перемещается процедурой GotoXY, затем на экран выводятся символы самым обычным Write. Графика в текстовом режиме рисуется символами псевдографики, их коды можно посмотреть в таблице 866. Чтобы получить символ с каким–то номером, можно воспользоваться функцией Chr, либо написать их номер после решётки. Переключать цвет можно при помощи TextColor и TextBackground. Перед началом игры имеет смысл переключить режим при помощи TextMode(C80 + Font8x8), чтобы знакоместо стало более квадратным, и можно было уместить больше информации на экране.

Не проверял, но что–то близко к этому должно нарисовать коробочку:

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 это было несколько муторно, надо было постоянно переключать страницы, стирать на неактивных страницах спрайты в их старом положении и рисовать в новом. В текстовом режиме всё должно работать быстро, как пуля, и можно просто делать полную перерисовку. Хотя я бы рекомендовал сначала отрисовать всё в буфере в памяти, а потом выводить на экран, иначе спрайты могут мерцать.

Буфер — это в простейшем случае массив массивов символов. И для тайлов может потребоваться массив массивов. В общем случае тайлы в символы отображаются движком, и у тайла какие–то свойства могут быть типа как у стены раздамаженность. Так что под клетку карты можно объявить запись, и из их этих записей сделать массив массивов в глобальной переменной. А при отрисовке сначала рисовать в буфере кусочек карты, а потом на этом кусочке рисовать спрайты. Начинать, впрочем, можно с массива массива символов, как у буфера.

Под спрайты можно завести запись, и из этих записей сделать одномерный массив в глобальной переменной. Массив делается с запасом, но использоваться будет только его часть, и нужна ещё одна глобальная переменная «количество спрайтов», чтобы игра могла знать, сколько реально первых элементов массива активны.

На стадии отрисовки в буфер спрайты рисуются после тайлов. Но кроме того, чтобы их отрисовать, нужно ещё обработать их игровую логику.

И на этом вроде бы всё.

У меня, таким образом, набрались такие стадии:
  1. Отрисовка в буфер тайлов
  2. Отрисовка в буфер спрайтов
  3. Отрисовка из буфера на экран
  4. Пауза
  5. Обработка игровой механики спрайтов
  6. Обработка нажатых клавиш

Их можно менять местами, но в общем случае главные циклы в играх выглядят как–то так.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Faust VIII   Помощь начинающему   6.02.2016 12:40
Федосеев Павел   Есть хорошая книга "Песни о Паскале" - т…   6.02.2016 14:29
Faust VIII   Есть хорошая книга "Песни о Паскале" - …   6.02.2016 15:01
Faust VIII   Еще вопрос. А каким паскалем лучше пользоваться? В…   6.02.2016 17:44
OCTAGRAM   Хороший Паскаль называется Ада. На худой конец Del…   6.02.2016 18:11
Faust VIII   Хороший Паскаль называется Ада. А можно продемон…   6.02.2016 21:54
OCTAGRAM   А можно продемонстрировать хоть одну игру на этом …   7.02.2016 7:25
Федосеев Павел   Лучший пистолет - который в руке. Чем можете польз…   6.02.2016 22:57
Faust VIII   Лучший пистолет - который в руке. Чем можете поль…   6.02.2016 23:18
Faust VIII   OCTAGRAM, Где найти компилятор для ады? И где вооб…   7.02.2016 9:24
OCTAGRAM   Как правильно заметили, в шапке есть некоторая инф…   7.02.2016 13:18
Федосеев Павел   Faust VIII, выбирайте любой язык - хуже не будет. …   7.02.2016 13:40
OCTAGRAM   Использовать таски я не рекомендую без прочтения х…   7.02.2016 15:50
Faust VIII   Хмм, а теперь я совсем растерялся! Можно какое…   7.02.2016 16:41
OCTAGRAM   Среда разработки GPS для Ады написана на Аде. И та…   7.02.2016 19:25
Faust VIII   Решил помучить Паскаль. Напишу пару игр/программ, …   7.02.2016 22:31
OCTAGRAM   На pascal.net.ru разбросаны комментарии про аналог…   8.02.2016 6:32
Faust VIII   Как сделать окно вывода изображения на Паскале? Не…   8.02.2016 12:23
OCTAGRAM   Для какого из Паскалей? И если графика, то нужно г…   8.02.2016 14:22
Faust VIII   Для какого из Паскалей? турбо, просто вывести на…   8.02.2016 14:34
OCTAGRAM   Если в текстовом режиме, то через модуль Crt. Курс…   8.02.2016 18:17
Федосеев Павел   Сделаю небольшое отступление. В своём посте я прив…   8.02.2016 20:45
Faust VIII   Установи Free Pascal. http://math.ubbcluj.ro/~sb…   8.02.2016 23:28
Федосеев Павел   Если не лезть в свойства системы и не пытаться раб…   9.02.2016 0:10
OCTAGRAM   Насчёт жизненного цикла я бы не горячился. Кофейны…   9.02.2016 9:58
Faust VIII   Я все понял, но мне бы прям материал, с которым мо…   10.02.2016 20:12
OCTAGRAM   По консольным WinAPI справка на русском, например,…   11.02.2016 15:12


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.11.2019 8:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name