作为学校项目的一部分,我正在制作一个游戏,展示我们本学期学到的所有东西。 所以我把这个游戏制作成了你这个笑脸的家伙,你在迷宫中跑来跑去,让你回到迷宫的起点,一旦你到达终点,就会进入下一个层次。
所以我想添加一个带有"按钮的标题屏幕" - 几乎是用文字绘制的标题屏幕,然后:
mov ax, 3h
int 33h
mov mouseClick, bx
mov mouseX, cx
mov mouseY, dx
call checkMClick
cmp mousePos, 1h
je goodMPos
jne badMPos
goodMPos:
call firstLevel
call newMazePos
call output
;---------------------------------------;
checkMClick: cmp mouseclick, 1h
je checkMouseX
jne mouse
checkMouseX: cmp mouseX, 7h
jge afterStartX
jl mouse
afterStartX: cmp mouseX, 23h
jle goodXPos
jg badMPos
goodXPos: mov mousePos, 1h
jmp checkMouseY
checkMouseY: cmp mouseY, 7h
jge afterStartY
jl mouse
afterStartY: cmp mouseY, 11h
jge goodYPos
jl badMPos
goodYPos: mov mousePos, 1h
ret
badMPos: mov mousePos, 0h
jmp mouse
但是鼠标位置的坐标被搞砸了。
答案 0 :(得分:1)
你必须改变操作数的顺序!寄存器是源。
mov bx, mouseClick
mov cx, mouseX
mov dx, mouseY
此外,鼠标驱动程序的功能3给出的位置就像屏幕是640x200一样。你必须弥补这一点。
答案 1 :(得分:0)
; DATA segment
mouseClick DW ?
mouseX DW ?
mouseY DW ?
mousePos DW ?
; CODE segment
mov ax, 3h
int 33h
mov [mouseClick], bx ; Write the value of BX to mouseClick
mov [mouseX], cx ; Write the value of CX to mouseX
mov [mouseY], dx ; Write the value of DX to mouseY
以下说明需要指定我们要访问的字节数。
cmp mouseclick, 1h
mov mousePos, 1h
cmp WORD[mouseclick], 1h ; for to compare two bytes
mov WORD[mousePos], 1h ; for to write two bytes
为了检查无符号的nunbers,如果值高于或低于,我们可以使用说明:" ja,jna,jb,jnb"。说明:" jg,jng,jl,jnl用于签名号码。
在文本模式下,所有坐标都指定为单元格大小的倍数,通常为8x16或8x8像素。 http://en.wikipedia.org/wiki/Text_mode