![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RPG: Интересное задание, помогите!!!!
Mover © (2003-04-21 13:34:00)
Всем привет! Я сейчас занимаюсь новым проектом онлайновой РПГ игры, и есть необходимость рисовать карты игровых полей. Может кому интересно или хочет помочь нашему проекту:
http://www.rada.gov.ua/laws/pravo/mover/rpg/
Задание заключается в следующем. Надо написать редактор уровней. На вход - картинка (цветная или чернобелая) .bmp или байтовая матрица, на выход цветная картинка и байтовая матрица.
Алгоритм:
Надо "раскрасить" черно-белую картинку, где 0 (черный цвет) - обозначает воду, 1 (белый) - обозначает сушу.
Теперь надо пройтись по всем клеткам и проставить там где суша соединяется с водой - песок (2) на расстоянии неболее 1 клетки. землю (3) - для клеток 2-3 от воды, и траву (4) - для оставшихся клеток внутрь острова. Если это полуостров - то клетки примыкающие к границе "раскрашивать", так если бы остров еще продолжался. Ну а на воде тоже самое, только заменяешь (2) на (5) - неглубокая вода, (3) на (6) - обычная вода и (4) на (7) - глубокая вода... Прилизительно понятно? =)
Сейчас намалюю...
Было так:
001111111111110000
000011101111111100
000111000111111110
001111000011111100
000011110001110000
001000011111110000
011100000000000000
001000000000000000
Стало приблизительно так:
1) "Раскрашиваем"сушу
002222222334332000
000023202233332200
000222000223333220
002232000022322200
000222220002320000
002000022222220000
022200000000000000
002000000000000000
2) "Раскрашиваем"воду
651111111111111556
655511151111111155
655111555111111115
651111555511111155
655511115551115556
551555511111115666
511156555555555666
551556666666666667
3) Соединяем картинки:
652222222334332556
655523252233332255
655222555223333225
652232555522322255
655222225552325556
552555522222225666
522256555555555666
552556666666666667
без разноцветных картинок трудно представить, но можно! =)
Заранее спасибо, исходники присылайте мне почтой или говорите ссылку - выкачаю...
Mover (2003-04-22 10:39:00) [1]
2TButton:
По поводу размера карты - это вопрос не принципиальный! У меня комп не тормоз, и время не поджимает. Даже если алгоритм немножко медленный, но правильный, то я подожду. Все равно больше времени уйдет не на автоматическую "раскраску", а на прорисовку разных деталей руками. и описание квестов.
Mover (2003-04-22 10:33:00) [2]
2MBo:
Думаю при том, как работает твой новый алгоритм - ничего в задаче менять не надо! Супер. мне нравится то, что появилась плавность заполнения, распределения поверхностей. Спасибо огромное еще раз!
2All:
Если кому надо - могу в форуме написать этот кусок кода (без загрузки матрицы).
TButton (2003-04-22 07:20:00) [3]
исправил свою прогу (редактор)... кое что переделал... код для чтения не очень легкий, но в целом понятно... рендеринг карты 500х500 на моем пылесосе (AMD700 192RAM) занимает 4 секунды... с прорисовкой еще по вожусь... заинтересует - маякни...
MBo (2003-04-22 06:08:00) [4]
про угловые точки ясно - я поэтому и просил уточнить, как именно считать. Разницу с твоей матрицей видел.
Кстати, в этом случае легко сделать только целочисленную арифметику - код будет побольше, но быстрее (если это существенно, конечно)
> и так все замечательно отрабатывает
да, но функции Max и Min гораздо короче и быстрее - им не нужно иметь дела с открытым массивом, как Max/MinIntValue (которые у меня остались с первого варианта алгоритма).
Mover (2003-04-21 19:10:00) [5]
2МВо:
Не стал я заменять на Min, Max - потому как мне показалось, и так все замечательно отрабатывает. =) Расстояние между точками я хотел так, чтобы даже соседние точки (матрица 8 точек вокруг) захватывались.
Mover (2003-04-21 19:02:00) [6]
Ура! Свершилось... =) Нашлись добрые люди в лице Бориса Новгородова (MBo).
Код на Делфи я оформил и разместил там же на сайте,
со скриншотами.. милости просим! (см. ссылку вверху).
2МВо:
с матрицей и загрузкой я разобрался - нема проблем!
только вот алгоритм немножко не такой, как я представлял...
ведь угловые точки не просчитываются. Если сравнивать мои
отрисовки (что я делал руками) выше, то ты увидишь разницу! =)
ВСЕ РАВНО - огромное спасибо!!!! Я тебя уже записал. =)
MBo (2003-04-21 17:24:00) [7]
В моем коде MaxIntValue и MinIntValue замени на просто Max и Min.
И уточни, что считается "расстоянием между клетками".
Устроит hypot?
MBo (2003-04-21 17:11:00) [8]
проверь почту ;)
ew.txt - твоя первая матрица с 0 и 1
Mover (2003-04-21 15:15:00) [9]
Кстати, это было мое задание на районной олимпиаде по программированию, где я выиграл. исходники на бейсике, жаль утеряны. =((( Столько воды утекло с 1992 года. =)
Axis_of_Evil (2003-04-21 14:04:00) [10]
гм ... интересно, но на простое не похоже ... пороюсь чуток, может чего получится