Разработка игры "Эрудит" на языке Java

Суть идеи компьютерной игры. Обоснованность выбора языка программирования Java для решения задачи. Описание операций в классах программы. Методика ее отладки. Запись проекта в jar-файл и создание инсталляционного пакета. Руководство пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.05.2015
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Минобрнауки России

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

"Пензенский государственный технологический университет" (ПензГТУ)

Факультет информационных и образовательных технологий

Кафедра "Информационные технологии и системы"

Дисциплина: "Языки программирования"

КУРСОВАЯ РАБОТА

на тему: "Разработка игры "Эрудит" на языке Java"

Выполнил: студент группы 13ИС 2б

Чинков М.Ю.

Руководитель: ст. преподаватель кафедры ИТС

Володин К.И.

Содержание

  • Введение
  • 1. Постановка задачи на разработку программы
  • 2. Методы решения задач
    • 2.1 Задачи класса MainUI
    • 2.2 Задачи класса SuccessStage
    • 2.3 Задачи класса TasksViewStage
  • 3. Описание программы
    • 3.1 Пакет beans
    • 3.2 Пакет manager
    • 3.3 Пакет ui
  • 4. Методика отладки программы
    • 4.1 Результаты работы программы
  • 5. Jar-сборка и создание инсталляционного пакета
    • 5.1 Jar-сборка проекта
    • 5.2 Создание инсталляционного пакета приложения
  • 6. Руководство пользователя
  • Заключение
  • Список литературы
  • Приложения

Введение

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

В рамках задачи курсовой работы мною был выбран такой проект, как разработка компьютерной игры "Эрудит" с помощью языка программирования Java. В данном случае термин "компьютерная игра" - это компьютерная программа, организующая игровой процесс и выступающая в качестве партнёра. Тематика созданной мною игры - интерактивная, познавательная.

Актуальность работы: приложение "Эрудит", разработанное в рамках курсовой работы, имеет формат флэш-игры и является аналогом телеинтерактивов "Кто хочет стать миллионером?" (Россия) и "Who Wants to Be a Millionaire?" (Великобритания). Данная игра нацелена в большей степени на подростковую аудиторию (13-16 лет). Цель игры - научить подростков, желающих участвовать в подобных играх, проводить досуг с интенсивной интеллектуальной направленностью, подтолкнуть их к развитию индивидуальности. В игре выдержана разносторонность вопросов, ответы на которые дают школьникам новые полезные знания. Вопросы собраны из интернет-базы.

Процесс выполнения курсовой работы:

1. Постановка задачи на разработку программы (суть идеи компьютерной игры "Эрудит", обоснованность выбора языка программирования Java для решения задачи, средства, использованные в процессе разработки программы).

2. Выбор методов решения задач (описание задач, поставленных в каждом классе программы и методы их решения).

3. Описание программы (описание основных операций в классах программы).

4. Отладка программы (описание процесса отладки программы, цикла разработки приложения, результаты работы программы).

5. Сборка проекта (запись проекта в jar-файл и создание инсталляционного пакета).

6. Создание руководства пользователя (инструкция пользования игрой, правила игры, средства ввода данных).

1. Постановка задачи на разработку программы

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

Для реализации данной идеи был выбран язык программирования Java, потому что его преимущества по сравнению с другими языками программирования являются наиболее важными для создания качественной программы. Java представляет собой язык программирования и платформу вычислений, которая была впервые выпущена Sun Microsystems в 1995 г. Существует множество приложений и веб-сайтов, которые не работают при отсутствии установленной Java, и с каждым днем число таких веб-сайтов и приложений увеличивается. Java отличается быстротой, высоким уровнем защиты и надежностью. Java используется повсюду: от портативных компьютеров до центров данных, от игровых консолей до суперкомпьютеров, используемых для научных разработок, от сотовых телефонов до сети Интернет.

Одно из главных преимуществ языка - независимость от платформы, на которой выполняются программы. Таким образом, один и тот же код можно запускать под управлением операционных систем Windows, Linux, Mac и т.д. Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор), поэтому байт-код полностью независим от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина.

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

Игра состоит из 10 вопросов, которые выводятся на экран в случайном порядке. Заставкой экрана является окно, в котором отражены две кнопки: при нажатии первой, пользователь выходит из игры, при нажатии второй - начинает игру. Пользователю даны на выбор 4 возможных варианта ответа, из которых он может выбрать только один. Игра продолжается при выборе пользователем правильного ответа, при выборе неправильного ответа - завершается. В конце игры на экране выводится количество набранных очков.

Полное прохождение игры показывает развитый кругозор пользователя и его готовность к интеллектуальным играм на определенных площадках (пример - "Интеллектуальный марафон").

Сначала был написан программный код, в котором были реализованы все свойства и функции игры. Затем была проделана отладка программы при помощи интегрированной среды разработки. Далее была написана документация к программному коду и был создан инсталляционный пакет приложения. Процесс выполнения курсовой работы завершается выполнением графической части, а именно схемы программы. Для выполнения задач были использованы:

Интегрированная среда разработки (IDE). Интегрированная среда разработки - это совокупность программных средств, которая поддерживает все этапы разработки программного обеспечения от написания исходного код программы до ее компиляции и отладки. В данном проекте исходный код программы, а также компиляция и отладка программы были выполнены с помощью среды Intellij IDEA Community Edition 12.1.2, разработанной компанией JetBrains. Стоит отметить, что реализовать эту же задачу на языке Java можно с помощью таких IDE, как NetBeans IDE и Eclipse.

Комплект разработчика приложений (SDK). SDK - это комплект средств разработки, позволяющий создавать приложения для определённого пакета программ, компьютерной системы, игровых консолей, операционных систем и прочих платформ. Для создания приложения в формате jar был использован Java Development Kit 1.7.0_45.

Графический редактор. Графический редактор - программа, позволяющая создавать и редактировать двумерные изображения с помощью компьютера. Для выполнения графической части курсовой работы нужен редактор, позволяющий создавать блок-схемы. Удобнее всего использовать Microsoft Visio 2010, который является частью Microsoft Office. Также для создания логотипа был использован графический редактор Adobe Photoshop CS6 - графический редактор, с помощью которого можно создавать растровые изображения.

Платформа для создания приложения. В данном случае важная для создания игры функция платформы - возможность строить приложения с насыщенным графическим интерфейсом пользователя для непосредственного запуска из-под операционных систем.

Для создания приложения на языке Java понадобится платформа JavaFX. Для запуска JavaFX в среде Intellij IDEA нужно в каждом из классов, отвечающих за графический интерфейс, сначала выполнить ввод библиотек, отвечающих за JavaFX, а затем создать сцену (scene).

Также для создания игры на языке Java можно использовать платформу GUI. Для разработки приложений на GUI используется интегрированная среда разработки NetBeans. В ней создается форма Swing GUI. Для создания графического интерфейса в Swing используется класс JFrame. Основное отличие от JavaFX состоит в том, что можно добавлять различные элементы (кнопки, поля) на экран приложения вручную, а код впоследствии генерируется автоматически.

Инструмент для создания инсталляционного пакета. Инсталлятор - установщик программного обеспечения на компьютер конечного пользователя. Выполняется входящим в состав самого программного обеспечения средством установки. Для создания инсталляционного пакета была использована Inno Setup 5.5.4 - система создания инсталляторов для программ. С помощью Inno Setup можно создать классический интерфейс установки игры.

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

Для решения задачи документирования кода был использован Javadoc - генератор документации в HTML-формате из комментариев исходного кода на Java от компании Sun Microsystems. Javadoc - стандарт для документирования классов Java. Для работы с данной системой документирования достаточно просто написать комментарии в кавычках в каждом классе перед исходным кодом. Чтобы увидеть результат документирования в Intellij IDEA Community Edition 12.1.2, нужно использовать комбинацию клавиш Ctrl + Q.

2. Методы решения задач

Любая программа на языке Java состоит из пакетов, а пакеты, в свою очередь, состоят из классов. Каждый класс хранится в отдельном файле. Имя файла совпадает с именем класса, расширение файла - java. Любая функция может существовать только внутри класса. В данной программе было создано в общей сложности 3 пакета и 7 классов. Каждый класс решает определенные задачи, поставленные с целью работы приложения.

Задача, реализованная в классе Task - хранение информации о вопросах и ответах в игре. В классе Task были введены строковые переменные вопроса (String question), правильного ответа (String rightAnswer) и массив ответов (List<String> answers), которые также используются в других классах.

Задача, реализованная в классе TaskStorage - работа с текстовым файлом, в котором хранятся вопросы и список ответов для игры (открытие файла, чтение файла, разделение вопросов и ответов, выделение правильного ответа, закрытие файла).

Перед тем, как открыть файл, он был загружен в out-директорию с помощью конструкции. Затем идет чтение файла функцией bufferedreader. Также была использована функция e.printStackTrace() для подробного вывода возможных ошибок. Функция scanner была использована для разделения строки файла на вопросы и ответы. Суть разделения такова: если программа находит в текстовом файле символ ":", то это означает конец вопроса и начало списка вариантов ответов. Символ ";" обозначает переход от одного варианта ответа к другому. Символ "!!!" после названия варианта ответа обозначает то, что данный ответ на вопрос является правильным. Символ "/n" (перенос строки) обозначает переход на следующий вопрос. После нахождения данных символов кладем созданный вопрос в общий список.

Данный отрывок исходного кода отображает процесс работы с текстовым файлом. Закрываем чтение файла методом reader.close, сам файл закрываем методом in.close.

while ((line = reader.readLine())!= null) {

Scanner scanner = new Scanner(line); scanner.useDelimiter(Pattern.compile("\n")); scanner.useDelimiter(Pattern.compile(":"));//определяем символы, которые будут служить для разделения строк

while (scanner.hasNext()) {

String question = scanner.next();//первая часть разделенной строки - вопрос

String answerLine = scanner.next();//вторая часть разделенной строки - список ответов

answerLine.trim();

Scanner answersScanner = new Scanner(answerLine);

answersScanner.useDelimiter(Pattern.compile(";"));

List<String> answers = new ArrayList();

String correct = null; //из подстроки ответов выделяем одиночные ответы, разделенные;

while (answersScanner.hasNext()) {

String answer = answersScanner.next();

if (answer.endsWith("!!!")) {

answer = answer.replaceAll("!", "");

correct = answer;} //если ответ заканчивается на!!!, это правильный ответ

answers.add(answer.trim());}

simpleTasks.add(new Task("" + i++, question, answers, correct.trim()));}}//кладем вопрос в общий список

Листинг 1 - Сканирование текстового файла

Задачи класса TestItem:

1. Хранение информации о действующем вопросе в игре и ответе, данном пользователем на этот вопрос. Данная задача была выполнена методом ввода строковых переменных task и answer, которые были объявлены в классе Task. Также в данном классе была применена аннотация @Override - она проверяет, переопределен ли метод и вызывает предупреждение компиляции, если метод не найден в классе.

2. Проверка, правильный ли ответ дал пользователь. Задача была выполнена методом ввода оператора if-else. Если пользователь выбирает правильный ответ на вопрос, то игра продолжается, если ответ неправильный - игра прерывается.

Задачи класса TestManager:

1. Ввод в приложение вариантов суммы выигрыша пользователя. В игру были добавлены суммы выигрыша, выводящиеся на экран пользователя в зависимости от количества вопросов, на которые пользователь ответил верно. Был добавлен массив prizeMapping. Также были введены вручную элементы массива, которым присвоено определенное значение. После пяти правильных ответов на вопросы пользователь получает несгораемую сумму. Она высчитывается путем деления на 5 и возвращается пользователю в случае дальнешего проигрыша с помощью оператора return.

2. Формирование количества вопросов в игре. Для решения данной задачи была введена переменная Simple_quantity, которой было присвоено значение, равное количеству вопросов в игре. Всего в игре пользователь может ответить максимум на 10 вопросов, общее количество вопросов в базе - 47.

3. Перемещение вопросов из текстового файла в менеджер игры. Были использованы функция simpleTasks, которая выбирает все вопросы из хранилища и addTasks, добавляюшая вопросы в менеджер программы. Также в данном классе используется функция Collections.shuffle, которая при каждом запуске программы выводит разные вопросы.

4. Вывод вопросов на экран в случайном порядке. Для решения данной задачи использовался оператор rand.

5. Смена вопросов в процессе работы приложения. Программа проверяет, правильный ли ответ дал пользователь. Если да, то выводит на экран следующий вопрос с помощью функции nextItem. Если текущий вопрос был последним, то возвращается значение null и пользователю выводится самая большая сумма выигрыша.

public boolean setAnswer(String answer) {

if (currentIndex >= 0) {

items.get(currentIndex).setAnswer(answer);

}

return items.get(currentIndex).isRight();

}//проверяем, верный ли ответ дал пользователь

public TestItem nextItem() {//возвращаем следующий вопрос для вывода на экран

if (currentIndex == items.size() - 1) {

return null;} //если текущий вопрос был последним возвращаем null

return items.get(++currentIndex);}

Листинг 2 - Проверка ответа, данного пользователем

6. Расчет выигрыша пользователя. Для расчета выигрыша использовались функции getSuccess и getPrize. При завершении игры пользователю выводится следующее сообщение: "Ваш выигрыш составил " + getPrize() + " очков".

2.1 Задачи класса MainUI

1. Инициализация кнопок "Выход" и "Начать". Задача инициализации кнопки "Выход" была решена с помощью создания функции exitButton и присвоения ей текста кнопки, цвета и размера текста, размеров кнопки и обработчика нажатия кнопки. Аналогично была проведена инициализация кнопки "Начать". В класе MainUI также есть аннотация @Override.

2. Формирование панели для кнопок, создание сцены для вывода первого окна приложения. Была создана горизонтальная панель с помощью функции hbox, на которую были помещены кнопки "Начать" и "Выход". Затем была создана сцена для вывода первого окна приложения.

BorderPane root = new BorderPane();

Scene scene = new Scene(root);

primaryStage.setScene(scene);

root.setBottom(hbox);

Листинг 3 - Создание сцены для вывода окна приложения

3. Вычисление размеров окна, вывод окна. Данная задача была выполнена добавлением в классс метода getDefaultToolkit и последующим вводом переменных screenHeight и screenWidth, которым был присвоен размер окна приложения. Затем задаем точку для нашего окна на экране с помощью функций setX и setY и показываем окно пользователю (функция show). За запуск окна приложения отвечает функция launch.

2.2 Задачи класса SuccessStage

1. Инициализация кнопки "ОК". Задача была решена так же, как и в классе MainUI с кнопками "Выход" и "Начать".

2. Формирование панели, создание сцены для вывода последнего окна приложения, вывод окна. Была создана вертикальная панель (функция vbox), на которую были добавлены текст с выигрышем пользователя и кнопка "ОК". Затем была создана сцена, на которой располагается панель. В конце класса происходит пока окна пользователю (setBottom).

2.3 Задачи класса TasksViewStage

Вывод вопроса на экран приложения. Класс Label выводит текст вопроса. Затем были созданы кнопки "Завершить игру" и "Ответить". Затем был добавлен класс ToggleGroup, который представляет группу переключателей, в которой только один переключатель может находиться в выбранном состоянии. Массив вариантов ответов выводится на экран в формате радиокнопок.

1. Добавление цвета и шрифта текста на кнопках. Добавлением данных кнопок занимается интерфейс set (setTextFill, setFont, setOnAction). Затем формируем горизонтальную панель hbox для расположения кнопок друг к другу.

2. Добавление логотипа в окно игры. Был создан объект класса image, в который был помещен логотип игры.

3. Формирование панели, создание сцены для вывода окна приложения. Формируем вертикальную панель vbox, добавляем туда функцией addAll логотип игры, горизонтальная панель кнопок, вопрос и варианты ответов. Добавляем класс BorderPane, который отслеживает размер сцены, выбираем цвет фона (функция setStyle) и создаем сцену.

4. Проверка на правильность ответа, данного пользователем. Добавляем переменную result, чтобы получить данный пользователем ответ. Был использован переключатель setToggleGroup для перехода между радиокнопками.

5. Обновление окна новым вопросом. Проверяем оператором if-else, выбрал ли пользователь верный ответ. Если вопросы еще остались, обновляем окно функцией remove. Если вопросы закончились, закрываем окно вопросов и ответов функцией close и выводим окно выигрыша пользователя. Если ответ неправильный, то срабатывает функция setExitOnError и программа выводит окно выигрыша пользователя на экран так же, как и в том случае, когда вопросы закончились.

6. Создание случайного вывода возможных ответов на экране. Функция Collections.shuffle перемешивает массив ответов. Функция getAnswers выводит список ответов на экран.

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

1. Класс Task - 1 основная задача.

2. Класс TaskStorage - 1 основная задача.

3. Класс TestItem - 2 основные задачи.

4. Класс TestManager - 6 основных задач.

5. Класс MainUI - 3 основные задачи.

6. Класс SuccessStage - 2 основные задачи.

7. Класс TasksViewStage - 7 основных задач.

3. Описание программы

3.1 Пакет beans

Первый пакет - beans. Пакет был создан в целях работы с вопросами и ответами, их обработкой перед выводом на экран. Он состоит из трех классов - Task, TaskStorage и TestItem. Класс Task отвечает за ввод основных переменных, которые используются в других классах. В данном классе был создан массив ответов на вопросы. Затем были введены те самые переменные, о которых говорилось ранее. Применялся метод Task типа Public.

public Task(String id, String question, List<String> answers, String rightAnswer) {

this.id = id;

this.question = question;

this.answers = answers;

this.rightAnswer = rightAnswer;}

Листинг 4 - Ввод переменных в классе Task

Класс TaskStorage отвечает за чтение текстового файла с вопросами и ответами и создание хранилища вопросов. Мы открываем на чтение наш файл с вопросами, читаем файл построчно, разделяем строку на вопрос и ответы методом определения символов, которые будут служить для разделения строк.

Первая часть разделенной строки - вопрос, вторая - список ответов. Из подстроки ответов мы выделяем одиночные ответы, разделенные символом ";", и обнаруживаем правильный ответ. Если ответ заканчивается на "!!!", то это правильный ответ.

if(answer.endsWith("!!!")) {

answer = answer.replaceAll("!","");

correct = answer;}

Листинг 5 - Алгоритм выбора правильного ответа

Затем кладем созданный вопрос в общий список вопросов и закрываем файл. В конце класса мы считаем вопросы из файла. Это необходимо при первом обращении к списку вопросов.

if (storage == null) {

storage = new TaskStorage();}

return simpleTasks;

Листинг 6 - Подсчет вопросов в файле

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

public boolean isRight() {

if (answer!= null && answer.equals(task.getRightAnswer())) {

return true;}

return false;}

Листинг 7 - Реакция на выбранный пользователем ответ

3.2 Пакет manager

Второй пакет - manager. Он состоит из одного пакета - TestManager. Его можно назвать самым главным классом программы, так как он управляет работой программы, печатает вопрос и выводит выигрыш на экран. Сначала я ввел суммы выигрыша в игре с помощью массива, количество элементов которого является максимальному числу вопросов в игре. Несгораемая сумма определяется в конце класса делением на 5, так как несгораемой суммой является каждый пятый выигрыш.

private List<String> prizeMapping = new ArrayList(15);

{prizeMapping.add("0");

prizeMapping.add("10000");

prizeMapping.add("20000");

prizeMapping.add("30000");

prizeMapping.add("40000");

prizeMapping.add("50000");//несгораемая сумма

prizeMapping.add("60000");

prizeMapping.add("70000");

prizeMapping.add("85000");

prizeMapping.add("100000");

prizeMapping.add("150000"); //несгораемая сумма

………………

int index = currentIndex/5;

index = index * 5;

return prizeMapping.get(index);

Листинг 8 - Инициализация суммы выигрыша пользователя

В этом классе мы также формируем количество вопросов в игре посредством ввода менеджера, выбираем все вопрсоы из хранилища, перемешиваем, чтобы при каждом запуске выпадали разные вопросы и добавляем вопросы в менеджер. Устанавливаем флаг - индикатор того что игра закончена из-за неправильного ответа. Данный флаг необходим для расчета конечного выигрыша. Затем выводим вопросы на экран в случайном порядке.

private void addTasks(List<Task> tasksToAdd, int quantity) {

int i=0;

while(i < quantity &&!tasksToAdd.isEmpty()) {

int randomIndex = Math.abs(rand.nextInt() %tasksToAdd.size());

Task task = tasksToAdd.get(randomIndex);

items.add(new TestItem(task));

i++;}}

Листинг 9 - Добавление вопросов в игру

Проверяем, верный ли ответ дал пользователь. Если ответ верный, то возвращаем следующий вопрос для вывода на экран. Если текущий вопрос был последним возвращаем значение null. Затем выводим выигрыш на экран. В конце класса происходит расчет выигрыша.

3.3 Пакет ui

Третий пакет - ui. В пакете была проведена разработка графического интерфейса приложения. Пакет состоит из трех классов - MainUI, SuccessStage и TaskViewStage. Класс MainUI отвечает за запуск первого окна приложения. В среде Intellij IDEA Community Edition 12.1.2 именно его мы запускаем с помощью команды Run (Shift + F10), чтобы увидеть полную работу приложения. В начале класса были введены библиотеки, большинство из которых нужны для запуска JavaFX и подключение к классу TestManager. Формируем первую форму приложения с двумя кнопками: "Выход" и "Начать". Происходит инициализация кнопки "Выход" (написание текста кнопки, задание ее размеров, цвета текста, размера текста, обработчика нажатия на кнопку). Затем то же самое проделываем с кнопкой "Начать". Формируем горизонтальную панель и кладем на нее две объявленные кнопки и помещаем полученную панель на наш главный виджет.

HBox hbox = new HBox();

hbox.getChildren().addAll(exitButton, goButton);

hbox.setPadding(new Insets(5, 5, 5, 5));

BorderPane root = new BorderPane();

Scene scene = new Scene(root);

primaryStage.setScene(scene);

root.setBottom(hbox);

Листинг 10 - Формирование горизонтальной панели и добавление сцены

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

private void handleGoButton() {

final TasksViewStage stage = new TasksViewStage(new TestManager());

stage.show();

stage.setMinWidth(stage.getWidth());

stage.setMinHeight(stage.getHeight());

this.primaryStage.close();

}

public static void main(String []args) {

launch(args);}

Листинг 11 - Запуск первого окна приложения

Класс SuccessStage инициализирует окно, которое выводит выигрыш пользователя. В начале класса создаем кнопку "ОК" и сообщаем пользователю о призовых. Затем задаем вертикальное расположение текста с выигрышем и кнопки "ОК" и запускаем сцену. Сцену нужно запустить в каждом классе, отвечающем за графический интерфейс приложения.

VBox vbox = new VBox();

vbox.setPadding(new Insets(10, 10, 10, 10));

vbox.getChildren().addAll(prizeLabel, okButton)

BorderPane root = new BorderPane();

Scene scene = new Scene(root);

setScene(scene);

root.setBottom(vbox);

setResizable(false);

Листинг 12 - Формирование вертикальной панели и добавление сцены

Класс TaskViewStage создает окно с вопросами и ответами. В начале класса происходит процесс вывода на экран нового вопроса.

Label question = new Label();

Button exitButton = new Button("Завершить игру");

Button nextButton = new Button("Ответить");

ToggleGroup answerGroup = new ToggleGroup();

List<RadioButton> answerButtons = new ArrayList<RadioButton>();

VBox answerBox = new VBox();

Листинг 13 - Вывод на экран нового вопроса

Затем устанавливается размер рамки окна и расположение кнопок на ней, определяется цвет, шрифт текста на кнопках. Делаем положение кнопок "Завершить игру" и "Ответить" под вопросом и списком ответов горизонтальным. Затем добавляем логотип в окно игры. Далее определяем вертикальное положение логотипа, вопроса, списка ответов и создаем сцену, на которую накладываем все перечисленные элементы. Выбираем цвет фона - серый. Создаем функцию - обработчик кнопки "Ответить", получаем данный пользователем ответ. В конце класса проверяем: если ответ правильный и вопросов больше нет - завершаем игру и выводим выигрыш. Если ответ правильный и вопросы еще есть - обновляем окно новым вопросом. Если ответ неправильный - завершаем игру и выводим выигрыш на экран.

if (result == true) {

TestItem item = tm.nextItem();

if (item == null) {

new SuccessStage(tm).show();

this.close();

return;

}

for (RadioButton rb: answerButtons) {

answerBox.getChildren().remove(rb);

}

answerButtons.clear(); question.setText(item.getTask().getQuestion());

} else {

tm.setExitOnError();

new SuccessStage(tm).show();

this.close();

}

Листинг 14 - Действие приложения после выбора ответа

Также в этом классе есть функция Collections.shuffle, которая перемешивает возможные ответы, выставляя их при каждом запуске игры в разном порядке.

Также в проекте находится файл расширением iml. Это файл модуля, создаваемый автоматически в IntelliJ IDEA.

List<String> answers = item.getTask().getAnswers();

Collections.shuffle(answers);

for (String str: answers) {

RadioButton rb = new RadioButton(str);

answerButtons.add(rb);

}

Листинг 15 - Перемешанные ответы в игре

Он хранит информацию о блоке разработки, которая может быть компонентом Java, хранит пути модуля, зависимости и другие настройки. Файлы IML также используются для хранения небольших секций большого проекта разработки.

<?xml version="1.0" encoding="UTF-8"?>

<module type="JAVA_MODULE" version="4">

<component name="NewModuleRootManager" inherit-compiler-output="true">

<exclude-output />

<content url="file://$MODULE_DIR$">

<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />

</content>

<orderEntry type="inheritedJdk" />

<orderEntry type="sourceFolder" forTests="false" />

</component>

</module>

Листинг 16 - Файл IML

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

1. Класс Task - ввод библиотек, основное описание принципа работы программы.

2. Класс TaskStorage - чтение текстового файла, хранилище вопросов.

3. Класс TestItem - проверка правильного ответа.

4. Класс TestManager - управление работы программы, печатает вопрос.

5. Класс MainUI - первая форма.

6. Класс SuccessStage - вывод заработка.

7. Класс TasksViewStage - вывод вопроса.

4. Методика отладки программы

Отладка программы - этап разработки компьютерной программы, на котором обнаруживают, локализуют (определяют оператор программы, выполнение которого вызвало нарушение нормального вычислительного процесса) и устраняют ошибки. Всего при отладке программы могут быть выявлены три типа ошибок: ошибки компоновки (проблемы при разрешении внешних ссылок), ошибки выполнения ("зависание" компьютера, ошибки, обнаруженные операционной системой, утечка памяти и т.д.) и синтаксические ошибки (ошибки в тексте программы, связанные с синтаксисом языка). Использование при разработке программы языков программирования высокого уровня, к числу которых относится язык Java, обычно упрощает отладку, поскольку в них содержится механизм, реагирующий на ошибки выполнения. Для отладки программы используется интегрированная среда разработки. При разработке интеллектуальной игры "Эрудит" я использовал среду разработки Intellij IDEA Community Edition 12.1.2, который нам также нужен для компиляции кода и работы с графическим интерфейсом JavaFX.

В данной разработке игрового приложения существует цикл, состоящий из нескольких частей:

1. Написание программы (создание исходного кода программы, его доработка, внесение новой функциональности);

2. Тестирование программы (запуск программы в Intellij IDEA Community Edition 12.1.2);

3. Отладка программы (обнаружение причины ошибок, допущенных при написании программы);

4. Исправление выявленных ошибок в программе (устранение ошибок в программе путем доработки исходного кода программы);

5. Повторное тестирование программы (повторный запуск программы в Intellij IDEA Community Edition 12.1.2).

4.1 Результаты работы программы

Рисунок 4 - Стартовое окно игры "Эрудит"

При запуске программы в Intellij IDEA Community Edition 12.1.2 появляется новое окно, в котором выводятся результаты работы программы.

5. Jar-сборка и создание инсталляционного пакета

Первоочередная задача - создание инсталляционного пакета для того, чтобы пользователь мог установить игру "Эрудит". Перед тем, как создать инсталляционный пакет, нужно собрать проект в файл формата jar. Jar файл представляет собой обычный архив, в котором содержится программа на языке Java.

5.1 Jar-сборка проекта

Чтобы JAR файл был исполняемым, он должен содержать файл MANIFEST.MF в пакете META-INF, в котором должен быть указан главный класс программы (такой класс должен содержать метод main). Номер версии JAR задаётся параметром Manifest-Version и является обязательным. В процессе разработки приложения был создан данный файл, в котором была указана версия (1.0) и главный класс программы (MainUI).

Также jar-файл показывает явление кроссплатформенности языка программирования Java, так как этот файл можно запускать в других операционных системах. программирование java отладка инсталляционный

Цикл jar-сборки проекта:

1. Создаем артефакт во вкладке Output Layout подраздела Artefacts (раздел Project Structure), задаем ему имя.

2. Во вкладке Java FX указываем заголовок, автора и класс, запускающий приложение.

3. Собираем проект (Build - Build Artefacts - Build).

Рисунок 7 - Создание артефакта для jar-сборки

Рисунок 8 - Конечный этап jar-сборки

Jar-файл сохранился в out директории приложения (папка artefacts).

5.2 Создание инсталляционного пакета приложения

Цикл создания инсталляционного пакета:

1. Открываем программу Inno Setup 5.5.4.

2. Создаем новый сценарий.

3. Указываем название программы, ее версию.

4. Указываем название произвольной папки, в которую устанавливается приложение, и путь к папке.

5. Добавляем в инсталлятор собранный jar-файл.

6. Указываем название программы в стартовом меню и добавляем пункт создания анинсталлера приложения.

7. Выбираем язык в установщике (русский).

8. Выбираем путь сохранения инсталляционного пакета

9. Запускаем приложение

После создания инсталляционного пакета программа показывает скрипт файла установки приложения. На этом цикл создания инсталляционного пакета завершается. Далее запускаем созданный инсталляционный пакет и устанавливаем игру "Эрудит".

Рисунок 9 - Создание сценария в Inno Setup 5.5.4

Рисунок 10 - Добавление названия программы в Inno Setup 5.5.4

Рисунок 11 - Определение произвольной папки для установки приложения в Inno Setup 5.5.4

Рисунок 12 - Добавление собранного проекта в Inno Setup 5.5.4

Рисунок 13 - Добавление названия программы в меню инсталляционного пакета в Inno Setup 5.5.4

Рисунок 14 - Определение пути сохранения инсталляционного пакета в Inno Setup 5.5.4

Рисунок 15 - скрипт инсталляционного пакета в Inno Setup 5.5.4

6. Руководство пользователя

Выбор пункта меню в интеллектуальной игре "Эрудит" осуществляется путем использования компьютерной мыши. Также можно перемещаться по пунктам приложения с помощью стрелок клавиатуры.

При запуске игры "Эрудит" появится первое диалоговое окно. Пользователю будет дана возможность начать игру, нажав мышью или клавишей Enter кнопку "Начать" и выйти из игры, нажав кнопку "Выйти".

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

Заключение

В данной курсовой работе был описан процесс разработки игры "Эрудит" на языке программирования Java, а именно:

1. Процесс постановки задачи на разработку программы в рамках курсовой работы (суть идеи компьютерной игры "Эрудит", обоснованность выбора языка программирования Java для решения задачи, средства, использованные в процессе разработки программы).

2. Методы решения задач (описание задач, поставленных в каждом классе программы и методы их решения).

3. Описание программы (описание основных операций в классах программы).

4. Методика отладки программы (описание процесса отладки программы, цикла разработки приложения, результаты работы программы).

5. Сборка проекта (запись проекта в jar-файл и создание инсталляционного пакета).

6. Руководство пользователя (инструкция пользования игрой, правила игры, средства ввода данных).

Целевая аудитория игры - подростки 13-16 лет, имеющие потребность в развитии своего кругозора. Игра предназначена на проверку общеобразовательных знаний пользователя.

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

Список литературы

Основная литература:

1. Тимур Машнин. JavaFX 2.0. Разработка RIA-приложений - БХВ-Петербург, 2012 г.

2. Кэти Сиерра, Берт Бейтс. Изучаем Java. - Эксмо, 2012 г.

Интернет ресурсы:

3. Создание игры на Java без сторонних библиотек, часть первая [Электронный ресурс] URL: http://habrahabr.ru/post/145433/ (дата обращения: 09.03.2014 г.).

4. JavaRush - обучение программированию на Java в форме игры квеста. [Электронный ресурс] URL: http://javarush.ru/course.html (дата обращения: 09.04.2014 г.).

5. Что такое технология Java и каково ее применение? [Электронный ресурс] URL: http://www.java.com/ru/download/faq/whatis_java.xml (дата обращения: 15.04.2014 г.).

6. "Большая книга интеллектуальных игр и занимательных вопросов для умников и умниц" - Баландин Бронислав Борисович - ЛитМир.net [Электронный ресурс]URL: http://www.litmir.net/br/?b=128688 (дата обращения: 20.03.2014 г.).

7. Вопросы для викторин [Электронный ресурс]URL: http://pandarina.com/text/questions_for_quiz (дата обращения: 30.05.2014 г.).

Приложение А.1 - Методы класса MainUI

Приложение А.2 - Методы класса TasksViewStage

Приложение А.3 - Методы класса SuccessStage

Приложение Б - Исходный код программы

public Task(String id, String question, List<String> answers, String rightAnswer) {

this.id = id;

this.question = question;

this.answers = answers;

this.rightAnswer = rightAnswer;}

класс Task

if(answer.endsWith("!!!")) {

answer = answer.replaceAll("!","");

correct = answer;}

……………

if (storage == null) {

storage = new TaskStorage();}

return simpleTasks;

класс TaskStorage

public boolean isRight() {

if (answer!= null && answer.equals(task.getRightAnswer())) {

return true;}

return false;}

класс TestItem

//проверяем, верный ли ответ дал пользователь

public boolean setAnswer(String answer) {

if (currentIndex >= 0) {

items.get(currentIndex).setAnswer(answer);

}

return items.get(currentIndex).isRight();}

//возвращаем следующий вопрос для вывода на экран

public TestItem nextItem() {

if (currentIndex == items.size() - 1) {

return null; //если текущий вопрос был последним возвращаем null

}

return items.get(++currentIndex);

}

public String getSuccess() {

return "Ваш выигрыш составил " + getPrize() + " очков";} //вывод выигрыша на экран

………………

private String getPrize() { //расчет выигрыша

if(isExitOnError == false) {

return prizeMapping.get(currentIndex); //если все ответы правильные - приз согласно prizeMapping

} else {

int index = currentIndex/5;

index = index * 5;

return prizeMapping.get(index);}}

класс TestManager

HBox hbox = new HBox();

hbox.getChildren().addAll(exitButton, goButton);

hbox.setPadding(new Insets(5, 5, 5, 5)); //формируем горизонтальную панель и кладем на нее две объявленные кнопки

BorderPane root = new BorderPane();

Scene scene = new Scene(root);

primaryStage.setScene(scene);

root.setBottom(hbox); //помещаем полученную панель на наш главный виджет

…………

private void handleGoButton() { //обработчик нажатия кнопки

final TasksViewStage stage = new TasksViewStage(new TestManager());

stage.show();//показываем окно с вопросами

stage.setMinWidth(stage.getWidth());

stage.setMinHeight(stage.getHeight());

this.primaryStage.close();}//закрываем текущее окно

public static void main(String []args) {

launch(args);} //запуск первого окна

класс MainUI

VBox vbox = new VBox();

vbox.setPadding(new Insets(10, 10, 10, 10));

vbox.getChildren().addAll(prizeLabel, okButton)

BorderPane root = new BorderPane(); //вертикальное расположение текста с выигрышем и кнопки "ОК"

Scene scene = new Scene(root);

setScene(scene); //запускаем JavaFX

класс SuccessStage

Label question = new Label();

Button exitButton = new Button("Завершить игру");

Button nextButton = new Button("Ответить");

ToggleGroup answerGroup = new ToggleGroup();

List<RadioButton> answerButtons = new ArrayList<RadioButton>();

VBox answerBox = new VBox();//вывод на экран нового вопроса

…………

if (result == true) {

TestItem item = tm.nextItem(); //если больше вопросов нет - значит мы ответили на все вопросы

if (item == null) {

new SuccessStage(tm).show();

this.close();

return;} // выходим и выводим выигрыш

for (RadioButton rb: answerButtons) {

answerBox.getChildren().remove(rb);}

answerButtons.clear(); //если вопросы еще есть обновляем окно новым вопросом

…………

} else {

tm.setExitOnError();

new SuccessStage(tm).show();

this.close();}//если ответ неправильный завершаем игру и выводим выигрыш на экран

…………

List<String> answers = item.getTask().getAnswers();

Collections.shuffle(answers); //делаем рандомный вывод возможных ответов на экране

for (String str: answers) {

RadioButton rb = new RadioButton(str);

answerButtons.add(rb);

}

Приложение В

Рис. Сгенерированная документация класса TasksViewStage

Рис. Сгенерированная документация класса MainUI

Размещено на Allbest.ru

...

Подобные документы

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.

    курсовая работа [12,4 K], добавлен 18.06.2008

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

  • Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.

    курсовая работа [645,0 K], добавлен 26.03.2014

  • Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.

    курсовая работа [1,8 M], добавлен 16.09.2015

  • Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

    курсовая работа [572,7 K], добавлен 14.07.2012

  • Сетевые возможности языков программирования. Преимущества использования Java-апплетов. Классы, входящие в состав библиотеки java.awt. Создание пользовательского интерфейса. Сокетное соединение с сервером. Графика в Java. Значения составляющих цвета.

    курсовая работа [508,1 K], добавлен 10.11.2014

  • История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.

    курсовая работа [795,9 K], добавлен 14.12.2012

  • Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.

    курсовая работа [276,1 K], добавлен 19.07.2014

  • Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.

    курсовая работа [1,2 M], добавлен 07.07.2012

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

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.

    курсовая работа [197,5 K], добавлен 19.11.2009

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

    курсовая работа [333,5 K], добавлен 21.01.2013

  • Разработка логической схемы базы данных автомобилестроительного предприятия. Инфологическое моделирование системы. Создание графического интерфейса пользователя для базы данных средствами языка программирования Java. Тестирование программных средств.

    курсовая работа [2,3 M], добавлен 16.12.2013

  • Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.

    курсовая работа [160,3 K], добавлен 03.12.2014

  • Этапы развития, особенности и возможности языка программирования Java; происхождение названия. Приложения Sun Microsystems: идеи, примитивные типы. Python - высокоуровневый язык программирования общего назначения: структуры данных, синтаксис и семантика.

    реферат [79,0 K], добавлен 23.06.2012

  • Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.

    дипломная работа [3,3 M], добавлен 18.02.2017

  • Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.

    курсовая работа [96,1 K], добавлен 25.06.2013

  • Описание и установка интегрированной среды разработки Eclipse. Описание языка Java. Описание классов и методов, пакетов, использованных в программе, сервера и клиента. Разработка руководства пользователя для клиента и сервера. Пример работы чата.

    курсовая работа [443,5 K], добавлен 18.05.2015

  • Архитектура уровня команд платформы Java, формат файла класса Java. Компилятор ассемблероподобного языка, позволяющий создавать файлы классов, корректно обрабатываемые реальной JVM, поддерживающий все команды байт-кода Java и важнейшие возможности JVM.

    курсовая работа [292,6 K], добавлен 17.09.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.