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

advertisement
Факультет Информационных Технологий, группа 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
Download