Battleship 8x8

Описание

Реализуйте методы в классе 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());

Результат будет следующим:

☒☐☐☐....
.×...☐☐☐
..×.....
..☐☒....
......☐.
.☐......
........
........