当前位置:首页 > 汇编语言推箱子课程设计
mov esi ,offset Map ; Pos = y*14 + x ; Get M1 mov eax,NewY mov ebx,14D mul bx add eax,NewX mov ebx,eax mov nPos1,eax mov al ,[esi][ebx] mov M1,al ; Get M2 mov eax,NewY2 mov ebx,14D mul bx add eax,NewX2 mov ebx,eax mov nPos2,eax mov al ,[esi][ebx] mov M2,al
mov al,M1
.if (al == MAP_ROAD || al == MAP_OBJECT ) push NewX pop ManXPos push NewY pop ManYPos
.elseif al == MAP_BOX1 ; push box mov al ,M2
.if al == MAP_ROAD ; push ok mov ebx,nPos2
13
mov al,MAP_BOX1 mov [esi][ebx],al mov ebx,nPos1 mov al,MAP_ROAD mov [esi][ebx],al push NewX pop ManXPos push NewY pop ManYPos
.elseif al == MAP_OBJECT mov ebx,nPos2 mov al,MAP_BOX2 mov [esi][ebx],al mov ebx,nPos1 mov al,MAP_ROAD mov [esi][ebx],al push NewX pop ManXPos push NewY pop ManYPos .endif
.elseif al == MAP_BOX2 mov al,M2
.if al == MAP_ROAD mov ebx,nPos2 mov al,MAP_BOX1 mov [esi][ebx],al mov ebx,nPos1 mov al,MAP_OBJECT mov [esi][ebx],al push NewX
14
pop ManXPos push NewY pop ManYPos
.elseif al == MAP_OBJECT mov ebx,nPos2 mov al,MAP_BOX2 mov [esi][ebx],al mov ebx,nPos1 mov al,MAP_OBJECT mov [esi][ebx],al push NewX pop ManXPos push NewY pop ManYPos .endif .else .endif
invoke Repaint pop esi ret
2.3游戏数据模块
(3)函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、
从空地移动箱子到目的地和中从目的地移动箱子到目的地。X、y指明小人当前所处的位置,字符a表示移动的方向,有“u”、“d”、“l”和“r”4个值,分别表示向上、下、左、右移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步画小人,移动两步画箱子,并设置状态为“b”;
15
对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步画小人,移动两上在目的地画箱子,并设置状态为“i”,表明箱子在目的地上。
ManMove endp
XYtoPos proc x:DWORD,y:DWORD ; pos = y *14 + x Zero-Based mov eax, y mov ebx, 14D mul bx add eax ,x ret XYtoPos endp
Repaint proc LOCAL R:RECT
invoke GetClientRect,hWnd,Addr R invoke InvalidateRect,hWnd,Addr R,0 ret
Repaint endp
Check proc
; Check Success and return true or false LOCAL Result :DWORD push esi push TRUE pop Result lea esi,Map
16
共分享92篇相关文档