Что за программа Ява для телефона

Содержание

В этой серии руководств вы познакомитесь с Java, языком программирования, используемым для разработки приложений для Android. Наша цель – подготовить тех, кто уже знаком с одним языком программирования, таким как PHP или Objective-C, чтобы освоиться с языком программирования Java и погрузиться в разработку приложений для Android. В этом руководстве вы получите краткое введение в основы Java, включая объектно-ориентированное программирование, наследование и многое другое. Если вы новичок в Java или просто хотите освежить в деталях, то эта серия учебников для вас!

Начиная

Что касается предварительных условий, мы предполагаем, что вы понимаете, как программировать (возможно, на PHP, или Visual Basic, или C ++), но что вы не знакомы со спецификой программирования на языке Java. Мы не собираемся учить вас программировать; мы предоставим вам наглядные примеры часто используемых конструкций и принципов языка Java, а также приведем некоторые советы и рекомендации для Android.

Приложение за пару секунд на Java

Что вам нужно

Технически, вам не нужны никакие инструменты для завершения этого урока, но вам, безусловно, они понадобятся для разработки приложений для Android.

Для разработки приложений Android (или любых других приложений Java) вам необходима среда разработки для написания и создания приложений. Eclipse – это очень популярная среда разработки (IDE) для Java и предпочтительная IDE для разработки под Android. Он свободно доступен для операционных систем Windows, Mac и Linux.

Полные инструкции по установке Eclipse (включая поддерживаемые версии) и Android SDK см. На веб-сайте разработчиков Android .

Что такое Java?

Приложения для Android разрабатываются с использованием языка Java. На данный момент это действительно единственный вариант для нативных приложений. Java – очень популярный язык программирования, разработанный Sun Microsystems (в настоящее время принадлежит Oracle).

Разработанная задолго до C и C ++, Java включает в себя многие из мощных функций этих мощных языков, устраняя при этом некоторые их недостатки. Тем не менее, языки программирования столь же мощны, как и их библиотеки. Эти библиотеки существуют, чтобы помочь разработчикам создавать приложения.

Некоторые важные функции Java:

  • Это легко учиться и понимать
  • Он разработан, чтобы быть независимым от платформы и безопасным, используя
    виртуальные машины
  • Это объектно-ориентированный

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

Почему Java легка в изучении?

Ява легко изучается по разным причинам. Конечно, нет недостатка в ресурсах Java, которые помогут вам выучить язык, включая веб-сайты, учебные пособия, книги и классы. Java является одним из наиболее широко обсуждаемых, обучаемых и используемых языков программирования на планете. Он используется для различных типов программных проектов, независимо от их масштаба, от веб-приложений до настольных приложений и мобильных приложений.

Если вы пришли из традиционного программирования, такого как C или C ++, вы найдете синтаксис Java довольно похожим. Если нет, то с комфортом узнайте, что вы выбрали один из самых простых языков для изучения. Вы сразу же приступите к работе.

Наконец, Java – один из самых понятных человеку языков, под которым мы подразумеваем, что человек, который ничего не знает о программировании, часто может взглянуть на некоторый код Java и хотя бы понять, что он делает. Рассмотрим следующий пример:

символ персонажа = ‘а’; если (символ == «а») сделай что-нибудь(); > еще doSomethingElse (); >

Если вы просто читаете код вслух, вы можете сказать, что этот фрагмент кода работает. Там есть переменная из одной буквы, которая называется символом. Если символьная переменная равна букве a, то мы что-то делаем (вызываем метод doSomething ()), в противном случае мы делаем что-то еще (вызывая метод doSomethingElse ()).

Почему независимость платформы важна?

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

Это не относится к Java. Компиляторы Java преобразуют ваш код из читаемых человеком исходных файлов Java в нечто, называемое «байт-кодом» в мире Java. Они интерпретируются виртуальной машиной Java, которая работает так же, как физический процессор может работать с машинным кодом, чтобы фактически выполнить скомпилированный код. Хотя может показаться, что это неэффективно, много усилий было приложено, чтобы сделать этот процесс очень быстрым и эффективным. Эти усилия окупились тем, что производительность Java обычно уступает только C / C ++ в сравнении производительности на общем языке.

Приложения Android работают на специальной виртуальной машине под названием Dalvik VM. Хотя детали этой виртуальной машины не важны для среднего разработчика, полезно думать о виртуальной машине Dalvik как о пузыре, в котором работает ваше Android-приложение, позволяя вам не беспокоиться о том, является ли устройство Motorola Droid, HTC Evo или новейший тостер под управлением Android. Вам все равно, если устройство совместимо с виртуальной машиной Dalvik – и это задача производителя устройств, а не ваша.

Почему Java безопасна?

Давайте продолжим эту идею пузыря. Поскольку Java-приложения работают внутри пузырька, который представляет собой виртуальную машину, они изолированы от базового оборудования устройства. Следовательно, виртуальная машина может инкапсулировать, содержать и управлять выполнением кода безопасным способом по сравнению с языками, которые непосредственно работают в машинном коде.

Платформа Android делает шаг вперед. Каждое приложение Android работает в операционной системе (на базе Linux) с использованием другой учетной записи пользователя и в своем собственном экземпляре виртуальной машины Dalvik. Приложения Android тщательно отслеживаются операционной системой и закрываются, если они не работают нормально (например, используют слишком много вычислительной мощности, перестают отвечать, тратят ресурсы и т. Д.). Поэтому важно разрабатывать приложения, которые будут стабильными и отзывчивыми. Приложения могут общаться друг с другом, используя четко определенные протоколы.

Компиляция вашего кода

Как и многие языки, Java по-прежнему является компилируемым языком, хотя и не компилируется полностью до машинного кода. Это означает, что вы, разработчик, должны скомпилировать свои проекты Android и упаковать их для развертывания на устройствах. Среда разработки Eclipse (используемая с плагином Android Development) делает это довольно безболезненным.

В Eclipse автоматическая компиляция часто включена по умолчанию. Это означает, что каждый раз, когда вы сохраняете файл проекта, Eclipse перекомпилирует изменения для вашего пакета приложения. Вы сразу видите ошибки компиляции. Eclipse также интерпретирует Java по мере ввода текста, обеспечивая удобную раскраску и форматирование кода, а также отображает множество типов ошибок по мере продвижения. Зачастую вы можете нажать на ошибку, и Eclipse автоматически исправит опечатку, или добавит оператор импорта, или предоставит вам заглушку метода, что сэкономит вам много времени на ввод текста.

Читайте также:
Internet downloader что это за программа

Вы все еще можете вручную скомпилировать свой код, если хотите. В Eclipse вы найдете настройки Build в меню проекта. Если у вас включена функция «Автоматическая сборка», вы все равно можете выбрать опцию «Очистить…», которая позволит вам полностью перестроить все файлы. Если «Построить автоматически» отключено, опции меню «Построить все» и «Построить проект» включены. «Построить все» означает построить все проекты в рабочей области. В рабочей области Eclipse может быть много проектов.

Процесс сборки для обычных Java-проектов приводит к созданию файла с расширением JAR – J ava AR chive. Приложения Android принимают файлы JAR и упаковывают их для развертывания на устройствах в виде файлов A ndroid P ac K age с расширением .apk. Эти форматы включают не только ваш скомпилированный код Java, но также любые другие ресурсы, такие как строки, изображения или звуковые файлы, которые требуются вашему приложению, а также файл манифеста приложения, AndroidManifest.xml. Файл манифеста Android – это файл, необходимый для всех приложений Android, который используется для определения деталей конфигурации вашего приложения.

Что такое объектно-ориентированный язык программирования?

Ладно. Время для очень краткого и 20 000-футового обзора объектно-ориентированного программирования (ООП). ООП – это стиль или метод программирования, основанный на определении структур данных, называемых объектами. Для тех, кто плохо знаком с ООП, объект может рассматриваться как пользовательский тип данных.

Например, у вас может быть объект Dog, представляющий проект общей собаки с именем, породой и полом. Затем вы можете создать разные экземпляры объекта Dog для представления конкретных собак. Каждый объект Dog должен быть создан путем вызова его конструктора (метод, который имеет то же имя, что и сам объект, и может иметь или не иметь параметры для установки начальных значений). Например, следующие объекты Dog используют конструктор с тремя параметрами (имя, порода, пол):

Dog dog1 = new Dog («Лесси», колли, с@%а); Dog dog2 = new Dog («Фифи», пудель, с@%а); Dog dog3 = new Dog («Аста», фокстерьер, кобель);

Так где же определен этот объект Dog? Итак, здесь мы должны начать определять некоторые фундаментальные строительные блоки языка программирования Java. Класс предоставляет определение для объекта.

Следовательно, где-то есть класс Dog – либо определенный вами, либо в какой-то библиотеке. Вообще говоря, класс будет определен в своем собственном файле с именем файла, совпадающим с именем класса (например, Dog.java). Есть исключения из этого правила, такие как классы, определенные в других классах (когда класс объявляется внутри класса, он обычно определяется для использования в родительском классе только как вспомогательный класс и упоминается как внутренний класс ).

Если вы хотите сослаться на объект из другого класса, вам нужно включить оператор импорта в начало вашего файла класса, так же, как вы бы использовали оператор #include в скомпилированном языке, таком как C.

Класс обычно описывает данные и поведение объекта. Поведение определяется с использованием методов класса. Метод – это общий термин для подпрограммы на языке ООП. Многие общие классы объектов определены в разделяемых библиотеках классов, таких как наборы для разработки программного обеспечения (SDK), тогда как другие определяются вами, разработчиком, для ваших собственных целей. Программное обеспечение создается с использованием и манипулированием экземплярами объектов различными способами.

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

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

Понимание Наследования

Вот еще одна важная концепция Java, с которой вы столкнетесь: наследование . Проще говоря, наследование означает, что классы Java (и, следовательно, объекты) могут быть организованы в иерархии с более низкими, более конкретными, классами в иерархии, наследующими поведение и черты от более высоких, более общих классов.

Эта концепция лучше всего иллюстрируется на примере. Давайте представим, что мы разрабатываем приложение Java для имитации аквариума. В этом аквариуме есть несколько рыб. Следовательно, мы можем определить класс для представления рыбы. Этот класс, называемый Рыбой, может включать в себя некоторые поля данных (также называемые атрибутами или переменными членами класса) для описания объекта рыбы: вид, цвет и размер; а также некоторые из его поведения в форме методов (также называемых подпрограммами или функциями на процедурных языках), таких как eat (), sleep () и makeBabyFish ().

Специальный тип метода, называемый конструктором , используется для создания и инициализации объекта; Конструкторы названы так же, как их класс и могут включать параметры. В следующем классе Fish есть два конструктора: один для создания общего объекта Fish, а другой для создания определенного объекта Fish с некоторыми начальными данными. Вы также увидите, что у класса Fish есть два метода eat (): один для того, чтобы есть что-то случайное, а другой – для еды другой рыбы, которая будет представлена ​​другим экземпляром класса Fish:

открытый класс Fish private String mColor; private int mSize; Fish () mColor = «неизвестно»; mSize = 0; > Рыба (вид String, цвет String, размер int) mColor = цвет; mSize = размер; > public void eat () ; public void eat (Fish fishToEat) >; public void sleep () ; public void makeBabyFish (Fish fishSpouse, int numBabies) ; >

Классы могут быть организованы в иерархии, где производный класс (или подкласс ) включает все функции своего родительского класса (или суперкласса ), но уточняет и добавляет к ним, чтобы определить более конкретный объект, используя ключевое слово extends. Это называется наследством.

Например, класс Fish может иметь два подкласса: FreshwaterFish и SaltwaterFish. Эти подклассы будут иметь все функции класса Fish, но могут дополнительно настраивать объекты с помощью новых атрибутов и поведения или измененного поведения из родительского класса Fish. Например, класс FreshwaterFish может включать информацию о типе пресноводной среды, в которой жили (например, река, озеро, пруд или лужа). Точно так же класс SaltwaterFish может настроить метод makeBabyFish () таким образом, чтобы рыба съела свою пару после размножения (как определено в суперклассе), используя механизм переопределения, например:

Организация поведения объектов с помощью интерфейсов

В Java вы можете организовать поведение объектов в так называемых интерфейсах. В то время как класс определяет объект, интерфейс определяет некоторое поведение, которое может быть применено к объекту. Например, мы могли бы определить интерфейс Swimmer, который предоставляет набор методов, которые являются общими для всех объектов, которые могут плавать, будь то рыбы, выдры или подводные андроиды. Интерфейс Swimmer может указывать четыре метода: startSwimming (), stopSwimming (), dive () и surface ().

открытый интерфейс пловец void startSwimming (); void stopSwimming (); погружение в пустоту (); пустая поверхность (); >

Такой класс, как Fish, может затем реализовать интерфейс Swimmer (используя ключевое слово Implements) и обеспечить реализацию поведения плавания:

Читайте также:
Срм программа для отдела продаж что это

Открытый класс Рыба реализует пловец // Предоставляем реализации четырех методов в интерфейсе Swimmer >

Организация классов и интерфейсов с пакетами

Иерархии классов, такие как наши классы рыбы, могут быть организованы в пакеты . Пакет – это просто набор классов и интерфейсов, связанных вместе. Разработчики используют пространства имен для уникального именования пакетов. Например, мы могли бы использовать com.mamlambo.aquarium или com.ourclient.project.subproject в качестве имени нашего пакета, чтобы отслеживать наши связанные с рыбой классы.

Завершение

Вот это да! Вы только что начали ускоренный курс по Java для разработки под Android. Мы рассмотрели довольно много материала здесь, поэтому давайте немного подождем, прежде чем перейти к следующему уроку этой серии уроков. На уроке 2 мы переключаем наше внимание на мельчайшие детали синтаксиса Java.

Вы только поцарапали поверхность разработки Java для разработки под Android. Ознакомьтесь с другими великолепными учебными пособиями по Mobiletuts +, чтобы глубже погрузиться в разработку Java и Android. Удачи!

Об авторах

Нужна дополнительная помощь в написании приложений для Android? Проверьте наши последние книги и ресурсы!

  • Разработка беспроводных приложений для Android, второе издание>
  • Sams научи себя разработке приложений для Android за 24 часа
  • Код Мамламбо в Код-Каньоне

Связанные учебники:

  • Изучите Java для разработки под Android: синтаксис Java
  • Введение в разработку Android SDK
  • Начало работы с Android: начало работы с FortuneCrunch
  • Общие конфигурации виртуальных устройств Android
  • Запуск карт в приложении
  • Предоставление пользователям возможности отправлять электронную почту в приложении
  • Использование оповещений, тостов и уведомлений
  • Создание простых пользовательских форм

Полезные ресурсы:

Если вы хотите начать разработку под Android, лучше всего начать с шаблона приложения для Android . Проверьте выбор на Envato Market – или вы можете посмотреть более конкретно на элементы Java .

Источник: coderlessons.com

Javvy — и ваш смартфон научит вас писать на Java

Бытует мнение, что в современном мире каждый должен в той или иной степени уметь программировать. Президент США Барак Обама даже принял участие во всемирной акции «Час кода», которая проводится в декабре, и продемонстрировал свои умения в JavaScript. Зима не за горами, и если вы хотите блеснуть своими умениями в «Час кода», за 3 месяца вам очень сильно поможет приложение Javvy.

Javvy — и ваш смартфон научит вас писать на Java. Фото.

Javvy — и ваш смартфон научит вас писать на Java. Фото. Javvy — и ваш смартфон научит вас писать на Java. Фото.Javvy — и ваш смартфон научит вас писать на Java. Фото.

Javvy — это интерактивный учебник, который откроет для вас мир программирования. Как вы можете понять из названия, учить предстоит популярный язык программирования Java. Знание этого языка может превратить вас в Android-разработчика, и быть может, уже этой зимой здесь, на AndroidInsider.ru, вы прочитаете обзор приложения, которое написали собственными руками.

Javvy — и ваш смартфон научит вас писать на Java. Фото. Javvy — и ваш смартфон научит вас писать на Java. Фото.Javvy — и ваш смартфон научит вас писать на Java. Фото.

Всего Javvy предлагает 14 уроков, в каждом из которых несколько интерактивных заданий. Приложение также будет экзаменовать вас по изученному материалу. Два первых урока предлагается пройти бесплатно, однако если программирование вас затянет, за остальные уроки придется заплатить 119,99 рублей. Есть также несколько других платных опций в приложении. Это совсем недорого, услуги учителя или даже книга обойдутся значительно дороже.

Javvy — и ваш смартфон научит вас писать на Java. Фото. Javvy — и ваш смартфон научит вас писать на Java. Фото.Javvy — и ваш смартфон научит вас писать на Java. Фото.

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

Приложение: Javvy — Learn to code in Java! Разработчик: Hello Code e.U. Категория: Образование Цена: Бесплатно Скачать: Google Play

Оставить комментарий в Telegram. Поделитесь мнением в чате читателей Androidinsider.ru

Теги

  • Google Play
  • Образование
  • Приложения для Андроид

Наши соцсети

Новости, статьи и анонсы публикаций

Источник: androidinsider.ru

Пишем первое приложение для Android

В любом деле самое сложное — это начало. Часто бывает тяжело войти в контекст, с чем столкнулся и я, решив разработать свое первое Android-приложение. Настоящая статья для тех, кто хочет начать, но не знает с чего.

Статья затронет весь цикл разработки приложения. Вместе мы напишем простенькую игру “Крестики-Нолики” с одним экраном (в ОС Android это называется Activity).

Отсутствие опыта разработки на языке Java не должно стать препятствием в освоении Android. Так, в примерах не будут использоваться специфичные для Java конструкции (или они будет минимизированы на столько, на сколько это возможно). Если Вы пишете, например, на PHP и знакомы с основополагающими принципами в разработке ПО, эта статья будет вам наиболее полезна. В свою очередь так как, я не являюсь экспертом по разработке на Java, можно предположить, что исходный код не претендует на лейбл “лучшие практики разработки на Java”.

Установка необходимых программ и утилит

  1. JDK — набор для разработки на языке Java;
  2. Android SDK and AVD Manager — набор утилит для разработки + эмулятор;
  3. IDE c поддержкой разработки для Android:
    • Eclipse + ADT plugin;
    • IntelliJ IDEA Community Edition;
    • Netbeans + nbandroid plugin;

    Утилиты устанавливаются в определенном выше порядке. Ставить все перечисленные IDE смысла нет (разве только если Вы испытываете затруднения с выбором подходящей). Я использую IntelliJ IDEA Community Edition, одну из самых развитых на данный момент IDE для Java.

    Запуск виртуального устройства

    Запустив AVD Manager и установив дополнительные пакеты (SDK различных версий), можно приступить к созданию виртуального устройства с необходимыми параметрами. Разобраться в интерфейсе не должно составить труда.

    Список устройств

    Создание проекта

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

    Итак, File->New Project:

    По нажатию кнопки F6 проект соберется, откомпилируется и запустится на виртуальном девайсе.

    Структура проекта

    На предыдущем скриншоте видна структура проекта. Так как в этой статье мы преследуем сугубо практические цели, заострим внимание лишь на тех папках, которые будем использовать в процессе работы. Это следующие каталоги: gen, res и src.

    В папке gen находятся файлы, которые генерируются автоматически при сборке проекта. Вручную их менять нельзя.

    Папка res предназначена для хранения ресурсов, таких как картинки, тексты (в том числе переводы), значения по-умолчанию, макеты (layouts).

    src — это папка в которой будет происходить основная часть работы, ибо тут хранятся файлы с исходными текстами нашей программы.

    Первые строки

    Как только создается Activity (экран приложения), вызывается метод onCreate(). IDE заполнила его 2 строчками:

    super.onCreate(savedInstanceState); setContentView(R.layout.main);

    Метод setContentView (равносильно this.setContentView) устанавливает xml-макет для текущего экрана. Далее xml-макеты будем называть «layout», а экраны — «Activity». Layout в приложении будет следующий:

    Для этого приложения идеально подойдет TableLayout. Id можно присвоить любому ресурсу. В данном случае, TableLayout присвоен При помощи метода findViewById() можно получить доступ к виду:

    private TableLayout layout; // это свойство класса KrestikinolikiActivity public void onCreate(Bundle savedInstanceState)

    Теперь необходимо реализовать метод buildGameField(). Для этого требуется сгенерировать поле в виде матрицы. Этим будет заниматься класс Game. Сначала нужно создать класс Square для ячеек и класс Player, объекты которого будут заполнять эти ячейки.

    Square.java

    package com.example; public class Square < private Player player = null; public void fill(Player player) < this.player = player; >public boolean isFilled() < if (player != null) < return true; >return false; > public Player getPlayer() < return player; >>

    Player.java

    package com.example; public class Player < private String name; public Player(String name) < this.name = name; >public CharSequence getName() < return (CharSequence) name; >>

    Все классы нашего приложения находятся в папке src.

    Game.java

    package com.example; public class Game < /** * поле */ private Square[][] field; /** * Конструктор * */ public Game() < field = new Square[3][3]; squareCount = 0; // заполнение поля for (int i = 0, l = field.length; i < l; i++) < for (int j = 0, l2 = field[i].length; j < l2; j++) < field[i][j] = new Square(); squareCount++; >> > public Square[][] getField() < return field; >>

    Инициализация Game в конструкторе KrestikinolikiActivity.

    public KrestikinolikiActivity() < game = new Game(); game.start(); // будет реализован позже >

    Метод buildGameField() класса KrestikinolikiActivity. Он динамически добавляет строки и колонки в таблицу (игровое поле):

    private Button[][] buttons = new Button[3][3]; //(. ) private void buildGameField() < Square[][] field = game.getField(); for (int i = 0, lenI = field.length; i < lenI; i++ ) < TableRow row = new TableRow(this); // создание строки таблицы for (int j = 0, lenJ = field[i].length; j < lenJ; j++) < Button button = new Button(this); buttons[i][j] = button; button.setOnClickListener(new Listener(i, j)); // установка слушателя, реагирующего на клик по кнопке row.addView(button, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT)); // добавление кнопки в строку таблицы button.setWidth(107); button.setHeight(107); >layout.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT)); // добавление строки в таблицу > >

    В строке 8 создается объект, реализующий интерфейс View.OnClickListener. Создадим вложенный класс Listener. Он будет виден только из KrestikinolikiActivity.

    public class Listener implements View.OnClickListener < private int x = 0; private int y = 0; public Listener(int x, int y) < this.x = x; this.y = y; >public void onClick(View view) < Button button = (Button) view; >>

    Осталось реализовать логику игры.
    public class Game < /** * игроки */ private Player[] players; /** * поле */ private Square[][] field; /** * начата ли игра? */ private boolean started; /** * текущий игрок */ private Player activePlayer; /** * Считает колличество заполненных ячеек */ private int filled; /** * Всего ячеек */ private int squareCount; /** * Конструктор * */ public Game() < field = new Square[3][3]; squareCount = 0; // заполнение поля for (int i = 0, l = field.length; i < l; i++) < for (int j = 0, l2 = field[i].length; j < l2; j++) < field[i][j] = new Square(); squareCount++; >> players = new Player[2]; started = false; activePlayer = null; filled = 0; > public void start() < resetPlayers(); started = true; >private void resetPlayers() < players[0] = new Player(«X»); players[1] = new Player(«O»); setCurrentActivePlayer(players[0]); >public Square[][] getField() < return field; >private void setCurrentActivePlayer(Player player) < activePlayer = player; >public boolean makeTurn(int x, int y) < if (field[x][y].isFilled()) < return false; >field[x][y].fill(getCurrentActivePlayer()); filled++; switchPlayers(); return true; > private void switchPlayers() < activePlayer = (activePlayer == players[0]) ? players[1] : players[0]; >public Player getCurrentActivePlayer() < return activePlayer; >public boolean isFieldFilled() < return squareCount == filled; >public void reset() < resetField(); resetPlayers(); >private void resetField() < for (int i = 0, l = field.length; i < l; i++) < for (int j = 0, l2 = field[i].length; j < l2; j++) < field[i][j].fill(null); >> filled = 0; > >

    Определение победителя

    К. О. подсказывает, что в крестики-нолики выирывает тот, кто выстроет X или O в линию длиной, равной длине поля по-вертикали, или по-горизонтали, или по-диагонали. Первая мысль, которая приходит в голову — это написать методы для каждого случая. Думаю, в этом случае хорошо подойдет паттерн Chain of Responsobility. Определим интерфейс

    package com.example; public interface WinnerCheckerInterface

    Так как Game наделен обязанностью выявлять победителя, он реализует этот интерфейс. Настало время создать виртуальных «лайнсменов», каждый из которых будет проверять свою сторону. Все они реализует интерфейс WinnerCheckerInterface.

    WinnerCheckerHorizontal.java

    package com.example; public class WinnerCheckerHorizontal implements WinnerCheckerInterface < private Game game; public WinnerCheckerHorizontal(Game game) < this.game = game; >public Player checkWinner() < Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; for (int i = 0, len = field.length; i < len; i++) < lastPlayer = null; int successCounter = 1; for (int j = 0, len2 = field[i].length; j < len2; j++) < currPlayer = field[i][j].getPlayer(); if (currPlayer == lastPlayer (currPlayer != null lastPlayer !=null)) < successCounter++; if (successCounter == len2) < return currPlayer; >> lastPlayer = currPlayer; > > return null; > >

    WinnerCheckerVertical.java

    package com.example; public class WinnerCheckerVertical implements WinnerCheckerInterface < private Game game; public WinnerCheckerVertical (Game game) < this.game = game; >public Player checkWinner() < Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; for (int i = 0, len = field.length; i < len; i++) < lastPlayer = null; int successCounter = 1; for (int j = 0, len2 = field[i].length; j < len2; j++) < currPlayer = field[j][i].getPlayer(); if (currPlayer == lastPlayer (currPlayer != null lastPlayer !=null)) < successCounter++; if (successCounter == len2) < return currPlayer; >> lastPlayer = currPlayer; > > return null; > >

    WinnerCheckerDiagonalLeft.java

    package com.example; public class WinnerCheckerDiagonalLeft implements WinnerCheckerInterface < private Game game; public WinnerCheckerDiagonalLeft(Game game) < this.game = game; >public Player checkWinner() < Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; int successCounter = 1; for (int i = 0, len = field.length; i < len; i++) < currPlayer = field[i][i].getPlayer(); if (currPlayer != null) < if (lastPlayer == currPlayer) < successCounter++; if (successCounter == len) < return currPlayer; >> > lastPlayer = currPlayer; > return null; > >

    WinnerCheckerDiagonalRight.java

    package com.example; public class WinnerCheckerDiagonalRight implements WinnerCheckerInterface < private Game game; public WinnerCheckerDiagonalRight(Game game) < this.game = game; >public Player checkWinner() < Square[][] field = game.getField(); Player currPlayer; Player lastPlayer = null; int successCounter = 1; for (int i = 0, len = field.length; i < len; i++) < currPlayer = field[i][len — (i + 1)].getPlayer(); if (currPlayer != null) < if (lastPlayer == currPlayer) < successCounter++; if (successCounter == len) < return currPlayer; >> > lastPlayer = currPlayer; > return null; > >

    Проинициализируем их в конструкторе Game:
    //(. ) /** * «Судьи» =). После каждого хода они будут проверять, * нет ли победителя */ private WinnerCheckerInterface[] winnerCheckers; //(. ) public Game() < //(. ) winnerCheckers = new WinnerCheckerInterface[4]; winnerCheckers[0] = new WinnerCheckerHorizontal(this); winnerCheckers[1] = new WinnerCheckerVertical(this); winnerCheckers[2] = new WinnerCheckerDiagonalLeft(this); winnerCheckers[3] = new WinnerCheckerDiagonalRight(this); //(. ) >

    Реализация checkWinner():
    public Player checkWinner() < for (WinnerCheckerInterface winChecker : winnerCheckers) < Player winner = winChecker.checkWinner(); if (winner != null) < return winner; >> return null; >

    Победителя проверяем после каждого хода. Добавим кода в метод onClick() класса Listener
    public void onClick(View view) < Button button = (Button) view; Game g = game; Player player = g.getCurrentActivePlayer(); if (makeTurn(x, y)) < button.setText(player.getName()); >Player winner = g.checkWinner(); if (winner != null) < gameOver(winner); >if (g.isFieldFilled()) < // в случае, если поле заполнено gameOver(); >>

    Метод gameOver() реализован в 2-х вариантах:
    private void gameOver(Player player) < CharSequence text = «Player «» + player.getName() + «» won!»; Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); game.reset(); refresh(); >private void gameOver()

    Для Java, gameOver(Player player) и gameOver() — разные методы. Воспользовавшись Builder’ом Toast.makeText, можно быстро создать и показать уведомление. refresh() обновляет состояние поля:

    private void refresh() < Square[][] field = game.getField(); for (int i = 0, len = field.length; i < len; i++) < for (int j = 0, len2 = field[i].length; j < len2; j++) < if (field[i][j].getPlayer() == null) < buttons[i][j].setText(«»); >else < buttons[i][j].setText(field[i][j].getPlayer().getName()); >> > >

    Готово! Надеюсь, эта статья помогла Вам освоиться в мире разработки под OS Android. Благодарю за внимание!

    Видео готового приложения

    PS: статья была опубликована по просьбе комментаторов этого поста.

    Источник: habr.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru