RFO BASIC << 1 ... 35 36 37 38 39 ... 272 >> 3.11.2015 / 22:07 | | vh180477 Пользователь Сейчас: Offline
Имя: Валерка Откуда: Костомукша Регистрация: 03.11.2015
| Ошибку в примере с мотыльком сделал. Извините и перепишите. Открыть спойлер Закрыть спойлер REM Start of BASIC!Program
GR.OPEN 255,255,255,255
GR.ORIENTATION 1
GR.SCREEN w,h
GR.SET.ANTIALIAS 0
GR.SET.STROKE 1
GR.COLOR 255,255,0,0,1
LIST.CREATE N,list1
FOR q=1 TO 14
LIST.ADD list1,10
NEXT
GR.POLY pt,list1
DO
GR.RENDER
FOR q=1 TO 14
LIST.GET list1,q,x
LIST.REPLACE list1,q,x+RND()*5
NEXT
UNTIL 1=2
Прикрепленные файлы: мотылек-2.bas (0.31 кб.) Скачано 2174 раза |
4.11.2015 / 10:06 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| Очень большой выбор спрайтов! http://gcup.ru/load/resursy/sprajty_i_tajly/31Текстуры для создания фона или спрайтов. Изменено aNNiMON (5.11 / 00:53) (всего 2 раза) |
4.11.2015 / 10:52 | | vh180477 Пользователь Сейчас: Offline
Имя: Валерка Откуда: Костомукша Регистрация: 03.11.2015
| Список по сути одномерный безразмерный массив Открыть спойлер Закрыть спойлер LIST.CREATE n или s, list1 Создаёт список list1, первый параметр означает если s то строковой список если n то соответственно числовой
LIST.ADD list1,15 Добавляет в список list1 число 15, можно переменную или строку в зависимости от типа созданного списка. Каждый следующий вызов добавляет в конец списка новое значение. Например:
LIST.CREATE N,list1 % Создаём список N означает что список числовой
FOR q=1 TO 10
LIST.ADD list1,q % Добавляем в список текущее значение q
NEXT
В итоге получаем список от 1 до 10. Если смотреть по старому то можно сделать так:
DIM list1[10]
FOR q=1 TO 10
list1[q]=q
NEXT
Это одно и тоже но в первом случае список безразмерный а во втором массив объявлен заранее в 10 элементов
LIST.ADD.LIST list1, list2 Добавляет в список list1 список list2 . Например:
LIST.CREATE N,list1
LIST.CREATE N,list2
!Заполняем список list1
FOR q=1 TO 5
LIST.ADD list1,q
NEXT
!Заполняем список list2
FOR q=6 TO 10
LIST.ADD list2,q
NEXT
!Объединяем оба списка
LIST.ADD.LIST list1,list2
!Теперь список list1 состоит из 10 элементов от 1 до 10 а список list2 так и остался от 6 до 10
LIST.ADD.ARRAY list1, mas[] Добавляет в список list1, массив mas[] Например:
DIM mas[10]
LIST.CREATE N,list1
FOR q=1 TO 10
mas[q]=q
NEXT
LIST.ADD.ARRAY list1,mas[]
Теперь список list1 повторяет массив mas[]
LIST.REPLACE list1, pos, 15 меняет значение в списке list1 в позиции pos на 15 или другое значение Например:
DIM mas[10]
LIST.CREATE N,list1
FOR q=1 TO 10
mas[q]=q
NEXT
LIST.ADD.ARRAY list1,mas[]
! Допустим нам надо поменять значение 5 элемента в списке на -50
LIST.REPLACE list1,5,-50
Это как в массиве mas[5]=-50
LIST.INSERT list1, pos, 15 Вставляет значение 15 в список list1 в позицию pos Например:
LIST.CREATE N,list1
FOR q=1 TO 10
LIST.INSERT list1,q,1
NEXT
Получится список из 10 элементов заполненный еденицами.
LIST.REMOVE list1, list2 Плохо понял как это работает но написанно что удаляет из списка list1 список list2 По сути это обратная комманда от LIST.ADD.LIST но если список менялся я не понимаю как это будет работать.
LIST.GET list1, pos, x Записывает в переменную x значение элемента в позиции pos из списка list1 Например:
LIST.CREATE N,list1
FOR q=1 TO 10
LIST.INSERT list1,q,1
NEXT
!Теперь выведем все элементы списка на экран
FOR q=1 to 10
LIST.GET list1,q,x % В переменную x записывается значение элмента списка под номером q
PRINT x
NEXT
Эта длинная запись аналогична в массивах x=mas[q]
LIST.TYPE list1, t$ Записывает в переменную t$ тип списка если t$ = "n" числовой список если "s" символьный (строковой, строчный не знаю как правильно) Думаю и так всё понятно но всётаки пример:
LIST.CREATE S,list1
LIST.TYPE list1,t$
PRINT t$
В переменную t$ запишется "S" то есть список текстовый.
LIST.SIZE list1, x Размер списка list1 , сколько в нём элементов записывает в переменную x Когда размер списка неизвестен например по ходу игры добавляются герои или аптечки:
LIST.CREATE N,list1
x=ABS(RND()*10)+5 %Получаем случайное число от 5 до 15
FOR q=1 to x
LIST.INSERT list1,q,q
NEXT
! Какого размера список получился мы не знаем но ...
LIST.SIZE list1,x % Записываем в переменную x колличество элементов в списке list1
PRINT x
LIST.CLEAR list1 Стирает список list1 Тут думаю привер не нужен.
LIST.SEARCH list1, 15, x, pos Ищет число 15 в списке list1 и записывает его позицию в списке в переменную x, начинает искать с позиции pos Например нам надо найти сколько раз повторяется число 7 в списке list1:
LIST.CREATE N,list1
!Заполняем список случайными числоми от 1 до 15
FOR q=1 TO 100
LIST.INSERT list1,q,ABS(RND()*15)
NEXT
!Дольше можно сделать через DO UNTIL но я заметил что вы не используете эту конструкцию поэтому не знаю будет ли понятно могу написать через GOTO
pos=1 %Начально значение с какого искать
DO
LIST.SEARCH list1,7,x,pos
IF x<>0 THEN sch=sch+10 % Найдено число 7 увеличиваем счетчит на 1
pos=x+1 % Будем искать дальше со следующей позиции
UNTIL x=0 % Если больше не найдено выйти
PRINT sch % Выводим сколько раз встретилось число 7
LIST.TOARRAY list1, mas[] Помещает список в массив mas[]
LIST.CREATE N,list1
DIM mas[100]
FOR q=1 TO 100
LIST.INSERT list1,q,ABS(RND()*15)
NEXT
LIST.TOARRAY list1,mas[] % Скопировать список list1 в массив mas[]
Ух ..... Изменено vh180477 (4.11 / 10:53) (всего 1 раз) |
4.11.2015 / 10:56 | | vh180477 Пользователь Сейчас: Offline
Имя: Валерка Откуда: Костомукша Регистрация: 03.11.2015
| Наверно могут подумать что я бот но всё таки для закрепления маленький пример работы со списком. Открыть спойлер Закрыть спойлер REM Start of BASIC!Program
GR.OPEN 255,255,255,255
GR.ORIENTATION 0
GR.SCREEN w,h
GR.SET.ANTIALIAS 0
GR.SET.STROKE 1
GR.COLOR 255,255,0,0,1
LIST.CREATE N,list1
GR.RECT r,10,10,w-10,h-10
DIM m[8]
ARRAY.LOAD m[],10,h/2,w-10,h/2,w-10,h-10,10,w-10
LIST.ADD.ARRAY list1,m[]
FOR q=1 TO 60 STEP 2
LIST.INSERT list1,2+q,10+ABS(w/30)*ABS(q/2)
LIST.INSERT list1,2+q+1,ABS(RND()*(h-40))+20
NEXT
GR.POLY pt,list1
DO
GR.RENDER
FOR q=1 TO 60 STEP 2
LIST.REPLACE list1,2+q+1,ABS(RND()*(h-40))+20
NEXT
UNTIL 1=2
Немного похоже на осциллограф. Скочущий случайно график. Изменено vh180477 (4.11 / 10:59) (всего 1 раз) |
4.11.2015 / 11:15 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| Спасибо ! Все сохранил.
|
4.11.2015 / 11:18 | | 1961uvg Пользователь Сейчас: Offline
Имя: Victor Откуда: Минск Регистрация: 28.07.2015
| Все просто и понятно!
|
4.11.2015 / 11:20 | | vh180477 Пользователь Сейчас: Offline
Имя: Валерка Откуда: Костомукша Регистрация: 03.11.2015
| Может теперь по графике ? И нет ли у тебя случайно по типам переменных? Я тут копаю мануал и не могу найти как абъявить тип переменной. Написано что они только двух типов - строковые и числовые. А как допустим объявить что она целочисленная или вещественная или логическая?
|
4.11.2015 / 11:23 | | vh180477 Пользователь Сейчас: Offline
Имя: Валерка Откуда: Костомукша Регистрация: 03.11.2015
| Кстати с помощью этих полигонов можно накрапать простенький и быстрый райкастер. Они очень быстро работают. В старом Бейсике подобного оператора не было. Даже с реальным светом и полами и потолком. |
4.11.2015 / 13:20 | | vh180477 Пользователь Сейчас: Offline
Имя: Валерка Откуда: Костомукша Регистрация: 03.11.2015
| Немного по графике. Открыть спойлер Закрыть спойлер Для начала тут графика работает немного не так как в класическом Бейсике. Всё что мы нарисовали попадает в некий список который выводится по комманде GR.RENDER. То есть стирание рисованием тогоже объекта нулевым цветом не поможет, просто будут выводится два объекта. Поясню на примере скачущий мячик. Как это происходило в класическом Бейсике.
SCREEN 9
x=INT(RND(10,630))
y=INT(RND(10,470)
xs=5
ys=5
DO
CIRCLE (x,y),10,0 'Выводим шарик радиусом 10 цветом 0 то есть стираем его в старой позиции
x=x+xs 'Новые координаты
y=y+ys
'Проверим на достижение краёв экрана
IF x<5 OR x>635 THEN xs=xs*-1
IF y<5 OR y>475 THEN ys=ys*-1
CIRCLE (x,y),10,3 ' Выводим шарик в новой позиции 3 цветом
UNTIL 3=2
Теперь как это происходит в RFO:
GR.OPEN 255,255,255,255,0,0 % соответственно прозрачность, красный, зелёный, голубой, статусная строка показывать или нет, горизонтальная ориентация экрана
GR.SCREEN xx,yy %Узнаём разрешение экрана
x=ABS(RND()*xx-10)+10
y=ABS(RND()*yy-10)+10
xs=5
ys=5
GR.COLOR 255,255,0,0,1 % Непрозрачный красный цвет с заливкой
GR.CIRCLE q,x,y,10 % Помещаем шарик в список рендера. Он не будет отрисован немедленно. Но тут есть ньюанс. Теперь на этот шарик указывает переменная q(эта как ссылка что ли я не знаю как объяснить). В дальнейшем мы обращаемся к этой ссылке, переменной и меняем цвет, местоположение, размер конкретно у этого шарика.
DO
x=x+xs
y=y+ys
IF x<5 THEN xs=xs*-1
IF x>xx-5 THEN xs=xs*-1
IF y<5 THEN ys=ys*-1
IF y>yy-5 THEN ys=ys*-1
GR.MODIFY q,"x",x,"y",y % Тут мы обращаемся к шарику на который указывает переменная q и меняем его координаты. Стирать ничего не надо. Объект
GR.RENDER %Даём комманду отрисовать. На данный момент у нас в списке на отрисовку всего один объект - q он и будет отрисован.
UNTIL 3=2
Как то так. Изменено vh180477 (4.11 / 13:31) (всего 1 раз) |
4.11.2015 / 13:40 | | ewo Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 28.08.2015
| Ох нифига у вас тут прогресс! Vh180477 респект и уважуха! Еще при трассировку лучей вспомнили.. Я так не могу.. У меня огонь не задался ) http://rfobasic.freeforums.org/scroll-the-screen-t3676.html(замахнулся на такое http://jstsch.com/post/old-skool_fire_demo_effect_in_javascriptcanvas) Изменено ewo (4.11 / 13:42) (всего 1 раз) |
<< 1 ... 35 36 37 38 39 ... 272 >> Всего сообщений: 2716 Фильтровать сообщения Поиск по теме Файлы топика (511)
|