АвторСообщение



Не зарегистрирован
Зарегистрирован: 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

Пользуйтесь на здоровье.

У трав, растущих на мягкой земле - слабые корни Спасибо: 0 
Цитата
Ответов - 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 Этот текст будет лиловым
...



У трав, растущих на мягкой земле - слабые корни Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 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


Данный код придуман и разработан всеми любимым Евгом. Я его лишь несколько уточнил (на этапе временного эталона).

Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 21.01.05 01:06. Заголовок: Как в досурке изменить цвет фона.


/* Этот кусочек кода изменяет цвет всего фона на(в данном случае) синий. */

clrscr=1
Style_DOS_TextColor=27
Style_DOS_FillEol=1
pln ##0$
cls

Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 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

Строгое жюри Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 21.01.05 21:48. Заголовок: Re: Алгоритмы URQL


Мы говорим на разных языках...

Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 21.01.05 23:16. Заголовок: Re: Алгоритмы URQL


Да, с локациями там трабл :) Я просто читерски «разделил» экран на области для текста и кнопок, ну и clsил постоянно.

Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 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

Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 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, но я всё равно первый люблю больше ж)

Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 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


А Вы читали «Листья травы»? Спасибо: 0 
Цитата



Не зарегистрирован
Зарегистрирован: 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› РАБОТАЕТ!!!



А Вы читали «Листья травы»? Спасибо: 0 
Цитата
постоянный участник


Не зарегистрирован
Зарегистрирован: 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
--

"Кстати он намного разговорчивее Walky, этого злобного существа" © Спасибо: 0 
Профиль Цитата
постоянный участник


Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 24.10.05 15:50. Заголовок: Re:


Вау!
Волк, ты гений!
Я давно хотел такой алгоритм, но мои слабые познания в математике не позволяли его написать!

Выдра - это та же крыса. Разница в пиаре. Спасибо: 0 
Профиль Цитата
постоянный участник




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 24.10.05 19:07. Заголовок: Re:


Да... не слабай алгоритм...

на случай вдруг какая-то сволочь тебе напишет :) Спасибо: 0 
Профиль Цитата
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 25
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет