Материал из Скретч Вики

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

Пример «Список победителей»

Что нужно для создания

Нам понадобятся несколько переменных. Все названия приведены в пример, однако, если их заменить, то нужно заменить названия и в скриптах ниже.

(символы)
(i)
(i2)
(i3)
(☁ data)

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

Шифрование

Для начала поочерёдно возьмём элементов массива, разделим их каким-нибудь разделителем, например, 00 и преобразуем всё в числовой формат (например, в двузначные числа).

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

when gf clicked
set [символы v] to [0123456789abcdefghijklmnopqrstuvwxyz]

define encode
set [i v] to [0]
set [☁ data v] to []
repeat (length of [пользователи v])
    change [i v] by (1)
    set [i2 v] to [0]
    repeat (length of (item (i) of [пользователи v]))
        change [i2 v] by (1)
        set [i3 v] to [0]
        repeat until <(letter (i2) of (item (i) of [пользователи v])) = (letter (i3) of (z))>
            change [i3 v] by (1)
        end
        if <(i3) < [10]> then
            set [☁ data v] to (join (☁ data) (join [0] (i3)))
        else
            set [☁ data v] to (join (☁ data) (i3))
        end
    end
    set [☁ data v] to (join (☁ data) [00])
end

Расшифровка

define decode
set [i v] to [1]
delete (all v) of [пользователи v]
add [] to [пользователи v]
repeat ((length of (☁ data)) / (2))
    if <(join (letter (i) of (☁ data)) (letter ((i) + (1)) of (☁ data))) = [00]> then
        add [] to [пользователи v]
    else
        replace item (last v) of [пользователи v] with (join (item (last v) of [пользователи v]) (letter (join (letter (i) of (☁ data)) (letter ((i) + (1)) of (☁ data))) of (символы)))
    end
    change [i v] by (2)
end
delete (last v) of [пользователи v]

Смотри также