Review

Hello, Ben and Rick! Thank you for your hangouts!
I’d like to share some reflex on the course that I learn.

Well not everything here is FAIL ha-ha-ha! I passed the Quiz, I know the meaning.

So first. The main trouble at first (for me) is miss understanding of code structure. The best thing I expect is an additional lecture. What is going on. May be keeping in line flowchart and code. Words where and why functions start and go. I started to understand the structure only at 28th lecture or smth. I’m an absolute novice in programming… but I keep going.

Lets talk about ‘Extracting method’ on PC. It took me several days to find out a solution. That is probably new one and should be shown to students even at first ‘Extract method’ occasion.

I made a short video. Recorded operation even twice… Before found that icon is inactive because no bit of code selected. Needle thing but may be confusing.

Next. I really advise students NOT TO DELETE any bit of code you made following the instructor. Make it // and provide with comments.

Else it is useful to make your own Q&A document, to come back and see. May be // parts in code will be enough. May be not. Up to you.

So what I did last in this section… I made an additional code comments, where I realized that bool can handle not only 2, but 3 elements of choice… and returned to my previous version.

yes, I started with 3 levels from the beginning. and decided to keep it intact as I did at first trials with bool, if and switch.

Here it is

using UnityEngine;

public class Hacker : MonoBehaviour
{
    //Конфигурация игры
    const string menuHint = "Для возврата к исходному сообщению наберите слово «меню»";
    string[] level1passwords = { "Орбита", "Шлюз", "Посадка", "Двигатели", "Стыковка" };
    string[] level2passwords = { "Реголит", "Магнитосфера", "Перхлораты", "Радиация", "Метеорит" };
    string[] level3passwords = { "Бетельгейзе", "Арктур", "Канопус", "Ригель", "Альдебаран" };

    // Переменные в игре
    int level;
    enum Screen { MainMenu, PasswordStage, WinState };
    Screen currentScreen;
    string password;

    // Use this for initialization
    void Start() {
        print("Бортовой компьютер марсохода «Алтай» " + "активирован");
        ShowMainMenu("10:00 24.02.2037");
    }
    void ShowMainMenu(string messagedata)
    {
        currentScreen = Screen.MainMenu;
        Terminal.ClearScreen();
        Terminal.WriteLine("Сообщение от " + messagedata + " командиру экспедиции «МАРСИНФОСФЕРА».");
        Terminal.WriteLine("От: Максима Уфимцева, научного руководителя космического агентства «КОРОНА»\n\n" +
            "Приветствую, Апекс! Вчера марсоход «Алтай» попал в пылевую бурю.\n" +
            "Вы знаете, основная опасность пыли на Марсе – статическое электричество.\n" +
            "Считается, что марсоход экранирован, но всё равно его необходимо обесточить.\n" +
            "По какой-то причине команда выключения не прошла, хотя индикаторы подтвердили,\n" +
            "что всё в порядке. Бортовой компьютер завершил работу в нештатном режиме,\n" +
            "и в результате произошёл сбой доступа к базе данных. Названия ключевых\n" +
            "каталогов повреждены. Мы можем передать резервную копию по каналу связи,\n" +
            "но это займёт много времени. По плану сегодня поездка во вторую локацию,\n" +
            "но я рекомендую ненадолго задержаться и восстановить каталог в компьютере\n" +
            "марсохода, иначе возникнут сложности с определением целевых координат\n" +
            "на локации. Это поставит под угрозу план экспедиции. Вот список каталогов:\n");
        Terminal.WriteLine("1. Каталог «Управление космическими аппаратами» (Легко)");
        Terminal.WriteLine("2. Каталог «Планетология Марса» (Средне)");
        Terminal.WriteLine("3. Каталог «Система навигации по звёздам» (Тяжело)\n");
        Terminal.WriteLine("Выберете каталог для восстановления: ");
    }
    void OnUserInput(string input)
    {
        if (input == "меню")
        {
            ShowMainMenu("Исходное сообщение");
        }
        else if (currentScreen == Screen.MainMenu)
        {
            RunMainMenu(input);
        }
        else if (currentScreen == Screen.PasswordStage)
        {
            CheckPassword(input);
        }
    }
    void RunMainMenu(string input)
    {
        bool isValidLevelNumber = (input == "1" || input == "2");
        // если убрать else if (input = "3")
        // {
        // level = 3;
        // AskForPassword();
        // }
        // bool будет выглядеть так: bool isValidLevelNumber = (input == "1" || input == "2" || input == "3");
        if (isValidLevelNumber)
        {
            level = int.Parse(input);
            AskForPassword();
        }
        else if (input == "3")
        {
            level = 3;
            AskForPassword();
        }
        else if (input == "КОРОНА")
        {
            Terminal.WriteLine("Соединение с сервером космического агентства «КОРОНА»... Ошибка"); // Прикол
        }
        else
        {
            Terminal.WriteLine("Ошибка ввода");
            Terminal.WriteLine(menuHint);
        }
    }
    void AskForPassword()
    {
        currentScreen = Screen.PasswordStage;
        Terminal.ClearScreen();
        SetRandomPassword();
        Terminal.WriteLine("Выбран каталог " + level);
        Terminal.WriteLine("Исправьте название каталога " + password.Anagram());
    }
    private void SetRandomPassword()
    {
        switch (level)
        {
            case 1:
                password = level1passwords[Random.Range(0, level1passwords.Length)];
                break;
            case 2:
                password = level2passwords[Random.Range(0, level2passwords.Length)];
                break;
            case 3:
                password = level3passwords[Random.Range(0, level3passwords.Length)];
                break;
            default:
                Debug.LogError("Каталог повреждён");
                break;
        }
    }

    void CheckPassword(string input)
    {
        if (input == password)
        {
            DisplayWinScreen();
        }
        else
        {
            AskForPassword();
        }
    }
    void DisplayWinScreen()
    {
        currentScreen = Screen.WinState;
        Terminal.ClearScreen();
        ShowLevelReward();
    }
    void ShowLevelReward()
    {
        switch (level)
        {
            case 1:
                Terminal.WriteLine(@"
MMMMMMMMWXOdl;'..........';ldONMMMMMMMMM   Восстановлена база данных
MMMMMMNkc,..  ............. ..,lkNMMMMMM   по управлению космической
MMMMXd,. ............ ...... ..,loxXMMMM   техникой.
MMWk,.........':;...,:o;...,lx0N0,.;kWMM
MXl......... ,OWNX0KNWM0ox0NMMMXc....oNM
Xl. ....... 'kN0xolllldkXWMMMMWd. .. .lN
d. ........'dd;..      .'l0WMMO' .... .d
, ........ok:.............'kWK;....... ,
........:0No.............. ,0Kl....... .
........cXX: ............. .kNo. .......
........:0Wd. ............ ;KXl.........
. ..... 'kWXl. ...........;xx;........ .
:..... .oWMMWOc'..   ...;dkc...........c
O, ....:XMMMMMWXOxdddxkKNK:.......... ,0
Wk'.. ,0MMMWNOdOWMNKKXWMXc...........,OW
MW0:..xNXOdc,. ,do,..';c;. .........:0WM
MMMNxll:'.  ........... ..........,xNMMM   
MMMMMXx;.. .....................:xXMMMMM  
MMMMMMMW0d:,..   ....... ...,cd0WMMMMMMM   Для возврата к исходному сообщению
MMMMMMMMMMWKkl;'........';lkXWMMMMMMMMMM   наберите слово «меню»");
                break;
            case 2:
                Terminal.WriteLine(@"
MMMMMMMMWXOdl;'..........';ldONMMMMMMMMM   Восстановлена база данных
MMMMMMNkc,..  ............. ..,lkNMMMMMM   по планетологии Марса.
MMMMXd,. ............ ...... ..,loxXMMMM   
MMWk,.........':;...,:o;...,lx0N0,.;kWMM
MXl......... ,OWNX0KNWM0ox0NMMMXc....oNM
Xl. ....... 'kN0xolllldkXWMMMMWd. .. .lN
d. ........'dd;..      .'l0WMMO' .... .d
, ........ok:.............'kWK;....... ,
........:0No.............. ,0Kl....... .
........cXX: ............. .kNo. .......
........:0Wd. ............ ;KXl.........
. ..... 'kWXl. ...........;xx;........ .
:..... .oWMMWOc'..   ...;dkc...........c
O, ....:XMMMMMWXOxdddxkKNK:.......... ,0
Wk'.. ,0MMMWNOdOWMNKKXWMXc...........,OW
MW0:..xNXOdc,. ,do,..';c;. .........:0WM
MMMNxll:'.  ........... ..........,xNMMM
MMMMMXx;.. .....................:xXMMMMM
MMMMMMMW0d:,..   ....... ...,cd0WMMMMMMM   Для возврата к исходному сообщению
MMMMMMMMMMWKkl;'........';lkXWMMMMMMMMMM   наберите слово «меню»");
                break;
            case 3:
                Terminal.WriteLine(@"
MMMMMMMMWXOdl;'..........';ldONMMMMMMMMM   Восстановлена база данных
MMMMMMNkc,..  ............. ..,lkNMMMMMM   по звёздной навигации.
MMMMXd,. ............ ...... ..,loxXMMMM
MMWk,.........':;...,:o;...,lx0N0,.;kWMM
MXl......... ,OWNX0KNWM0ox0NMMMXc....oNM
Xl. ....... 'kN0xolllldkXWMMMMWd. .. .lN
d. ........'dd;..      .'l0WMMO' .... .d
, ........ok:.............'kWK;....... ,
........:0No.............. ,0Kl....... .
........cXX: ............. .kNo. .......
........:0Wd. ............ ;KXl.........
. ..... 'kWXl. ...........;xx;........ .
:..... .oWMMWOc'..   ...;dkc...........c
O, ....:XMMMMMWXOxdddxkKNK:.......... ,0
Wk'.. ,0MMMWNOdOWMNKKXWMXc...........,OW
MW0:..xNXOdc,. ,do,..';c;. .........:0WM
MMMNxll:'.  ........... ..........,xNMMM
MMMMMXx;.. .....................:xXMMMMM
MMMMMMMW0d:,..   ....... ...,cd0WMMMMMMM   Для возврата к исходному сообщению
MMMMMMMMMMWKkl;'........';lkXWMMMMMMMMMM   наберите слово «меню»");
                break;
            default:
                Debug.LogError("Повторите попытку восстановления");
                break;
        }
    }
}

So, this game works. It was a great pleasure not only to repeat but to make some creative advances in completing the original task.

The ascii symbol was made by online program.
https://www.ascii-art-generator.org/

I hope my review became helpful.

P.S. If you know Russian you can read the texts. This is not about hacking.
That about game that we are developing,

New genre. S.A.N.E.
Scientific Adventure And Exploration.

You may visit our site.
http://realuniverse.ru/
That is not translated yet, even it is and old version that we are going to renew soon.

If you eager to make space exploration game. with NO WARS, NO AGGRESSIVE ALIENS, BUT WITH EDUCATIONAL CONTENT, please send me a message. We are all doing it in enthusiasm, getting no rewards except passion, dream and call of Bright future for all Humanity.

Privacy & Terms