И есть ли тут ещё какие-либо баги которые я сразу не заметил?
Это очень интересный вопрос. На мильон я-бы сказал.
Вообще если на программу не написана
спецификация или
тесты то тогда совершенно
невозможно точно утверждать
является ли поведение багом или так задумал автор.
Я вот к стыду не помню всех правил морского боя. Что там с кораблем. Когда он затонет?
Как мы узнаем что поражены все части корабля?
Глядя на код трудно сказать где там ошибка. Надо его запускать. А запуск связан с вводом
выводом. Тоесть нужно потратить много человеко-часов вводя буквы и цифры и симулируя
разные игровые кейсы. Сам понимаешь нет такого энтузиаста который бы осилил за ништяк
тестировать.
Поэтому по возможности напиши тестовый код (в соотношении хотя-бы 1:10) чтобы он тестировал
автоматически основной код. Есть такая практика.
Модульное тестирование.
По поводу сохранения игры - посмотри что сохраняется в внешний файл.