我正在组装蛇形游戏,我将蛇身体的坐标(用于碰撞目的)存储在一维阵列中。我将x和y坐标存储在一个字节中。我每次移动时都会存储蛇头的坐标。这是我的代码:
;(ROW * WIDTH) + COL
MOV AL, 80 ; 80 IS THE WIDTH
MUL ROW
ADD AL, COL
MOV SI, AX
CMP TRAIL[SI], 0
JE @GAME_OVER
我创建了一个名为TRAIL的1维数组来保存数据。
TRAIL DB 2000 dup (1)
我的问题是,有时候,即使它没有与身体发生碰撞,蛇也会死亡。我认为问题在于将ROW乘以AL(有时大于AL),然后添加COL会给出错误的答案。我无法将ROW和COL更改为dw,因此我唯一的选择是使计算工作。请帮忙。
答案 0 :(得分:0)
您可以对单词进行操作,而不是添加字节:
mov ax,80
mul byte [ROW]
movzx bx,byte [COL] ; zero-extend COL into BX
add ax,bx ; ax = ROW*80 + COL
或者如果您不想使用movzx
:
mov ax,80
mul byte [ROW]
add al,[COL]
adc ah,0 ; add 1 to AH if the previous addition resulted in a carry
ADC
(Add with Carry)在逻辑上等同于以下C语句:
ah += (((uint16_t)al + col) > 0xFF) ? 1 : 0;