Как создать и нарисовать спрайты в emu8086? - PullRequest
0 голосов
/ 01 марта 2019

Я получил задание, в котором мне нужно создать игру, используя emu8086.

Но проблема в том, что я не знаю, как нарисовать спрайт.

Может кто-нибудь помочь мнеобъясни мне создание спрайта?

1 Ответ

0 голосов
/ 04 марта 2019

Можете ли вы сказать мне, как рисовать на emu8086?

Сначала вы настраиваете режим графического видео.Следующий код выбирает 320x200 256-цветный режим:

mov     ax, 0013h  ; AH=00h is BIOS.SetVideoMode, AL=13h is 320x200 mode
int     10h

Теперь вы можете нанести любой пиксель на свой вкус.Ниже приведен пример, который отображает один пиксель в центре экрана:

mov     dx, 100    ; Y = 200 / 2
mov     cx, 160    ; X = 320 / 2
mov     bh, 0      ; DisplayPage
mov     ax, 0C02h  ; AH=0Ch is BIOS.WritePixel, AL=2 is color green
int     10h

Чтобы нарисовать линию, вы повторяете построение пикселя при изменении одной или обеих координат.Ниже приведен пример, который рисует вертикальную линию (100,50) - (100,150).Эта линия имеет 101 пиксель (150 - 50 + 1):

    mov     bh, 0      ; DisplayPage doesn't change
    mov     cx, 100    ; X is fixed for a vertical line
    mov     dx, 50     ; Y to start
More:
    mov     ax, 0C04h  ; AH=0Ch is BIOS.WritePixel, AL=4 is color red
    int     10h
    inc     dx         ; Next Y
    cmp     dx, 150
    jbe     More

Для построения области вы используете пару вложенных циклов.Ниже приведен пример, который строит прямоугольник между (200,33) - (209,35).Эта область имеет 30 пикселей (209 - 200 + 1) * (35 - 33 + 1):

    mov     si, Bitmap
    mov     bh, 0      ; DisplayPage doesn't change
    mov     dx, 33     ; Y to start
OuterLoop:
    mov     cx, 200    ; X to start
InnerLoop:
    lodsb              ; Fetch color for this pixel
    mov     ah, 0Ch    ; AH=0Ch is BIOS.WritePixel
    int     10h
    inc     cx         ; Next X
    cmp     cx, 209
    jbe     InnerLoop
    inc     dx         ; Next Y
    cmp     dx, 35
    jbe     OuterLoop

    ...

Bitmap:                ; Just some blue and cyan pixels
    db      1, 3, 1, 3, 1, 3, 1, 3, 1, 3
    db      3, 1, 3, 1, 3, 1, 3, 1, 3, 1
    db      1, 3, 1, 3, 1, 3, 1, 3, 1, 3 
...