| Lazzy |
15.12.2007 17:37
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: тьома Репутация: 0 |
Привета!
Задача формулировалась преподом довольно размыто, поэтому может присутствовать некоторая вольность в выполнении, что не может не радовать. Смысл в том, чтоб написать на Pascal (к сожалению) игру, в которой есть кораблики, соревнующиеся между собой Препод седой уже, кстати. Он хотел там видеть возможность выбора направления ветра и хода корабликов галсами при встречном ветре, но реализовать управление парусами, по-моему, слишком сложно, а как без этого галсами ходить? Поэтому реализация мне видится так: вид сверху на остров либо замкнутый кольцевой канал, один кораблик с мотором, цель игры - управляя корабликом стрелками пройти дистанцию за наименьшее время. Если у кого-то возникнет желание помочь или вдруг есть какие-то наработки, буду очень признателен. Вот код: program MAPA3M;Тут нарисованы берега "лагуны" с островом посередине, вид сверху. Кораблик обозначен коричневой точкой и управляется с клавиатуры, это пока все =/ Как видите, нету навыка работы с процедурами, пишется сложно =/ Что конкретно неясно как реализовать: Как сделать чтоб кораблик при нажатиии клавиши начинал двигаться в направлении нажатой стрелки и не прекращал движение? Сейчас он двигается только, когда стрелка нажата. Можно ли сделать движение по диагонали? Сейчас судно движется только в четырех направлениях. Как реализовать крушение кораблика при столкновении с берегом? (Видимо, нужно написать функцию, возвращающую значение цвета пикселов вокруг кораблика, и если эти значения равны значению цвету берега - корабль тонет) Как с помощью Pascal реализовать счетчик времени? Ведь цель игры - пройти дистанцию за наименьшее время. Искал в учебниках, а там работа только с временем системы. Как сделать, чтоб игрок вводил свое имя и результаты записывались в текстовый файл? Как сделать скорость кораблика независимой от тактовой частоты? Ведь delay зависит, если не ошибаюсь, от этого параметра, значит на разных компьютерах игра с этой процедурой будет иметь разную скорость? Заранее спасибо. Файл pas в аттаче. Прикрепленные файлы
_.PAS ( 2.16 килобайт )
Кол-во скачиваний: 130424 |
![]() ![]() |
| Lazzy |
25.03.2008 19:42
Сообщение
#2
|
![]() Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: тьома Репутация: 0 |
Я поискал по форуму меню, наткнулся на такую версию:
Цитата ch := readkey; SetColor(BLACK); X := TextWidth(Strings[i]) + 10; Y := TextHeight(Strings[i]) + 10; Rectangle(GetMaxX div 2 - X div 2, GetMaxY div 2 - (Count - 1) * H div 2 + i * H - Y div 2, GetMaxX div 2 + X div 2, GetMaxY div 2 - (Count - 1) * H div 2 + i * H + Y div 2); case ch of #0: case ReadKey of #72: begin Dec(i); if i < 0 then i := Count - 1; end; #80: begin Inc(i); if i >= Count then i := 0; end; end; end; until ch = #13; Menu := i; end; Примитивнее не могу. Пример вызова такой процедуры: Choise := Menu('New'#13'Open'#13'Save'#13'Exit'); Возвращает номер выбранного пункта, причём нумерация от нуля (New - это 0, а Exit - это 3) То есть параметр - одна строчка, которая содержит все пункты меню, разделённые #13. Количество пунктов - не более 15, каждый пункт не длинее 100 символов. Если перед вызовом написать SetTextStyle(4, 0, 7); то выглядит интересно... Правда, на самом деле это функция, а не процедура. Мое меню состоит всего из двух пунктов: "Play" и "Exit". Основное его предназначение - предоставление игроку выбора сыграть еще раз или выйти при проигрыше. Раньше при проигрыше нельзя было сыграть еще раз. Изменился текст основной программы: begin Смотрите в архиве, что получилось. Я хотел бы сделать игру, которая была бы интересна не только мне, а могла бы отнять у игрока хоть пять минут времени, поэтому пишите ваши пожелания, предложения и просто впечатления. Сообщение отредактировано: Lazzy - 25.03.2008 19:44 Прикрепленные файлы
Motor_boat.zip ( 20.76 килобайт )
Кол-во скачиваний: 70762 |
Lazzy Игра с корабликами 15.12.2007 17:37
andriano >Как сделать чтоб кораблик при нажатиии клавиши... 15.12.2007 18:06
Lazzy andriano, спасибо за обстоятельный ответ.
Я попроб... 16.12.2007 3:28
andriano Именно в этом случае и нужна переменная - в ней бу... 16.12.2007 10:39
Lazzy andriano, спасибо больщущее! :cool:
Благодаря... 18.12.2007 23:19
Lapp
P.S. Как репутацию подымать? :cool:
Есть два спо... 19.12.2007 7:20
andriano По поводу ошибки - ничего сказать не могу, нет у м... 19.12.2007 9:06
spill Да, Delay зависит от производительности ЦП.
Вот мо... 19.02.2008 14:07
andriano Вообще-то это не очень хороший вариант.
Начиная с ... 19.02.2008 20:35
spill Вопрос в том, как проверить, пропаченый модуль или... 20.02.2008 13:34
andriano Если на компе с тактовой частотой 200 МГц и выше р... 20.02.2008 19:08
Lazzy Прошу прощения за долгое отсутствие.
Причина ошиб... 24.03.2008 19:10
Гость Программа была мною еще доработана - появилась ани... 22.06.2008 12:58
Lazzy Предыдущее сообщение мое. 22.06.2008 13:02
renesko1 Поставь 2 задержки подряд... 22.06.2008 13:16
andriano 1. Если планируется отрабатывать несколько различн... 22.06.2008 16:29
Lazzy Вот что получилось - корабль нарисован из круга, п... 10.10.2008 0:30![]() ![]() |
|
Текстовая версия | 9.12.2025 1:04 |