在屏幕上移动对象的最佳方法是什么?

我想知道在屏幕上移动对象的最佳方法是什么,例如:如果某种形状出现在屏幕上(在图形模式下),我想使用键盘的箭头键左右移动它。我知道如何读取键盘缓冲区。重要的是我想知道如何在屏幕上平滑移动某些内容。


我正在使用具有8086体系结构的DOS-Box。并且移动必须处于图形模式(320X200)。


慕姐4208626
浏览 619回答 3
3回答

白板的微信

好的,终于让TASM + TLINK与W7 x64一起使用了 ……(VirtualPC不再正常工作了:()因此,这里有一个简单的类似Tuneler的游戏,适合3位TASM tiny模型的玩家(* .com)它尚未完成(当时我搬到了NASM),但是您可以重新定义按键,使用键盘移动汽车(所有播放器)。它是这样的:屏幕截图左边是主菜单,右边是游戏(点击0选项后)。它应涵盖完成任务所需的所有基本知识。源分为3个文件:Battle.asm-主游戏源文件mx&nbsp; equ 256my&nbsp; equ 256ox&nbsp; equ 104oy&nbsp; equ 104&nbsp; &nbsp; .386P&nbsp; &nbsp; IDEAL&nbsp; &nbsp; MODEL tiny&nbsp; &nbsp; DATASEGmems:msg db '0&nbsp; Start game.',0&nbsp; &nbsp; db '1&nbsp; Read info.',0&nbsp; &nbsp; db '2&nbsp; Redefine keyboard.',0&nbsp; &nbsp; db '3&nbsp; Exit to DOS.',0&nbsp; &nbsp; db 'SPEKTRA software & hardware presents:&nbsp; Battle zone.',0&nbsp; &nbsp; db 'ver: 2.0&nbsp; x.4.1999&nbsp; N.DCA SR',0&nbsp; &nbsp; db 'Defined keys: ',0msg1&nbsp; &nbsp; db 5&nbsp; &nbsp; db 'Battle zone.',13,13&nbsp; &nbsp; db 'This is only a test version.The full version will be done soon.',13&nbsp; &nbsp; db 'It will be slower,but the map will be larger !!! (min 768*256)',13&nbsp; &nbsp; db 'Sound Blaster owners will have sound durring game.',13msg2&nbsp; &nbsp; db 'Player',0&nbsp; &nbsp; db 'Left&nbsp; ',0&nbsp; &nbsp; db 'Right ',0&nbsp; &nbsp; db 'Up&nbsp; &nbsp; ',0&nbsp; &nbsp; db 'Down&nbsp; ',0&nbsp; &nbsp; db 'Fire&nbsp; ',0msg2a&nbsp; &nbsp;db 'WARNING: do not use the extended keys of 101-keys keyboard'&nbsp; &nbsp; db ' ie: End,arrows,...',0msg2b&nbsp; &nbsp;db 'Press any key to continue.',0keyn&nbsp; &nbsp; db&nbsp; 0,0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;keyscan,keycode&nbsp; &nbsp; db&nbsp; 1,1&nbsp; &nbsp; db&nbsp; 2,'1'&nbsp; &nbsp; db&nbsp; 3,'2'&nbsp; &nbsp; db&nbsp; 4,'3'&nbsp; &nbsp; db&nbsp; 5,'4'&nbsp; &nbsp; db&nbsp; 6,'5'&nbsp; &nbsp; db&nbsp; 7,'6'&nbsp; &nbsp; db&nbsp; 8,'7'&nbsp; &nbsp; db&nbsp; 9,'8'&nbsp; &nbsp; db 10,'9'&nbsp; &nbsp; db 11,'0'&nbsp; &nbsp; db 12,'_'&nbsp; &nbsp; db 13,'+'&nbsp; &nbsp; db 14,27&nbsp; &nbsp; ;backspace&nbsp; &nbsp; db 15,29&nbsp; &nbsp; db 16,'Q'&nbsp; &nbsp; db 17,'W'&nbsp; &nbsp; db 18,'E'&nbsp; &nbsp; db 19,'R'&nbsp; &nbsp; db 20,'T'&nbsp; &nbsp; db 21,'Y'&nbsp; &nbsp; db 22,'U'&nbsp; &nbsp; db 23,'I'&nbsp; &nbsp; db 24,'O'&nbsp; &nbsp; db 25,'P'&nbsp; &nbsp; db 26,'{'&nbsp; &nbsp; db 27,'}'&nbsp; &nbsp; db 28,1&nbsp; &nbsp; &nbsp;;enter&nbsp; &nbsp; db 29,1&nbsp; &nbsp; db 30,'A'&nbsp; &nbsp; db 31,'S'&nbsp; &nbsp; db 32,'D'&nbsp; &nbsp; db 33,'F'&nbsp; &nbsp; db 34,'G'&nbsp; &nbsp; db 35,'H'&nbsp; &nbsp; db 36,'J'&nbsp; &nbsp; db 37,'K'&nbsp; &nbsp; db 38,'L'&nbsp; &nbsp; db 39,':'&nbsp; &nbsp; db 40,'"'&nbsp; &nbsp; db 41,'~'&nbsp; &nbsp; db 42,24&nbsp; &nbsp; db 43,'\'&nbsp; &nbsp; db 44,'Z'&nbsp; &nbsp; db 45,'X'&nbsp; &nbsp; db 46,'C'&nbsp; &nbsp; db 47,'V'&nbsp; &nbsp; db 48,'B'&nbsp; &nbsp; db 49,'N'&nbsp; &nbsp; db 50,'M'&nbsp; &nbsp; db 51,'<'&nbsp; &nbsp; db 52,'>'&nbsp; &nbsp; db 53,'?'&nbsp; &nbsp; db 54,24&nbsp; &nbsp; db 55,'*'&nbsp; &nbsp; db 56,1&nbsp; &nbsp; db 57,' '&nbsp; &nbsp; db 58,1&nbsp; &nbsp; db 59,1&nbsp; &nbsp; db 60,1&nbsp; &nbsp; db 61,1&nbsp; &nbsp; db 62,1&nbsp; &nbsp; db 63,1&nbsp; &nbsp; db 64,1&nbsp; &nbsp; db 65,1&nbsp; &nbsp; db 66,1&nbsp; &nbsp; db 67,1&nbsp; &nbsp; db 68,1&nbsp; &nbsp; db 69,1&nbsp; &nbsp; db 70,1&nbsp; &nbsp; db 71,'7'&nbsp; &nbsp; db 72,'8'&nbsp; &nbsp; db 73,'9'&nbsp; &nbsp; db 74,'-'&nbsp; &nbsp; db 75,'4'&nbsp; &nbsp; db 76,'5'&nbsp; &nbsp; db 77,'6'&nbsp; &nbsp; db 78,'+'&nbsp; &nbsp; db 79,'1'&nbsp; &nbsp; db 80,'2'&nbsp; &nbsp; db 81,'3'&nbsp; &nbsp; db 82,'0'&nbsp; &nbsp; db 83,'.'&nbsp; &nbsp;;delete&nbsp; &nbsp; db 87,1&nbsp; &nbsp; db 88,1&nbsp; &nbsp; db,255keye&nbsp; &nbsp; db 28,1&nbsp; &nbsp; &nbsp;;enter&nbsp; &nbsp; db 29,1&nbsp; &nbsp; db 42,1&nbsp; &nbsp; db 53,'/'&nbsp; &nbsp; db 55,1&nbsp; &nbsp; db 56,1&nbsp; &nbsp; db 71,1&nbsp; &nbsp; db 72,30&nbsp; &nbsp; db 73,1&nbsp; &nbsp; db 75,17&nbsp; &nbsp; db 77,16&nbsp; &nbsp; db 79,1&nbsp; &nbsp; db 80,31&nbsp; &nbsp; db 81,1&nbsp; &nbsp; db 82,1&nbsp; &nbsp; db 83,1&nbsp; &nbsp; &nbsp;;delete&nbsp; &nbsp; db,255key db 0,0,0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;keyscan (word),key code(call keys)fil0&nbsp; &nbsp; db 'battle.gfx',0fil1&nbsp; &nbsp; db 'battle.lvl',0gfx db 9216 dup (?)pal db 768 dup (?)car1&nbsp; &nbsp; db 256 dup (?)car2&nbsp; &nbsp; db 256 dup (?)car3&nbsp; &nbsp; db 256 dup (?)lvl db mx*my/256 dup (?)carx&nbsp; &nbsp; dw ?,?,?cary&nbsp; &nbsp; dw ?,?,?plk1&nbsp; &nbsp; db 33 dup (?)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;redefine (w),status keys (5 bit)maps&nbsp; &nbsp; dw ?&nbsp; &nbsp; CODESEG&nbsp; &nbsp; STARTUPCODE&nbsp; &nbsp; jmp main&nbsp; &nbsp; include 'file.inc'&nbsp; &nbsp; include 'text.inc';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Interrupts: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;int09:&nbsp; cli&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;keyboard ... sets keyscan a&nbsp; &nbsp; pushf&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&nbsp; &nbsp; &nbsp; &nbsp;key result pl.1,2,3&nbsp; &nbsp; pusha&nbsp; &nbsp; push ds&nbsp; &nbsp; mov ds,[cs:dss]&nbsp; &nbsp; in al,60h&nbsp; &nbsp; sub ah,ah&nbsp; &nbsp; mov [word ptr key],ax&nbsp; &nbsp; in al,61h&nbsp; &nbsp; mov ah,al&nbsp; &nbsp; or al,80h&nbsp; &nbsp; out 61h,al&nbsp; &nbsp; xchg al,ah&nbsp; &nbsp; out 61h,al&nbsp; &nbsp; mov al,20h&nbsp; &nbsp; out 20h,al&nbsp; &nbsp; mov al,[key]&nbsp; &nbsp; &nbsp; &nbsp; ;handle extended keyscan&nbsp; &nbsp; cmp al,224&nbsp; &nbsp; jnz i09r0&nbsp; &nbsp; mov [key+1],al&nbsp; &nbsp; in al,60h&nbsp; &nbsp; mov [key],al&nbsp; &nbsp; in al,61h&nbsp; &nbsp; mov ah,al&nbsp; &nbsp; or al,80h&nbsp; &nbsp; out 61h,al&nbsp; &nbsp; xchg al,ah&nbsp; &nbsp; out 61h,al&nbsp; &nbsp; mov al,20h&nbsp; &nbsp; out 20h,ali09r0:&nbsp; mov ax,[word ptr key]&nbsp; &nbsp; lea si,[plk1]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;set keyresult if hit&nbsp; &nbsp; lea di,[plk1+10]&nbsp; &nbsp; mov cx,3i09p1x: push cx&nbsp; &nbsp; mov dl,1&nbsp; &nbsp; mov cx,5i09p10: cmp ax,[ds:si]&nbsp; &nbsp; jz i09p11&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; add dl,dl&nbsp; &nbsp; loop i09p10&nbsp; &nbsp; jmp i09p12i09p11: or [ds:di],dli09p12: pop cx&nbsp; &nbsp; inc si&nbsp; &nbsp; add di,11&nbsp; &nbsp; loop i09p1x&nbsp; &nbsp; test al,128&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;res keyresult if drop&nbsp; &nbsp; jz i09r2&nbsp; &nbsp; and al,127&nbsp; &nbsp; lea si,[plk1]&nbsp; &nbsp; lea di,[plk1+10]&nbsp; &nbsp; mov cx,3i09p2x: push cx&nbsp; &nbsp; mov dl,1&nbsp; &nbsp; mov cx,5i09p20: cmp ax,[ds:si]&nbsp; &nbsp; jz i09p21&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; add dl,dl&nbsp; &nbsp; loop i09p20&nbsp; &nbsp; jmp i09p22i09p21: sub [ds:di],dli09p22: pop cx&nbsp; &nbsp; inc si&nbsp; &nbsp; add di,11&nbsp; &nbsp; loop i09p2xi09r2:&nbsp; mov al,[key]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;if no key then keyscan = 0&nbsp; &nbsp; and al,128&nbsp; &nbsp; jz i09r1&nbsp; &nbsp; sub al,al&nbsp; &nbsp; mov [key],ali09r1:&nbsp; pop ds&nbsp; &nbsp; popa&nbsp; &nbsp; popf&nbsp; &nbsp; sti&nbsp; &nbsp; iret&nbsp; &nbsp; dss dw 0&nbsp; &nbsp; oint09&nbsp; dw 0,0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;old vector adress;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Subroutines: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;keys:&nbsp; &nbsp;pusha&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;set keycode of ax key&nbsp; &nbsp; lea si,[keyn]&nbsp; &nbsp; mov bl,2&nbsp; &nbsp; sub cl,cl&nbsp; &nbsp; or ah,ah&nbsp; &nbsp; jz keyl0&nbsp; &nbsp; lea si,[keye]keyl0:&nbsp; mov ah,[ds:si]&nbsp; &nbsp; cmp ah,255&nbsp; &nbsp; jz keyre&nbsp; &nbsp; cmp al,ah&nbsp; &nbsp; jz keyr0&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; jmp keyl0keyr0:&nbsp; inc si&nbsp; &nbsp; mov bl,[ds:si]keyre:&nbsp; mov [key+2],bl&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ikey:&nbsp; &nbsp;mov ax,[word ptr key]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;ax = keyscan pressed key&nbsp; &nbsp; or ax,ax&nbsp; &nbsp; jnz ikeyikeyl0: mov ax,[word ptr key]&nbsp; &nbsp; or al,al&nbsp; &nbsp; jz ikeyl0&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;txtcls: pusha&nbsp; &nbsp; mov di,0&nbsp; &nbsp; mov al,32txtcls0:mov [es:di],al&nbsp; &nbsp; inc di&nbsp; &nbsp; inc di&nbsp; &nbsp; cmp di,80*25*2&nbsp; &nbsp; jnz txtcls0&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Main program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;main:&nbsp; &nbsp;mov [cs:dss],ds&nbsp; &nbsp; mov al,9h&nbsp; &nbsp; &nbsp; &nbsp;;install keyboard int&nbsp; &nbsp; mov ah,35h&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov [oint09],bx&nbsp; &nbsp; mov [oint09+2],es&nbsp; &nbsp; mov al,9h&nbsp; &nbsp; mov ah,25h&nbsp; &nbsp; lea dx,[int09]&nbsp; &nbsp; int 21hopen:&nbsp; &nbsp;lea dx,[fil0]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;load gfx&nbsp; &nbsp; call fopen&nbsp; &nbsp; lea dx,[gfx]&nbsp; &nbsp; mov cx,9984&nbsp; &nbsp; call fread&nbsp; &nbsp; call fclose&nbsp; &nbsp; mov ax,cs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;relocate memory&nbsp; &nbsp; mov es,ax&nbsp; &nbsp; mov bx,8192&nbsp; &nbsp; mov ah,4Ah&nbsp; &nbsp; int 21h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;begin:&nbsp; mov ax,3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;main window&nbsp; &nbsp; int 16&nbsp; &nbsp; lea dx,[fil1]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;load level&nbsp; &nbsp; call fopen&nbsp; &nbsp; lea dx,[lvl]&nbsp; &nbsp; mov cx,mx*my/256+12+33&nbsp; &nbsp; call fread&nbsp; &nbsp; call fclose&nbsp; &nbsp; mov ah,2&nbsp; &nbsp; mov bh,0&nbsp; &nbsp; mov dx,25*256&nbsp; &nbsp; int 16&nbsp; &nbsp; mov ax,0B800h&nbsp; &nbsp; mov es,ax&nbsp; &nbsp; lea si,[msg]&nbsp; &nbsp; mov di,2*(31+08*80)&nbsp; &nbsp; call print&nbsp; &nbsp; mov di,2*(31+10*80)&nbsp; &nbsp; call print&nbsp; &nbsp; mov di,2*(31+12*80)&nbsp; &nbsp; call print&nbsp; &nbsp; mov di,2*(31+14*80)&nbsp; &nbsp; call print&nbsp; &nbsp; mov di,2*(15+1*80)&nbsp; &nbsp; call print&nbsp; &nbsp; mov di,2*(24+2*80)&nbsp; &nbsp; call print&nbsp; &nbsp; mov di,2*(8+19*80)&nbsp; &nbsp; call print&nbsp; &nbsp; lea si,[plk1]&nbsp; &nbsp; mov cx,3beginl1:push cx&nbsp; &nbsp; add di,4&nbsp; &nbsp; mov ax,[ds:si]&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; add di,8&nbsp; &nbsp; mov ax,[ds:si]&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; sub di,4+320&nbsp; &nbsp; mov ax,[ds:si]&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; add di,640&nbsp; &nbsp; mov ax,[ds:si]&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; sub di,320&nbsp; &nbsp; mov ax,[ds:si]&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc si&nbsp; &nbsp; inc si&nbsp; &nbsp; add di,20&nbsp; &nbsp; inc si&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop beginl1beginl0:mov ax,[word ptr key]&nbsp; &nbsp; cmp ax,1&nbsp; &nbsp; jz ende&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; cmp al,'0'&nbsp; &nbsp; jz game&nbsp; &nbsp; cmp al,'1'&nbsp; &nbsp; jz info&nbsp; &nbsp; cmp al,'2'&nbsp; &nbsp; jz redef&nbsp; &nbsp; cmp al,'3'&nbsp; &nbsp; jz ende&nbsp; &nbsp; jmp beginl0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;redef:&nbsp; call txtcls&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;Redefine window&nbsp; &nbsp; mov di,2*(0+01*80)&nbsp; &nbsp; lea si,[msg2a]&nbsp; &nbsp; call print&nbsp; &nbsp; push si&nbsp; &nbsp; mov cx,3&nbsp; &nbsp; lea bx,[plk1]&nbsp; &nbsp; mov di,2*(4+04*80)redefl1:lea si,[msg2]&nbsp; &nbsp; push cx&nbsp; &nbsp; push di&nbsp; &nbsp; call print&nbsp; &nbsp; mov al,'4'&nbsp; &nbsp; sub al,cl&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc di&nbsp; &nbsp; inc di&nbsp; &nbsp; mov al,':'&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; add di,4&nbsp; &nbsp; mov cx,5redefl0:push di&nbsp; &nbsp; call print&nbsp; &nbsp; call ikey&nbsp; &nbsp; mov [ds:bx],ax&nbsp; &nbsp; call keys&nbsp; &nbsp; mov al,[key+2]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc bx&nbsp; &nbsp; inc bx&nbsp; &nbsp; pop di&nbsp; &nbsp; add di,160&nbsp; &nbsp; loop redefl0&nbsp; &nbsp; pop di&nbsp; &nbsp; add di,44&nbsp; &nbsp; inc bx&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop redefl1&nbsp; &nbsp; pop si&nbsp; &nbsp; mov di,2*(25+16*80)&nbsp; &nbsp; call print&nbsp; &nbsp; call ikeyredefr0:mov ax,[word ptr key]&nbsp; &nbsp; or ax,ax&nbsp; &nbsp; jnz redefr0&nbsp; &nbsp; cli&nbsp; &nbsp; sub al,al&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;delete directions&nbsp; &nbsp; mov [cs:plk1+10],al&nbsp; &nbsp; mov [cs:plk1+21],al&nbsp; &nbsp; mov [cs:plk1+32],al&nbsp; &nbsp; sti&nbsp; &nbsp; lea dx,[fil1]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;save redef&nbsp; &nbsp; call fopen&nbsp; &nbsp; lea dx,[lvl]&nbsp; &nbsp; mov cx,mx*my/256+12+33&nbsp; &nbsp; call fwrite&nbsp; &nbsp; call fclose&nbsp; &nbsp; jmp begin;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;info:&nbsp; &nbsp;call txtcls&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;info window&nbsp; &nbsp; mov di,2*(0+01*80)&nbsp; &nbsp; lea si,[msg1+1]&nbsp; &nbsp; mov cl,[msg1]&nbsp; &nbsp; sub ch,chinfol0: push cx&nbsp; &nbsp; call print&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop infol0&nbsp; &nbsp; lea si,[msg2b]&nbsp; &nbsp; mov di,2*(25+24*80)&nbsp; &nbsp; call print&nbsp; &nbsp; call ikeyinfor0: mov ax,[word ptr key]&nbsp; &nbsp; or ax,ax&nbsp; &nbsp; jnz infor0&nbsp; &nbsp; jmp begin;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Main window: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mapi:&nbsp; &nbsp;pusha&nbsp; &nbsp; push es&nbsp; &nbsp; mov es,[maps]&nbsp; &nbsp; sub di,di&nbsp; &nbsp; lea bx,[lvl]&nbsp; &nbsp; lea si,[gfx]&nbsp; &nbsp; sub al,al&nbsp; &nbsp; mov cx,my/16mapl3:&nbsp; push cx&nbsp; &nbsp; mov cx,mx/16mapl2:&nbsp; push cx&nbsp; &nbsp; push si&nbsp; &nbsp; mov ah,[ds:bx]&nbsp; &nbsp; add si,ax&nbsp; &nbsp; mov cx,16mapl1:&nbsp; push cx&nbsp; &nbsp; mov cx,4&nbsp; &nbsp; rep movsd&nbsp; &nbsp; add di,mx-16&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop mapl1&nbsp; &nbsp; pop si&nbsp; &nbsp; sub di,16*mx-16&nbsp; &nbsp; inc bx&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop mapl2&nbsp; &nbsp; add di,15*mx&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop mapl3&nbsp; &nbsp; pop es&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;car:&nbsp; &nbsp; pusha&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;ax=direction es:di=map posiotion ch=car&nbsp; &nbsp; push es&nbsp; &nbsp; lea si,[gfx+7168]&nbsp; &nbsp; add si,ax&nbsp; &nbsp; lea bx,[car1-256]&nbsp; &nbsp; sub cl,cl&nbsp; &nbsp; add bx,cx&nbsp; &nbsp; mov cx,16&nbsp; &nbsp; mov dl,15carl1:&nbsp; push cx&nbsp; &nbsp; mov cx,16carl0:&nbsp; mov al,[ds:si]&nbsp; &nbsp; mov ah,[es:di]&nbsp; &nbsp; mov [cs:bx],ah&nbsp; &nbsp; cmp al,dl&nbsp; &nbsp; jz carx0&nbsp; &nbsp; mov [es:di],alcarx0:&nbsp; inc bx&nbsp; &nbsp; inc si&nbsp; &nbsp; inc di&nbsp; &nbsp; loop carl0&nbsp; &nbsp; add di,mx-16&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop carl1&nbsp; &nbsp; pop es&nbsp; &nbsp; popa&nbsp; &nbsp; retcart:&nbsp; &nbsp;db 255,0,4,255,2,1,3,255,6,7,5,255,255,255,255,255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;carz:&nbsp; &nbsp;pusha&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;es:di=map position ch=car&nbsp; &nbsp; push es&nbsp; &nbsp; lea si,[car1-256]&nbsp; &nbsp; sub cl,cl&nbsp; &nbsp; add si,cx&nbsp; &nbsp; mov cx,16carzl1: push cx&nbsp; &nbsp; mov cx,16carzl0: mov al,[cs:si]&nbsp; &nbsp; mov [es:di],al&nbsp; &nbsp; inc si&nbsp; &nbsp; inc di&nbsp; &nbsp; loop carzl0&nbsp; &nbsp; add di,mx-16&nbsp; &nbsp; pop cx&nbsp; &nbsp; loop carzl1&nbsp; &nbsp; pop es&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;carn1:&nbsp; pusha&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;bx = [plk1 +...] cx =[cary] dh=pl&nbsp; &nbsp; push es&nbsp; &nbsp; push ds&nbsp; &nbsp; push di&nbsp; &nbsp; mov al,[cs:bx]&nbsp; &nbsp; and al,15&nbsp; &nbsp; lea bx,[cart]&nbsp; &nbsp; xlatb&nbsp; &nbsp; xchg al,ah&nbsp; &nbsp; sub al,al&nbsp; &nbsp; mov bx,cx&nbsp; &nbsp; cmp ah,255&nbsp; &nbsp; jz carn1e&nbsp; &nbsp; mov di,[cs:bx]&nbsp; &nbsp; mov es,[maps]&nbsp; &nbsp; mov ch,dh&nbsp; &nbsp; call carz&nbsp; &nbsp; sub bx,6&nbsp; &nbsp; mov di,[cs:bx]&nbsp; &nbsp; &nbsp; ;playerxxx:&nbsp; &nbsp; pusha&nbsp; &nbsp; mov ah,1&nbsp; &nbsp; mov ch,16crnl1:&nbsp; mov cl,16crnl0:&nbsp; mov al,[es:di]&nbsp; &nbsp; or al,al&nbsp; &nbsp; jnz crnrx&nbsp; &nbsp; sub ah,ahcrnrx:&nbsp; inc di&nbsp; &nbsp; dec cl&nbsp; &nbsp; jnz crnl0&nbsp; &nbsp; add di,256-16&nbsp; &nbsp; dec ch&nbsp; &nbsp; jnz crnl1&nbsp; &nbsp; or ah,ah&nbsp; &nbsp; jnz crnry&nbsp; &nbsp; mov ax,[cs:bx+6]&nbsp; &nbsp; mov [cs:bx],axcrnry:&nbsp; popa&nbsp; &nbsp; mov di,[cs:bx]&nbsp; &nbsp; call car&nbsp; &nbsp; mov ax,[cs:bx]&nbsp; &nbsp; add bx,6&nbsp; &nbsp; mov [cs:bx],ax&nbsp; &nbsp; sub bx,6carn1e: mov ds,[maps]&nbsp; &nbsp; mov ax,[cs:bx]&nbsp; &nbsp; sub al,44&nbsp; &nbsp; jnc carn1a&nbsp; &nbsp; sub al,alcarn1a: cmp al,152&nbsp; &nbsp; jc carn1c&nbsp; &nbsp; mov al,152carn1c: sub ah,44&nbsp; &nbsp; jnc carn1b&nbsp; &nbsp; sub ah,ahcarn1b: cmp ah,152&nbsp; &nbsp; jc carn1d&nbsp; &nbsp; mov ah,152carn1d: mov si,ax&nbsp; &nbsp; pop di&nbsp; &nbsp; call obr&nbsp; &nbsp; pop ds&nbsp; &nbsp; pop es&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;obr:&nbsp; &nbsp; push ds&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;0A000h:di,ds:si&nbsp; &nbsp; push es&nbsp; &nbsp; mov ax,0A000h&nbsp; &nbsp; mov es,ax&nbsp; &nbsp; mov cx,oyobrl1:&nbsp; push cx&nbsp; &nbsp; mov cx,ox/4&nbsp; &nbsp; rep movsd&nbsp; &nbsp; pop cx&nbsp; &nbsp; add di,320-ox&nbsp; &nbsp; add si,mx-ox&nbsp; &nbsp; loop obrl1&nbsp; &nbsp; pop es&nbsp; &nbsp; pop ds&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ctrl:&nbsp; &nbsp;pusha&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;controls al,keyresult di=[carx]&nbsp; &nbsp; lea bx,[cart]&nbsp; &nbsp; push ax&nbsp; &nbsp; xlat&nbsp; &nbsp; pop bx&nbsp; &nbsp; xchg ax,bx&nbsp; &nbsp; cmp bl,255&nbsp; &nbsp; mov bx,[cs:di]&nbsp; &nbsp; jz c13&nbsp; &nbsp; mov ah,2&nbsp; &nbsp; &nbsp; &nbsp; ;step&nbsp; &nbsp; test al,1&nbsp; &nbsp; jz c10&nbsp; &nbsp; sub bl,ah&nbsp; &nbsp; jnc c10&nbsp; &nbsp; add bl,ahc10:&nbsp; &nbsp; test al,2&nbsp; &nbsp; jz c11&nbsp; &nbsp; add bl,ah&nbsp; &nbsp; cmp bl,240&nbsp; &nbsp; jc c11&nbsp; &nbsp; sub bl,ahc11:&nbsp; &nbsp; test al,4&nbsp; &nbsp; jz c12&nbsp; &nbsp; sub bh,ah&nbsp; &nbsp; jnc c12&nbsp; &nbsp; add bh,ahc12:&nbsp; &nbsp; test al,8&nbsp; &nbsp; jz c13&nbsp; &nbsp; add bh,ah&nbsp; &nbsp; cmp bh,240&nbsp; &nbsp; jc c13&nbsp; &nbsp; sub bh,ahc13:&nbsp; &nbsp; mov [cs:di],bx&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;game:&nbsp; &nbsp;mov ax,19&nbsp; &nbsp; &nbsp; &nbsp;;game&nbsp; &nbsp; int 16&nbsp; &nbsp; lea bx,[pal]&nbsp; &nbsp; mov dx,3C8h&nbsp; &nbsp; &nbsp;;set palete&nbsp; &nbsp; mov cl,0pall0:&nbsp; mov al,cl&nbsp; &nbsp; out dx,al&nbsp; &nbsp; inc dx&nbsp; &nbsp; mov al,[cs:bx]&nbsp; &nbsp; inc bx&nbsp; &nbsp; out dx,al&nbsp; &nbsp; mov al,[cs:bx]&nbsp; &nbsp; inc bx&nbsp; &nbsp; out dx,al&nbsp; &nbsp; mov al,[cs:bx]&nbsp; &nbsp; inc bx&nbsp; &nbsp; out dx,al&nbsp; &nbsp; dec dx&nbsp; &nbsp; inc cl&nbsp; &nbsp; jnz pall0getm:&nbsp; &nbsp;mov ah,48h&nbsp; &nbsp; mov bx,12288&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov [maps],ax&nbsp; &nbsp; jc gerr&nbsp; &nbsp; call mapi&nbsp; &nbsp; mov es,[maps]&nbsp; &nbsp; mov di,[cary]&nbsp; &nbsp; mov ax,2*256&nbsp; &nbsp; mov ch,1&nbsp; &nbsp; &nbsp; &nbsp; ;player&nbsp; &nbsp; call car&nbsp; &nbsp; mov di,[cary+2]&nbsp; &nbsp; mov ch,2&nbsp; &nbsp; &nbsp; &nbsp; ;player&nbsp; &nbsp; call car&nbsp; &nbsp; mov di,[cary+4]&nbsp; &nbsp; mov ch,3&nbsp; &nbsp; &nbsp; &nbsp; ;player&nbsp; &nbsp; call cargl0:&nbsp; &nbsp; lea bx,[plk1+10]&nbsp; &nbsp; lea cx,[cary]&nbsp; &nbsp; mov di,0&nbsp; &nbsp; mov dh,1&nbsp; &nbsp; call carn1&nbsp; &nbsp; lea bx,[plk1+21]&nbsp; &nbsp; lea cx,[cary+2]&nbsp; &nbsp; mov di,ox+4&nbsp; &nbsp; mov dh,2&nbsp; &nbsp; call carn1&nbsp; &nbsp; lea bx,[plk1+32]&nbsp; &nbsp; lea cx,[cary+4]&nbsp; &nbsp; mov di,ox+ox+8&nbsp; &nbsp; mov dh,3&nbsp; &nbsp; call carn1&nbsp; &nbsp; mov al,[plk1+10]&nbsp; &nbsp; lea di,[carx]&nbsp; &nbsp; call ctrl&nbsp; &nbsp; mov al,[plk1+21]&nbsp; &nbsp; lea di,[carx+2]&nbsp; &nbsp; call ctrl&nbsp; &nbsp; mov al,[plk1+32]&nbsp; &nbsp; lea di,[carx+4]&nbsp; &nbsp; call ctrl&nbsp; &nbsp; mov ax,[word ptr key]&nbsp; &nbsp; cmp ax,1&nbsp; &nbsp; jnz gl0freem:&nbsp; mov ah,49h&nbsp; &nbsp; mov es,[maps]&nbsp; &nbsp; int 21hgamee0: mov al,[key]&nbsp; &nbsp; or al,al&nbsp; &nbsp; jnz gamee0&nbsp; &nbsp; jmp begingerrm&nbsp; &nbsp;db 'Memory alocation error.',0gerr:&nbsp; &nbsp;mov ax,3&nbsp; &nbsp; int 16&nbsp; &nbsp; sub di,di&nbsp; &nbsp; lea si,[gerrm]&nbsp; &nbsp; mov ax,0B800h&nbsp; &nbsp; mov es,ax&nbsp; &nbsp; call print&nbsp; &nbsp; jmp gamee0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ende:&nbsp; &nbsp;push ds&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;uninstall keyboard int&nbsp; &nbsp; mov dx,[oint09]&nbsp; &nbsp; mov ax,[oint09+2]&nbsp; &nbsp; mov ds,ax&nbsp; &nbsp; mov al,9h&nbsp; &nbsp; mov ah,25h&nbsp; &nbsp; int 21h&nbsp; &nbsp; pop ds&nbsp; &nbsp; mov ax,3&nbsp; &nbsp; int 16&nbsp; &nbsp; EXITCODEmeme:&nbsp; &nbsp; ENDfile.inc-用于光盘文件访问的lib;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; &nbsp;File library:&nbsp; &nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;hand&nbsp; &nbsp; dw 0&nbsp; &nbsp; &nbsp; &nbsp; ;###&nbsp; &nbsp; handler...ferr&nbsp; &nbsp; db 0&nbsp; &nbsp; &nbsp; &nbsp; ;###&nbsp; &nbsp; DOS error code;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fopen:&nbsp; pusha&nbsp; &nbsp; &nbsp; &nbsp;;DS:DX = file name, [hand] <= file handle&nbsp; &nbsp; mov ax,3D02h&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; jnc fopen0&nbsp; &nbsp; mov bl,al&nbsp; &nbsp; sub ax,axfopen0: mov [cs:hand],ax&nbsp; &nbsp; mov [cs:ferr],bl&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fnew:&nbsp; &nbsp;pusha&nbsp; &nbsp; &nbsp; &nbsp;;DS:DX = file name, [hand] <= file handle&nbsp; &nbsp; mov ah,3ch&nbsp; &nbsp; mov cx,0&nbsp; &nbsp; ;attr&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; jnc fnew0&nbsp; &nbsp; mov bl,al&nbsp; &nbsp; sub ax,axfnew0:&nbsp; mov [cs:hand],ax&nbsp; &nbsp; mov [cs:ferr],bl&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fclose: pusha&nbsp; &nbsp; &nbsp; &nbsp;;[hand] = file handle&nbsp; &nbsp; mov bx,[cs:hand]&nbsp; &nbsp; mov ah,3eh&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; jnc fclose0&nbsp; &nbsp; mov bl,al&nbsp; &nbsp; sub ax,axfclose0:mov [cs:ferr],bl&nbsp; &nbsp; mov [cs:hand],ax&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fread:&nbsp; pusha&nbsp; &nbsp; &nbsp; &nbsp;;DS:DX = adr, CX = lenght, [hand] = hand, CX => read&nbsp; &nbsp; mov bx,[cs:hand]&nbsp; &nbsp; mov ah,3Fh&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; jnc fread0&nbsp; &nbsp; mov bl,al&nbsp; &nbsp; sub ax,axfread0: mov [cs:ferr],bl&nbsp; &nbsp; mov cx,ax&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fwrite: pusha&nbsp; &nbsp; &nbsp; &nbsp;;DS:DX = adr, CX = lenght, [hand] = hand, CX => write&nbsp; &nbsp; mov bx,[cs:hand]&nbsp; &nbsp; mov ah,40h&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; jnc fwrite0&nbsp; &nbsp; mov bl,al&nbsp; &nbsp; sub ax,axfwrite0:mov [cs:ferr],bl&nbsp; &nbsp; mov cx,ax&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fdel:&nbsp; &nbsp;pusha&nbsp; &nbsp; &nbsp; &nbsp;;DS:DX = file name&nbsp; &nbsp; mov ah,41h&nbsp; &nbsp; int 21h&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; jnc fdel0&nbsp; &nbsp; mov bl,alfdel0:&nbsp; mov [cs:ferr],bl&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fattr:&nbsp; pusha&nbsp; &nbsp; &nbsp; &nbsp;;DS:DX = file name, CX = attr&nbsp; &nbsp; mov ax,4301h&nbsp; &nbsp; ;4300 for attr read => cx ... change push/pop&nbsp; &nbsp; int 21h&nbsp; &nbsp; &nbsp;;&nbsp; &nbsp; &nbsp; &nbsp;7 6 5 4 3 2 1 0&nbsp; &nbsp; mov bl,0&nbsp; &nbsp; ;cx = attr:&nbsp; &nbsp; &nbsp;0 0 A 0 0 S H R&nbsp; &nbsp; jnc fattr0&nbsp; &nbsp; mov bl,alfattr0: mov [cs:ferr],bl&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;text.inc-用于以文本模式3打印文本的lib;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; &nbsp;TXT mode 3 library:&nbsp; &nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kurxy:&nbsp; pusha&nbsp; &nbsp; &nbsp; &nbsp;;dl = column, dh = row&nbsp; set kursor position&nbsp; &nbsp; mov ah,2&nbsp; &nbsp; sub bh,bh&nbsp; &nbsp; int 16&nbsp; &nbsp; popa&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;print:&nbsp; push ax&nbsp; &nbsp; &nbsp;;DS:SI data => ES:DI screen&nbsp; &nbsp; push es&nbsp; &nbsp; push 0B800h&nbsp; &nbsp; pop es&nbsp; &nbsp; mov ah,13&nbsp; &nbsp; push diprnl0:&nbsp; mov al,[ds:si]&nbsp; &nbsp; cmp al,ah&nbsp; &nbsp; jz prnr0&nbsp; &nbsp; or al,al&nbsp; &nbsp; jz prnr1&nbsp; &nbsp; mov [es:di],alprnr0:&nbsp; inc di&nbsp; &nbsp; inc di&nbsp; &nbsp; inc si&nbsp; &nbsp; cmp al,ah&nbsp; &nbsp; jnz prnl0&nbsp; &nbsp; pop di&nbsp; &nbsp; add di,160&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;next line&nbsp; &nbsp; pop es&nbsp; &nbsp; pop ax&nbsp; &nbsp; retprnr1:&nbsp; pop ax&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;end without ENTER&nbsp; &nbsp; inc di&nbsp; &nbsp; inc di&nbsp; &nbsp; inc si&nbsp; &nbsp; pop es&nbsp; &nbsp; pop ax&nbsp; &nbsp; ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Battle.lvl-水平地图布局我不知道如何在这里发布这个文件,所以在这里十六进制输出Battle.lvl它是16x16的精灵图,其余为其他信息。凡(mx,my)在像素图的大小和精灵大小16x16...Battle.gfx-未压缩的原始精灵我不知道该怎么发布这个文件,所以这里只有2张图片Battle.gfxBattle.gfx每个子画面都是16x16像素/字节。文件包含图片36+ 768字节调色板= 9984字节。白色是不可见的(透明)。我认为子画面按此顺序排列,并且调色板位于文件结尾(不确定您...),子画面索引也来自0。我认为它与Battle.lvl代码匹配...这里有下载的演示:TASM MS-DOS游戏演示在*.com,*.gfx,*.lvl需要运行这个剩下的就是源代码。[笔记]抱歉,如果忘记翻译一些注释,但是我希望代码很简单[PS]转移到NASM之后,我添加了一些新功能,例如AI,枪支……看起来像这样(但从未完成过……但已经可以玩了)战斗NASM刚刚在DOSBox上尝试过,但是与我的AMD K5 120MHz天相比,它的运行速度很慢(直到我意识到我需要为DOSBox添加更多周期:)...)

心有法竹

因为我的TASM / TLINK无法正常工作,并且丢失了一个inc文件,因此我正在搜索兼容的东西……编译完成tasm battle.asm并tlink /t battle.obj无法在此处直接共享关卡和gfx文件,因此您可以从hexdump和gfx键入自己的关卡更加棘手,因此我可能会在一段时间内将整个内容上传到某处&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP