Найти тему
ТехноШаман

Pixilang. Урок 4. Массивы, циклы.

Оглавление

На картинке представлен кадр анимации к созданию которой мы подойдем в этом уроке. В следующем уроке будем разбирать код, позволяющий делать подобные анимации.

В прошлые уроки у нас функции делали какие то действия, но они, кроме этого, могут выдавать на выход какое нибудь значение. Поэтому функции могут использоваться подобным образом

foo = function1( )

Здесь переменной foo присвоили значение, которое выдала функция function1( ).

Ещё один пример

function1( function2( ) , function3( ) )

Здесь в функцию function1( ) передаются в качестве параметров не непосредственные значения или ссылка в виде переменной, а другие функции. При выполнении кода, сначала будут выполнены function2( ) и function3( ), а полученные от них значения будут использованы в качестве параметров для function1( ).

rand( )

Функция rand() выдаёт случайное число в диапазоне от 0 до 32767.
Что бы получить нужный нам диапазон можно воспользоваться операцией
% (остаток от деления).

Например если 20 разделить на 3, то мы получим 6 и 2 в остатке. В Pixilang можно использовать такие варианты деления.

  • 20 / 3 = 6,6666 (деление)
  • 20 div 3 = 6 (деление без остатка)
  • 20 % 3 = 2 (остаток от деления или деление по модулю)

Если мы используем остаток от деления, например на 3, то на выходе получаем 3 варианта ответа: 0, 1, 2.

Например, если нам надо в переменную foo записать случайное число от 0 до 19 (20 вариантов значения), то можно записать так:

foo = rand() % 20

В начале программы, где используется функция rand( ) стоит использовать функцию
rand_seed( seed ) - установить позицию генератора случайных чисел. В качестве параметра пишется какое нибудь число.

Я использую такой вариант
rand_seed( get_seconds())

У меня есть видеоролик с разбором этой функции, так что если хотите узнать, как она работает, можете глянуть на моём Ютуб-канале.

while

while можно перевести так: " до тех пор, пока.."
Это цикл, который позволяет многократно выполнять какой нибудь фрагмент кода. Сегодня он нам заменит команду goto из прошлых уроков.

Синтаксис его записи простой

while условие
{
function1()
function2()
}

После команды while пишется условие и если оно верно, то будет выполнен код в фигурных скобках. После этого снова проверится условие если оно остаётся верным, то код в фигурных скобках выполниться опять.

И так по кругу, пока условие верно. Как только условие окажется неверным, будет выполнятся код, следующий за циклом.

В качестве условия используют те же варианты, как и в команде if
(смотри прошлый урок)

Примеры использования:

while 1
{
function1()
function2()
}

Вечный цикл, будет выполнятся пока программу не закроют или не будет реализован какой нибудь вариант выхода их цикла внутри кода в фигурных скобках.

i = 0
while i < 10
{
function1( i )
function2( i )
i = i + 1
}

Цикл, выполняемый заданное количество раз. Вначале создаётся переменная, обычно её дают имя i (index) и присваивается какое нибудь значение. Затем, внутри цикла изменяют переменную i.

В данном выше примере цикл будет выполнен 10 раз. Обратите внимание, что функциям, внутри цикла, в качестве параметра, передаётся значение индекса i. То есть этот код равноценен такому

function1( 0 )
function2( 0 )
function1( 1 )

function2( 1 )
function1( 2 )
.........
.........
function1( 9 )

function2( 9 )

Массив

Массив (автор языка называет их контейнерами) - таблица из X колонок и Y строк. Каждая ячейка этой таблицы - число определенного типа. Тип задан один на весь контейнер. Например, ячейки могут хранить цвета пикселей, тогда контейнер превращается в картинку. Контейнер может быть строкой текста, куском звука и т.д.

Массив имеет X*Y ячеек. Каждый массив после создания имеет свой ID (порядковый номер): 0,1,2,3 и т.д.
Нулевой ID по умолчанию указывает на контейнер с экраном.

создание нового массива

Что бы создать массив, можно воспользоваться функцией new().
В качестве параметров в функцию передаются количество колонок, количество строк и тип данных, которые будут записаны в массив.

foo = new( 5, 3, INT )

Здесь мы создали массив из 5 колонок и 3 строк, в которые будем записывать целые числа. INT - означает целое число (integer).
Можно использовать такие типы данных:

  • INT - знаковое целое
  • FLOAT - число с плавающей запятой
  • PIXEL - цвет. Массив этого типа представляет из себя картинку
  • и другие варианты

Функция new() вернула ID массива. Это число (номер массива), которое мы сохранили в переменной по имени foo. Теперь мы можем обращаться к элементам массива по этому имени.

Когда массив больше не нужен, то его стоит удалить, что бы он не занимал память. Особенно это актуально, когда массивы создаются динамически. Для этого используется функция remove( ) в качестве параметров в которую передаётся ID или имя массива

p = new(2,2,INT ) // Создаем новый контейнер
remove( p ) // Удаляем его

чтение и запись данных в массив

Мы создали массив с помощью строки

foo = new( 5, 3, INT )

Теперь у нас есть массив с именем foo в 5 колонок и 3 строки, который выглядит так:

-2

Для записи и считывания значений из ячеек используется такой синтаксис:

foo[ 2 , 0 ] = 53
count = foo[ 1 , 2 ]

Здесь мы в ячейку по адресу " массив foo, колонка 2, строка 0" записали число 53.
А в переменную
count записали число из массива foo, колонки 1, строки 2.

После имени массива ставятся квадратные скобки, в которых указывается номер колонки и номер строки нужной ячейки.

Заметьте, что индексация всегда начинается с 0.
То есть у нас есть три строки с номерами
0, 1 и 2.

пример использования цикла с массивами

-3

Мы создали массив foo на 5 колонок и 3 строки. Для заполнения массива случайными значениями, воспользуемся двумя циклами, один из которых находится внутри другого.

Пройдемся по тому, в какой последовательности будет заполняться массив.

foo[0,0] = rand()
foo[0,1] = rand()
foo[0,2] = rand()
foo[1,0] = rand()
foo[1,1] = rand()
foo[1,2] = rand()
foo[2,0] = rand()
foo[2,1] = rand()
foo[2,2] = rand()
foo[3,0] = rand()
foo[3,1] = rand()
foo[3,2] = rand()
foo[4,0] = rand()
foo[4,1] = rand()
foo[4,2] = rand()

На сегодня всё. Теперь у нас достаточно знаний, для создания красивой анимации, которую будем писать на следующем уроке.