Вторник, 26.11.2024, 21:07
Приветствую Вас Гость | RSS
Главная | | Регистрация | Вход
Меню сайта
Форма входа
Поиск
Календарь
«  Февраль 2012  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
272829
Архив записей
Наш опрос
Оцените мой сайт
Всего ответов: 20
Мини-чат
Друзья сайта
  • Заказ Художник
  • Рыбалка
  • Новости
  • Наш университет io-96
  • Железо и другие
  • Наш Counter-Strike
  • Google ot Turbokherson
  • Google ot Turbokherson87
  • Android
  • Программы и Софт
  • Программирование
  • Лечение здоровья
  • О Ремонт компьютер
  • Наш сайт Turbokherson
  • Программирование ICQ 378204653 от Turbokherson
    Главная » 2012 » Февраль » 20 » Assembler Три компьютерные игры (по 30 байт каждая)
    13:44
    Assembler Три компьютерные игры (по 30 байт каждая)
    Вдохновленный 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. Архив с этими тремя скомпилированными играми можно скачать прямо сейчас (осторожно, он тяжелый, целых 386 байт). Запускать можно, например, в dosbox. Для Однорукого я рекомендую уменьшить CPU cycles.

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

    P.S. Можно ли сделать игру еще меньшего размера? Конечно можно!


    http://habrahabr.ru/blogs/asm/119765
    Просмотров: 683 | Добавил: Turbokherson | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Создать бесплатный сайт с uCozCopyright MyCorp © 2024