Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java Модуль 4.docx
Скачиваний:
14
Добавлен:
01.07.2025
Размер:
20.72 Mб
Скачать

Правила игры Пасьянс-Косынка

Игра "Пасьянс-Косынка" является одной из самых популярных игр в мире. Она не менее известна, чем игры"Змейка" или"Морской бой".Это последняя игра, которую нам предстоит разработать самостоятельно в этом курсе.Практически каждый знаком с правилами этой игры. Если вы не знаете правил, то необходимо ознакомиться с ними и сыграть в игру несколько раз. Можно воспользоваться игрой "Пасьянс-Косынка"для операционной системы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-архива. Рассмотрим их:

  1. javaw.exe –выполняет запуск программы на исполнение

  1. javac.exe выполняет компиляцию программы из файлов с расширением *.javaв файлы промежуточного байт-кода с расширением *.class

  1. 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необходимо соблюдать некоторые требования:

  1. Регистр букв имеет значение!

  1. После двоеточия необходимо поставить пробел.

  1. После указания имени главное класса необходимо выполнить перевод строки, нажав клавишу 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]