Вверх ↑
Этот топик читают: Гость
Ответов: 77
Рейтинг: 5
#1: 2014-05-20 03:12:10 ЛС | профиль | цитата
Решил реализовать генерацию карты в GameEngine. Думал-думал над алгоритмом генерации, пришло в голову только такое не сложное решение решение. Спрайты 32х32. Размер карты 64х32 спрайта. На карте есть центр(32х16) и от этого центра по кругу до определённого момента всё заполняется травой. С определённого момента происходит случайное заполнение травы и песка. После пары блоков заполняется всё песком, а потом с некоторой вероятностью всё заполняется песком и водой. Ну и оставшиеся блоки - это вода. Так же реализовал полноэкранный режим с изменением разрешения экрана. И передвижение по карте с помощью клавиш WASD. Всё сделано по-еврейски, сильно не пинать. Может у кого появятся какие-то идеи по улучшению алгоритма с добавлением новых блоков, либо кому-то известны алгоритмы генерации карт?
http://forum.hiasm.com/forum_serv.php?q=56&id=3744
Ах да, что бы выйти, просто нажмите Esc
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 1535
Рейтинг: 176
#2: 2014-05-20 13:56:57 ЛС | профиль | цитата
TreC, WASD
Add(MultiElement,8553785,105,217)
{
}
BEGIN_SDK
Add(EditMulti,16313166,0,14)
{
EventCount=2
WorkCount=1
DataCount=2
Width=419
Height=214
link(doWork1,2636831:doEvent1,[(28,20)(28,76)])
}
Add(Math,12804842,210,77)
{
link(onResult,16313166:onEvent1,[(363,83)(363,20)])
link(Op1,16313166:Data1,[(216,43)(6,43)])
}
Add(Math,13392431,252,147)
{
link(onResult,16313166:onEvent2,[(384,153)(384,27)])
link(Op1,16313166:Data2,[(258,34)(13,34)])
}
Add(Keyboard,7114056,91,70)
{
@Hint=#1:>|
Key=68
link(onReadKey,11377619:doEvent,[])
}
Add(Keyboard,10074548,91,105)
{
@Hint=#1:>|
Key=65
link(onReadKey,733116:doEvent,[])
}
Add(Keyboard,12367220,91,140)
{
@Hint=#1:>|
Key=83
link(onReadKey,5516861:doEvent,[])
}
Add(Keyboard,10337381,91,175)
{
@Hint=#1:>|
Key=87
link(onReadKey,9469321:doEvent,[])
}
Add(Hub,2636831,49,70)
{
OutCount=4
link(onEvent1,7114056:doReadKey,[])
link(onEvent2,10074548:doReadKey,[(77,83)(77,111)])
link(onEvent3,12367220:doReadKey,[(77,90)(77,146)])
link(onEvent4,10337381:doReadKey,[(77,97)(77,181)])
}
Add(IndexToChanel,11377619,140,70)
{
Data=Integer(8)
link(onEvent2,10047857:doWork2,[])
}
Add(IndexToChanel,733116,140,105)
{
Data=Integer(-8)
link(onEvent2,10047857:doWork3,[(193,118)])
}
Add(IndexToChanel,5516861,140,140)
{
Data=Integer(8)
link(onEvent2,16949:doWork2,[])
}
Add(IndexToChanel,9469321,140,175)
{
Data=Integer(-8)
link(onEvent2,16949:doWork3,[(193,188)])
}
Add(HubEx,10047857,189,77)
{
link(onEvent,12804842:doOperation,[])
}
Add(HubEx,16949,189,147)
{
link(onEvent,13392431:doOperation,[])
}
END_SDK

карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 8888
Рейтинг: 823
#3: 2014-05-20 14:45:41 ЛС | профиль | цитата
TreC писал(а):
..Так же реализовал полноэкранный режим с изменением разрешения экрана..
Ну как это связано: полноэкранный режим и разрешение экрана Чуть-чуть подумать или хотя бы у пользователя спросить, а хочет-ли он изменить установки, к которым привык
(Менять, так менять, ставьте частоту 240 Гц, чтобы в глазах не рябило! )
карма: 19

0
Ответов: 77
Рейтинг: 5
#4: 2014-05-20 16:34:08 ЛС | профиль | цитата
ser_davkin, спасибо за умное сокращение схемы.
Леонид, например у меня, на моём слабом ноутбуке в полноэкранном режиме без изменения размера экрана всё жутко тормозит.
------------ Дoбавленo в 16.34:
Не тут-то былоser_davkin, попробуйте нажать две противоположные клавиши одновременно(в лево, в право). Происходит жуткая картина.
карма: 1

0
Ответов: 1535
Рейтинг: 176
#5: 2014-05-20 18:00:32 ЛС | профиль | цитата
WSAD
Add(MultiElement,13309742,98,217)
{
}
BEGIN_SDK
Add(EditMulti,6170934,28,21)
{
EventCount=2
WorkCount=1
DataCount=2
Height=158
link(doWork1,10047106:doCalc,[(50,27)(50,118)])
}
Add(Math,1626617,210,98)
{
link(onResult,6170934:onEvent1,[(289,104)(289,27)])
link(Op1,6170934:Data1,[(216,50)(34,50)])
}
Add(Math,2221548,252,112)
{
link(onResult,6170934:onEvent2,[(306,118)(306,34)])
link(Op1,6170934:Data2,[(258,41)(41,41)])
}
Add(Keyboard,14962631,77,70)
{
}
Add(MathParse,10047106,77,112)
{
DataCount=1
MathStr="(((%1[87]=0)and(%1[83]=0)and(%1[65]=0)and(%1[68]=1))*1)+
(((%1[87]=0)and(%1[83]=0)and(%1[65]=1)and(%1[68]=0))*2)+
(((%1[87]=0)and(%1[83]=1)and(%1[65]=0)and(%1[68]=0))*3)+
(((%1[87]=1)and(%1[83]=0)and(%1[65]=0)and(%1[68]=0))*4)+
(((%1[87]=1)and(%1[83]=0)and(%1[65]=0)and(%1[68]=1))*5)+
(((%1[87]=0)and(%1[83]=1)and(%1[65]=0)and(%1[68]=1))*6)+
(((%1[87]=0)and(%1[83]=1)and(%1[65]=1)and(%1[68]=0))*7)+
(((%1[87]=1)and(%1[83]=0)and(%1[65]=1)and(%1[68]=0))*8)"
ResultType=0
link(onResult,3928619:doCompare,[])
link(X1,14962631:Keys,[])
}
Add(If_else,3928619,119,112)
{
Type=5
Op2=Integer(0)
link(onTrue,5551556:doSet,[])
}
Add(MultiSetParam,5551556,161,112)
{
Parameters=#0:|2:;8|3:;-8|2:8;|3:-8;|4:-8;8|3:8;8|4:8;-8|5:-8;-8|
Count=2
link(onSet1,2221548:doOperation,[])
link(onSet2,1626617:doOperation,[(201,125)(201,104)])
}
END_SDK
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 77
Рейтинг: 5
#6: 2014-05-21 02:04:23 ЛС | профиль | цитата
ser_davkin, спасибо, очень поучительный пример)
карма: 1

0
Ответов: 2202
Рейтинг: 675
#7: 2014-05-26 21:20:26 ЛС | профиль | цитата
TreC писал(а):
Может у кого появятся какие-то идеи по улучшению алгоритма
TreC, у вас в схеме присутствует множество вызовов doRandomize у элемента Random. Вот что по этому поводу писали:
Леонид писал(а):
Процедура doRandomize устанавливает генератор в зависимости от тиков процессора, прошедших от момента включения компьютера, в некое промежуточное положение (от первого до последнего) и с этого положения генератор выдаёт свои числа. Делением на 2^N числа переводятся в диапазон 0<=RND<1, а уж с этими числами работает наш элемент.
Отсюда и следует, что doRandomize надо делать один раз, более того последующие doRandomize только занимают процессорное время, никак не улучшая псевдослучайную последовательность.

карма: 11

0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)