.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啊,01h int16h这样我可以移动角色,而角色自己移动如果我不按任何键改变方向。
我在想应该有一个计时器,当计时器结束时,用户没有按下任何字符应该继续按下最后一个按键的方向然后如果用户按下任何控制按钮它应该改变方向
答案 0 :(得分:0)
我认为应该有一个计时器,当计时器结束时 并且用户没有按下角色应该继续的任何内容 如果是用户,则按下最后一个键的方向 按下任何控制按钮,它应该改变方向
这正是要走的路。例如,你的角色会在系统计时器的每个刻度上更新它的位置。如果在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