Task_2.3 - Факультета информационных технологий НГУ

advertisement
Факультет Информационных Технологий, 2004/2005 год, 2-й курс, II семестр
Курс: Объектно-ориентированное программирование
Задание №3. Графическая подсистема в Java.
Игра «Сапер»
1. Постановка задачи
Написать аналог игры «Сапер» (“Minesweeper”) из состава стандартных программ для
Windows OS. Для создания графического интерфейса необходимо использовать
библиотеку SWING (пакеты javax.swing.*) из комплекта разработчика JSDK 1.4
2. Структура программы
/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper – пакет содержит основные классы программы
/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/resources – пакет для картинок и других ресурсов
3. Требования к программе
1. Размер поля и количество мин устанавливается в конструкторе главного класса,
по умолчанию поле размером 9x9 и 10 мин
2. Окно программы содержит стандартное меню с пунктами Game и Help. Меню
Game содержит три пункта New, High Scores и Exit. Меню Help содержит пункт
About для отображения авторства и версии программы.
3. Главное окно содержит часы, которые в показывают время (в секундах),
потраченное на решение задачи. Время начинает идти, когда происходит первое
нажатие на клетку поля.
4. Главное окно содержит счетчик обнаруженных мин (помеченных флажком)
5. Игру можно начать заново в любой момент с помощью специальной кнопки
сброса игры
6. При нажатии левой кнопкой мыши на ячейку поля она открывается и
показывается число близлежащих мин (использовать разные цвета для разных
чисел). Если число близлежащих мин нулевое, то автоматически открываются
все близлежащие клетки. Во всех близлежащих клеток также показывается
число близлежащих мин. Если для какой-то клетки оно нулевое, то
автоматически открываются ее близлежащие клетки и далее по рекурсии.
7. При нажатии правой кнопкой мыши на ячейку – она метится флажком как
мина. Флажок отображается с помощью картинки. Если на флажок заново
нажать правой клавишей мыши, то он сбрасывается.
8. Игра должна поддерживать таблицу рекордов (запись наилучшего результата) и
предоставлять интерфейс для его показа. При просмотре таблицы результатов
можно обнулить данные с помощью специальной кнопки. Данные таблицы
рекордов хранятся в файле.
9. Окно игры должно корректно поддерживать изменение размера и нажатие на
кнопку закрытия окна “Close”
10. Программа НЕ должна состоять из одного-двух толстых классов. Необходимо
разбивать программу на компоненты, отвечающие за определенную
функциональность. В частности, рекомендуется выделять:
o Классы для транспортировки структур данных (бины)
o Классы, инкапсулирующие логику работы программы (бизнесс-классы)
o Классы, отвечающие за пользовательский интерфейс
Пример приложения, разбитого на такие классы, можно скачать по ссылке:
http://ccfit.nsu.ru/~den/NotebookExample.zip
Это приложение разбито на 4 класса:
1
Факультет Информационных Технологий, 2004/2005 год, 2-й курс, II семестр
Курс: Объектно-ориентированное программирование




NotebookRecord.java – простой класс для транспортировки данных.
Обратите внимание, что в нем нет ничего лишнего. Только set/get
методы. Но этот класс очень важен, т.к. определяет структуру данных,
которая используется для представления записи в записной книжке.
NotebookManager.java – класс, инкапсулирующий логику работы с
записной книжкой. Обратите внимание, что он не зависит от
пользовательского интерфейса. Это позволяет его использовать
отдельно, например в каком-нибудь приложении «Календарь» для
отображения заметок, привязанных к определенному дню.
NotebookGUI.java – класс, управляющим GUI для работы с записной
книжкой
NotebookConsoleUI.java – пример класса, который использует не
графический пользовательский интерфейс. Т.к. у нас логика
(NotebookManager) выделена в отдельный класс, то очень легко
привязать сколько угодно интерфейсов для работы с записной книжкой.
4. Дополнительные возможности (необязательно)
1. При двойном нажатии на открытое поле открываются ближайшие закрытые
поля, которые не содержат мины. Это происходит только когда количество
флажков на закрытых полях совпадает с цифрой на открытом поле.
5. Особенности реализации
1. Для определения типа нажатой клавиши мыши использовать методы класса
javax.swing.SwingUtilities
2. Отчет времени должен быть реализован отдельным потоком. Можно
использовать специализированный класс javax.swing.Timer или стандартный
таймер java.util.Timer
3. При формировании окна игры использовать LayoutManager. Для расположения
элементов на игровой панели рекомендуется использовать класс
GridBagLayout. Для расположения ячеек поля рекомендуется использовать
класс GridLayout.
4. Основной класс должен быть полностью задокументирован по стандарту
JavaDoc.
5. С программой должна идти документация по классам в стандартном виде. Для
генерации документации необходимо использовать программу javadoc из
пакета разработчика JSDK.
6. Рекомендуется почитать о таких концепциях как MVC (Model-View-Controller)
и EBC (Entity-Boundary-Controller).
Applet «Бегущая строка»
1. Постановка задачи
Используя графическую библиотеку AWT (пакеты java.awt.*) , написать Java-applet,
который позволяет прокручивать текст в окне web-браузера. Текст прокручивается слева
направо по одной букве и задается параметром в тэге <APPLET>.
2. Требования к программе
1. Не использовать классы библиотеки SWING (пакеты javax.swing.*)
2
Факультет Информационных Технологий, 2004/2005 год, 2-й курс, II семестр
Курс: Объектно-ориентированное программирование
2. Для реализации эффекта движущейся строки необходимо использовать отдельный
поток (java.lang.Thread). Не использовать стандартный таймер.
3. Окно программы должно содержать кнопку паузы, которая позволяет в любой
момент остановить/возобновить движение текста
3
Download