汇编语言贪吃蛇游戏
Posted 九死九歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言贪吃蛇游戏相关的知识,希望对你有一定的参考价值。
最近刚学完汇编,于是准备做个小游戏练练手。就瞅准了最最最老生常谈的贪吃蛇。
首先贪吃蛇必须是用户让蛇改变方向,蛇就得改变方向,吃到东西蛇会变长。
但我们不太可能一次性就做出来这么多功能。
先从简单的开始做。做一个小点点,让这个小点点可以被用户控制着改变方向。不会变长,而不会死。先从最简单的开始。
代码如下:
assume cs : code, ds : data, ss : stack
data segment
pos dw 0, 0
dire dw 0, 2
data ends
stack segment
db 256 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 256
mov ax, 0b800H
mov es, ax
call init
s0:
mov ah, 0
int 16H
cmp al, 'w'
je w
cmp al, 'a'
je a
cmp al, 's'
je s
cmp al, 'd'
je d
cmp al, 'q'
je e0
jmp move
w:
mov dire[0], -160
mov dire[2], 0
jmp move
a:
mov dire[0], 0
mov dire[2], -2
jmp move
s:
mov dire[0], 160
mov dire[2], 0
jmp move
d:
mov dire[0], 0
mov dire[2], 2
jmp move
move:
mov ax, pos[0]
add ax, dire[0]
mov pos[0], ax
mov ax, pos[2]
add ax, dire[2]
mov pos[2], ax
mov word ptr es : [bx + di], 0001000000000000B
mov bx, pos[0]
mov di, pos[2]
mov word ptr es : [bx + di], 0000000000000000B
jmp s0
e0:
mov ax, 4c00H
int 21H
init:
push bx
push es
push cx
mov cx, 2000
mov bx, 0
s1:
mov word ptr es : [bx], 0001000000000000B
add bx, 2
loop s1
pop cx
pop es
pop bx
ret
code ends
end start
运行成功了吗?没有。。。
贪吃蛇应该是用户不操作蛇都能移动,用户的操作只能改变蛇的移动方向。
但是我做出的这个却是用户控制移动,键盘不按,那蛇就是静止不动的。
究其原因是我用的是16号中断,是阻塞式等待的,想要修这个bug就应该重新安装9号中断来修。
以上是关于汇编语言贪吃蛇游戏的主要内容,如果未能解决你的问题,请参考以下文章