RFO BASIC 28.12.2016 / 22:14 | | lion1971 Пользователь Сейчас: Offline
Имя: Lion1971 Регистрация: 12.12.2016
| в data положить папку hanoy с рисунками
Прикрепленные файлы: data.zip (52.81 кб.) Скачано 61 раз source.zip (0.89 кб.) Скачано 54 раза |
29.12.2016 / 03:07 | | b0ing Пользователь Сейчас: Offline
Имя: Макс Регистрация: 24.08.2016
| Вопрос алгоритма преследования был реализован мной почти два года назад в игрушке под названием четыре шара в версии 2. Отмечу что это была заря изучения RFO. Поэтому код в игре п...ц, но в ней есть тот самый алгоритм. В первой версии использовал направления под углом в 45 и 90 градусов - наипростейший с применением условий. А вот во второй суть сводится к вычислению длины диагонали между двумя точками и вычисления угла относительно друг друга,движение точки это как бы увеличивающийся радиус круга, сам круг и радиус естественно не видно, а вот точка радиуса-окружности показана. Вообщем кому надо.
Прикрепленные файлы: FourBall_v2.bas (10.44 кб.) Скачано 942 раза |
29.12.2016 / 03:13 | | b0ing Пользователь Сейчас: Offline
Имя: Макс Регистрация: 24.08.2016
| Видел тут вопрос по кнопкам. Решил помочь. Накатал демку по работе с функцией click(). Коментарии в листинге. Открыть спойлер Закрыть спойлер ! Демонстрация работы функции click()
! Значения возвращаемые функцией открывают
! богатые возможности для регистрации
! событий и анимации кнопок.
! В целях демонстрации тут реализована простенькая
! анимация на события.
! Для того, чтобы поймать момент самого клика
! в программе ипользована пауза, чтобы получить
! максимальное быстродействие, читаем листинг
! и выключаем блок программы с паузой, который
! ловит клик и тормозит процесс, чтобы мы смогли его
! увидеть.
gr.open 255,100,100,100,0,1
gr.screen sw,sh
gosub gr_functions
! Задаем координаты четырех областей касаний,
! а также - цветных прямоугольников (кнопок)
! lt - left, tp - top, rt - right, bt - bottom
array.load lt[], 0, sw/2, sw/2, 0
array.load tp[], 0, 0, sh/2, sh/2
array.load rt[], sw/2, sw, sw, sw/2
array.load bt[], sh/2, sh/2, sh, sh
!Задаем цвета прямоугольникам (кнопкам)
array.load r[], 255, 100, 255, 100
array.load g[], 100, 255, 255, 100
array.load b[], 100, 100, 100, 255
! И отрисовываем
dim rct[4]
for i=1 to 4
gr.color 150, r[i], g[i], b[i],1
gr.rect rct[i], lt[i], tp[i], rt[i], bt[i]
next
! Границы кнопок обозначим линиями.
gr.color 255,0,0,0,0
gr.set.stroke 3
gr.line ln,sw/2,0,sw/2,sh
gr.line ln,0,sh/2,sw,sh/2
! Создаем лейблы с информацией о статусе кнопок.
! Четыре кнопки - четыре лейбла.
dim tx[8]
gr.color 255,255,255,255,1
tx[1]=tx(sw/4,sh/4,"")
tx[2]=tx(sw/4*3,sh/4,"")
tx[3]=tx(sw/4*3,sh/4*3,"")
tx[4]=tx(sw/4,sh/4*3,"")
! Под лейблами со статусом, покажем информацию о
! том, находится ли программа на паузе.
! Создаем еще четыре лейбла под статусными.
! И сразу делаем их невидимыми, чтобы показывать
! в нужный момент.
ps$="Включена пауза"
gr.color 0
tx[5]=txp(sw/4,sh/4+sh/30,ps$)
tx[6]=txp(sw/4*3,sh/4+sh/30,ps$)
tx[7]=txp(sw/4*3,sh/4*3+sh/30,ps$)
tx[8]=txp(sw/4,sh/4*3+sh/30,ps$)
gr.render
! Массиву cl[] - будет возвращаться
! значение функции click(),
! а массиву s$[] - будем задавать значение статусных лейблов, для удобочитаемости листинга, хотя
! он (массив) и не нужен.
dim cl[4], s$[4]
! Переменная fltch - ключ управления опросом кнопок
! Прослушивание кнопок начинается в момент
! касания экрана.
! Состояние fltch=1, при загрузке программы,
! установлено для определения статуса кнопок и вывода на экран их значений.
fltch=1
DO
! Можно было обойтись и без gr.touch
! команда нужна для более стабильной работы, чтобы
! нажатие на кнопку не происходило в середине цикла
! опроса кнопок, это приводило бы к тому, что более
! старшая кнопка в цикле не понимала когда нажали
! не на нее
! Если мы не хотим регистрировать стабильное
! состояние 10 функции click(), мы можем смело
! стереть ( if !fltch then gr.touch fltch, xtch, ytch),
! удалить переменную fltch, и оставить в цикле DO
! только слушатель gosub Listener
! fltch обнуляется в подпрогр. stand_by
if !fltch then gr.touch fltch, xtch, ytch
if fltch then gosub Listener
UNTIL 0
! Ну понеслась
Listener:
for i=1 to 4
! Массив cl[] нужен не только
! для возвращения
! значений функции click(), он нужен еще и
! для передачи в нее, ее же состояния,
! поэтому он присутствует одним из
! аргументов функции, по сути, являясь ее
! входящими данными.
! Так же функция принимает координаты
! нажатий на экран lt,tp,rt,bt, указанные в начале
! программы
cl[i]=click(lt[i],tp[i],rt[i],bt[i],cl[i])
! click() - возвращает значения событий кнопок.
! 0 - режим ожидания (прослушивание).
! 1 - нажатие и удержание кнопки (кнопка вниз).
! 2 - нажатие-отпускание кнопки (клик).
! И 10 - это тот момент, когда что-то нажато, но
! не сама кнопка.
! Также click() понимает, когда на кнопку надавили
! и съехали с нее не отрываясь от экрана,
! это прекращает регистрацию клика
!Событие "Клик" происходит одномоментно без
!всяких
!повторений, поэтому далее используем паузу для
!регистрации этого события.
! Чтобы не нагромождать код, уводим события в
! отдельные процедуры
if cl[i]=1 then gosub Down
if cl[i]=2 then gosub Clicked
if cl[i]=10 then gosub No_down
next
! Узнаем все ли кнопки перешли в режим ожидания
! Если все, то stand_by
if !cl[1] & !cl[2] & !cl[3] & !cl[4] then gosub Stand_by
gr.render
Return
! При желании можно расписать процедуры для
! каждой кнопки типа Вutton1_Down, Button1_Click
! Button2_noFocus и так далее...
! Понимающие программисты поймут ;)
Stand_by:
! Перевод всех значений в стартовое состояние
for i=1 to 4
! Цвет кнопки
gr.modify rct[i],"alpha",150
! Скрываем инфо о паузе
gr.modify tx[i+4],"alpha",0
! Выводим статус
s$[i]="Ожидание"
gr.modify tx[i],"text",s$[i]
! Указываем, что опрос кнопок надо остановить
fltch=0
next
Return
Down:
! Цвет нажатой кнопки чуть ярче остальных
! Стандартное значение 150
gr.modify rct[i],"alpha",210
! Выводим статус нажатой кнопки
s$[i]="Кнопка вниз"
gr.modify tx[i],"text",s$[i]
Return
No_down:
! Кнопка узнает, что нажали не на нее
! и становится чуть темнее
gr.modify rct[i],"alpha",70
! Выводим статус ненажатой кнопки
s$[i]="Нажали не меня :("
gr.modify tx[i],"text",s$[i]
! Скрываем инфо о паузе на всякий случай :)
gr.modify tx[i+4],"alpha",0
Return
Clicked:
! Момент отпускания
! Выводим статус
s$[i]="Был клик"
gr.modify tx[i],"text",s$[i]
! Обесцвечиваем кнопку,
! Становится виден серый фон.
gr.modify rct[i],"alpha",0
! Включаем паузу и сообщение о ней
! Чтобы увидеть реальную скорость клика -
! Закоментируйте этот блок ⤵
gr.modify tx[i+4],"alpha",255
gr.render
pause 2000
! ⤴
Return
Gr_functions:
! Это текстовые функции
! Совсем другая история
fn.def txp(x,y,s$)
gr.screen w,h
gr.text.align 2
s=h/50 : gr.text.size s
v=-(s*(0.29/2))+s/2
gr.text.draw t,x,y+v,s$
fn.rtn t
fn.end
fn.def tx(x,y,s$)
gr.screen w,h
gr.text.align 2
s=h/40 : gr.text.size s
v=-(s*(0.29/2))+s/2
gr.text.draw t,x,y+v,s$
fn.rtn t
fn.end
! Вот она - гордость разработчика :)
! Функция, которая возвращает,
! практически, все необходимые события стандартной
! кнопки. (на самом деле есть еще круче, но
! эта более простая в освоении :-)
fn.def click(lt,tp,rt,bt,f)
gr.bounded.touch btc,lt,tp,rt,bt
gr.touch tc,x,y
if f=1 then c=1
if f=2 then c=0
if f=10 then c=10
if tc=1 & btc=0 & f=0 then c=10
if btc=1 & f<10 then c=1
if btc=0 & tc=0 & f=10 then c=0
if f=1 & btc=0 & tc=0 then c=2
if f=1 & btc=0 & tc=1 then c=0
fn.rtn c
fn.end
Return
! Функция click(), при закрытии программы,
! изредка вызывает жалобы на синтаксис, похоже
! на баг РФО
! Это решается здесь ↴
onerror:
end ""
Изменено b0ing (29.12 / 03:13) (всего 1 раз)
Прикрепленные файлы: Demo_Fn_Click.bas (9.64 кб.) Скачано 878 раз |
29.12.2016 / 09:37 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| bOing СПАСИБО ! Игрушка и Demo классно сделаны! Demo почти как статья получилась от такого количества коментариев. А в игрушке я не понял как играть? Это типа выбираешь цвет и ждешь кто победит? Едят желтый, а что фиолетовый делает?
|
29.12.2016 / 17:44 | | b0ing Пользователь Сейчас: Offline
Имя: Макс Регистрация: 24.08.2016
| Пояснение к игре - 4 шара.Открыть спойлер Закрыть спойлер В игрушке изначально присутствуют четыре шара зеленый, белый, синий и оранжевый. Да, суть их сводится к выживанию. Когда появляется горох (желтый шарик), они все чешут к нему и какой быстрей его слопает тот становится на единицу больше, скорость его тоже становится на единицу больше, то есть у него появляется преимущество перед другими, чтобы съесть другой горох. При столкновении друг с другом их раскидывает по случайным координатам экрана, а так же у них на единицу убавляется здоровье и скорость, то есть в этот момент, преимущество получают шары которые не дерутся. Когда появляется красный горох (вероятность его появления регулируется), то при столкновении у шаров списывается по 10 хп, и съевший этот горох шар тоже получает 10 единиц, интересный момент получается когда столкнувшийся шар съедает красный горох, в итоге как бы забирает у противника 10 очков. Если единицы здоровья становятся отрицательной величиной, шар как бы умирает, превращаясь в духа, при этом его начальная скорость равна примерно 40 единицам, последующими столкновениями уменьшаясь, и примерно когда скорость духа достигает -100 единиц он постепенно останавливается а затем покидает поле. Интересно получается когда большой шар остальных превращает в духов,а они в свою очередь могут здорово поубавить ему здоровье часто даже переламывая победу в другую сторону. Появление гороха тоже рэндомно и жизнь у него тоже разная, он может раньше исчезнуть чем до него кто-нибудь доберется. Побеждает оставшийся на экране шар. Эту игрушку смело можно назвать симулятором выживания. Иногда когда болеешь за какой-нибудь шар ему почему-то начинает везти больше остальных. Не знаю с чем это связано, но тендеция такая. Посути вся игра построена на случайных генераторах, может ли мозг как-то влиять на результаты? Первые разы думал все кажется, но количество результатов говорит об обратном. Эта область еще не изучена (наверное). Отпишитесь о своих наблюдениях.
Отвечаю на вопрос. Да, и влиять на результаты в игре нельзя. Выбираем шар и ждем.
Изменено b0ing (29.12 / 17:52) (всего 2 раза) |
29.12.2016 / 19:23 | | lion1971 Пользователь Сейчас: Offline
Имя: Lion1971 Регистрация: 12.12.2016
| Изменено lion1971 (29.12 / 19:24) (всего 1 раз) |
29.12.2016 / 19:27 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| Очень прикольно! Я и сам уже почти понял суть! И действительно если сильно болеть за выбранный шар , он побеждает? Короче альтернатива игры Конвея "Жизнь" или "Life". Мне очень понравилось - уже пару часов гоняю и почти все понял без описания. Но описание поставило все на свои места. Буду дальше играть - хотя играть это условно, наверно лучше - считать , что болеть за выбранный шар!
Изменено 1961uvg (29.12 / 19:29) (всего 1 раз) |
29.12.2016 / 19:46 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| Lion1971 Интересные сайты, хотя первый больше для Web дизайнеров! Они англоязычные, но google chrome помогает понять!
Изменено 1961uvg (29.12 / 19:46) (всего 1 раз) |
30.12.2016 / 03:20 | | levapbar Пользователь Сейчас: Offline
Имя: Павел Регистрация: 04.09.2016
| b0ing По поводу влияния мозга на генератор случайных чисел. Набери в google "генератор случайных событий". Не чисел, а событий. Интересно почитать.
|
30.12.2016 / 08:51 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| На официальном форуме нашел первую демонстрационную программу виртуальной реальности, т.е. динамическое стерео ( 3D ). Для просмотра нужны очки виртуальной реальности для смартфона, их можно сделать из картона ( можно найти в интернете ) или купить, есть подороже - из пластмассы. http://info.vrstorecardboard.ru/ Как один и самый бюджетный вариант это использовать лист бумаги ( картон ), установить на экран смартфона по середине между двух изображений и смотреть каждое изображение своим глазом. В программе есть три режима: 1 - полупрозрачные квадраты; 2 - цветные точки ( звезды ) и 3 - буквы. Выбираем и смотрим как это летит на Вас. Ну очень эффектно смотрится !!! Изменено 1961uvg (30.12 / 09:01) (всего 2 раза)
Прикрепленные файлы: Burst%20VR.bas (4.55 кб.) Скачано 849 раз |
Всего сообщений: 2716 Фильтровать сообщения Поиск по теме Файлы топика (511)
|