Разработка мобильного приложения на платформе Android
Бесплатный доступ
В статье описывается разработка мобильного приложения, используя платформу Android для разработки.
Разработка, мобильное приложение, платформа android
Короткий адрес: https://sciup.org/140288118
IDR: 140288118
Текст научной статьи Разработка мобильного приложения на платформе Android
Необходимо разработать игровое приложение «Пятнашки» на платформу Android. Пятнашки - известная всему миру головоломка. Игроку доступно поле размером 3x3, состоящее из 9 клеток. Все клетки кроме одной заняты костяшками с номерами от 1 до 8, которые перемешаны между собой. Цель игры - упорядочить костяшки по порядку используя свободное поле. Игра поможет развивать память и логическое мышление.
Разрабатывать мобильное приложение будем в Visual Studio, используя Xamarin. Xamarin – это фреймворк для кроссплатформенной разработки мобильных приложений (iOS, Android, Windows Phone) с использованием языка C#.
Для создания игры будем использовать интегрированную среду разработки Microsoft Visual Studio, потому что это оригинальная среда, которая позволяет редактировать, отлаживать и создавать код, а затем публиковать приложения. Интегрированная среда разработки (IDE) – это многофункциональная программа, которую можно использовать для различных аспектов разработки программного обеспечения. Помимо стандартного редактора и отладчика, которые существуют в большинстве сред IDE, Visual Studio включает в себя компиляторы, средства выполнения кода, графические конструкторы и многие другие функции для упрощения процесса разработки программного обеспечения.
Для разработки игры будем использовать объектно ориентированный язык программирования C#. Разработан в 1998 —2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA- 334 и ISO /IEC 23270.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Пользовательский интерфейс необходим для передачи информации между программно-аппаратными компонентами системы и пользователем. Следовательно, интерфейс должен быть максимально простым, удобным и интуитивно понятным для каждого пользователя.
Макет стартового окна игрового приложения изображен на рисунке 1.
ПЯТНАШКИ
ИГРАТЬ
Рисунок 1 – Макет стартового окна игрового приложения
Макет главного окна игрового приложения изображен на рисунке 2.

Рисунок 2 – Макет главного окна игрового приложения
2 СРАВНИТЕЛЬНЫЙ АНАЛИЗ С СУЩЕСТВУЮЩИМИ АНАЛОГАМИ
Классические пятнашки представлены на рисунке 3. Классическая игра для тех, кто хочет скоротать время и потренировать свои мозги.

Рисунок 3 – Классические пятнашки
Пятнашки: собери картинку представлена на рисунке 4. Игра представляет собой набор квадратных костяшек с нанесёнными числами или изображением, заключённых в квадратную коробку, в коробке остаётся незаполненным одно квадратное поле.

Рисунок 4 – Пятнашки: собери картинку
Пятнашки представлены на рисунке 5. Если Вам надоели скучные фишки, то эта игра для Вас. Вместо них здесь используются капли росы на зеленом листе. При этом они трясутся и булькают, когда до них дотрагиваешься. Необычный дизайн игры понравится как взрослым, так и детям.

Рисунок 5 – Пятнашки
Сравнение 3-х вышеописанных приложений представлено в таблице 1.
Таблица 1 – Сравнение существующих приложений
Мобильное приложение |
Основной функциона л |
Отличительны е особенности |
Стоимость |
Рекла ма |
Интерфейс |
Классически е пятнашки |
Выбор размера поля, лучший результат |
На костяшках цифры |
Бесплатно |
Есть |
Классический |
Пятнашки: собери картинку |
Выбор размера поля, время, ходы |
На костяшках картинки и цифры |
Бесплатно |
Есть |
Стандартный |
Продолжение таблицы 1
Пятнашки |
Выбор размера поля, время, ходы, звук |
На костяшках цифры |
Бесплатно |
Есть |
Необычный интерфейс, вместо костяшек капли росы |
3 РАЗРАБОТКА ПРИЛОЖЕНИЯ
3.1 Описание приложения с точки зрения разработчика
Игровое приложение будет состоять из двух окон. Стартовое окно при запуске приложения и игровое окно с отображением игрового поля.
Создание пользовательского интерфейса стартового окна представлено в листинге 1.
Листинг 1 – Пользовательский интерфейс стартового окна
xmlns:x="" xmlns:local="clr-namespace:PuzzleGame" x:Class="PuzzleGame.MainPage" >
Код для загрузки страницы и обработки нажатия на кнопку «Играть» представлен в листинге 2.
Листинг 2 – Загрузка и обработка нажатия namespace PuzzleGame { public partial class MainPage : ContentPage
{ public MainPage()
{
InitializeComponent();
} async void PlayBtn_Clicked(object sender, EventArgs e) { var game = new Game();
await Navigation.PushAsync(game);
}
}
}
Создание пользовательского интерфейса игрового окна представлено в листинге 3.
Листинг 3 - Пользовательский интерфейс игрового окна
xmlns:x="" x:Class="">
Далее опишем логику работы приложения. Для начала необходимо создать массив, который будем рандомно располагать значения в полях. Создание массива представлено в листинге 4.
Листинг 4 – Создание массива static Random rnd = new Random();
for (int i = 0; i < n; i++)
T t = array[r];
array[r] = array[i];
array[i] = t;
} |
} |
|
public Game() { InitializeComponent( |
); |
|
puz7, puz8, |
Button[] puzzles = { puz9 }; |
puz1, puz2, puz3, puz4, puz5, puz6, |
"" }; |
string[] puz = { "1" |
, "2", "3", "4", "5", "6", "7", "8", |
} |
Shuffle(puz); for (int i = 0; i < { puzzles[i].Text } |
puzzles.Length; i++) = puz[i]; |
После расстановки значений необходимо осуществить замену значений в ячейках, т. е. будет двигаться не ячейка, а меняться значение в ней. При нажатии на ячейку 1, код, представленный в листинге 5, будет перемещать значение, находящееся в ячейке 1 в соседнюю (пустую), т.е. либо в ячейку 2, либо в ячейку 4.
Листинг 5 – Нажатие на ячейку 1
}
EndCheck();
}
При нажатии на ячейку 2, код, представленный в листинге 6, будет перемещать значение, находящееся в ячейке 2 в соседнюю (пустую), т. е. либо в ячейку 1, либо в ячейку 3, либо в ячейку 5.
Листинг 6 – Нажатие на ячейку 2
{ |
puz1.Text = puz2.Text; |
puz2.Text = ""; |
} |
if (puz3.Text == "") |
{ |
puz3.Text = puz2.Text; |
puz2.Text = ""; |
} |
if (puz5.Text == "") |
{ |
puz5.Text = puz2.Text; |
puz2.Text = ""; |
} |
EndCheck(); |
} |
При нажатии на ячейку 3, код, представленный в листинге 7, будет перемещать значение, находящееся в ячейке 3 в соседнюю (пустую), т.е. либо в ячейку 2, либо в ячейку 6.
Листинг 7 – Нажатие на ячейку 3
}
EndCheck();
}
При нажатии на ячейку 4, код, представленный в листинге 8, будет перемещать значение, находящееся в ячейке 4 в соседнюю (пустую), т.е. либо в ячейку 1, либо в ячейку 5, либо в ячейку 7.
Листинг 8 – Нажатие на ячейку 4
private void Puz4_Clicked(object sender, EventArgs e)
{ |
^^^^^^^^— |
if |
(puz1.Text == "") |
{ |
puz1.Text = puz4.Text; puz4.Text = ""; |
} |
|
if |
(puz5.Text == "") |
{ |
puz5.Text |
= puz4.Text; |
puz4.Text |
= ""; |
} |
|
if (puz7.Text |
== "") |
{ |
|
puz7.Text |
= puz4.Text; |
puz4.Text |
= ""; |
} |
|
EndCheck(); |
|
} |
При нажатии на ячейку 5, код, представленный в листинге 9, будет перемещать значение, находящееся в ячейке 5 в соседнюю (пустую), т.е. либо в ячейку 2, либо в ячейку 4, либо в ячейку 6, либо в ячейку 8.
Листинг 9 – Нажатие на ячейку 5
private void Puz5_Clicked(object sender, EventArgs e) |
{ |
if (puz2.Text == "") |
{ |
puz2.Text = puz5.Text; |
puz5.Text = ""; |
} |
if (puz4.Text == "") |
{ |
puz4.Text = puz5.Text; |
puz5.Text = ""; |
} |
if (puz6.Text == "") |
{ |
puz6.Text = puz5.Text; |
puz5.Text = ""; |
} |
if (puz8.Text == "") |
{ |
puz8.Text = puz5.Text; |
puz5.Text = ""; |
} |
EndCheck(); |
} |
При нажатии на ячейку 6, код, представленный в листинге 10, будет перемещать значение, находящееся в ячейке 6 в соседнюю (пустую), т.е. либо в ячейку 3, либо в ячейку 5, либо в ячейку 9.
Листинг 10 – Нажатие на ячейку 6
puz6.Text = ""; |
|
} |
|
if (puz5.Text == "") { puz5.Text = puz6.Text; puz6.Text = ""; } |
|
if (puz9.Text == "") { puz9.Text = puz6.Text; puz6.Text = ""; } |
|
} |
EndCheck(); |
При нажатии на ячейку 7, код, представленный в листинге 11, будет перемещать значение, находящееся в ячейке 7 в соседнюю (пустую), т.е. либо в ячейку 4, либо в ячейку 8.
Листинг 11 – Нажатие на ячейку 7
private void Puz7_Clicked(object sender, EventArgs e)
{ |
^^^^^^^^— |
if |
(puz4.Text == "") |
{ |
puz4.Text = puz7.Text; puz7.Text = ""; |
} |
|
if |
(puz8.Text == "") |
{ |
puz8.Text = puz7.Text; puz7.Text = ""; |
}
EndCheck(); }
При нажатии на ячейку 8, код, представленный в листинге 12, будет перемещать значение, находящееся в ячейке 8 в соседнюю (пустую), т.е. либо в ячейку 7, либо в ячейку 6, либо в ячейку 9.
Листинг 12 – Нажатие на ячейку 8
private void Puz8_Clicked(object sender, EventArgs e)
{ |
^^^^^^^^— |
if |
(puz5.Text == "") |
{ |
puz5.Text = puz8.Text; puz8.Text = ""; |
} |
|
if |
(puz7.Text == "") |
{ |
puz7.Text = puz8.Text; puz8.Text = ""; |
} |
||
if |
(puz9.Text == "") |
|
{ |
puz9.Text = puz8.Text; puz8.Text = ""; |
|
} |
||
EndCheck(); |
||
} |
При нажатии на ячейку 9, код, представленный в листинге 13, будет перемещать значение, находящееся в ячейке 9 в соседнюю (пустую), т.е. либо в ячейку 8, либо в ячейку 6.
Листинг 13 – Нажатие на ячейку 9
private void Puz9_Clicked(object sender, EventArgs e) |
{ |
if (puz6.Text == "") |
{ |
puz6.Text = puz9.Text; |
puz9.Text = ""; |
} |
if (puz8.Text == "") |
{ |
puz8.Text = puz9.Text; |
puz9.Text = ""; |
} |
EndCheck(); |
} |
После каждого клика по ячейке запускается метод «EndCheck()», который представлен в листинге 14. Данный метод необходим для проверки правильного расположения костяшек. При победе будет выведено соответствующее сообщение.
grats.IsVisible = true;
} else grats.IsVisible = false; }
Методы обработки событий нажатий на кнопки «Назад» и «Обновить» представлены в листинге 15.
Листинг 15 – Обработка нажатий на кнопки «Назад» и «Обновить»
async void PlayBtn_Clicked(object sender, EventArgs e) { var game = new Game();
await Navigation.PushAsync(game); } async void BackToMenuBtn_Clicked(object sender, EventArgs e) { await Navigation.PopAsync();
}
3.2 Описание приложения с точки зрения пользователя
При запуске приложения запускается стартовое окно, представленное на рисунке 6.

Рисунок 6 – Интерфейс стартового окна
После нажатия на кнопку «Играть» открывается игровое окно,
представленное на рисунке 7.

Рисунок 7 – Игровое окно
ЗАКЛЮЧЕНИЕ
В итоге мы имеем работающее мобильное приложение на платформе Android, имеющее простой и понятный интерфейс. Приложение можно доработать, добавив в него выбор уровня, например, выбор поля 4 на 4 или 5 на 5 и так далее. Приложение имеет не сложную логику работы, поэтому в нем разберется разработчик, который не «писал» данное приложение.
Список литературы Разработка мобильного приложения на платформе Android
- Разработка приложений под мобильную платформу Android: учебное пособие / Д. В. Кравцов, М. А. Лосева, Е. А. Леонов [и др.]. - Москва: ФЛИНТА, 2018. - 72 с. - 978-5-9765-4014-9. - Текст: электронный // Лань: электронно-библиотечная система. - URL: https://e.lanbook.com/book/113495 (дата обращения: 17.05.2020). - Режим доступа: для авториз. пользователей. ISBN: 978-5-9765-4014-9
- Черников, В. Разработка мобильных приложений на C# для iOS и Android: учебное пособие / В. Черников. - Москва: ДМК Пресс, 2020. - 188 с. - 978-5-97060-805-0. - Текст: электронный // Лань: электронно-библиотечная система. - URL: https://e.lanbook.com/book/140592 (дата обращения: 17.05.2020). - Режим доступа: для авториз. пользователей. ISBN: 978-5-9706-0805-0
- Сильвен, Р. Android NDK. Разработка приложений под Android на С/С++ / Р. Сильвен; перевод с английского А. Н. Киселева. - Москва: ДМК Пресс, 2012. - 496 с. - 978-5-94074-657-7. - Текст: электронный // Лань: электронно-библиотечная система. - URL: https://e.lanbook.com/book/9126 (дата обращения: 17.05.2020). - Режим доступа: для авториз. пользователей. ISBN: 978-5-94074-657-7