In choice among IF or SWITCH ... I prefer not to use Bool!

To say honestly I tried all. And even in combination it works. I use 3 levels as desired in beginning, may be it is not a good option but… I’d better spam code page with IF and SWITCH words but give up using BOOL which is… very strange.

By the way IF is hard-olds-cool matter. SWITCH is more elegant.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hacker : MonoBehaviour
{
    //Конфигурация игры
    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 == "menu")
        {
            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");
        if (isValidLevelNumber)
        {
            level = int.Parse(input);
            StartGame();
        }
        else if (input == "3")
        {
            level = 3;
            StartGame();
        }
        else if (input == "КОРОНА")
        {
            Terminal.WriteLine("Соединение с сервером космического агентства «КОРОНА»... Ошибка"); // Прикол
        }
        else
        {
            Terminal.WriteLine("Ошибка ввода");
        }
    }
    void StartGame()
    {
        currentScreen = Screen.PasswordStage;
        Terminal.ClearScreen();
        switch(level)
        {
            case 1:
                password = level1passwords[2];
                break;
            case 2:
                password = level2passwords[3];
                break;
            case 3:
                password = level3passwords[4];
                break;
            default:
                Debug.LogError("Каталог повреждён");
                break;
        }
        Terminal.WriteLine("Выбран каталог " + level);
        Terminal.WriteLine("Исправьте название каталога");
    }
    void CheckPassword(string input)
    {
    if (input == password)
        {
        Terminal.WriteLine("\nПоздравялем, каталог исправлен!\n" +
            "Остальные названия восстановит сервисная программа.\n" +
            "Марсоход «Алтай» готов к работе, можно отправляться в путь!");
        }
    else 
        {
        Terminal.WriteLine("Ошибка ввода, повторите операцию");
        }
    }
}

image

Hello, Human Plant Studio :slight_smile:

I agree with you that using the switch results in a much more elegant code structure.

I can understand why you may not like the bool! For me, I have to rethink some small details to work the bool into my code, but in the end, I believe it will shorten the overall length of code and make it cleaner.

Also, I love the timestamp on your main menu! That is really a nice detail because it is in the future.

Have a nice day! :smile:
-GK

Privacy & Terms