Факультет Информационных Технологий, группа 2203 Курс: Объектно-ориентированное программирование, II семестр Семинарист: Анойкин Д.А., http://ccfit.nsu.ru/~den Задание №1.1 Использование Eclipse Сделать перспективу с именем Universal, чтобы она выглядела так (проверяется на уроке или присылай screenshots): 1 Факультет Информационных Технологий, группа 2203 Курс: Объектно-ориентированное программирование, II семестр Семинарист: Анойкин Д.А., http://ccfit.nsu.ru/~den Задание №1.2 Простой контейнер для хранения объектов типа Object 1. Структура программы: a. /ru/nsu/fit/<фамилия>/container – пакет содержит в себе класс контейнера и вспомогательные классы b. /ru/nsu/fit/<фамилия>/seafight – пакет содержит в себе тестовые программы для тестирования класса контейнера 2. Контейнер должен хранить элементы типа Object в односвязном списке и предоставлять следующие возможности: a. Имплементировать интерфейс public interface Container { public void add(Object obj); // Добавить элемент в конец public Object remove(int index); public Object get(int index); public void clear(); public int size(); public int indexOf(Object obj); public boolean contains(Object obj); } b. Функция contains() – функция поиска элемента в массиве. При поиске используется сравнение объектов с помощью метода boolean equals(Object obj) из класса Object , а не через оператор == c. Переопределить функцию toString() для печати списка элементов 3. Тестовый пакет содержит класс для игры в морской бой на карте размерности 1х20. Программа должна работать так: 1. Создавать список из 20 элементов класса Cell. Класс Cell содержит переменную типа int, определяющую тип клетки (еще не стреляли, подбитый корабль или промах). В зависимости от типа клетки функция toString() выводит соответствующий значок состояния. Функция equals() сравнивает объекты класса Cell по типу. 2. Создать еще один список и заполнить его координатами 5 однопалубных кораблей (корабли не могут быть рядом). Используйте функцию random() из класса java.lang.Math. для получения случайного чиса. Используйте Integer для хранения координаты. 3. С помощью toString() контейнера вывести текущее состояние поля. Запросить поле для удара. Предупредить, если в поле уже ударяли. 4. Проверить, что выстрел успешный, используя функцию contains() для списка с координатами кораблей. При успешном выстреле удалить координату корабля из списка и пометить соответствующую Cell в списке для представления игрового поля. 5. Сообщить результат (промах/попал). 6. Если все корабли подбиты, то вывести общее кол-во затраченных выстрелов и поздравительный текст. Начать игру заново. 7. Если не было ни одного подбитого корабля (проверить с помощью contains()), а уже прошло 5 выстрелов, то пользователь проиграл. Если уже было сделано 12 выстрелов, то пользователь проиграл. При проигрыше вывести координаты оставшихся кораблей и огорчительный текст. Начать игру заново. 8. Если еще остались целые корабли, то перейти на 3. 4. Необходимо использовать следующие техники: 2 Факультет Информационных Технологий, группа 2203 Курс: Объектно-ориентированное программирование, II семестр Семинарист: Анойкин Д.А., http://ccfit.nsu.ru/~den a. Не создавать открытых (public) членов класса. Использовать технологию getters and setters, где необходимо. Стараться как можно прочнее закрыть состояние класса от внешних воздействий. Пример setters/getters: void setMember (int member) {…} int getMember() {…} b. Константы задаются с помощью public static final полей (размерность поля, кол-во кораблей и т.д.). c. Код для чтения данных с консоли: try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { String str = in.readLine(); … // в str находится считанная строка } finally { in.close(); } } catch (IOException e) { e.printStackTrace(); // необязательно // дальнейшая обработка Exception или можно // прокинуть выше, например throw new RuntimeException(e) } Классы BufferedReader и InputStreamReader лежат в пакете java.io.* Данные вводятся (и выводятся) в Eclipse через вьюшку ‘Console’. Дополнительные задание: 1. Реализовать контейнер на основе динамического массива 2. Определить в классе Cell функцию: int compareTo(Cell cell) и на ее основе реализовать функцию sort() для элементов контейнера. Кто может, пусть использует интерфейс java.lang.Comparable Написать тестовый класс для проверки сортировки 3