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

📄 guess.asm

📁 我写的一个关于猜数字的小游戏
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;******************************************************************************
;File name : guess.asm
;author: chenxu
;creation data :2006.8.18
;description: guess number game
;******************************************************************************
		include	ST2204.h
		include	Bios.h
		include	Resource.h
		include	Macro.h
		include	CtlBox.h

		public	GuessMain
		public	GuessMainProc
;******************************************************************************
;define all parements
;******************************************************************************
mGuessBuff		 		equ		mAppBuff+00H

mGuessDrawNum				equ		mGuessBuff+00H			;画数字的时候的临时变量
mGuessDrawNum1				equ		mGuessBuff+01H			;用户输入的第一个数字
mGuessDrawNum2				equ		mGuessBuff+02H
mGuessDrawNum3				equ		mGuessBuff+03H
mGuessDrawNum4				equ		mGuessBuff+04H

mGuessStep				equ		mGuessBuff+05H			;共4次
mGuessStepNum				equ		mGuessBuff+06H			;共8次

mGuessCurFlag       			equ     	mGuessBuff+07H		;光标颜色flag,0为原色,80H为反色

mGuessRanNum1				equ		mGuessBuff+08H		;随机产生的四个数字
mGuessRanNum2				equ		mGuessBuff+09H
mGuessRanNum3				equ		mGuessBuff+0AH
mGuessRanNum4				equ		mGuessBuff+0BH

mGuessWholeRight			equ		mGuessBuff+0CH		;位置相同且数字相同
mGuessCharA				equ		mGuessBuff+0DH		;预留一位,存放’A‘		#65
mGuessHalfRight				equ		mGuessBuff+0EH		;位置不同但数字相同
mGuessCharB				equ		mGuessBuff+0FH		;预留一位,存放’B‘		#66

mGuessRanNum				equ		mGuessBuff+10H		;临时存放产生的随机数
mGuessPicLocY				equ		mGuessBuff+11H		;移动的小图片的坐标

mGuessLimTime				equ		mGuessBuff+12H		;游戏限定时间,180s
mTmpStr						equ		mGuessBuff+13H		
mGuessPaintTimer			equ		mGuessBuff+14H		;画图timer


GUESS_LEFT		equ		157		;size 0x000112(4261216) bytes
;******************************************************************************
;bank number :R
;==============================================================================
PSC_BANK	.SECTION			;Program Bank R	located	at 4100H(Rom 0 ORG),
;Program Bank R	located	at  F00100(Rom 1 ORG)
;==============================================================================
; Function:		GuessMain
; Input:   		none	
; Output:		none	
; Description:	Main entrance of Guess number game
;==============================================================================
GuessMain:
	CallJSR	Setting_ConfirmGamePwd
	bcc		?exit	
	
	lda		#<Game_GuessProc
	sta		<mzTmpAddrL
	lda		#>Game_GuessProc
	sta		<mzTmpAddrH

	stz		mzTmpRegA
	stz		mWMFlag	
;	lda		#LCD_WIDTH
;	sta		<mzTmpRegAL
;	lda		#LCD_HEIGHT
;	sta		<mzTmpRegAH
	
	CallAPI	SYS_CreateMsgProc,0
	
	CallAPI	SYS_MessageSchedule,0
?exit
	rts	
;==============================================================================
; Function:		GuessMainProc
; Input:   		none
 ;Output:		none
;Description:	main process 
;==============================================================================
GuessMainProc:
	lda		<mzAddrL
	pha
	lda		<mzAddrH
	pha
	
	lda			mMsgID
	cmp			#MSG_CREATE
	beq			?create_proc
	cmp			#MSG_PAINT
	beq			?paint_proc
	cmp			#MSG_KEYDOWN
	beq			?key_proc
	cmp			#MSG_TIMER
	beq			?timer_proc
	bra			?exit
	
?create_proc
;	jsr			GuessInit
;	jsr			GuessNumInit
;	CallAPI LCD_ClearScreen,0
;  jsr			GuessDrawFace
;	jsr			WordGHoriLine
;;	jsr			GuessCursor		;开始的时候初始化光标,可能没有必要
;	bra			?exit		
?paint_proc
	jsr			GuessInit
	jsr			GuessNumInit	
	CallAPI LCD_ClearScreen,0
  	jsr			GuessDrawFace
	jsr			GuessDrawName
	jsr			WordGHoriLine
	jsr			GuessDrawPic
	jsr			GuessCreatPaintTimer
;	jsr			GuessCursor
	bra			?exit	
?key_proc
	jsr			GuessKeyProc
	bra			?exit
?timer_proc
	jsr			GuessCursor
	jsr			GuessLimitTime
	jsr			GuessUserTimerPaint
	bra			?exit		

?exit
	pla
	sta			<mzAddrH
	pla
	sta			<mzAddrL
	rts
;==============================================================================
; Function:		GuessInit
; Input:   		none
 ;Output:		none
;Description:	 
;==============================================================================
GuessInit:
	stz		mGuessStep
	stz		mGuessStepNum
	stz		mGuessCurFlag
	stz		mGuessWholeRight
	stz		mGuessHalfRight
	stz		mGuessPaintTimer
	stz		mGuessPicLocY
	lda		#181
	sta		mGuessLimTime
	rts	
;==============================================================================
; Function:		GuessNumInit
; Input:   		none
 ;Output:		none
;Description:	 
;==============================================================================
GuessNumInit:
	phx
	ldx			#0
?next
	lda			<PRS
;	sta			mGuessRanNum
?loop
	cmp			#10
	bcc			?no_sbc
;	lda			mGuessRanNum
	sec
	sbc			#10
;	sta			mGuessRanNum	
	bra			?loop
?no_sbc
	sta			mGuessRanNum1,x
	cpx			#0
	beq			?first_ran
	bra			?next_ran
?first_ran
	inx
	bra			?next	
?next_ran	
	lda			mGuessRanNum1,x
;	cmp			mGuessRanNum1,x-1
	dex
	cmp			mGuessRanNum1,x
	beq			?re_ran
	bra			?no_re_ran
?re_ran
	inx
	bra			?next
?no_re_ran
	inx
	inx
	cpx			#4
	bne			?next			 	
	lda			mGuessRanNum1
	clc
	adc			#30H
	sta			mGuessRanNum1
	lda			mGuessRanNum2
	clc
	adc			#30H
	sta			mGuessRanNum2
	lda			mGuessRanNum3
	clc
	adc			#30H
	sta			mGuessRanNum3
	lda			mGuessRanNum4
	clc
	adc			#30H
	sta			mGuessRanNum4
	plx	
	rts		
;==============================================================================
; Function:		GuessGetWholeRight
; Input:   		none
 ;Output:		none
;Description:	 
;==============================================================================
GuessGetWholeRight:
	phx
	stz			mGuessWholeRight
	ldx			#0
?loop
	lda			mGuessDrawNum1,x
	cmp			mGuessRanNum1,x
	beq			?add
	bra			?no_add
?add	
	inc			mGuessWholeRight
?no_add
	inx
	cpx			#4
	bne			?loop
	lda			mGuessWholeRight
	clc
	adc			#30H
	sta			mGuessWholeRight	
	plx
	rts
;==============================================================================
; Function:		GuessGetHalfRight
; Input:   		none
 ;Output:		none
;Description:	 
;==============================================================================
GuessGetHalfRight:
	phx
	phy
	stz			mGuessHalfRight
	ldy			#0
?loop2
	ldx			#0
?loop
	lda			mGuessDrawNum1,x
	cmp			mGuessRanNum1,y
	beq			?add
	bra			?no_add
?add	
	inc			mGuessHalfRight
?no_add
	inx
	cpx			#4
	bne			?loop
	iny
	cpy			#4
	bne			?loop2
	lda			mGuessHalfRight
	clc
	adc			#30H
	sec
	sbc			mGuessWholeRight
	clc
	adc			#30H
	sta			mGuessHalfRight	
	sta			mGuessHalfRight
	ply
	plx
	rts					
;==============================================================================
; Function:		GuessDrawFace
; Input:   		none
 ;Output:		none
;Description:	 
;==============================================================================
GuessDrawFace:
	lda		#1
	sta		mDstLocY
	lda		#2
	sta		mDstLocX
	lda		#157
	sta		mDcHeight
	lda		#237
	sta		mDcWidth
	lda		#4
	sta		mGameMskRctWdth
	CallAPI	EAPI_Game,GAME_DrawMaskRect
	rts	
GuessDrawName:
	lda		#37
	sta		mDstLocX
	lda		#13
	sta		mDstLocY
	lda		#<GUESS_NAME
	sta		mzAddrL
	lda		#>GUESS_NAME
	sta		mzAddrH
	
	jsr		GuessDrawString
	
	rts
		
GuessDrawPic:
	lda		#35
	sta		mDstLocX
	lda		#75
	sta		mDstLocY
	ldx		#GUESS_LEFT
 	jsr		GuessDrawNFAImage 
 	rts

DRAW_NUM_POINT1:
	db	23H,32H,41H,50H
GuessRandomNum:
	phx
	ldx		#0
?loop	
	lda		DRAW_NUM_POINT1,x
	sta		mDstLocX
	lda		#120
	sta		mDstLocY
	lda		mGuessRanNum1,x
	sta		mCharCode1
	stz		mCharCode2
	jsr		GuessDrawChar
	inx
	cpx		#04
	bne		?loop		
	plx
	rts 	
;============================================================================== 
; Function:		GuessHoriLine ;
; Input:   		none	; 
 ;Output:		none	; 
;Description:	水平线
;==============================================================================
WordGHoriLine:
	lda		#31
	sta		mDstLocX
	lda		#47	
	sta		mDstLocY
	lda		#60
	sta		mDcWidth
	CallAPI LCD_DrawHoriLine,0
 
 	rts	
;============================================================================== 
; Function:		GuessKeyProc ;
; Input:   		none	; 
 ;Output:		none	; 
;Description:	
;==============================================================================
GuessKeyProc:

	lda		mMsgLPar
	cmp		#VK_ESC
	beq		?quit
	cmp		#VK_0
	beq		?num
	cmp		#VK_1
	beq		?num
	cmp		#VK_2
	beq		?num	
	cmp		#VK_3
	beq		?num
	cmp		#VK_4
	beq		?num
	cmp		#VK_5
	beq		?num
	cmp		#VK_6
	beq		?num
	cmp		#VK_7
	beq		?num
	cmp		#VK_8
	beq		?num
	cmp		#VK_9
	beq		?num
	cmp		#VK_X
	beq		?right_ans
	bra		?exit2
?quit
	lda		#MSG_QUIT
	sta		mMsgID
	CallAPI		SYS_PostMessage,0
?right_ans
	jsr		GuessRandomNum
	bra		?exit2
?num
	sta		mGuessDrawNum

	lda  	mGuessStep
	cmp		#03
	beq		?four
 	cmp		#00
 	beq		?one
	cmp		#01
	beq		?two
	cmp		#02
	beq		?three
?four
	jsr		WordCloseCursor	
	jsr		WordOpenCursor
	lda		mGuessDrawNum
	sta		mGuessDrawNum4
	cmp		mGuessDrawNum1
	beq		?exit

⌨️ 快捷键说明

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