Кто-то вышивает крестиком, кто-то ноликом, а у меня было такое хобби, хотя потом оно и стало курсовой работой. Но разработка игры велась целиком на добровольных началах just for lulz.
Надеюсь современное поколение не подсаживают на устаревшие технологии в отличии от нас, учившихся на стыке веков во времена графических интерфейсов и сетевых технологий и изучавших Turo Paskal 7.0
Впрочем тогда успех Делфи был лишь предстоящим делом, возможно эта технология была не такой уж устаревшей. Дома компьютера не было, на заочном отделении учёбы есс-но никто не даст достаточного времени, поэтому разработка велась по месту работы в течении почти полугода. Коллега и единственный тестер Дмитрий Россинский оказывал посильную помощь в нахождении багов и подсказывал идеи по пасхалкам. Исходники позже были украдены вместе с кучей оборудования из офиса неизвестными лицами..
Псевдографика - наше всё!
Я умел graph3 и до морского боя, но воплотить проект было решено именно в текстовом режиме на псевдографике. В то время мне более интересны были алгоритмы хода компьютера, механизмы размещения кораблей и другие технические детали, нежели картинки. Но не смотря на псевдографику в игре присутствуют динамические заставки включая стартовую
Заставка Морской бой from art fainder on Vimeo.
Конечно сегодня, когда почти любую программу можно написать на Яве в 30 строк кода такой проект не вызывает интереса, а орфографические ошибки лишь служат дополнительным стимулом для улыбки, но во-первых это просто рассказ об эпизоде из моей молодости, а во-вторых не исключено, что кто-то найдёт интересные решения в частности с массивами или таймером. Да и ностальгию никто не отменял.
Собственный таймер
Игра начинается с динамической заставки и далее в игре многократно используется таймер, скорость которого в те времена определялась тактовой частотой. а не временем, из-за чего разбежности были колоссальными от слишком медленных на старых машинах до излишне быстрых на более мощных. Проблема была решена путём замены стандартного delay собственным wait. На старте запускался сверялось время до миллисекунды перед и после запуска delay(1000). Таким образом получив точное значение можно было добиться более-менее одинаковой скорости таймеров.
Второй проблемой стало ручное размещение кораблей игрока. эта процедура требовала серьёзное разработки, а руки просили приступить к ходу компьютера, поэтому первая реализация была весьма примитивной и неудобной и хорошее размещение кораблей было отложено... но так не было реализовано. Если кто захочет скачать и поиграть, рекомендую использовать автоматическое размещение кораблей игрока.
10 уровней сложности
На старте нет возможности выбрать сложность игры - она устанавливается равной 2 (0-минимальная, 9-"невозможная"), но её изменение становится доступным после первого прохождения игры независимо от того победил игрок или нет. Сложность определяется алгоритмом игры компьютера. Обозначим её для удобства - dif.
В начале нового хода алгоритм выбирает случайное число из промежутка 0-9 и если это число меньше или равно параметру dif, то координаты для выстрела определяются также случайно. Если же число больше dif, то компьютер непременно попадёт в ваш корабль. Также компьютер помнит историю своих ходов и обстреливает окрестности при попадании. Простой, но эффективный способ и на сложностях 4 и выше выиграть действительно проблематично.
А поле то 12*12
На экране изображено обычное поле 10*10 и игрок не может использовать клетки вне этого поле. Компьютер также их не использует. Невидимые координаты потребовались, чтобы отмечать уже утопленный корабль. Поскольку корабли по правилам игры не могут соприкасаться, зона в 1 квадрат вокруг корабля всегда должна быть свободна и это должен был учитывать как при размещении, так и при атаке. Поэтому потопив корабль на А1 вы знаете, что на А2 не может быть корабля, а алгоритм отметки неиспользуемых клеток помимо А2, Б1 использует и предыдущие индексы - (-1 клетка в каждом направлении, даже если это первая клетка)
Управление
Фильтрация ввода позволяет вам использовать кириллицу независимо от раскладки и регистра, таким образом f8, А8, 8F,8А и т.д. - это одни и те же координаты. Остальные клавиши при этом игнорируются. Функция ввода будет ждать, пока не получит набор из буквы и цифры. Можете дать попробовать сыграть своему коту
Настройки
Игра позволяет настраивать цвета всех игровых элементов. Помню, я думал о настойке расположения полей, но отказался от этого. Непонятно, почему не сделал сохранение игрового процесса, а может просто забыл причину отказа от этой идеи. Но так или иначе играя на эмуляторе вряд ли удастся насладиться сохранениями
Плюшки
В игру встроено множество шуток от "Русского радио", что были популярны в то время. Они меняются от любой клавиши. Также после прохождения доступны призы в виде встроенных игр "Крестики-нолики" и пары динамических заставок. Правда поскольку они писались до Морского боя и wait там ещё нет их динами практически неотличима от статики.
Читы
В случае победы в зависимости от количества ходов игра открывает пароли на некоторые читы. Все пароли открываются при победе с 23 или менее ходов
Как поиграть
Игру выкладываю на Мегу. . Запустите, выберите образ и играйте, предварительно нажав Управление->Нажать Ctrl+Alt+Del, т.е. перезапустив эмулируемую систему
[Архив на Меге](https://mega.nz/#!aYpXGBqC!DlZFv4PH7HcYEGveWSYnLZPSGsB1_90Lpn4NFn6V128)
Это так мило. Помню тоже в школе на бэйсике писал игру-гоночку с ужасной самодельной графикой. Эх эти простые времена... Никаких тонн библиотек подключаемых к прогам. 1-2 модуля по несколько килобайт и вуаля - чудо готово!
Здравствуйте!
На платформе Голос в первую очередь ценится уникальный авторский контент, который ранее нигде не публиковался.
Ваш пост поддержан в рамках программы "Поддержка авторского уникального контента", скоро за него проголосует - @sept или @dmilash со 100% силой, если они не проголосуют - вам будут перечислены 12,5 gbg с аккаунта @septcur или @dailystats.
Желаем вам творческого роста и увеличения авторских наград.
@fainder Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@fainder Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@fainder Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за Количество комментариев
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@fainder Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@fainder Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
vika-teplo, candy777, dobrogop
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас на странице https://golos.io/~witnesses, вот так:
А я в школе Сокобан писал на бейсике, тоже ностальгия)))
@gemini up!
Ок, @fainder!
Я и @btc-e, проголосовали за пост: Как я "Морской бой" писал в 2001 г. TP 7, DOS