Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 02.12.04 15:10. Заголовок: Алгоритмы URQL
Предлагаю в этой ветке публиковать понравившиеся куски кода, готовые процедуры - будет своего рода учебник. Для начала предлагаю свою процедуру выведения времени с часами и минутами: :common m=m+rnd30 ;Каждый ход прибавляется случайное количество минут от одной до 30 proc minute ;Подсчитывается прибавка минут и часов if h›23 then h=h-24&d=d+1 ;Подсчитывается прибавка часов и дней p #d$-й день. Время #h$:&if m‹10 then p 0&p #m$.#/$ else p #m$.#/$ ;Осуществляется вывод дней, часов и минут. Обратите внимание - корректно выводится количество минут, меньшее 10! Аналогично можно сделать и с часами, если нужно делать вид «электронных часов». end :minute if m›59 then h=h+1&m=m-60 if m›59 then goto minute ;Если прибавили более 60 минут, то нужна проверка. end Пользуйтесь на здоровье.
|
|
Цитата
|
Ответов - 13
[только новые]
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 03.12.04 13:55. Заголовок: Re: Алгоритмы URQL
Переключение цветов. Чтобы не писать каждый раз: Style_Dos_TextColor=11 (лиловый, к примеру) можно создать строковую переменную в которую ввести весь этот текст и вставлять ее вызов по мере необходимости в нужное место. :Инициализация переменных квеста ... instr vio=Style_Dos_TextColor=11 ;Лиловый instr yel=Style_Dos_TextColor=14 ;Желтый ... :Локация желтого цвета #%yel$ p Этот текст будет желтымch%vio$&pln Этот текст будет лиловым ...
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 13.01.05 20:20. Заголовок: Re: Алгоритмы URQL
Паузы меньше секунды в урке как известно не работают :) Однако есть алгоритм, который позволяет их реализовывать. В начале квеста замеряем величину паузы длиной в секунду (лучше взять паузу побольше если вам нужна точность - пауза в 40-60 секунда обеспечит вам лучшую точность чем секундная пауза). Зачем это нужно? Просто досурка и гуи досурка возвращают разные значение времени, плюс оно может быть разным на разных компьютерах - поэтому мы вычилсляем значение для той среды, в которой мы запущены. t1=time pause 1000 t2=time t_etalon=(t2-t1)/1000 ;Там где нам нужна пауза, пишем такой код - величина паузы в миллисекундах - в данном случае полсекунды пауза=500 & proc stop ; а вот и сама процедура, которая делает нашу паузу длинной меньше секунды :stop стоп_таймер=time пауза=пауза*t_etalon if t_etalon=0 then пауза=1 :stop_loop if (time-стоп_таймер)‹пауза then goto stop_loop end Данный код придуман и разработан всеми любимым Евгом. Я его лишь несколько уточнил (на этапе временного эталона).
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 21.01.05 01:06. Заголовок: Как в досурке изменить цвет фона.
/* Этот кусочек кода изменяет цвет всего фона на(в данном случае) синий. */ clrscr=1 Style_DOS_TextColor=27 Style_DOS_FillEol=1 pln ##0$ cls
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 21.01.05 13:07. Заголовок: Re: Алгоритмы URQL
Евгений пишет: цитата clrscr=1 Style_DOS_TextColor=27 Style_DOS_FillEol=1 pln ##0$ cls
Здорово! А почему так происходит? И как сохранить цвет фона для кнопок после вывода нескольких локаций? Кстати, такой вариант не лучше? clrscr=1 back=1 backcolor=#back$*16 Style_DOS_TextColor=11+#backcolor$ Style_DOS_ButtonColor=6+#backcolor$ Style_DOS_CursorColor=14+#backcolor$ Style_DOS_FillEol=1 pln ##0$ cls
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 21.01.05 21:48. Заголовок: Re: Алгоритмы URQL
Мы говорим на разных языках...
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 21.01.05 23:16. Заголовок: Re: Алгоритмы URQL
Да, с локациями там трабл :) Я просто читерски «разделил» экран на области для текста и кнопок, ну и clsил постоянно.
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 23.01.05 01:11. Заголовок: Эффект «сосульки» :)
/* Эффект забавен тем, что выводит подобие сосулек или чего-то подобного по рнд... Код сумбурный, недоработанный, но может кому пригодится :) */ :0 old_style_dos_textcolor=style_dos_textcolor style_dos_textcolor=15 proc эффект6/*применение эффекта*/ style_dos_textcolor=old_style_dos_textcolor end :эффект6 clrscr=4096 instr_leave_spc=1 z=78 i=1 :эффект6_loop0 b#i$=i if i‹z then i=i+1 & goto эффект6_loop0 i=1 :эффект6_loop1 a#i$=#rnd#z$$ if b#a#i$$=0 then goto эффект6_loop1 else b#a#i$$=0 if i‹z then i=i+1 & goto эффект6_loop1 i=1 :эффект6_loop2 simb#a#i$$=1 simb#a#i+1$$=1&simb#a#i+2$$=1&simb#a#i+3$$=1 j=1&instr pl=; :эффект6_loop3 if simb#j$=0 then instr pl=#%pl$##15$else instr pl=#%pl$ ; if j‹z then j=j+1&goto эффект6_loop3 pln #%pl$ if i‹z then i=i+4 & goto эффект6_loop2 ;if i‹z then i=i+1 & cls& goto эффект6_loop2 end
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 30.01.05 23:22. Заголовок: Цвета в досурке
:0 i=0 :loopi Style_DOS_TextColor=i p #Style_DOS_TextColor$ i=i+1 if i‹=256 then goto loopi end (ц) Виктор Корянов :) Памятка по цветам в досурке. [позже] Хмм, Вик ругается и говорит, что это плохой код, а хороший тут: http://urq.ru/urq_dos/colors.qst, но я всё равно первый люблю больше ж)
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 14.02.05 18:53. Заголовок: Re: Алгоритмы URQL
Еще полезный алгоритм... если число не целое, то число выведенных после запятой знаков будет равно значению системной переменной fp_prec... Пример: Вычисление целой и дробной части числа. :1 pln Введите число в формате ххх.ххх input x ;Вводим произвольное число. fp_prec=0 ;Задаем число знаков после запятой равное нулю int_x=#x$ ;Присваиваем переменной int_x целое число. ;Две строчки ниже позволяют сейчас решить проблему с округлением числа вверх. if x›0 and int_x›x then int_x=int_x-1 ;Для положительных чисел if x‹0 and int_x‹x then int_x=int_x+1 ;Для отрицательных чисел fp_prec=5 ;Возвращаем точность вычислений до 5-го знака после запятой. frac_x=x-#int_x$ ;Вычисляем дробную часть. pln Вы ввели #x$ ;Выводим результаты вычислений на печать. pln Int x=#int_x$ pln Frac x=#frac_x$ btn 1,Еще раз? btn 2,Хватит End
|
|
Цитата
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 21.02.05 19:33. Заголовок: Re: Алгоритмы URQL
Larry› как сделать goto в локацию, название которой тока что инпут? ‹Korv› instr loc= ‹Korv› input loc ‹Korv› goto #%loc$ ‹Larry› instr loc= - прямо так и писать? ‹Korv› да ‹Larry› ща попробую ‹Larry› РАБОТАЕТ!!!
|
|
Цитата
|
|
| постоянный участник
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 22.10.05 20:32. Заголовок: Re:
Пример получения значений косинуса и синуса угла (в градусах). (только для URQ_DOS): -- :1 perkill fp_prec=4 prec=0.00001 inval=0 pi=3.1415926 p Введите угол: input inval smval=#inval$ :too_big if smval>=360 then smval=#smval-360$ & goto too_big if smval<=-360 then smval=#smval+360$ & goto too_big proc sinus pln sin #inval$##248$ = #retval_sinus$ proc cosinus pln cos #inval$##248$ = #retval_cosinus$ btn 1,Еще end :sinus x=smval x=x*pi/180 n=1 u=x s=x if u>=0 then abs=#u$ else abs=#-u$ :sinus2 if abs>prec then proc trigonom_loop & goto sinus2 retval_sinus=s end :cosinus x=smval x=x*pi/180 n=0 u=1 s=1 if u>=0 then abs=#u$ else abs=#-u$ :cosinus2 if abs>prec then proc trigonom_loop & goto cosinus2 retval_cosinus=s end :trigonom_loop n=n+2 u=-u*x*x/((n-1)*n) s=s+u if u>=0 then abs=#u$ else abs=#-u$ end --
|
|
Профиль
Цитата
|
|
|
| постоянный участник
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 24.10.05 15:50. Заголовок: Re:
Вау! Волк, ты гений! Я давно хотел такой алгоритм, но мои слабые познания в математике не позволяли его написать!
|
|
Профиль
Цитата
|
|
| постоянный участник
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 24.10.05 19:07. Заголовок: Re:
Да... не слабай алгоритм...
|
|
Профиль
Цитата
|
|