Switch() в SannyBuilder

Тема в разделе "CLEO", создана пользователем Владислав, 6 июл 2014.

  1. Владислав

    Владислав Member Основатель

    Регистрация:
    29 май 2014
    Сообщения:
    109
    Симпатии:
    0
    Конструкция switch в этом примере реализована через подключение дополнительных файлов перед компиляцией скрипта.
    Как пример взят скрипт для изменения погоды в игре.
    Код:
    {$CLEO}
    {$I switch}
    //    0@ - Поточный ID погоды
    //    1@ - Флаг текст-бокса. 1 - нужно показать текст бокс, 0 - не нужно
    while true
        wait 0
        if
            0AB1: call_scm_func @KeyJustPressed 1 _vkey 219
        then
            0@--
            0AB1: call_scm_func @Limit 3 0@ _min 0 _max 22 _ret 0@
            1@ = 1
        else
            if
                0AB1: call_scm_func @KeyJustPressed 1 _vkey 221
            then
                0@++
                0AB1: call_scm_func @Limit 3 0@ _min 0 _max 22 _ret 0@
                1@ = 1
            end
        end
        if
            1@ == 1
        then
            1@ = 0
            set_weather 0@
            01B7: release_weather
            // Конструкция switch используется позволяет выбрать действие в зависимости от значения переменной.
            //
            //    {$I switch(<ПЕРЕМЕННАЯ>)} // Начало конструкции
            //  
            //        {$I case <ЗНАЧЕНИЕ1>}
            //            // Код, который выполнится, если ПЕРЕМЕННАЯ равна ЗНАЧЕНИЮ1.
            //            break - выход из конструкции.
            //      
            //        {$I case <ЗНАЧЕНИЕ2>}
            //            // Код, который выполнится, если ПЕРЕМЕННАЯ равна ЗНАЧЕНИЮ2.
            //            break - выход из конструкции.
            //            
            //        ...
            //      
            //        // Также в конструкции можно использовать специальный случай, именованный как default.
            //        {$I default}
            //            // Код, который выполнится, если переменная не равна ни одному из ЗНАЧЕНИЙ.
            //  
            //    {$I switch_end} // Завершение конструкции
            {$I switch(0@)}
                {$I case 0}
                    0ACA: show_text_box "0 - Los Santos - Extra Sunny"
                    break
                {$I case 1}
                    0ACA: show_text_box "1 - Los Santos - Sunny"
                    break
                {$I case 2}
                    0ACA: show_text_box "2 - Los Santos - Extra Sunny Smog"
                    break
                {$I case 3}
                    0ACA: show_text_box "3 - Los Santos - Sunny Smog"
                    break
                {$I case 4}
                    0ACA: show_text_box "4 - Los Santos - Cloudy"
                    break
                {$I case 5}
                    0ACA: show_text_box "5 - San Fierro - Sunny"
                    break
                {$I case 6}
                    0ACA: show_text_box "6 - San Fierro - Extra Sunny"
                    break
                {$I case 7}
                    0ACA: show_text_box "7 - San Fierro - Cloudy"
                    break
                {$I case 8}
                    0ACA: show_text_box "8 - San Fierro - Rainy"
                    break
                {$I case 9}
                    0ACA: show_text_box "9 - San Fierro - Foggy"
                    break
                {$I case 10}
                    0ACA: show_text_box "10 - Las Venturas - Sunny"
                    break
                {$I case 11}
                    0ACA: show_text_box "11 - Las Venturas - Extra Sunny"
                    break
                {$I case 12}
                    0ACA: show_text_box "12 - Las Venturas - Cloudy"
                    break
                {$I case 13}
                    0ACA: show_text_box "13 - Countryside - Extra Sunny"
                    break
                {$I case 14}
                    0ACA: show_text_box "14 - Countryside - Sunny"
                    break
                {$I case 15}
                    0ACA: show_text_box "15 - Countryside - Cloudy"
                    break
                {$I case 16}
                    0ACA: show_text_box "16 - Countryside - Rainy"
                    break
                {$I case 17}
                    0ACA: show_text_box "17 - Desert - Extra Sunny"
                    break
                {$I case 18}
                    0ACA: show_text_box "18 - Desert - Sunny"
                    break
                {$I case 19}
                    0ACA: show_text_box "19 - Desert - Sandstorm"
                    break
                {$I case 20}
                    0ACA: show_text_box "20 - Underwater"
                    break
                {$I case 21}
                    0ACA: show_text_box "21 - Extracolours 1"
                    break
                {$I case 22}
                    0ACA: show_text_box "22 - Extracolours 2"
            {$I switch_end}
        end
    end
    // Функция сверяет, нажата ли клавиша, и в случае нажатия - ждёт, пока клавиша не будет отпущена.
    :KeyJustPressed
    //    0@ - ID клавиши
    if
        0AB0: key_pressed 0@
    then
        while 0AB0: key_pressed 0@
            wait 0
        end
        0485: return_true
        0AB2: ret 0
    end
    059A: return_false
    0AB2: ret 0
    // Функция ограничивает число в указанных рамках.
    :Limit
    //    0@ - число
    //    1@ - нижняя граница ограничения
    //    2@ - верхняя граница ограничения
    //    Возвращаемое значение: число в указанных рамках
    if
        802D: not 0@ >= 1@
    then
        0085: 0@ = 2@
    else
        if
            001D: 0@ > 2@
        then
            0085: 0@ = 1@
        end
    end
    0AB2: ret 1 0@
     
    #1

Поделиться этой страницей