forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на MidletPascal (http://forum.boolean.name/forumdisplay.php?f=88)
-   -   The Maze (http://forum.boolean.name/showthread.php?t=4621)

sasha_peleng 30.12.2008 16:14

Ответ: The Maze
 
:-) Спасибо за исходники

Serg153 04.01.2009 03:21

Ответ: The Maze
 
>>
Добавил алгоритм спрайтов, нужно оптимизировать и добавить логику, тогда будет хорошая игрушка. Подобных программ на MP не видел.. Кто возьмется делать логику? у кого есть интересные идеи?
>>
надобы сделать редактор 3д мира - можно на дельфях (в фольфштейне был мир 64*64 клеточки)
- клеточкам присваивать текстуры
- расстановку в клетках спрайтов... факелы - освещаемые пятна(анимац)
- расстановка "монстров"
- расстановка "обьектов" - аптечки - патроны - ключи...
и типа "компиляцию" ресурсов в какойнить DAT файл
АИ врагов - простую (по колву ед жизни -100% ищет игрока - 50% убегает) типа стрелялки

---
про первые 3д игры хорошо описано у Андрэ Ламот Программирование Игр - алгоритмы рендеров...

abcdef 04.01.2009 09:43

Ответ: The Maze
 
про это уже писал, некоторое из этого не получится, потому что ограничение на кол-во текстур (добавил еще 2 и перестало запускаться на V3i), карту лучше сделать в текстовом файле, редактор пока не обязателен. размер карты в wolf3d 64x64 обусловлен размером целой части в числах с фиксированной точкой.
Также врятли найдется рендер 2.5D быстрее чем представленный здесь, вся задержка только в методе вывода на экран

abcdef 11.01.2009 21:46

Ответ: The Maze
 
случайно заглянул на http://wap.mtsgames.ru/free/?p=1 и нашел кучу 2.5D игр...
вот некоторые ссылки
http://get.mtscity.ru/free/id.9416/j...e.210/game.jar
http://get.mtscity.ru/free/id.16003/...e.210/game.jar
http://get.mtscity.ru/free/id.18974/...e.210/game.jar
http://get.mtscity.ru/free/id.21239/...e.210/game.jar
http://get.mtscity.ru/free/id.21990/...e.210/game.jar
http://get.mtscity.ru/free/id.22479/...e.210/game.jar
http://get.mtscity.ru/free/id.22477/...e.210/game.jar
http://get.mtscity.ru/free/id.25361/...e.210/game.jar
графика сделана довольно профессионально, работать будет на большинстве моделей телефонов, клавиши тоже на своих местах, вот только через какое-то время выскакивает окошко с требованием регистрации, которое выкидывает из игры...

некоторые игры виснут на motorola v3i, те что работают тормозят, но чуть быстрее чем MIDletPascal-версия движка.
____
p.s. а все-же где весь народ? все что-то потерялись... хочется увидеть исходники/логику от другого программиста,... а в свои игрушки играть-то неинтересно

cahekp 02.02.2009 01:38

Ответ: The Maze
 
Почитал я эту тему от и до и... Захотелось сделать что-нибудь похожее на Wolfenstein3D. Странно, не правда ли? :)

Вот я вот все мучаюсь, каким же образом сделана эта игра:
http://get.mtscity.ru/free/id.22477/...e.210/game.jar
(Bunker3D)

Все так плавно, гладко... При этом вся проекция 3d мира растянута на весь экран, используются анимированные стены, полустены, анимированные спрайты... Блин, как же у них это так получилось?

В Мидлет Паскале нет аналогов drawRGB случаем? :)
* через некоторое время *
Хм, а если попробовать сделать библиотеку для MP, в которой будет находится метод, тело которого будет вызывать drawRGB?

Так, пойду попробую...

cahekp 03.02.2009 01:14

Ответ: The Maze
 
Вложений: 1
Фух! Только что написал библиотеку, которая работает с ARGB массивом, после чего дает перевести результат в простой Image.
Попробовал слегка переделать наш проект, подключив эту библиотеку...
Ура! Апплет стал работать быстрее раз в 10-20! Скорость стала более-менее порядочной! Больше не тормозит так, как раньше.
Появился шанс на светлое будущее... :)

Так, ребят, а кто-нибудь знает, как реализовать двери? Я вот все понять не могу... Кто сможет написать?

P.S. Данная версия подстроена под экран 176х220.
Если у вас не такой экран, тогда идите в мою библиотеку и изменяйте там параметры width и height (или просто в главной проге переменные w и h замените на 176 и 128 соответственно).

abcdef 03.02.2009 10:07

Ответ: The Maze
 
есть игра catacombs 3D написана перед wolfenshtein 3D, по задумкам интересней... можно подглядеть идеи.
___
анимированные стены это просто смена текстуры, проще всего и оптимальнее делать так:
а) на карте имеется 2 элемента со схожими изображениями проходить всю карту и менять друг на друга.
б) или же рисовать текстуру непосредственно в битовый массив.
___
дверь такой-же элемент стены, только он имеет 2а состояния и анимированный переход между ними

Serg153 03.02.2009 16:42

Ответ: The Maze
 
2cahekp - ммм.. запустил прогу на моторолке - картинка появилась - а при нажатии на любую клавишу - вылетает.. :-(

cahekp 03.02.2009 23:54

Ответ: The Maze
 
Вложений: 1
to Serg153:
Что за телефон? Размер экрана 176х220? Хм... Может, не хватает памяти?
А если попробовать закомментировать строку
" world:=argb_to_image(w,h); drawImage(world,0,0); "
в блоке MAIN LOOP и снова запустить?
Если все-равно не пойдет, то, значит, дело все-таки в памяти.
Если пойдет - дело в выводе изображения (хотя я сомневаюсь, что это так).

Сколько у тебя доступно динамической памяти (Heap) для приложений?

Попробуй выбросить из проекта какие-нибудь ресурсы на 150 кбайт.. Глядишь, пойдет! :)

to abcdef:
По поводу анимации: Ну, думаю, более оптимальный будет, конечно же, первый вариант. Либо мы один массив 64х64 перерисуем, либо кучу текстур точно с таким же размером 64х64...
По поводу двери: Ну, насчет того, что дверь - это такая стена, как и другие... Да еще и просто анимированная... Хм, ну не знаю...

А теперь пошли мои размышления... :)
Как я поглядел, есть две различные реализации дверей - это объемная (как, например, в Бункер3Д) и в виде спрайта, который имеет свою собственную ось вращения (Вольфенштейн3Д).
Я вот, например, совсем не представляю, как можно сделать объемную дверь и считаю, что это еще тот геморрой. Почему? Ну, во первых, надо создать объект, который имеет размер меньше обычных стен (дверь же будет выглядеть не в виде куба, правильно? :)). Это первая заноза: сделать на 2-мерной карте объекты, размеры которых будут меньше стандартных. Дальше - больше. Вот во время открытия двери что делать лучу? Вот он вылетает из нашего глаза и идет по клеткам с числом 0, пока не дойдет до какого-либо препятствия. Дошел он до клетки, скажем, 5. Это клетка, которая означает, что это - дверь. Да дверь то и не простая, а еще и в процессе анимации! И открыта наша дверь наполовину. Нет, пусть лучше будет чуть больше, чем в половину... ;) И что делать лучу? По логике, он каким-то макаром должен понять, именно в ЭТОЙ точке есть кусочек двери, или же тут ничего нет и нужно просто продолжать движение дальше? Для большей ясности смотрите аттач к посту. Это заноза номер два: проблема трассировкой лучей. Более того, а что делать спрайтам, которые находятся позади двери? Как им объяснить, что часть их находится позади двери и должна быть отображена, а часть - нет? Заноза три: проблемы со спрайтами. Хотя, наверно, последний пункт можно выбросить. Если мы сможем правильно заполнить массив ScreenDist, то, по ходу, проблем возникнуть не должно...

Я думаю, что гораздо легче будет создать дверь в виде спрайта. Это полезно, так как помимо дверей, можно будет точно также создать какие-нибудь решетки, стены со сквозными дырками... Да и просто спрайты, которые не будут постоянно поворачиваться в сторону игрока, а будут смотреть только строго туда, куда им указал смотреть разработчик. :)
Спрайтовую дверь будет легко всунуть в любое место, задать ей начальный поворот, двигать... С помощью спрайтов можно будет попробовать создать "битую" дверь, с небольшими сквозными отверстиями. Будет выглядеть круто. :)
Вот только как сделать так, чтобы спрайт имел свою собственную ось?!?? Вот, что меня больше всего мучает!!! :(
Как менять его вид, опираясь на угол зрения игрока? Не понимаю...
Кто сможет это объяснить (а еще лучше: реализовать)?

abcdef 04.02.2009 03:33

Ответ: The Maze
 
насчет дверей :) допустим младший байт на карте будет элемент, а остальные статус и тд. Т.о. у нас появляется место для записи положения. при столкновении луча с дверью находим место столкновения 0...63 и смотрим, если луч попадает в открытую часть - пропустить дальше. чтобы дверь рисовалась тоньше чем обычная стена лучу необходимо шагнуть немножко вглубь. да, и еще лучше разделить элемент карты на 4е элемента и для каждой стороны рисовать свою текстуру.
__
чтобы программа запускалась на motorola нужно освободить место для битового массива, удалив 8 картинок, в таком случае текстуры должны подгружаться по мере надобности

cahekp 04.02.2009 21:47

Ответ: The Maze
 
Хм, интересненько... )
Пойду эксперименты ставить.. )

cahekp 05.02.2009 23:53

Ответ: The Maze
 
Вложений: 1
Мда.. Весь день этой фигней промаялся и вот что сделал:
1. Алгоритм поиска квадратного корня для целых чисел был усовершенствован и теперь работает довольно быстро. :)
2. Карту игра считывает из файла 1.map. Файл имеет читабельный вид и представляет из себя набор символов, которых может быть меньше, чем 64*64 штук.
3. Изменил текстурки. Старые надоели. Пофиг, что новые не блещут качеством, зато они новые!.. :)
4. Еще немножко прооптимизировал игрульку.

НО! Я так до сих пор и не понял, КАК ЖЕ ВСЕ-ТАКИ ПУСТИТЬ ЛУЧ ЧУТЬ ДАЛЬШЕ, ЕСЛИ ОН СТОЛКНУЛСЯ С ДВЕРЬЮ! Точнее, понял, но как только я его начинаю пускать чуть дальше, то начинается ВСЯКАЯ НЕХОРОШАЯ КАЛЯ-БАЛЯ!!! Видимо, математик из меня никакой... :(
Блин, как же все-таки сделать?! Бесит уже! :crazy:

abcdef 06.02.2009 02:28

Ответ: The Maze
 
(пишу с телефона, поэтому пока только совет)
лучи строятся по алгоритму рисования прямой на плоскости, отличие от большинства подобных алгоритмов в том что луч полностью перешагивает через пространство кубика к его границе. все приращения луча расчитываются заранее. нужно основной цикл луча и расчет места столкновения заключить в дополнительный цикл, который повторялся если клетка дверь, причем перед итерацией делал шаг основного луча вдвое меньше чем положено. Скорее всего именно так и должно быть

cahekp 06.02.2009 23:14

Ответ: The Maze
 
Хм... Ну что же, буду ждать твоей реализации... :)

А потом буду сравнивать со своей... Хех.

Serg153 07.02.2009 12:21

Ответ: The Maze
 
>>1. Алгоритм поиска квадратного корня для целых чисел был усовершенствован и теперь работает довольно быстро
...ммм - я так понимаю что квадратный корень нужен для определения растояния до пересечения с гориз или верт стеной -
а может отказаться от вычисления корня и использовать разницу квадратов?


Часовой пояс GMT +4, время: 04:59.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot