Tuesday, August 2, 2011

2. О тетрисе (Battle Tetris)

Для конвертации в HTML/JS/Canvas на Хакатоне была выбрана игра, написанная под ДОС.

Конкретно этот тетрис был написан мною в ХПИ в 1994 году, когда я учился на 1 или 2 курсе. Тетрис написан на турбо-паскале (как и всё тогда), и пользовался популярностью в узких кругах.

Он имеет две особенности

  1. С точки зрения пользователя:

    Можно играть вчетвером (или меньшим количеством) за одной клавиатурой. Причем игроки зарабатывают очки обычным образом, и тратят их в магазине, покупая разнобразные товары и услуги, которые затем в процессе дальнейшей игры по отдельной клавише запускаются в действие. Услуги эти разные: замедлить себе скорость или повысить скорость товарищу, купить себе фигуру "палка" или инвертировать левое Г на правое, поменять на время товарищу левую и правую кнопки, чтобы помучался итд.

  2. С точки зрения архитектуры:

    Программа написана не в едином цикле, как все нормальные игры, а с использованием кооперативной многозадачности. Например, на каждый "стакан" (штука, куда падают фигуры) заводится отдельный цикл (while true), в котором опрашиваются клавиши именно того игрока к которому стакан принадлежит. Появляющиеся в процессе игры персональные для игрока меню (магазин) тоже ничего ни о чем не знают, крутятся себе в цикле "пока пользователь не закроет". Разлетающаяся в куски фигура (есть такой пункт в магазине) разлетается несколько кадров, а разлет реализуется маленьким тредом (потоком), покуда основной поток остановлен.

    В самой игре работает около 20 потоков одновременно в пике. Каждый имеет свой стек, самый настоящий, и всё управление потоками написано на ассемблере. После того, как супервизор был написан, написание игры превратилось в сплошное удовольствие. Получилось, как будто ерланг 8), с тем отличием, что я вставлял вызовы функции PleaseYield во все циклы, которые могли долго работать, имея в виду, что каждый поток от одного PleaseYield до следующего PleaseYield отработает 1 раз в кадр, потому что в одном из потоков дожидалось начала кадра, так было задумано.

Недостатком игры является несбалансированность цен, и криволинейное увеличение скорости игры, т.к. это не было для меня особо интересным тогда.

Игра в то время обитала в Харьковском FidoNet, а может и дальше, и я не знаю о ее судьбе. Наверное в нее игрывало несколько людей вне ХПИ, не знаю. Тогда не было ни твиттера, ни распространения email.

Тетрис был написан, поигран, и жил на дискетах в шкафу, откуда я его и спас с появлением интернета, и тех пор он болтался за мной в моем архиве. Как и всякий умственно усталый человек, я жалел его выбросить и с теплотой вспоминал о днях далекой юности.



Картинки или читать дальше:

1. About page:


2. Final scroller (во время выхода в ДОС):


3. Главное меню:


4. Собственно игра:


5. Турбо паскаль, вид на Task Manager:

6. Использование оного Task Manager:

7. Загрузка игры a-la Doom.



No comments:

Post a Comment