Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
В общем случае Activity (активность) — это потомок класса Activity, который отображает форму приложения и, как правило, занимает весь экран. Чтобы создать активность, ее нужно унаследовать от класса Activity и создать метод onCreate(). Более простыми словами, активность это одна страница браузера, которую в текущий момент просматривается в Интернете. С помощью такой конструкции можно получить пустой экран, который без layout-файла не представляет интереса.
Листинг 5.1 – Класс Activity
public class MainActivity extends Activity {
©Override
public void onCreate(Bundle savedInstanceState){ super. onCreate(savedInstanceState);
}
}
Layout — это компоновка, или макет отображаемой страницы, которая хранится в формате xml-файла. Такое разделение на layout и активность дает разработчику возможность, не изменяя код, скорректировать внешний вид отображаемой страницы. Таким образом можно регулировать ориентацию и размер экрана, а так же язык интерфейса.
Далее приведен layout-файл (листинг 5.2), который используется для создания главного экрана приложения.
Листинг 5.2 – Layout-файл, главного экрана.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas. /apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_column="0">
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_gravity="center_horizontal"
android:textAlignment="gravity"
android:inputType="number"
android:ems="10"
android:layout_marginTop="@dimen/abc_action_bar_stacked_tab_max_width"
android:gravity="center"
android:layout_weight="0" />
<Button
android:id="@+id/btnstart"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="Далее"
android:layout_gravity="center_horizontal"
android:layout_weight="0" />
</LinearLayout>
В данном файле создается линейный layout и два виджета EditText и Button с некоторым параметрами. Главным из данных параметров является имя элемента, которое записывается следующим образом android: id="@+id/ суть которого заключается в возможности вызова в Activity данного layout-файла и его виджетов.
Далее необходимо получить доступ к упомянутому layout-файлу, для чего используется метод setContentView(). Доступ к виджетам Button и EditText производится через программный код, что в конечном итоге приводит к тому, что MainActivity выглядит так, как показано на рисунке 5.4.

Рисунок 5.4 – Виджет MainActivity.
Button — класс, унаследованный от TextView, один из самых распространенных в программировании, используется для получения заданной реакции при нажатии. EditText — это текстовое поле, которое можно редактировать, данный класс наследуется от класса TextView.
Для отображения следующей страницы требуется создать новую активность (options), которая является потомком MainActivity. Для вызова активности (options) с нужными параметрами обрабатывается нажатие кнопки «Далее». При этом создается переменная класса Intent и передается параметр в новую активность (options). Этот параметр (хранящий основание новой системы счисления) считывается из переменной класса EditText.
Intent (намерение) — механизм для совершения какой-либо одной из операций таких как: «отправить письмо», «открыть страницу в браузере» или как в данном случае «открыть новую активность».
При вызове активности (options) появляется окно, содержащее две кнопки «на время» и «на внимательность», которые заранее были созданы в layout - файле новой активности (листинг 5.3). При помощи активности (options), нажав на одну из упомянутых кнопок можно выбрать соответствующий режим тренировки.
Листинг 5.3 – Layout-файл, выбор режима игры.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas. /apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/btntime"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:text="На время"
android:layout_gravity="center"
android:layout_weight="10" />
<Button
android:id="@+id/btnalert"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:text="Внимательность"
android:layout_gravity="center"
android:layout_weight="0" />
</LinearLayout>
Для создания активности «на время» (notation) или «на внимательность» (alert) необходим layout-файл, где основным компонентом является табличный layout. Далее программно создается двумерный массив кнопок размерности 5х5. Помимо этого используются переменные класса TextView для отображения случайного числа, которое нужно перевести, разрядов вводимого ответа, а так же суммарного результата и таймера.
TextView — один из самых распространенных виджетов, позволяющий отображать текст, без права редактирования пользователем.
Дальнейшим шагом является заполнение массива кнопок значениями. Для этого используется процедура, которой передается параметр, отвечающий за количество разрядов результата. В итоге матрица имеет вид, рассматриваемый на нескольких примерах:
На рисунке 5.4 представлен пример заполнения матрицы в двоичной системе счисления.
Пользователю нужно найти в данной матрице число 24, при переводе в двоичную систему запись которого имеет вид 11000. Матрица была сгенерирована таким образом, что в ней имеется несколько правильных решений. Например, последовательный ввод ячеек с адресами (1,4);(0,4);(0,3);(0,2);(0,1) или (1,1);(1,0);(2,0);(3,0);(4,0) будут правильными ответами для этой задачи.

Рисунок 5.4 – Заполнение массива в двоичной системе счисления.
На рисунке 5.5 представлен пример заполнения матрицы в восьмеричной системе счисления.
Пользователю нужно найти в данной матрице число 1180, при переводе в восьмеричную систему запись которого имеет вид 2234. Матрица была сгенерирована таким образом, что в ней имеется единственное правильное решение. Последовательный ввод ячеек с адресами (1,3);(2,3);(3,3);(3,4) будет правильным решением для этой задачи.

Рисунок 5.5 – Заполнение массива в восьмеричной системе счисления.
На рисунке 5.6 представлен пример заполнения матрицы в шестнадцатеричной системе счисления.
Пользователю нужно найти в данной матрице число 28896, при переводе в восьмеричную систему запись которого имеет вид 70Е0. Матрица была сгенерирована таким образом, что в ней имеется два варианта правильного решения. Последовательный ввод ячеек с адресами (2,0);(3,0);(4,0);(4,1) либо (2,0);(3,0);(3,1);(4,1) будет являться правильным решением для этой задачи.

Рисунок 5.6 – Заполнение массива в шестнадцатеричной системе счисления.
Основным свойством любой предлагаемой для решения таблицы, является то, что в ней обязательно содержится как минимум одно решение. Если результат является небольшой последовательностью в таблице может встречаться несколько вариантов решения, нахождение любого из них является правильным ответом.
Самый трудоемкий этап разработки пришелся на создание определенного алгоритма заполнения, который бы соответствовал поставленной цели и был бы универсальным для всех решаемых задач. Для чего был разработан следующий алгоритм, гарантирующий наличие в исходной матрице как минимум одного решения (приложение 2, листинг 2.1).
При первоначальном заполнении таблицы используется булевский массив, размер которого на два больше размера игрового поля, а также стек. В булевском массиве хранятся позиции, на которых в текущий момент размещены некоторые цифры ответа. В стеке хранится путь к этим позициям. В начальный момент случайным образом выбирается стартовая клетка, в которой начинается запись ответа. В каждый следующий момент случайным образом выбирается одна из свободных клеток расположенная рядом с текущей и на нее устанавливается следующая цифра ответа. Если ответ еще не сформирован, а рядом расположенных свободных клеток нет, то производится откат по стеку до первой возможности построения другого пути.
После успешного размещения ответа оставшаяся часть таблицы заполняется случайными цифрами соответствующими системе счисления для перевода.
Для реализации игрового процесса используется тот же булевский массив, размер которого на два больше размера игрового поля, а так же стек. В булевском массиве хранятся позиции, которые игрок посчитал нужным выделить как решение, а стек используется для того, что бы знать конечный ход на данный момент времени. Если игрок посчитал, что вводимое решение записывается не верно, то для отмены достаточно совершить нажатия на кнопки в обратном порядке. При этом значения ячеек в булевском массиве меняются на противоположные, а из стека поочередно удаляется последний элемент. Как только количество выбранных цифр совпадает с количеством разряда результата, происходит сравнение решения с исходным результатом. Если все цифры совпадают, то на экране появляется оповещение об удачной попытке. Кроме того, в режиме «на время», при успешном вводе, игроку добавляется некоторое количество дополнительных секунд. После этого генерируется новое число и процесс поиска решения повторяется вновь. Если же в процессе проверки не совпадают значения хотя бы одного разряда, то происходит вывод оповещения на экран об ошибке и игроку дается возможность ввести последовательность цифр вновь. После некоторого количества удачных попыток ввода количество разрядов начинает увеличиваться на один, тем самым реализуя усложнение задачи для игрока.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


