|  RFO BASIC<< 1  ... 35 36 37 38 39  ... 272 >>  |  3.11.2015 / 22:07 |  |  | vh180477    Пользователь 
  Сейчас: Offline 
 Имя: ВалеркаОткуда: Костомукша
 Регистрация: 03.11.2015
 
 | Ошибку в примере с мотыльком сделал. Извините и перепишите. Открыть спойлер Закрыть спойлер REM Start of BASIC!ProgramGR.OPEN 255,255,255,255GR.ORIENTATION 1GR.SCREEN w,hGR.SET.ANTIALIAS 0GR.SET.STROKE 1GR.COLOR 255,255,0,0,1LIST.CREATE N,list1FOR q=1 TO 14    LIST.ADD list1,10NEXTGR.POLY pt,list1DO    GR.RENDER    FOR q=1 TO 14        LIST.GET list1,q,x        LIST.REPLACE list1,q,x+RND()*5    NEXTUNTIL 1=2
 Прикрепленные файлы:  мотылек-2.bas   (0.31 кб.) Скачано 2304 раза  | 
 |  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, можно переменную или строку в зависимости от типа созданного списка. Каждый следующий вызов добавляет в конец списка новое значение.
 Например:
 
 В итоге получаем список от 1 до 10. Если смотреть по старому то можно сделать так:    LIST.CREATE N,list1 % Создаём список N означает что список числовой    FOR q=1 TO 10        LIST.ADD list1,q % Добавляем в список текущее значение q    NEXT
 Это одно и тоже но в первом случае список безразмерный а во втором массив объявлен заранее в 10 элементов    DIM list1[10]    FOR q=1 TO 10        list1[q]=q    NEXT
 LIST.ADD.LIST list1, list2
 Добавляет в список list1 список list2 .
 Например:
 
 LIST.ADD.ARRAY list1, mas[]    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
Добавляет в список 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[]
 LIST.REPLACE list1, pos, 15
 меняет значение в списке list1 в позиции pos на 15 или другое значение
 Например:
 
 Это как в массиве mas[5]=-50    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
 LIST.INSERT list1, pos, 15
 Вставляет значение 15 в список list1 в позицию pos
 Например:
 
 Получится список из 10 элементов заполненный еденицами.    LIST.CREATE N,list1    FOR q=1 TO 10        LIST.INSERT list1,q,1    NEXT
 LIST.REMOVE list1, list2
 Плохо понял как это работает но написанно что удаляет из списка list1 список list2
 По сути это обратная комманда от LIST.ADD.LIST но если список менялся я не понимаю как это будет работать.
 
 LIST.GET list1, pos, x
 Записывает в переменную x значение элемента в позиции pos из списка list1
 Например:
 
 Эта длинная запись аналогична в массивах x=mas[q]    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
 LIST.TYPE list1, t$
 Записывает в переменную t$ тип списка если t$ = "n" числовой список если "s" символьный (строковой, строчный не знаю как правильно)
 Думаю и так всё понятно но всётаки пример:
 
 В переменную t$ запишется "S" то есть список текстовый.    LIST.CREATE S,list1    LIST.TYPE list1,t$    PRINT t$
 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!ProgramGR.OPEN 255,255,255,255GR.ORIENTATION 0GR.SCREEN w,hGR.SET.ANTIALIAS 0GR.SET.STROKE 1GR.COLOR 255,255,0,0,1LIST.CREATE N,list1GR.RECT r,10,10,w-10,h-10DIM m[8]ARRAY.LOAD m[],10,h/2,w-10,h/2,w-10,h-10,10,w-10LIST.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))+20NEXTGR.POLY pt,list1DO    GR.RENDER    FOR q=1 TO 60 STEP 2        LIST.REPLACE list1,2+q+1,ABS(RND()*(h-40))+20    NEXTUNTIL 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) 
 |