📄 guess.asm
字号:
;******************************************************************************
;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 + -