![]() |
![]() |
Lazzy |
![]() ![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: тьома Репутация: ![]() ![]() ![]() |
Привета!
Задача формулировалась преподом довольно размыто, поэтому может присутствовать некоторая вольность в выполнении, что не может не радовать. Смысл в том, чтоб написать на Pascal (к сожалению) игру, в которой есть кораблики, соревнующиеся между собой Препод седой уже, кстати. Он хотел там видеть возможность выбора направления ветра и хода корабликов галсами при встречном ветре, но реализовать управление парусами, по-моему, слишком сложно, а как без этого галсами ходить? Поэтому реализация мне видится так: вид сверху на остров либо замкнутый кольцевой канал, один кораблик с мотором, цель игры - управляя корабликом стрелками пройти дистанцию за наименьшее время. Если у кого-то возникнет желание помочь или вдруг есть какие-то наработки, буду очень признателен. Вот код: program MAPA3M;Тут нарисованы берега "лагуны" с островом посередине, вид сверху. Кораблик обозначен коричневой точкой и управляется с клавиатуры, это пока все =/ Как видите, нету навыка работы с процедурами, пишется сложно =/ Что конкретно неясно как реализовать: Как сделать чтоб кораблик при нажатиии клавиши начинал двигаться в направлении нажатой стрелки и не прекращал движение? Сейчас он двигается только, когда стрелка нажата. Можно ли сделать движение по диагонали? Сейчас судно движется только в четырех направлениях. Как реализовать крушение кораблика при столкновении с берегом? (Видимо, нужно написать функцию, возвращающую значение цвета пикселов вокруг кораблика, и если эти значения равны значению цвету берега - корабль тонет) Как с помощью Pascal реализовать счетчик времени? Ведь цель игры - пройти дистанцию за наименьшее время. Искал в учебниках, а там работа только с временем системы. Как сделать, чтоб игрок вводил свое имя и результаты записывались в текстовый файл? Как сделать скорость кораблика независимой от тактовой частоты? Ведь delay зависит, если не ошибаюсь, от этого параметра, значит на разных компьютерах игра с этой процедурой будет иметь разную скорость? Заранее спасибо. Файл pas в аттаче. Прикрепленные файлы ![]() |
![]() ![]() |
Lazzy |
![]()
Сообщение
#2
|
![]() Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: тьома Репутация: ![]() ![]() ![]() |
Прошу прощения за долгое отсутствие.
Цитата По поводу ошибки - ничего сказать не могу, нет у меня ТР/ВР, да и когда был, предпочитал не пользоваться модулем graph, так что тонкостей его использования просто не знаю. Причина ошибки, по-видимому, в том, что в той директории, где находится исполняемый файл, для корректной его работы обязательно должен находиться еще и файл EGAVGA.BGI. Я увеличил задержку для того, чтобы программа была "играбельной" на более мощных, чем мой, ПК и перезалил архив Motor_boat.zip. И на всякий случай залил TP ![]() Цитата По поводу кода, рекомендую все-таки вызывать из основной программы не 1, а 3 процедуры: RestoreBackground, MoveShip и DrawShip. Просто потому, что они выполняют разную работу. И еще: ты сначала рисуешь корабль, а потом удаляешь его старое изображение. Это неправильно. Правильно: сначала восстановить фон, затем нарисовать новое изображение. Спасибо, я так и сделал. Здесь не привожу полный код программы, чтоб не загромождать топик. ####.pas можно глянуть в архиве. При разделении на три отдельные процедуры читать и редактировать программу гораздо легче. Цитата Есть и еще кое-какие детали, к которым можно будет вернуться в случае, если тебя интересует нечто большее, чем просто сдать и забыть. Какие еще замечания? Я собираюсь нарисовать получше сам кораблик, и сделать меню, таймер, таблицу рекордов и т. п. Эти элементы, насколько я понимаю, во всех играх однотипны, то есть можно не писать их с нуля, а адаптировать чужие, правильно? Всем еще раз спасибо! Цитата Я поднимаю за тебя репу andriano - ты этого хотел? Именно! ![]() Сообщение отредактировано: Lazzy - 24.03.2008 19:17 Прикрепленные файлы ![]() ![]() |
![]() ![]() |
![]() |
Текстовая версия | 6.08.2025 15:06 |