Реализуйте методы в классе Battleship8x8.
Battleship8x8 представляет собой карту 8x8 для игры в Морской бой. Обратите внимание, что Battleship8x8 использует:
- поле
ships
типа long для хранения местоположения кораблей, - поле
shots
типа для регистрации выстрелов.
Поле типа long хранит 64 бита. Рассматривайте их как 8 строк по 8 ячеек:
- биты "0" представляют собой пустые ячейки
- биты "1" представляют собой ячейки, занятые кораблями или выстрелами.
Используйте следующие методы:
public boolean shoot(String shot)
- регистрирует выстрел и возвращаетtrue
, если выстрел попадает в корабль. Выстрел – это комбинация одной из букв английского алфавита от "А" до "H" и одной из цифр от 1 до 8.public String state()
- возвращает строку, представляющую состояние карты. Строка карты состоит из 8 строк по 8 символов, разделенных "\n". Используйте следующие символы:- '.' - пустая ячейка
- '×' - пустая ячейка, в которую стреляли
- '☐' - ячейка, захваченная кораблем
- '☒'- ячейка, захваченная расстрелянным кораблем.
Нельзя добавлять или изменять новые поля. Используйте статические методы классов-оболочек.
Возьмем информацию о карте, закодированную в виде значения long:
long map = -1150950973573693440L;
Его можно представить как двоичный литерал:
/*
11110000
00000111
00000000
00110000
00000010
01000000
00000000
00000000
*/
long map = 0b11110000_00000111_00000000_00110000_00000010_01000000_00000000_00000000L;
Строки помечены цифрами, а столбцы - буквами:
/*
ABCDEFGH
┌────────
1│11110000
2│00000111
3│00000000
4│00110000
5│00000010
6│01000000
7│00000000
8│00000000
*/
Возьмем список выстрелов:
List<> shots = List.of("A1", "B2", "C3", "D4");
Зарегистрируем их, используя Battleship8x8
API, и выведем, что получилось:
Battleship8x8 battle = new Battleship8x8(map);
shots.forEach(battle::shoot);
System.out.println(battle.state());
Результат будет следующим:
☒☐☐☐....
.×...☐☐☐
..×.....
..☐☒....
......☐.
.☐......
........
........