Pull to refresh

Три компьютерные игры (по 30 байт каждая)

Reading time3 min
Views15K
Вдохновленная Shifticida (32 байта) и Самой маленькой гоночной игрой в мире (58 байт), я решила сделать Самую-самую маленькую компьютерную игру для x86. Вместо одной игры получились три. Увы, они не такие крутые, как гоночки, но зато они занимают всего по 30 байт каждая.

Угадай-ка


Игра для двух игроков. Первый игрок нажимает какую-нибудь кнопку на клавиатуре. После этого второй игрок перебирает кнопки на клавиатуре до тех пор, пока не нажмет на ту же кнопку, что и первый. Чтобы второй игрок не мучился очень уж долго, на экран выводятся подсказки. Когда нужная кнопка найдена, игра заканчивается.

;;Угадай-ка

int 16h ;;Ожидаем нажатие на клавишу
mov bl, al ;;Сохраняем код клавиши в память

still: ;;Главный цикл
int 29h ;;Вывод символа на экран

mov al, 13;;Возврат каретки
int 29h

mov ah,1 ;;Опрос клавиатуры
int 21h

cmp al, bl ;;Сравнение кодов клавиш
je true ;;Если угадали, то переходим к true
ja big ;;Если больше, то переходим к big

;Если не равно и не больше, значит, код нажатой клавиши меньше, чем код в bl,
mov al, '-' ;так что выведем на экран символ "-"
jmp still

big:
mov al, '+' ;Выведем на экран символ "+"
jmp still

true:
int 20h ;;Конец игры


Баше


Классическая математическая игра, в которой вашим противником будет компьютер. Правила такие: на столе лежат 15 палочек, нужно по очереди брать от 1 до 3. Проигрывает тот, кому нечего брать со стола.

Игра выводит на экран текущее количество палочек и ожидает ввода с клавиатуры (смело жмите 1, 2 или 3). После того, как человек сделает свой ход, компьютер тоже возьмет себе несколько палочек, и выведет оставшееся количество палочек на экран. Игра заканчивается вместе с палочками, и если вы победили, то увидите на экране сердечко. Предостережение: ввод с клавиатуры не фильтруется, так что вы можете взять сразу 15 или даже 200 палочек. Компьютер отреагирует на это так же, как и живой человек в подобной ситуации (может очень сильно обидеться).

;;Баше

mov dl, 15 ;;Поместим в dl количество палочек

still: ;;Главный цикл

mov al, '|' ;;Выведем символ палочки
mov cl, dl ;;с помощью цикла,
disp: ;;ровно cl раз
int 29h ;;вызвав прерывание 29h
loop disp

mov ah, 1 ;;Ожидаем ввода с клавиатуры
int 21h

sub al, '0' ;;Переводим ASCII-код в число

cmp dl, al ;;Забрали последнюю палочку - значит, победили
je win

sub dl, 4 ;;Иначе компьютер дополняет ваш ход до 4
jns still ;;Если палочки не кончились, то возвращаемся к началу главного цикла

jmp fin ;;Иначе - завершаем программу

win:
int 29h ;;Выведем сердечко

fin:
int 20h ;;Конец программы


К сожалению, после второго раза играть в Баше становится скучно.

Однорукий бандит


Программа очень быстро прокручивает символы на экране (по одному, в левом верхнем углу). Чтобы зафиксировать текущий символ и перейти к следующему, нажимайте клавишу «Стрелка вправо». Если сможете получить три одинаковых символа, значит, либо у вас очень старый компьютер, либо вам очень везет!

;;Однорукий бандит

push 0b800H ;;Обращаемся к видеопамяти
pop ds

mov cx, 3 ;;Нужно вывести на экран три символа

le: ;;Вывод символа
push cx ;;Сохраним cx, потому что вызов таймера его затирает
add bl, 2 ;;Переместим курсор

inf: ;;Почти вечный цикл
int 1AH ;;Вызываем таймер
add dl, bl ;;Мешаем игроку победить, быстро нажимая клавишу "Вправо"
mov [bx], dl ;;Выводим текущий символ на экран

;;Обработчик клавиатуры
in al, 60H
cmp al, 77
jz re ;;Нажата кнопка "Стрелка влево", переходим к следующему символу
;;Конец обработчика клавиатуры

jmp inf ;;Почти вечный цикл повторяется почти вечно

re: ;;Пора выводить следующий символ или останавливать бандита
pop cx ;; Для этого восстановим cx
loop le ;; И продолжим цикл "Вывод символа"

int 20h ;;Конец программы


Заключение


Исходный код игр я компилировала с помощью fasm. Запускать можно, например, в dosbox. Для Однорукого я рекомендую уменьшить CPU cycles.

ex2.com — Угадай-ка
poo2.com — Баше
roll.com — Однорукий бандит

P.S. Можно ли сделать игру еще меньшего размера? Конечно можно!
Tags:
Hubs:
Total votes 132: ↑122 and ↓10+112
Comments95

Articles