mov ah,01h int16h,如何使用它来改变蛇的方向
.model small .data var db '@', '$' delaytime db 10 total db 0 col db 40 row db 12 .stack 100h .code delay proc mov ah, 00 int 1Ah mov bx, dx jmp_delay: int 1Ah sub dx, bx cmp dl, delaytime jl jmp_delay ret delay endp lefty proc dec col cmp col, 0 jle sn leftyie: mov dl , col mov dh , row xor bh, bh mov ah, 02h int 10h ret sn: mov col, 79 jmp leftyie lefty endp righty proc inc col cmp col,79 jg zero rightyie: mov dl,col mov dh,row xor bh, bh mov ah, 02h int 10h ret zero: mov col,0 jmp rightyie righty endp upy proc dec row cmp row, 0 jl upzero uptie: mov dl,col mov dh,row xor bh, bh mov ah, 02h ret upzero: mov row,24 jmp uptie upy endp downy proc inc row cmp row, 24 jg gozero downty: mov dl,col mov dh,row xor bh, bh mov ah, 02h int 10h ret gozero: mov row,0 jmp downty downy endp video proc mov al, 03h ;set video mode mov ah, 00h int 10h ret video endp start proc ;starting coordinates mov dh, 12 ;row mov dl, 40 ;column xor bh, bh mov ah, 02h int 10h ret start endp dashclear proc mov ax, 0600h mov bh, 07h xor cx, cx mov dx, 184fh int 10h ret dashclear endp getchar proc mov ah, 00h int 16h ret getchar endp main proc mov ax, @data mov ds, ax call video call start mov dx, offset var mov ah, 09h int 21h mov cx, 3200h ;stop cursor blinking mov ah, 01h int 10h call start getinput: call getchar ;get character direct_change: cmp ah, 72 je w cmp ah, 80 je s cmp ah, 75 je a cmp ah, 77 je d cmp al, 119 je w cmp al, 115 je s cmp al, 97 je a cmp al, 100 je d cmp al, 119 jne rak cmp al, 115 jne rak cmp al, 97 jne rak cmp al, 100 jne rak a: call delay call dashclear call lefty mov dx, offset var mov ah, 09h int 21h jmp a s: call delay call dashclear call downy mov dx, offset var mov ah, 09h int 21h jmp s d: call delay call dashclear call righty mov dx, offset var mov ah, 09h int 21h jmp d w: call delay call dashclear call upy int 10h mov dx, offset var mov ah, 09h int 21h jmp w rak: jmp getinput main endp end main
我有这个代码,使用w,a,s,d移动单个字符我该如何使用mov ah,01h int16h,这样我可以移动字符而字符自己移动,如果我不按任何键来改变它的方向。
我在想,应该有一个定时器,当定时器结束时,用户没有按下任何字符应该继续按下最后一个键的方向,如果用户按下了任何控制按钮,它应该改变方向
我在想,应该有一个定时器,当定时器结束时,用户没有按下任何字符应该继续按下最后一个键的方向,如果用户按下了任何控制按钮,它应该改变方向
这正是要走的路。 例如,您的角色会更新其位置,例如,在系统计时器的每个记号上。 如果在兼容PC(或仿真器)的PC上为实模式MS DOS编程,我假设您正在执行此操作,您可以等到使用HLT
指令发生中断为止。 但是,不要发布任何CLI
指令,否则您的程序将永远停留在HLT
指令中。
Do forever
HLT ;waits until an interrupt triggers. Usually, every 55ms on IBM PC
if key pressed
update direction
EndIf
Update character
EndDo
链接地址: http://www.djcxy.com/p/62699.html
上一篇: mov ah,01h int16h, how to use it to change the direction of the snake