![]() |
![]() |
Lazzy |
![]() ![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: тьома Репутация: ![]() ![]() ![]() |
Привета!
Задача формулировалась преподом довольно размыто, поэтому может присутствовать некоторая вольность в выполнении, что не может не радовать. Смысл в том, чтоб написать на Pascal (к сожалению) игру, в которой есть кораблики, соревнующиеся между собой Препод седой уже, кстати. Он хотел там видеть возможность выбора направления ветра и хода корабликов галсами при встречном ветре, но реализовать управление парусами, по-моему, слишком сложно, а как без этого галсами ходить? Поэтому реализация мне видится так: вид сверху на остров либо замкнутый кольцевой канал, один кораблик с мотором, цель игры - управляя корабликом стрелками пройти дистанцию за наименьшее время. Если у кого-то возникнет желание помочь или вдруг есть какие-то наработки, буду очень признателен. Вот код: program MAPA3M;Тут нарисованы берега "лагуны" с островом посередине, вид сверху. Кораблик обозначен коричневой точкой и управляется с клавиатуры, это пока все =/ Как видите, нету навыка работы с процедурами, пишется сложно =/ Что конкретно неясно как реализовать: Как сделать чтоб кораблик при нажатиии клавиши начинал двигаться в направлении нажатой стрелки и не прекращал движение? Сейчас он двигается только, когда стрелка нажата. Можно ли сделать движение по диагонали? Сейчас судно движется только в четырех направлениях. Как реализовать крушение кораблика при столкновении с берегом? (Видимо, нужно написать функцию, возвращающую значение цвета пикселов вокруг кораблика, и если эти значения равны значению цвету берега - корабль тонет) Как с помощью Pascal реализовать счетчик времени? Ведь цель игры - пройти дистанцию за наименьшее время. Искал в учебниках, а там работа только с временем системы. Как сделать, чтоб игрок вводил свое имя и результаты записывались в текстовый файл? Как сделать скорость кораблика независимой от тактовой частоты? Ведь delay зависит, если не ошибаюсь, от этого параметра, значит на разных компьютерах игра с этой процедурой будет иметь разную скорость? Заранее спасибо. Файл pas в аттаче. Прикрепленные файлы ![]() |
![]() ![]() |
andriano |
![]()
Сообщение
#2
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Вообще-то это не очень хороший вариант.
Начиная с IBM PC AT поддерживается 15h прерывание, одной из функций которого как раз и есть формирование временной задержки. Кстати, величина ее задается в микросекундах, но зачем - непонятно, все равно такая точность не выдерживается. Сейчас уже не 1992 год, компьютеры IBM PC и IBM PC XT свое отслужили и о совместимости с ними вряд ли надо заботиться. С другой стороны, на старших моделях 486 и большинстве Pentium'ов программы, содержащие модуль crt "падали" из-за переполнения при инициализации этого модуля, вызванного как раз вычислением константы для процедуры delay. Собственно, сегодня практически все компиляторы ТР содержат уже пропатченный модуль crt. Грамотно сделанный патч выглядит так: procedure delay(Wait:word); assembler; {єбсСαЄ¬б у јЯ} если это действительно так, то ничего изобретать не нужно. Если нет - можно воспользоваться приведенной выше процедурой. Сообщение отредактировано: andriano - 19.02.2008 20:35 |
![]() ![]() |
![]() |
Текстовая версия | 6.08.2025 15:14 |