俄罗斯方块源程序tt

上传人:汽*** 文档编号:506449127 上传时间:2022-11-02 格式:DOCX 页数:6 大小:19.93KB
返回 下载 相关 举报
俄罗斯方块源程序tt_第1页
第1页 / 共6页
俄罗斯方块源程序tt_第2页
第2页 / 共6页
俄罗斯方块源程序tt_第3页
第3页 / 共6页
俄罗斯方块源程序tt_第4页
第4页 / 共6页
俄罗斯方块源程序tt_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《俄罗斯方块源程序tt》由会员分享,可在线阅读,更多相关《俄罗斯方块源程序tt(6页珍藏版)》请在金锄头文库上搜索。

1、.model tiny.386.code$shapeequ 008h$backgequ 0dbh$upequ 72$leftequ 75$rightequ 77$downequ 80org 100hstart:int 10hpush 0b800h pop ds push ds pop es xchg ax,di mov ax,0700h+$backg mov cx,ax rep stosw mov ax,0e30hmov cl,6mov di,2*(40*23+17) rep stoswxor ax,axmov di,2*(40*2+15) nextbl:mov cl,10 rep stosw

2、add di,2*(15+15) cmp di,2*(40*22+15) jb short nextbl rernd: in al,40h and al,0111b jz short rernd dec axmov bx,2*(40*2+15+4) jnz short tmov bx,2*(40+15+4) t: xchg ax,bp call isok jz short goon end: call dispb push cspop dslea dx,msg1;设置显示模式 0(40*25*16 色字符模式);字符缓冲区段=b800h;ds=b800h;es=b800h;di=0000h;开

3、始画边框,ax二字符(Odbh)及属性(灰色);cx二数量; 覆盖全屏;开始画数码框,ax=字符(0)及属性(黄色);cl=B字个数(6);di=B字显示屏幕偏移位置; 显示数码;开始画中间空框,ax二空字符;di二空框第一行屏幕偏移位置;cl=行块数(10);画一行空格; 计算下一行屏幕偏移位置; 判断是否画完最后一行(共 20 行) ;没画完则循环;开始随机选择方块类型,al=时间随机值 ;al 只取 0-7;如果是0则重新选择(只选1-7,共7种) ;1-7变为 0-6; 方块起始屏幕偏移位置 ;如果不是0(长条形方块需特殊处理)则跳转; 长条形方块的起始屏幕偏移位置上移一行 山卩=方块

4、起始屏幕偏移位置; 判断新产生的方块能否放置; 能放置则跳转 ;不能放置情况:先显示方块;ds=当前程序段;dx=GAMEOVER信息地址mov ah,9;ah=9(显示字符串)int 21h;显示 GAMEOVEResc: in al,60h; 读键盘dec al;ESC扫描码=1jnz short esc;如果没有按ESC则跳回继续读键盘mov ax,3;ax=DOS 默认显示模式(3)int 10h;设置显示模式3(80*25*16色字符模式)retn; 退出goon: mov cl,0ffh; 新方块能放置情况:先进入延时状态cmp cl,40h;cl二循环等待次数jae short

5、wait;确认 cl 不小于 40mov cl,40hwait: call dispb;显示当前新方块push cx; 进入等待状态xor cx,cx;cx二等待时间(微秒)低字mov dx,10009%=等待时间(微秒)高字mov ah,86hint 15h; 等待pop cx; 退出等待状态t4: mov ah,1int 16h; 判断键盘缓冲区是否有字符jz short loop;没有按键则跳出键盘处理部分xor ax,axcall disp; 清除新方块的显示int 16h;读取键盘缓冲区字#=ahmov al,ah;al=ahcmp al,$up; 判断是否是上方向键jnz shor

6、t k1;不是则跳转push bp; 保存当前新方块的摆放形状movzx bp,cs:bp+bkv; 改变新方块的摆放形状call isok; 判断是否能放置jz short loop_;能放置则跳出键盘处理部分pop bp;不能放置则恢复新方块原来形状loop wait; 继续下一次等待k1: push bx; 保存当前新方块的位置cmp al,$left; 判断是否是左方向键jnz short k2;不是则跳转dec bx; 新方块左移一个位置(2 个字节)dec bxtest: call isok; 判断是否能放置jz short loop_;能放置则跳出键盘处理部分pop bx;不能放

7、置则恢复新方块原来位置loop wait; 继续下一次等待k2: cmp al,$right; 判断是否是右方向键jnz short k3inc bx inc bx jmp short test k3: pop bx cmp al,1 jz short end jmp short ok loop_: pop ax loop: loop wait ok: push ax xor ax,ax call disp add bx,2*40 call isok pop ax jnz short down cmp al,$down jz short ok jmp short goon down: sub

8、bx,2*40 call dispb xor ax,ax mov dx,ax mov si,2*(40*2+15) nextl: mov di,si mov cl,11 repnz scasw jz short skip pusha mov si,di sub si,2*40 mov cx,si stdrep movsb cldmov di,2*(40*2+15) mov cl,10 rep stosw popa inc dx add dh,dl skip: add si,2*40 cmp si,2*(40*22);不是则跳转;新方块右移一个位置(2 个字节);剩下的处理同左方向键 ;恢复新方

9、块原来位置;判断是否是ESC键; 如果是则跳转到退出程序段; 如果是其他按键则跳出延时状态; 清除保存的新方块位置; 继续下一次等待; 保存按键扫描码; 延时过后进入方块下落部分; 清除新方块的显示; 新方块下移一个位置(2 个字节 );判断是否能放置; 恢复按键扫描码; 如果不能放置新方块则跳转;判断是否是下方向键; 如果是则继续下落; 不是则进入下一次延时; 恢复新方块原来位置; 显示新方块;进入判断是否有一行已满;ax=dx=0;si=中间空框的起始屏幕偏移位置;di=l前判断的屏幕偏移位置;判断 10 次(10+1); 扫描一行;如果有空位则跳出; 进入消除一行部分;si二上一行屏幕偏

10、移位置;cx二移动字符个数; 移下一行;di=中间空框最上一行的屏幕偏移位置;一行 10 个方块; 清除最上一行; 退出消除一行部分; 分数基值+1; 累计当前分数; 下一行偏移位置;判断是否判断完所有行jb short nextl;没有则继续下一行判断and dx,dx;判断是否有得到当前的分数jz short t_;没有则跳过t00: mov di,2*(40*23+21);数码位屏幕偏移位置(第 2 位)t0: mov byte ptrdi,30h;置 0dec di;进一位(倒退 2 个字节长度)dec dicmp di,2*(40*23+20);判断是否进入第 3 位jnz shor

11、t t000;如果不是则跳过dec byte ptr cs:goon+l;每 100 分等待次数减 1(加速) t000: inc byte ptrdi;当前数码位+1cmp byte ptrdi,3ah jz short t0 dec dhjnz short t00t_:jmp rerndisok: mov si,bp shl si,2xor ax,axmov dx,axadd si,offset bks push cxmov cl,4nextb: db 2eh lodsbmov di,axor dx,di+bxloop nextb pop cxretndispb: mov al,$shap

12、e mov ah,cs:bp+bkc disp: mov si,bpshl si,2push cxmov cl,4;判断数码位是否超过 9; 如果是则跳转( 进位); 当前分数累计值-1 ;如果分数没加完则继续累加; 继续产生下一个新方块; 判断是否能放置方块子模块;si二方块形状标号*4(占4个字节);ax=dx=0;si=块形状位置描述指针; 保存 cx;小=方块数(4);lodsb cs: (al=cs:si);载入方块位置描述(位置偏移); 判断小方块是否冲突; 继续判断下一个位置描述; 恢复 cx; 返回;显示方块子模块,al=方块形状标号;ah=块颜色值;si二方块形状标号*4(占

13、4个字节); 保存 cx;小=方块数(4)nextb_:movzx di,cs:si+bks ;取方块描述mov di+bx,axinc siloop nextb_pop cxretnbkc db 2 db 9,12,13,14, 11,10; 显示一个小方块;si二下一个位置描述; 继续画下一个小方块; 恢复 cx; 返回; 方块颜色值db 9,9,9, 12,13db 11,11,11, 10,10,10db 2bkv db 18;方块形状链表db7,10,11,4, 12,15db8,9,1, 2,3db13,14,5, 16,17,6db0;下面是方块形状描述bks db 40*2,41*2,42*2,43*2*0db1*2,40*2,41*2,42*2* 基本形状*7db1*2, 2*2,40*2,41*2* 1-4db0*2, 1*2,41*2,42*2db0*2, 1*2,40*2,41*2db0*2,40*2,41*2,42*2*db2*2,40*2,41*2,42*2*5-6db1*2,40*2,41*2,81*2*扩展形状*12db40*2,41*2,42*2,81*2*db1*2,41*2,42*2,81*2* * *7-9db0*2,40*2,41*2,81*2*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号