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("Ошибка ввода, повторите операцию");
}
}
}