【发布时间】:2015-06-10 04:01:43
【问题描述】:
.model 小
。数据
;蛇体所需的变量
head db '@', '$' ; 头部和身体符号
tail db ' ', '$' ; 尾部设置颜色为黑色
蛇长度分贝 3 ; 1-2 身 3 尾
复制蛇长度数据库? ;for循环
sEnd db ?
head_col db 40 ;蛇的起始列
head_row db 12 ;蛇的起始行
;蛇运动算法
;总是复制前面符号的坐标。
复制科尔数据库?
复制行数据库?
延迟时间 db 1
;控制键的变量
输入分贝?
.stack 100h
。代码
;延迟时间
延迟过程
mov 啊, 00
整数 1Ah
mov bx, dx
jmp_delay:
整数 1Ah
子 dx, bx
cmp dl,延迟时间
jl jmp_delay
ret
延迟结束
;使蛇头向右走
正确的过程
cmp head_col,79
je resetposl
零:
公司 head_col
jmp rightyie
重置位置:
mov head_col, 0
对了:
mov dl,head_col
mov dh,head_row
异或 bh
mov 啊, 02h
整数 10 小时
ret
正确的endp
开始游戏过程
mov dh, 12 ; 行
mov dl, 40 ;列
异或 bh
mov 啊, 02h
整数 10 小时
mov dx,偏移头
mov 啊, 09h
整数 21 小时
ret
开始游戏结束
mov cl,head_row
mov copy_row,cl
mov cl, head_col
mov copy_col, 分类
;打印头
mov dh, head_row
mov dl, head_col
异或 bh
mov 啊, 02h
整数 10 小时
mov dx,偏移头
mov 啊, 09h
整数 21 小时
主进程
移动斧头,@data
mov ds, ax
;设置视频模式
电影, 03h
mov 啊, 00h
整数 10 小时
;清屏
;只需要一次(因为不需要使用函数)
移动斧头,0600h
mov bh, 07h
xor cx, cx
mov dx, 184fh
整数 10 小时
mov cx, 3200h ; 停止光标闪烁
mov 啊, 01h
整数 10 小时
;在屏幕中间设置起始头蛇
呼叫开始游戏
;控制
mov 啊,00h
整数 16 小时
mov 输入,'d'
;改变方向或继续前进
获取输入:
mov 啊, 01h
整数 16 小时
jz键
mov 啊,00h
整数 16 小时
mov 输入,al
;控制键
钥匙:
;cmp 输入, 'w'
;je w
;cmp 输入, 's'
;je s
;cmp 输入, 'a'
;je a
cmp 输入,'d'
杰德
杰拉克
d:
mov cl,head_row
mov copy_row,cl
mov cl, head_col
mov copy_col, 分类
mov dh, head_row
mov dl, head_col
异或 bh
mov 啊, 02h
整数 10 小时
移动,尾巴
移动 bh, 0
mov bl, 000h
mov cx, 1
mov 啊, 09h
整数 10 小时
mov cl,snake_length
mov copy_snake_length, cl
dec copy_snake_length
mov bl,0
印刷体:
移动,head_row
mov copy_row,al
mov al, head_col
mov copy_col, 人
打电话给正确的
;打印头
;坐标
mov dh, head_row
mov dl, head_col
异或 bh
mov 啊, 02h
整数 10 小时
;印刷 ”@”
mov dx,偏移头
mov 啊, 09h
整数 21 小时
; inc copy_col 更新头部。
公司 copy_col
mov al,copy_col
mov head_col,al
公司
;现在循环打印其他字符
cmp bl,copy_snake_length
jl打印体
dec head_col
jmp 拉克
拉克:
通话延迟
jmp 获取输入
mov 斧头,4c00h
整数 21 小时
主要终端
结束主要
如果您想尝试代码,请按 d 移动字符。
问题是当它到达最后一列时,我的函数正确地假设将 head_col 更改为 0,这样它看起来就像到达了屏幕的末尾。不幸的是,它在第 80 列末尾遗漏了一个字符,然后它继续打印但在下一行。
然后,当它到达第 13 行的末尾时,它不会在第 0 列留下一个字符,但仍会向下移动另一行,并且在 3 继续打印之后,它似乎又回到了原始行,然后当它到达它不再打印任何东西的起点。
【问题讨论】:
-
如果您的“snake”长度超过一个字符,您将必须为每个字符分配一个屏幕坐标 (x,y)。您可以使用两个数组:一个用于 X 坐标,另一个用于 Y 坐标,第三个数组用于字符本身。