Урок 22. Вызываем наши методы.

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

     

  • Когда игра начинается, мы хотим создать новый вопрос игроку. Поэтому последней строчкой в теле метода onCreate() вызовем метод setQuestion():
        setQuestion();
    
    }//метод onCreate заканчивается здесь
  • Затем наше внимание переходит на метод onClick(), который определит какая из кнопок была нажата пользователем и какое значение было помещено в переменную answerGiven. Так что в конце метода onClick(), после закрывающейся фигурной скобки оператора switch мы вызываем метод updateScoreAndLevel():
        }//switch заканчивается здесь
        updateScoreAndLevel(answerGiven);
    }//метод onClick заканчивается здесь
  • Таким образом, ответ, данный игроком, отправится через параметр answerGiven в метод updateScoreAndLevel(), который в свою очередь вызовет в своём теле метод isCorrect() и в зависимости верно ли дан ответ или нет добавит очков и увеличит уровень сложности или сбросит счетчик очков и уровня игроку. Теперь нам нужно отобразить следующий вопрос игроку. Вызываем метод setQuestion() сразу же после метода updateScoreAndLevel():
    }//switch заканчивается здесь
        updateScoreAndLevel(answerGiven);
        setQuestion();
    }//метод onClick заканчивается здесь

 

Теперь разберёмся с самого начала работы приложения. Пользователь кликает по иконке нашего приложения на своём Android устройстве. Кликает по кнопке Play. В нашем классе GameActivity происходит объявление переменных, к которым нам нужен будет доступ на протяжении всего времени работы приложения:

int correctAnswer;
Button buttonObjectChoice1;
Button buttonObjectChoice2;
Button buttonObjectChoice3;
TextView textObjectPartA;
TextView textObjectPartB;
TextView textObjectScore;
TextView textObjectLevel;
int currentScore = 0;
int currentLevel = 1;

 

После чего в методе onCreate инициализируем некоторые переменные и даём нашим кнопкам возможность “быть кликнутыми” игроком до того момента, как вызовем метод setQuestion(), который установит вопрос. Далее игра будет ждать ответа игрока. Когда игрок ответит (нажмет на одну из трех кнопок), приложение будет работать с методами onClick(), updateScoreAndLevel(), isCorrect(). После отработки последнего метода управление программой перейдёт вновь в метод onClick() и вызовется метод setQuestion() – устанавливаем новый вопрос и ждём ответ игрока.

Последние штрихи

Наша “математическая игра” обрела свой вид. Но нам нужно идти вперёд. Этот проект послужит нам отличной отправной точкой для обучения языку Java. Благодаря этому проекту мы продемонстрировали вам фундаментальные основы программирования на Java, а также некоторые особенности Android. Теперь нам нужно дальнейшее погружение в разные темы для создания игр-приложений.

Но перед этим сделаем еще пару простых манипуляций с нашей “математической игрой”, чтобы она выглядела более привлекательной. На случай если у вас остается вопрос о кнопке HighScore могу вас успокоить, мы посмотрим, как это можно реализовать чуть позднее. У вас будет достаточно знаний, чтобы потом вернуться и самим реализовать эту функцию.

Другим возможным нововведением в нашу игру может быть такой функционал, как время на ответ игрока. И с этим мы тоже разберёмся попозже и подтянем в этой области наши знания. А пока сделаем пару преобразований:

  • Блокировка ориентации экрана;
  • Изменение изображения в меню.

 
Полный экран и блокировка ориентации

Вы могла заметить, что когда вы переворачиваете девайс в то время, как наша игра работает, наш пользовательский интерфейс искажается, а вместе с этим еще и теряется игровой прогресс (очки, уровень). Почему так происходит? Потому что во время поворота экрана вызываются методы onPause() и onStop(). Поэтому приложение и перезапускается. Мы могли бы справиться с этим, переопределив метод onPause() и сохранив наши данные. Мы научимся это делать позже. Но пока нам достаточно того, что мы откажемся от вращения гаджета. Таким образом решим сразу две проблемы.

Шаг за шагом следуйте этому руководству:

  • В вашем проекте откройте файл AndroidManifest.xml. Находится он в папке “manifests”:

android_manifest.xml

  • Найдите первую открывающуюся “<activity” в коде и впишите новую строку:
    android:screenOrientation="portrait"
  • Точно такую же строку впишите после второго “<activity”. Таким образом мы закрепили оба наших activity (MainActivity, GameActivity) в портретном виде:

portrait orientation android manifest

  • Чтобы сделать игру полноэкранной, в этом де файле манифесте, найдите текст ниже и отредактируйте пункт android:theme” (требуемая для редактирования строка выделена):
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">
  • Сохраните проект.

 
Теперь, когда вы будете вращать девайс во время игры в наше приложение, книжная ориентация (portrait) будет зафиксирована. Вот как должен выглядеть ваш файл AndroidManifest.xml:

android_manifest.xml

Но тут есть небольшое лукавство – дело в том, что полоса для отображения времени/заряда батареи все равно будет видно, чтобы её убрать необходимо в методе onCreate() (каждого созданного нами класса) сразу же после его открытия (после “{”) нужно написать:

requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

Импортируйте необходимые библиотеки при подсказе от Android Studio. Теперь ваш интерфейс полностью покрывает весь экран.

Добавление собственного изображения (вместо значка Android)

Вероятно, мы не очень хотим, чтобы иконка Android красовалась в нашем меню. Выполним процедуру по замене этого изображения (надеюсь, у вас есть какое-нибудь изображение или можете сами его нарисовать по-быстрому):

  • Сперва нам необходимо добавить в проект это изображение. Скопируйте и вставьте его в папку drawable:

add image in android studio project

  • Теперь это изображение – часть проекта. Нам просто необходимо его выбрать также, как мы это сделали с изображением Android –робота ранее. Открываем файл activity_main.xml, кликните по иконке робота и в свойствах элемента выберите ваше изображение:

image properties

choose image in android studio

  • Сохраните проект.

Теперь это изображение будет красоваться у вас на экране меню:

android studio app

Мы проделали с вами долгий путь с этой игрой. Окунулись в обработку циклов в Java, начали разбираться с методами и тем, как ими пользоваться. Научились генерировать случайные числа и применили эти знания в улучшении нашей “математической” игры.

 
Не будем останавливаться на достигнутом и перейдём к созданию следующей игры. В новой игре мы научимся добавлять анимацию и звуковые эффекты. Для этого нам опять потребуется погрузиться в теорию Java.

Код для этого урока можно скачать ниже. Если есть какие-то вопросы – задавайте в комментариях.

Скачать исходники