- •Занятие 1. "Постановка задания для разработки игры Змейка. Работа с двумерным массивом"
- •Правила самостоятельной разработки игр данного курса
- •Работа с двумерным массивом в Java
- •Применение двумерного массива при создании игр
- •Постановка задания по созданию игры Змейка
- •Разделение задания для трех уровней сложности
- •План разработки проекта
- •Алгоритм для реализации игры Змейка
- •Перемещать голову змейки в нужном направлении.
- •Удалять хвост змейки. Удаление хвоста равносильно записи нулевого значения в элемент массива, где находилось число, отвечающее за хвост змейки.
- •Итог занятия
- •Занятие 2. "Постановка задания для разработки игры Морской бой"
- •Постановка задания по созданию игры Морской бой
- •Разделение задания для трех уровней сложности
- •Рекомендации для реализации игровых полей игры Морской бой
- •Алгоритм для реализации игры "Морской бой"
- •Генерация кораблей на игровом поле
- •Итог занятия
- •Занятие 3. "Постановка задания для разработки игры Пасьянс-Косынка"
- •Правила игры Пасьянс-Косынка
- •Упаковка файлов изображений внутрьJar-архива
- •Работа со списком в Java
- •Import java.Util.ArrayList;
- •Постановка задания по созданию игры Пасьянс-Косынка
- •Разделение задания для трех уровней сложности
- •Алгоритм перемешивания карт в колоде
- •Создание массива списков значений
- •Итог занятия
- •Заключение
- •Занятие 1. "Разработка игры Змейка. Первый и второй уровень сложности"
- •Рекомендации для изучения программного кода игр
- •Изучаемый программный код необходимо самостоятельно вводить с клавиатуры в среде разработки, глядя на образец в печатном издании.
- •Каждую строчку, каждый фрагмент программного кода стараться максимально разобрать и понять смысл. Не следует бездумно переписывать программный код и запускать!
- •Моменты, которые вызывают особые сложности в понимании, стараться нарисовать на бумаге или пройти пошагово.Например, цикл, который использует формулу с изменяющимися переменными в цикле.
- •Старайтесь больше экспериментировать с записанным программным кодом. Изменяйте значение кого-нибудь параметра и запускайте программу. Смотрите на изменения.
- •После разбора фрагмента программного кода –закрывайте книгу и начинайте пытаться записать свой программный код,который выполняет тоже самое, при этом, не заглядывая в книгу - с чистого листа.
- •Реализация первого уровня сложности игры Змейка Подготовка изображений для игры Змейка
- •Создание проекта и файлов классов игры Змейка
- •Реализация второго уровня сложности игры Змейка(начало)
- •Итог занятия
- •Занятие 2. "Разработка игры Змейка. Второй и третий уровень сложности"
- •Реализация второго уровня сложности игры Змейка(завершение)
- •Реализация третьего уровня сложности игры Змейка
- •Механизм перемещения змейки
- •Итог занятия
- •Занятие 3. "Разработка игры Морской бой. Первый уровень сложности"
- •Создание проекта и файлов классов игры Морской бой
- •Итог занятия
- •Занятие 4. "Разработка игры Морской бой. Второй уровень сложности"
- •Реализация второго уровня сложности игры Морской бой
- •Обозначения состояния ячейки игрового поля
- •Отрисовка игрового поля на основании двумерного массива
- •Ситуация выхода за пределы массива
- •Генерация однопалубных кораблей
- •Генерация четырехпалубного корабля
- •Итог занятия
- •Занятие 5. "Разработка игры Морской бой. Третий уровень сложности"
- •Реализация третьего уровня сложности игры Морской бой
- •Выполнение ходов игроком и компьютером
- •Стратегия ходов компьютера
- •Итог занятия
- •Занятие 6. "Разработка игры Пасьянс-Косынка. Начало первого уровня сложности"
- •Подготовка изображений для игры
- •Создание проекта и файлов классов игры Пасьянса-Косынка
- •Реализация класса kosinka
- •Реализация класса okno
- •Import javax.Swing.*;
- •Import java.Awt.*;
- •Реализация класса pole
- •Реализация класса karta
- •Import javax.Imageio.*;
- •Import java.Awt.*;
- •Import java.Io.*;
- •Итог занятия
- •Занятие 7. "Разработка игры Пасьянс-Косынка. Завершение первого уровня сложности"
- •Реализация класса stopka
- •Import java.Util.ArrayList;
- •Начало реализации класса game
- •Реализация класса pole
- •Завершение реализации класса game для первого уровня сложности
- •Vidacha();
- •Итог занятия
- •Занятие 8. "Разработка игры Пасьянс-Косынка. Второй уровень сложности"
- •Перерисовка всех стопок карт
- •Stopki[I].Get(stopki[I].Size()-2).Draw(gr);
- •Раздача карт в нижние семь стопок
- •Начало реализации третьего уровня сложности
- •Итог занятия
- •Занятие 9. "Разработка игры Пасьянс-Косынка. Третий уровень сложности"
- •// Получаем номер верхней карты
- •Тестирование переноса
- •Vidacha();
- •Заключение
- •Итог занятия
Правила игры Пасьянс-Косынка
Игра "Пасьянс-Косынка" является одной из самых популярных игр в мире. Она не менее известна, чем игры"Змейка" или"Морской бой".Это последняя игра, которую нам предстоит разработать самостоятельно в этом курсе.Практически каждый знаком с правилами этой игры. Если вы не знаете правил, то необходимо ознакомиться с ними и сыграть в игру несколько раз. Можно воспользоваться игрой "Пасьянс-Косынка"для операционной системыWindows (см. рис. 1).
Рис.
1
Цель игры: разложить все карты в четыре стопки по мастям в порядке возрастания от туза до короля.
Игровое поле: В игре для Windowsиспользуются карты одной колоды (52карты). В начале игры 28 карт разбиты на семь столбцов. В первом столбце одна карта, во втором — две и т. д. Верхняя карта каждого столбца лежит картинкой вверх, все остальные лежат рубашкой вверх. Четыре ячейки дома расположены в правом верхнем углу(см. рис. 1). В них нужно собрать стопки карт, необходимые для победы.
Правила игры: Каждая ячейкадома должна начинаться с туза. Если их нет, то придется перемещать карты между столбцами до нахождения, по крайней мере, одного.Перемещение карт между столбцами подчиняется определенным правилам.Столбцы нужно собирать в порядке убывания достоинства карты (от короля до туза), т. е.на валета можно положить десятку, но не тройку. Дополнительная сложность —масть карт в столбцах должна чередоваться (т. е. на красной масти должна лежать черная). Можно перемещать не только отдельные карты.Перемещать между столбцами можно также истопки карт,собранные в соответствии с правилами,указанными выше. Нужно просто щелкнуть самую дальнюю карту стопки и перетащить ее(и остальные карты на ней) в другой столбец.Если кончатся ходы, то придется вытягивать еще карты, щелкая колоду в левом верхнем углу. Если кончится колода, щелкните ее рамку на игровом поле, чтобы перетасовать карты. Переместить карту в ячейку дома можно или перетащив ее, или щелкнув дважды.
Прежде чем приступить к созданию игры "Пасьянс-Косынка"– познакомимся с некоторыми новыми темами. Этот материал поможет нам при создании игры.
Упаковка файлов изображений внутрьJar-архива
При разработке приложения, все изображения мы размещали в корне диска C:\ и при загрузке указывали путь к ним:
try
{
fon = ImageIO.read(new File("c:\\fon.png"));
}
catch (Exception ex) {}
После завершения отладки приложения путь к изображениям мы изменяли с корня диска С:\на путь к текущей папке:
try
{
fon = ImageIO.read(new File("./fon.png"));
}
catch (Exception ex) {}
Далее выполняли запуск приложения, чтобы файлы с расширением*.classскомпилировались снова. И после этого производили создание JAR-архива.
При таком подходе все файлы изображений должны находиться в одной папке с JAR-архивом. При таком подходе может возникнуть желание поместить файлы изображений также внутрьJAR-архива.И такая возможность есть!В этом случае вся игра,включая изображения, будет представлена всего одним JAR-файлом.
Во-первых:путь к изображениям необходимо указать относительно JAR-архива. Допустим, в процессе разработки путь был указан относительно корня дискаC:\
try
{
fon = ImageIO.read(new File("c:\\fon.png"));
}
catch (Exception ex) {}
Теперь необходимо записать так:
try
{
fon = ImageIO.read(pole.class.getResource("fon.png"));
}
catch (Exception ex) {}
Вместо создания объектаnew File() теперь используется pole.class.getResource(), имя файла указывается внутри двойных кавычек без указания пути к файлу. Первое слово–это имя класса, внутри которого происходит загрузка изображения. В данном случае–это класс с названием pole:
fon = ImageIO.read(pole.class.getResource("fon.png"));
Такие изменения необходимо произвести во всех классах вашего проекта, в которых происходит загрузка изображений. После всех изменений приложение необходимо обязательно запустить! В этот момент файлы с расширением *.class скомпилируются снова, но уже с учетом выполненных изменений. Во время запуска вы увидите, что ваши изображения не отобразились. Это правильно!
Во-вторых:необходимо открыть Мой компьютер и перейти к папке, в которой находится пакет JAVA. По умолчанию она находится:
C:\Program Files (x86)\Java\ или C:\Program Files\Java\(см. рис. 2). Внутри нее вы увидите папку с названием JDK–это пакет разработчика (см. рис.2). Переходим в нее и внутри в папку BIN (см. рис. 3).
Рис. 2
Рис. 3
В папке BIN находятся файлы, при помощи которых среда разработки Eclipseвыполняет запуск программы Java,компиляцию в файлы с расширением *.class, создание JAR-архива. Рассмотрим их:
javaw.exe –выполняет запуск программы на исполнение
javac.exe –выполняет компиляцию программы из файлов с расширением *.javaв файлы промежуточного байт-кода с расширением *.class
jar.exe–выполняет созданиеJAR-архива и размещает внутри него файлы с расширением*.classи дополнительные ресурсы (изображения и т.д.)
Среда разработки Eclipseавтоматически использует эти файлы при необходимости.
Нам понадобится утилита для создания JAR-архива–файлjar.exe
Внутри папки BIN необходимо создатьBAT-файл, назовем его make.bat.
В этом файле запишем:
jar cfm zmeika.jar manifest.mf *.class *.png
Это вызов утилиты jar.exe с указанием дополнительных параметров. При таком вызове в JAR-архив поместятся все файлы с расширением*.classи *.png, которые будут находиться в текущей папке BIN. Имя архива будетzmeika.jar. Сохраним файл make.bat (см. рис. 4).
Рис. 4
Далее при создании архивов вам придется изменять только имяJAR-архива:
jar cfm zmeika.jar manifest.mf *.class *.png
Все остальное будет оставаться без изменений.
В файле make.bat мы указали файл с наименованием manifest.mf –это так называемый файл манифеста,в этом файле указывается имя главного класса нашего приложения. Главный класс содержит метод main() –это точка входа (запуска) приложения.
Внутри папки BIN создадим файлmanifest.mf, внутри файла запишем:
Main-Class: zmeika
Сохраним файл (см. рис. 5).
Рис. 5
В данном случае zmeika–это название главного класса приложения. При записи текста внутри файла manifest.mfнеобходимо соблюдать некоторые требования:
Регистр букв имеет значение!
После двоеточия необходимо поставить пробел.
После указания имени главное класса необходимо выполнить перевод строки, нажав клавишу Enter.
При малейших ошибках в файле manifest.mf –создать JAR-архив НЕ ПОЛУЧИТСЯ!!!
Далее при создании архивов, в файле манифеста, вам придется изменять только имя главного класса.
В-третьих:в папку BIN, где уже находятся файлы manifest.mf, make.batнеобходимо поместить все файлы с изображениями (с расширением *.png).
При создании JAR-архива все файлы с расширением *.pngиз папки BINбудут упакованы. Поэтому в папке BINне должно быть лишних PNGфайлов.
В-четвертых:в папку BIN, где уже находятся файлы manifest.mf, make.batнеобходимо поместить все файлы вашего приложения с расширением *.class.
При создании JAR-архива все файлы с расширением *.classиз папки BINбудут упакованы. Поэтому в папкеBINне должно быть лишних файлов с расширением *.class. Все файлы с расширением *.class находятся в папке вашего проекта в папке BIN (см. рис. 6). Именно из этой папки их необходимо скопировать. Получится копирование из одной папки BIN в другую папку BIN.
Рис. 6
В-пятых:необходимо запустить файл make.bat. Это выполняется двойным щелчком левой клавиши мыши на файле make.bat (см. рис. 7).
Рис. 7
Файл make.batзапустит утилитуjar.exe и передаст ей необходимые параметры, в частности имя файла манифеста (manifest.mf). Если все выполнится правильно, то внутри папки BINпоявится JAR-архив с указанным именем (см. рис. 8).
Рис. 8
Этот JAR-архив содержит файлы изображений внутри себя. Теперь для передачи игры пользователю достаточно передать только один файл. JAR-архив–это запускаемый на исполнение, но все-таки архив. Поэтому из него можно выполнить извлечение обычным архиватором. Если вы это сделаете, то увидите его содержимое(см. рис. 9).Внутри архива находятся файлы с расширением *.class,файлы с расширением *.png и папка META-INF. В папке META-INF находится файл MANIFEST.MF (файл манифеста).
Внимание!!!При запуске JAR-архива могут возникать проблемы, если он расположен в папке, путь к которой содержит русские буквы. В этом случае JAR-архив может не запуститься. Такая проблема возможна в зависимости от операционной системы и текущей версии виртуальной машины Java.
Рис. 9
