8086 贪吃蛇
运行环境:MsDos 7.1 或 DOSBox
键盘方向键控制
演示
汇编代码
assume cs:code, ds:data, ss:stack
; gpu prop byte
; 7 6 5 4 3 2 1 0
; BL R G B I R G B
; | \_____/ | \_____/
; 闪烁 背景 高亮 前景
; game map: 25 x 25
; snake bodys max: 23 x 23
data segment
score dw 0 ; game score
scpre db 'score:' ; [6] score prefix
dead db 'game over!' ; [10] game over
food dw 0 ; snake food: x|y
sdct db 0 ; snake direction 0001-up 0010-down 0100-left 1000-right
slen db 0 ; snake length
body dw 529 dup(0) ; snake bodys: x|y, ...
data ends
stack segment
dw 20 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax ; init data seg
mov ax, 0b800h
mov es, ax ; save gpu base addr
mov ax, stack
mov ss, ax
mov sp, 20 ; init stack
call clear
mov ah, 24
mov al, 24
push ax
call draw_map
call create_snake
call draw_snake
call create_food
call draw_food
call start_game
call show_score
end_game:
call game_over
mov ax, 4c00h
int 21h
; # start game
; void -> void
start_game:
mov cx, 50
sg0:
call listen_key
call clear_last
call move_snake
call is_dead
call draw_snake
call is_eat
call show_score
call sleep
loop sg0
ret
; # show game over alert
; void -> void
game_over: