В моем предыдущем посте я рассказал, что сейчас учусь создавать игры на C # и Unity. Итак, сегодня я собираюсь передать кое-что из того, что я узнал, и научу вас, как сделать простую игру в угадывание чисел.

Игра состоит из того, что игрок выбирает число от 1 до 1000, а компьютер пытается угадать это число. После каждого неверного предположения игрок скажет, больше или меньше их число, и компьютер будет использовать эту информацию, чтобы снова угадать.

Давай перейдем к делу. Первый шаг - создать новый 2D-проект в Unity. После загрузки Unity вам нужно будет создать новый скрипт C #, прикрепить его к игровому объекту и щелкнуть по нему, чтобы открыть редактор кода.

Теперь, когда ваш редактор открыт, пора написать приветствие и правила игры для игрока. В нашем методе Start () мы напишем наш код для вывода их на консоль:

Start(){
   Debug.Log(“Welcome to Number Wizard!”); // or whatever you want to call your game
 
   Debug.Log(“Pick a number between 1 and 1000 and I bet I can guess it!”); 
 
   Debug.Log(“Is your number higher than, lower than, or exactly 500?”);
 
   Debug.Log(“If it’s higher, press Up. If it’s lower, press Down. And if it’s correct, press Enter.”);
}

Затем мы захотим объявить некоторые переменные для минимального и максимального чисел, из которых игрок может выбирать, а также для нашего первоначального предположения. Мы хотим объявить их над методом Start (), чтобы они были доступны для всех методов нашей игры.

int max = 1000; // We’re using int to signify that our value is an integer.
int min = 1;
int guess = 500; // Our initial guess will be 500 because we’re using (max + min)/2 as our guess formula 500 is about half of 1001.

После того, как мы объявили переменные, мы можем обновить часть текста и включить их. Это гарантирует, что наш текст всегда отражает текущее значение наших переменных.

Debug.Log(“Pick a number between “ + min + “ and “ + max + “ and I bet I can guess it!”);
Debug.Log(“Is your number higher than, lower than, or exactly “ + guess + “?”);

После объявления переменных нам нужно создать вход для игрока. Ему нужно войти в Update (), потому что все, что входит в Start (), будет запускаться только один раз при запуске игры. Однако Update () будет запускаться один раз в каждом кадре.

Чтобы захватить ввод игрока, мы собираемся использовать условный оператор в сочетании с Input .GetKeyDown (), чтобы определить, какую клавишу нажимал игрок. Если игрок говорит, что их количество больше, чем первоначальное предположение, равное 500, тогда нам нужно установить нашу переменную min равной нашему предположению (500). Если игрок говорит, что их количество меньше, то нам нужно установить значение нашей переменной max на предположение.

Update(){ 
   if(Input.GetKeyDown(KeyCode.UpArrow)){ 
      min = guess; guess = (max + min) / 2; 
      Debug.Log(“Is your number “ + guess +”?”); 
   } 
   if(Input.GetKeyDown(KeyCode.DownArrow)){ 
      max = guess; guess = (max + min) / 2; 
      Debug.Log(“Is your number “ + guess +”?”); 
   } 
   if(Input.GetKeyDown(KeyCode.Return)){ 
      Debug.Log(“Woohoo! I guessed correctly. Your number was “ +  guess + “!”); 
   } 
}

После нажатия кнопки воспроизведения в Unity и небольшого тестирования вашего кода вы можете заметить, что в настоящее время мы не можем угадать 1000. Чтобы исправить эту ошибку, нам просто нужно добавить max = max + 1 к нашему методу Start () под выводом приветствия и правил.

Start(){
   Debug.Log(“Welcome to Number Wizard”);
   Debug.Log(“Pick a number between “ + min + “ and “ + max + “ and I bet I can guess it!”);
   Debug.Log(“Is your number higher than, lower than, or exactly “ + guess + “?”);
   Debug.Log(“If it’s higher, press Up. If it’s lower, press Down. And if it’s correct, press Enter.”);
   max = max + 1;
}

Мы почти закончили!

Мне нравится инкапсулировать свой код в методы, когда это возможно, поскольку рефакторинг помогает сделать код более читаемым для других. Первым делом рефакторинга, который мы могли бы сделать, было бы взять весь наш код в Start () выше и поместить его в отдельный метод. Мы назовем этот метод StartGame (), так как рекомендуется называть свои методы в честь того, что они выполняют.

void StartGame() // void signals that this method does not have a return value. 
 {
   Debug.Log(“Welcome to Number Wizard!”); // or whatever you want to call your game
 
   Debug.Log(“Pick a number between 1 and 1000 and I bet I can guess it!”); 
 
   Debug.Log(“Is your number higher than, lower than, or exactly 500?”);
 
   Debug.Log(“If it’s higher, press Up. If it’s lower, press Down. And if it’s correct, press Enter.”);
 
   max = max + 1;
 
 }

Теперь мы можем избавиться от всего кода в Start () и заменить его на StartGame (). Это дает тот же результат, что и наш исходный формат, однако он более читабелен.

Есть еще один способ рефакторинга нашего кода. Хороший признак того, что мы должны провести рефакторинг, - это если мы видим какой-либо повторяющийся код в нашем проекте. В нашем условном выражении в Update () я вижу пару строк, которые можно преобразовать в метод, который мы вызовем NextGuess ().

void NextGuess() {
   guess = (max + min) / 2;
   Debug.Log(“Is your number “ + guess +”?”);
}

Теперь мы можем заменить повторяющийся код в условных операторах этим новым методом NextGuess ().

После завершения рефакторинга наш последний шаг - создать игровой цикл, чтобы наша игра автоматически перезапустилась, если номер игрока угадан правильно.

Для этого мы должны обновить наш недавно созданный метод StartGame (), сбросив значения наших переменных вверху. Если мы не сбросим наши переменные до их исходных значений, игра продолжится с теми значениями, которые были установлены в конце предыдущей игры.

void StartGame(){
   max = 1000;
   min = 1;
   guess = 500;
   Debug.Log(“Welcome to Number Wizard”);
   Debug.Log(“Pick a number between “ + min + “ and “ + max + “ and I bet I can guess it!”);
   Debug.Log(“Is your number higher than, lower than, or exactly “ + guess + “?”);
   Debug.Log(“If it’s higher, press Up. If it’s lower, press Down. And if it’s correct, press Enter.”);
   max = max + 1;
}

После обновления метода мы можем продолжить и добавить вызов StartGame () в наш условный оператор, когда игрок нажимает клавишу Enter. Это приведет к перезапуску игры, как только номер игрока будет угадан правильно.

Итак, мы только что создали игру по угадыванию чисел, используя C # и Unity! Продолжайте и нажмите кнопку воспроизведения, чтобы попробовать! Полный код файла можно найти здесь.