组装中的 Pong 项目 8086

Lid*_*tai 2 assembly pong x86-16

我的乒乓项目有问题。我尝试当球击中红色球棒时,它会随机弹回另一侧,但由于某种原因它无法识别红色。我在 int = 10h 中使用 AH = 0Dh。检查的部分在 hitcheck 过程中。

这是代码。与我的问题相关。

hitcheck    PROC
;------batt and com check-------
MOV BH, 2H
MOV DX, ballx
MOV CX, bally
SUB CX, 2
MOV AH, 0Dh      
INT 10H

CMP AL, 1
JE hitmovement
CMP AL, 3
JE comhitmovement

MOV BH, 2H
MOV DX, ballx
MOV CX, bally
ADD CX, 2
MOV AH, 0Dh            
INT 10H

CMP AL, 1
JE hitmovement
CMP AL, 3
JE comhitmovement

MOV BH, 2H
MOV DX, ballx
MOV CX, bally
SUB DX, 2
MOV AH, 0Dh      
INT 10H

CMP AL, 1
JE hitmovement
CMP AL, 3
JE comhitmovement

MOV BH, 2H
MOV DX, ballx
MOV CX, bally
ADD DX, 2
MOV AH, 0Dh      
INT 10H

CMP AL, 1
JE hitmovement
CMP AL, 3
JE comhitmovement
Run Code Online (Sandbox Code Playgroud)

Fif*_*nik 5

MOV AL, 13H ;changes the num of pixels to 640X480 with 16 colors
Run Code Online (Sandbox Code Playgroud)

这里的注释与视频模式编号不匹配。模式 13h 的分辨率为 320x200,256 色。

mov base, 0
printleftbase:
printpixel 0, base, 2, 2
INC base
CMP base, 199
JNE printleftbase
Run Code Online (Sandbox Code Playgroud)
mov base, 0
printrightbase:
printpixel 319, base, 2, 2
INC base                   
CMP base, 199
JNE printrightbase
Run Code Online (Sandbox Code Playgroud)

如果前面代码的目的是绘制沿屏幕高度的垂直线,那么您需要与 200 而不是 199 进行比较。

;------batt and com check-------
MOV BH, 2H
MOV DX, ballx
MOV CX, bally
SUB CX, 2
MOV AH, 0Dh      
INT 10H
Run Code Online (Sandbox Code Playgroud)

在所有 ReadPixel 调用中,您错误地将 X 坐标放入DX,将 Y 坐标放入CX。恰恰相反。你的printpixel宏确实没问题。

此外,您还可以在第 1 页上打印battcom的像素,但在第 2 页上检查是否有冲突!

问:你们的视频适配器是否支持 13h 模式下的多个页面?