⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lixner.asm

📁 本程序是我(lixner)参考《电脑爱好者》2003年第7期的《用Delphi写小游戏之华容道》
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		ret

WndMainProc	endp
_Init		proc
		local	@hDC
		invoke	SendMessage,hWinMain,WM_SETTEXT,0,offset szClassName
		invoke	LoadBitmap,hInstance,IDB_0	;装入背景图片
		mov	hBmpBack,eax
		invoke  GetDC,hWinMain
		mov	@hDC,eax
		invoke	CreateCompatibleDC,@hDC			;建立背景及数字 DC
		mov	hDcBack,eax
		invoke	ReleaseDC,hWinMain,@hDC
		invoke	SelectObject,hDcBack,hBmpBack
		invoke	_CenterWindow,hWinMain

		ret
_Init		endp

;********************************************************************
_Quit		proc
		local	@stWindow:RECT

		invoke	DestroyMenu,hMenu
		invoke	DeleteDC,hDcBack
		invoke	DeleteObject,hBmpBack
		invoke	DestroyWindow,hWinMain
		invoke	PostQuitMessage,NULL

		ret

_Quit		endp
;********************************************************************
_paint  proc
LOCAL i:DWORD
LOCAL j:DWORD
			mov	hmyDc,eax
			push  ebx
			invoke	BitBlt,hmyDc,0,0,230,280,hDcBack,200,0,SRCCOPY
			xor   edx,edx
			xor   ebx,ebx
	@1:
			xor   ecx,ecx
	@2:
			lea   eax,mymap
			add   eax,ecx
			mov   dl,BYTE ptr [eax+ebx*4]
			push  ecx
   mov eax,50d
   mul cl
	mov i,eax
   mov eax,50d
   mul bl
	mov j,eax
	add i,15d
	add j,15d
		.if dl==01h
			invoke	BitBlt,hmyDc,i,j,100,100,hDcBack,50,0,SRCCOPY
   .elseif dl == 02h
			invoke	BitBlt,hmyDc,i,j,50,100,hDcBack,0,0,SRCCOPY
   .elseif dl == 03h
			invoke	BitBlt,hmyDc,i,j,50,100,hDcBack,150,0,SRCCOPY
   .elseif dl == 04h
			invoke	BitBlt,hmyDc,i,j,50,100,hDcBack,0,100,SRCCOPY
   .elseif dl == 05h
			invoke	BitBlt,hmyDc,i,j,50,100,hDcBack,150,100,SRCCOPY
   .elseif dl == 06h
			invoke	BitBlt,hmyDc,i,j,100,50,hDcBack,50,100,SRCCOPY
   .elseif dl == 07h
			invoke	BitBlt,hmyDc,i,j,50,50,hDcBack,0,200,SRCCOPY
   .elseif dl == 08h
			invoke	BitBlt,hmyDc,i,j,50,50,hDcBack,0,200,SRCCOPY
   .elseif dl == 09h
			invoke	BitBlt,hmyDc,i,j,50,50,hDcBack,0,200,SRCCOPY
   .elseif dl == 00h
			invoke	BitBlt,hmyDc,i,j,50,50,hDcBack,0,200,SRCCOPY 
		.endif
		pop   ecx
	@3:
			inc   ecx
			cmp   ecx,04h
			jnz   @2
			inc   ebx
			cmp   ebx,05h
			jnz   @1
		pop   ebx
		ret
_paint  endp
;********************************************************************
;********************************************************************
;********************************************************************
_formmousedown   proc
;int 3
	movzx ecx,y
	movzx ebx,x
.if  BYTE ptr [mymap+ebx*4+ecx]==0ffh
	.if x>00h  &&  y>00h  &&	BYTE ptr [mymap+ebx*4+ecx-05h]==01h
		dec   cl
		dec   bl
	.elseif  x>00h  &&	BYTE ptr [mymap+ebx*4+ecx-01h]==01h  ||  \
								BYTE ptr [mymap+ebx*4+ecx-01h]==06h
		dec   cl
	.elseif  y>00h  &&	BYTE ptr [mymap+ebx*4+ecx-04h]==01h  ||  \
								BYTE ptr [mymap+ebx*4+ecx-04h]==02h  ||  \
								BYTE ptr [mymap+ebx*4+ecx-04h]==03h  ||  \
								BYTE ptr [mymap+ebx*4+ecx-04h]==04h  ||  \
								BYTE ptr [mymap+ebx*4+ecx-04h]==05h
		dec   bl
	.endif 
.endif
	mov oldy,cl
	mov oldx,bl
;/////////////////////////	
	movzx  edx,BYTE ptr [mymap+ebx*4+ecx]
	.if dl==01h																				;曹操
		.if      oldy<02h  &&	BYTE ptr [mymap+ebx*4+ecx+2]==088h \		;右
								 &&   BYTE ptr [mymap+ebx*4+ecx+6]==088h
			mov BYTE ptr [mygood],01h
		.endif
		.if  oldx>00h  &&	BYTE ptr [mymap+ebx*4+ecx-4]==088h \		;上
								 &&	BYTE ptr [mymap+ebx*4+ecx-3]==088h
			mov BYTE ptr [mygood+01h],01h
		.endif
		.if  oldy>00h  &&	BYTE ptr [mymap+ebx*4+ecx-1]==088h \		;左
								 &&	BYTE ptr [mymap+ebx*4+ecx+3]==088h
			mov BYTE ptr [mygood+02h],01h
		.endif
		.if  oldx<04h  &&	BYTE ptr [mymap+ebx*4+ecx+8]==088h \		;下
								 &&	BYTE ptr [mymap+ebx*4+ecx+9]==088h
			mov BYTE ptr [mygood+03h],01h
		.endif
	.elseif	dl==02h  ||  dl==03h  ||  \
				dl==04h  ||  dl==05h
		.if     oldy<03h   && 	BYTE ptr [mymap+ebx*4+ecx+1]==088h \		;右
								 &&	BYTE ptr [mymap+ebx*4+ecx+5]==088h
			mov BYTE ptr [mygood],01h
		.endif
		.if  oldx>00h  &&	BYTE ptr [mymap+ebx*4+ecx-4]==088h    		;上
			mov BYTE ptr [mygood+01h],01h
		.endif
		.if  oldy>00h  &&	BYTE ptr [mymap+ebx*4+ecx-1]==088h \		;左
								 &&	BYTE ptr [mymap+ebx*4+ecx+3]==088h
			mov BYTE ptr [mygood+02h],01h
		.endif
		.if  oldx<04h  &&	BYTE ptr [mymap+ebx*4+ecx+8]==088h    		;下
			mov BYTE ptr [mygood+03h],01h
		.endif
	.elseif  dl==06h
		.if      oldy<02h  &&	BYTE ptr [mymap+ebx*4+ecx+2]==088h       	;右
			mov BYTE ptr [mygood],01h
		.endif
		.if  oldx>00h  &&	BYTE ptr [mymap+ebx*4+ecx-4]==088h \		;上
								 &&	BYTE ptr [mymap+ebx*4+ecx-3]==088h
			mov BYTE ptr [mygood+01h],01h
		.endif
		.if  oldy>00h  &&	BYTE ptr [mymap+ebx*4+ecx-1]==088h			;左
			mov BYTE ptr [mygood+02h],01h
		.endif
		.if  oldx<04h  &&	BYTE ptr [mymap+ebx*4+ecx+4]==088h \		;下
								 &&	BYTE ptr [mymap+ebx*4+ecx+5]==088h
			mov BYTE ptr [mygood+03h],01h
		.endif
	.elseif  dl==07h  ||  dl==08h  ||  \
				dl==09h  ||  dl==00h
		.if      oldy<03h  &&	BYTE ptr [mymap+ebx*4+ecx+1]==088h 			;右
			mov BYTE ptr [mygood],01h
		.endif
		.if  oldx>00h  &&	BYTE ptr [mymap+ebx*4+ecx-4]==088h		      	;上
			mov BYTE ptr [mygood+01h],01h
		.endif
		.if  oldy>00h  &&	BYTE ptr [mymap+ebx*4+ecx-1]==088h			;左
			mov BYTE ptr [mygood+02h],01h
		.endif
		.if  oldx<04h  &&	BYTE ptr [mymap+ebx*4+ecx+4]==088h			;下
			mov BYTE ptr [mygood+03h],01h
		.endif
	.endif
	ret
_formmousedown  endp
;********************************************************************
;********************************************************************
_formmouseup   proc		
;int 3
	mov cl,newy
	mov bl,newx
	mov ax,WORD ptr [mygood+2]
.if bl>oldx  &&  ah==01h	;右
	mov BYTE ptr [myj],01h
.elseif cl<oldy  &&  al==01h;上
	mov BYTE ptr [myi],0ffh
.endif
;////////////////////////////
	mov ax,WORD ptr [mygood]
.if cl>oldy  &&  al==01h	;下
	mov BYTE ptr [myi],01h
.elseif bl<oldx  &&  ah==01h  ;左
	mov BYTE ptr [myj],0ffh
.endif
;////////////////////////////
.if bl==oldy  &&  cl==oldx
jmp over
.endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	movzx ebx,oldx
	movzx ecx,oldy
	mov dl,BYTE ptr [mymap+ebx*4+ecx]
;//////////////
.if dl==01h
;int 3
	mov   bl,myj
	mov   cl,myi
	add   cl,bl
	.if   cl==0ffh
		movzx ebx,oldx
		movzx ecx,oldy
		mov BYTE ptr [mymap+ebx*4+ecx+5],088h
		.if myj==0ffh
			mov BYTE ptr [mymap+ebx*4+ecx+4],088h
		.elseif myi==0ffh
			mov BYTE ptr [mymap+ebx*4+ecx+1],088h
		.endif
	.elseif   cl==1h
		movzx ebx,oldx
		movzx ecx,oldy
		mov BYTE ptr [mymap+ebx*4+ecx],088h
		add   bl,myi
		add   cl,myj
		mov BYTE ptr [mymap+ebx*4+ecx],088h
	.endif
		movzx ebx,oldx
		movzx ecx,oldy
	add   bl,myj
	add   cl,myi
	mov BYTE ptr [mymap+ebx*4+ecx],dl
	mov BYTE ptr [mymap+ebx*4+ecx+1],0ffh
	mov BYTE ptr [mymap+ebx*4+ecx+4],0ffh
	mov BYTE ptr [mymap+ebx*4+ecx+5],0ffh

.elseif  dl==2h  ||  dl==3h  ||  dl==4h  ||  dl==5h
	movzx ebx,oldx
	movzx ecx,oldy
	mov BYTE ptr [mymap+ebx*4+ecx],088h
	mov BYTE ptr [mymap+ebx*4+ecx+4],088h
	add   bl,myj
	add   cl,myi
	mov BYTE ptr [mymap+ebx*4+ecx],dl
	mov BYTE ptr [mymap+ebx*4+ecx+4],0ffh
.elseif  dl==6h
	movzx ebx,oldx
	movzx ecx,oldy
	mov BYTE ptr [mymap+ebx*4+ecx],088h
	mov BYTE ptr [mymap+ebx*4+ecx+1],088h
	add   bl,myj
	add   cl,myi
	mov BYTE ptr [mymap+ebx*4+ecx],dl
	mov BYTE ptr [mymap+ebx*4+ecx+1],0ffh

.elseif  dl==7h  ||  dl==8h  ||  dl==9h  ||  dl==00h
;int 3
	movzx ebx,oldx
	movzx ecx,oldy
	mov BYTE ptr [mymap+ebx*4+ecx],088h
	add   bl,myj
	add   cl,myi
	mov BYTE ptr [mymap+ebx*4+ecx],dl
.endif
;///////////////
over:
	mov DWORD ptr [mygood] ,0h
	mov BYTE  ptr [myj],0h
	mov BYTE  ptr [myi],0h
	ret
_formmouseup   endp
;********************************************************************
;********************************************************************
		end	start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -