471字节俄罗斯方块汇编程序源代码及详细注释(3)

发布时间:2021-06-05

汇编源代码

否是下方向键
jz short @ok      ;如果是则继续下落
jmp short @goon     ;不是则进入下一次延时
@down: sub bx,2*40       ;恢复新方块原来位置
call @dispb       ;显示新方块
xor ax,ax        ;进入判断是否有一行已满
mov dx,ax        ;ax=dx=0
mov si,2*(40*2+15)   ;si=中间空框的起始屏幕偏移位置
@nextl: mov di,si        ;di=当前判断的屏幕偏移位置
mov cl,11        ;判断10次(10+1)
repnz scasw       ;扫描一行
jz short @skip     ;如果有空位则跳出
pusha          ;进入消除一行部分
mov si,di
sub si,2*40       ;si=上一行屏幕偏移位置
mov cx,si        ;cx=移动字符个数
std
rep movsb        ;移下一行
cld
mov di,2*(40*2+15)   ;di=中间空框最上一行的屏幕偏移位置
mov cl,10        ;一行10个方块
rep stosw        ;清除最上一行
popa          ;退出消除一行部分
inc dx         ;分数基值+1
add dh,dl        ;累计当前分数
@skip: add si,2*40       ;下一行偏移位置
cmp si,2*(40*22)    ;判断是否判断完所有行
jb short @nextl    ;没有则继续下一行判断
and dx,dx        ;判断是否有得到当前的分数
jz short @t_      ;没有则跳过
@t00:  mov di,2*(40*23+21)   ;数码位屏幕偏移位置(第2位)
@t0:  mov byte ptr[di],30h  ;置0
dec di         ;进一位(倒退2个字节长度)
dec di
cmp di,2*(40*23+20)   ;判断是否进入第3位
jnz short @t000     ;如果不是则跳过
dec byte ptr cs:[@goon+1];每100分等待次数减1(加速)
@t000: inc byte ptr[di]    ;当前数码位+1
cmp byte ptr[di],3ah  ;判断数码位是否超过9
jz short @t0      ;如果是则跳转(进位)
dec dh         ;当前分数累计值-1
jnz short @t00     ;如果分数没加完则继续累加
@t_:  jmp @rernd       ;继续产生下一个新方块
@isok: mov si,bp        ;判断是否能放置方块子模块
shl si,2        ;si=方块形状标号*4(占4个字节)
xor ax,ax
mov dx,ax        ;ax=dx=0
add si,offset bks    ;si=方块形状位置描述指针
push cx         ;保存cx
mov cl,4        ;cl=方块数(4)
@nextb: db 2eh         ;lod
sb cs: (al<=cs:[si])
lodsb          ;载入方块位置描述(位置偏移)
mov di,ax
or dx,[di+bx]     ;判断小方块是否冲突
loop @nextb       ;继续判断下一个位置描述
pop cx   

471字节俄罗斯方块汇编程序源代码及详细注释(3).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219