Как я "Морской бой" писал в 2001 г. TP 7, DOS

Кто-то вышивает крестиком, кто-то ноликом, а у меня было такое хобби, хотя потом оно и стало курсовой работой. Но разработка игры велась целиком на добровольных началах 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)

творчествокомпьютерныепрограммированиеsc-programming
25%
3
17
1.276 GOLOS
0
В избранное
fainder
На Golos с 2017 M09
17
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (11)
Сортировать по:
Сначала старые