Форум » » Akurka » Ответить

Akurka

Акела: Ссылка на последнюю версию: http://urq.allquests.ru/upload/AkURQ/AkURQ1.28pre6.rar Ссылка на последний хелп от Корвина: http://urq.allquests.ru/upload/AkURQ/help.zip Ссылка richtx32.ocx: http://urq.allquests.ru/upload/AkURQ/richtx32.rar

Ответов - 434, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 All

Korwin: dirold=0; направление движения "откуда" не определено :расчет if svoystvo=3 then dir=rnd4; 1-north, 2-east, 3-south, 4-west if dir=dirold then goto расчет; назад нельзя if dir=1 then dx=5 if dir=2 then dx=1 if dir=3 then dx=-5 if dir=4 then dx=-1 newx=x+dx if newx<1 or newx>25 then goto расчет if dx=1 and (newx=6 or newx=11 or newx=16 or newx=21) then goto расчет if dx=-1 and (newx=5 or newx=10 or newx=15 or newx=20 or newx=25) then goto расчет; Проверка на выход за край "доски" dirold=dir x=newx pln x btn начало end Не проверял - пока не на чем. И расчитан алгоритм не универсальный - а под конкретно эту карту.

Chicago1920: Korwin пишет: алгоритм не универсальный А как сделать его универсальным? допустим пусть будет 100х100 клеток. (Главное прописать физ. свойства клеток). Плюс допустим ввести n-количество npc. Главное указать их координаты и направление движения

Korwin: Дружище, а можно ввести коодинату Y? Тогда меньше проверок будет на выходы за границы карты. И вычислять направление движения npc по отношению к главному герою будет проще гораздо! 0-99 по х 0-99 по у Если можно, то алгоритм будет куда красивее и проще... Ты вообще квест пишешь или это учебная задача по программированию?


Chicago1920: пишу квест. можно конечно ввести и х и у если так проще. без проблем. спасибо за все!!!

Chicago1920: вопрос все еще в силе...

Гость: Да памагите иму ужо

Хломидоманад: Так а в чем вопрос? Корв же ответил. Как специалист по извращениям над уркой, могу добавить только, что этот не тот случай, когда к ним стоит прибегать%).

Александр: Если открывать квест через "Историю", то не работает оператор Play (может, еще какие, я не проверял). Может, баг и не опасный, но мне из-за него весь квест под music пришлось переписывать :'(­

Chicago1920: Chicago1920 пишет: А как сделать его универсальным? допустим пусть будет 100х100 клеток. (Главное прописать физ. свойства клеток). Плюс допустим ввести n-количество npc. Главное указать их координаты и направление движения Вопрос в том как сделать код универсальным И еще.. Как в Акурке в html режиме на выведенную в окошко Акурки картинку повесить в центр экрана надпись. А то ндпись получается у меня под картинкой(((

Korwin: Chicago1920 пишет: Вопрос в том как сделать код универсальным отвечу на праздниках, лады?

Chicago1920: Korwin пишет: отвечу на праздниках, лады? С нетерпением буду ждать.

Korwin: :initmap clrscr=1 ix=0 iy=0 sx=10 ;"ширина" поля-1 sy=10 ;"высота" поля-1 :loop0 ;Заполнение карты случайными значениями, мне неохота писать например 100х100=10000 клеток руками svoystvo#ix$_#iy$=rnd3; присвоили значение очередной клетке ix=ix+1 if ix<=sx then goto loop0 ix=0 iy=iy+1 if iy<=sy then goto loop0 ;Массив заполнен, инициализируем "героя" в случайное место. :loop1 x=rnd#sx+1$-1 y=rnd#sy+1$-1 if svoystvo#x$_#y$=1 then goto loop1; Если герой оказался "в стене", ищем другое место. dir=rnd4 ;стороны света: 1-север,2-восток,3-юг,4-запад pln Карта заполнена случайными значениями. btn algoritm,Начинаем поход? end :algoritm wall=0 if svoystvo#x$_#y$=2 then goto forwards; :vybor if svoystvo#x$_#y$=3 or svoystvo#x$_#y$=2 then dir=rnd4; 1-north, 2-east, 3-south, 4-west ;Выбор на перекрестке if wall=0 and dir=dirold then goto algoritm; если не уперся в стену, назад нельзя! :forwards if dir=1 then newy=y+1&newx=x if dir=2 then newx=x+1&newy=y if dir=3 then newy=y-1&newx=x if dir=4 then newx=x-1&newy=y ;расчет новых координат if newx<0 or newx>sx then wall=1&goto vybor; Если x вышел за границы поля, меняем направление движения if newy<0 or newy>sy then wall=1&goto vybor; Если y вышел за границы поля, меняем направление движения if svoystvo#newx$_#newy$=1 then wall=1&goto vybor; Если стена, выбираем направление, в том числе и обратно. dirold=dir x=newx y=newy ;-старый вывод пути ;if svoystvo#x$_#y$=2 then instr desc=дорога ;if svoystvo#x$_#y$=3 then instr desc=перекресток ;pln Координата х=#x$ у=#y$, #%desc$ :drawmap;рисуем карту - для наглядности CLS ix=0 iy=0 :loop2 if ix=x and iy=y then style_dos_textcolor=15 else style_dos_textcolor=7 p #svoystvo#ix$_#iy$$ ix=ix+1 if ix<=sx then goto loop2 ix=0 pln iy=iy+1 if iy<=sy then goto loop2 btn algoritm,Идем дальше? ;По причине того, что карта генерится тупо-случайно, легко может возникнуть попадание в тупик и зацикливание. :( Алгоритм неоптимален - кое-что можно безболезненно выбросить, кое-что упростить и т.п. но эту творческую работу я с радостью переложу на твои могучие плечи, дружище chicago1920!

noname: делал случайные хорошие лабиринты, в которых всегда есть выход если будет не слишком лень ( а я к тому же опять на работу устроился ), то выложу вопрос: как определить, делится ли число X на N нацело? каков остаток? - на досурке - на акурке пре1

Korwin: Лабиринт - это интересно. Выкладывай, qwerty! А насчет деления нацело: не знаю как в акурке, но в досурке был такой алгоритм. fp_prec – числовая переменная, которая содержит точность вычислений, число знаков после запятой в #$ и инвентаре. По умолчанию 2. :определитель pln Введите делимое: input X pln Введите делитель input N if N<>0 then goto proverka else pln На ноль делить нельзя!&goto определитель :proverka fp_prec=5 real=X/N fp_prec=0 int=#X/N$ fp_prec=5 if real>int then ost=real-int&pln #ost$ else ost=int-real&pln #ost$ IF OST<0 THEN OST=-OST ;функция abs (qst) fp_prec=0 IF OST=0 THEN PLN ЧИСЛО ДЕЛИТСЯ НАЦЕЛО else PLN число делится с остатком #ost*N$ btn определитель,Еще раз? btn ext,Выход end :ext end



полная версия страницы