我正在制作一个pacman游戏,我需要检查我角色前方坐标中的内容,这样我就能看出pacman是否有可能进入那些坐标。我已经搜索了很多,但我不确定如何将这个问题放到谷歌搜索方面并且运气不佳。
我想做的伪代码:
CheckNext PROC go to coordinate position (champ_xnew,champ_ynew) take what is in that position, store into next (next BYTE ?)
上面的部分(从记忆中读取)是我需要帮助的。
cmp next, '#' ;# is what I am using for walls je NoMove jne Move Move: champ_x = champ_xnew champ_y = champ_ynew NoMove: return without changing champ_x/y CheckNext ENDP
答案 0 :(得分:2)
只要屏幕处于文本模式(不是图形模式),您就可以从(分段的)地址0xB800:0x0000中回读屏幕数据。
答案 1 :(得分:0)
假设您正在使用彩色文本模式,因此您的屏幕从B800:0000开始,您正在使用8086操作码,即在有效地址计算中不缩放。一行有160个字节(每个字符单元填充两个字节:一个用于字符本身,另一个用于颜色)。
mov al,[x]
mov bl,160
mul bl ;AX = x*80*2
xor bx,bx
mov bl,[y]
add bx,bx ;BX = y*2
add ax,bx ;AX = x*160 + y*2
mov si,ax
mov ax,0b800h
mov es,ax ;ES:SI points to the character at coordinates X,Y
mov al,es:[si] ;AL has the ASCII code of character at coordinates X,Y
答案 2 :(得分:0)
要读取字符和屏幕上特定坐标的颜色,有两种方法:
输入:
啊= 08H bh =屏幕页数(我总是使用0)
输出:
AL =炭 啊=颜色(高4位,低4位是前景色和背景色)
找出网页的编号,使用int 10h的函数0fh
输出:
al:当前的视频模式 啊:每行的cols数 BH:当前屏幕的数量
int 10h的函数0fh如果在Windows控制台上使用它将导致错误,如果控制台
不是全屏模式。
使用" mov ax,0b800h mov es,ax"
将ds寄存器设置为0b800h将si设置为char的偏移量(NumberOfScreenpage *(cols * rows * 2)+ 2 *(row_number * cols + col))
使用lodsw加载WORD
啊现在包含颜色 al包含char