📄 dicchess.asm
字号:
BCS ?5 ;;jmp if Enemy_Number>6
SMB2 <Enemy_Space_Num ;;ORA #00000100B TO Enemy_Space_Num
?5: ASL ;;Asl Enemy_Number 4 times
ASL
ASL
ASL
ORA <Enemy_Space_Num ;;Ora Enemy_Number to Enemy_Space_Num
STA <Cpu_Space_Num ;; store to Cpu_Space_Num
JSR GetMatchValue ;;call GetMatchValue
CLC
LDA <Cpu_Number ;;Add Cup_Number to CmpValueEnemy
ADC <CmpValueEnemy
BCC ?6 ;;if carry then set to 255
LDA #255
?6: STA <CmpValueEnemy
?7: RTS
GetMatchValue:
LDX #0
?1: LDA MatchValue,X
INX
CMP <Cpu_Space_Num
BEQ ?2
INX
CPX #88
BNE ?1
LDA #3
BRA ?21
?2: LDA MatchValue,X
?21: STA <Cpu_Number
RTS
;;---------------------------------------
;; Get Best Position
;;---------------------------------------
GetBestPosition:
LDA <Level
CMP #0
BNE ?0
JMP CompareBest
?0: LDA <CmpValueCpu
CMP #255
BNE ?2
?1: STA <BestValue
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
RMB7 <Locate_Value
RTS
?2: LDA <BestValue
CMP #255
BNE ?3
RTS
?3: LDA <CmpValueEnemy
CMP #255
BNE ?4
STA <BestValue
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
SMB7 <Locate_Value
RTS
?4: LDA <Level
CMP #1
BNE ?40
JMP CompareBest
?40: LDA <CmpValueCpu
CMP #54
BCC ?6
BBS7 <Locate_Value,?41
CMP <BestValue
BCC ?5
?41: STA <BestValue
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
RMB7 <Locate_Value
?5: RTS
?6: LDA <BestValue
CMP #54
BCC ?61
BBR7 <Locate_Value,?5
?61: LDA <CmpValueEnemy
CMP #54
BCC ?8
CMP <BestValue
BCC ?7
STA <BestValue
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
SMB7 <Locate_Value
?7: RTS
?8:
LDA <BestValue
CMP #54
BCS ?7
LDA <Level
CMP #2
BNE ?80
JMP CompareBest
?80: LDA <CmpValueCpu
CMP #42
BCC ?9
BBS7 <Locate_Value,?81
CMP <BestValue
BCC ?82
?81:
STA <BestValue
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
RMB7 <Locate_Value
?82: RTS
?9:
LDA <BestValue
CMP #42
BCC Compare
BBR7 <Locate_Value,?82
Compare:LDA <CmpValueEnemy
CMP #42
BCC ?2
CMP <BestValue
BCC ?1
STA <BestValue
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
SMB7 <Locate_Value
?1: RTS
?2:
LDA <BestValue
CMP #42
BCS ?1
LDA <Level
CMP #3
BEQ CompareBest
LDA <CmpValueCpu
CMP #21
BCC ?5
LDA <BestValue
CMP #21
BCS ?21
LDA <CmpValueCpu
STA <BestValue
LDA <CmpValueEnemy
BRA ?3
?21:
LDA <CmpValueEnemy
BBS7 <Locate_Value,?3
CMP <BestValue2
BCC ?4
?3:
STA <BestValue2
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
RMB7 <Locate_Value
?4: RTS
?5: LDA <BestValue
CMP #21
BCC ?6
BBR7 <Locate_Value,?4
?6: LDA <CmpValueEnemy
CMP #21
BCC compare2
LDA <BestValue
CMP #21
BCS ?61
LDA <CmpValueEnemy
STA <BestValue
LDA <CmpValueCpu
BRA ?62
?61: LDA <CmpValueCpu
CMP <BestValue2
BCC ?7
?62: STA <BestValue2
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
SMB7 <Locate_Value
?7:
CMPRET: lda <BestValue
bne ?cmr1
lda #1
sta <BestValue
lda <Cursor_X
sta <BestPositionX
lda <Cursor_Y
sta <BestPositionY
smb7 <Locate_Value
?cmr1:
RTS
compare2:
compare1:
LDA <BestValue
CMP #21
BCS CMPRET
CompareBest:
LDA <CmpValueCpu
CMP <BestValue
BCC ?1
BEQ ?3
?5: STA <BestValue
LDA <CmpValueEnemy
STA <BestValue2
RMB7 <Locate_Value
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
BRA ?1
?3: LDA <CmpValueEnemy
CMP <BestValue2
BCC ?1
LDA <CmpValueCpu
BRA ?5
?1:
LDA <BestValue
CMP <CmpValueEnemy
BCS ?2
?6: BBS7 <Locate_Value,?60
LDA <CmpValueCpu
CMP #54
BCS ?4
?60: LDA <CmpValueEnemy
STA <BestValue
LDA <CmpValueCpu
STA <BestValue2
?61: SMB7 <Locate_Value
LDA <Cursor_X
STA <BestPositionX
LDA <Cursor_Y
STA <BestPositionY
?4: RTS
?2: BNE ?4
BBR7 <Locate_Value,?4
LDA <CmpValueCpu
CMP <BestValue2
BCC ?4
BRA ?6
;;[S]----------------------------------[S]
;; Show 5 Point Chess
;; WIN
;;[S}----------------------------------[S]
Show5Finish:
LDA <BestPositionX
STA <Locate_X
LDA <BestPositionY
STA <Locate_Y
JSR Get_Locate_Value
LDA <Locate_Value
AND #00000011B
STA <Judge_Flag
SMB1 <Locate_Value
JSR PrintLocate
BBR0 <WinFlag,?3 ;;jmp if not horizonal
;;----------------------------------------------------------
?0: DEC <Locate_X
BMI ?1
JSR Get_Locate_Value
BBS1 <Locate_Value,?1
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?1
JSR PrintLocate
BRA ?0
?1: LDA <BestPositionX
STA <Locate_X
?2: INC <Locate_X
BBS4 <Locate_X,?3
JSR Get_Locate_Value
BBS1 <Locate_Value,?3
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?3
JSR PrintLocate
BRA ?2
;;-----------------------------------------------------
?3: BBR1 <WinFlag,?7
LDA <BestPositionX
STA <Locate_X
LDA <BestPositionY
STA <Locate_Y
?4: DEC <Locate_Y
BMI ?5
JSR Get_Locate_Value
BBS1 <Locate_Value,?5
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?5
SMB1 <Locate_Value
JSR PrintLocate
BRA ?4
?5: LDA <BestPositionY
STA <Locate_Y
?6: INC <Locate_Y
BBS4 <Locate_Y,?7
JSR Get_Locate_Value
BBS1 <Locate_Value,?7
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?7
SMB1 <Locate_Value
JSR PrintLocate
BRA ?6
;;------------------------------------------
?7: BBR2 <WinFlag,?11
LDA <BestPositionX
STA <Locate_X
LDA <BestPositionY
STA <Locate_Y
?8: DEC <Locate_X
BMI ?9
DEC <Locate_Y
BMI ?9
JSR Get_Locate_Value
BBS1 <Locate_Value,?9
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?9
SMB1 <Locate_Value
JSR PrintLocate
BRA ?8
?9: LDA <BestPositionY
STA <Locate_Y
LDA <BestPositionX
STA <Locate_X
?10: INC <Locate_Y
BBS4 <Locate_Y,?11
INC <Locate_X
BBS4 <Locate_X,?11
JSR Get_Locate_Value
BBS1 <Locate_Value,?11
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?11
SMB1 <Locate_Value
JSR PrintLocate
BRA ?10
;;----------------------------------------------------
?11: BBR3 <WinFlag,?15
LDA <BestPositionX
STA <Locate_X
LDA <BestPositionY
STA <Locate_Y
?12: DEC <Locate_X
BMI ?13
INC <Locate_Y
BBS4 <Locate_Y,?13
JSR Get_Locate_Value
BBS1 <Locate_Value,?13
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?13
SMB1 <Locate_Value
JSR PrintLocate
BRA ?12
?13: LDA <BestPositionY
STA <Locate_Y
LDA <BestPositionX
STA <Locate_X
?14: DEC <Locate_Y
BMI ?15
INC <Locate_X
BBS4 <Locate_X,?15
JSR Get_Locate_Value
BBS1 <Locate_Value,?15
LDA <Locate_Value
AND #00000011B
CMP <Judge_Flag
BNE ?15
SMB1 <Locate_Value
JSR PrintLocate
BRA ?14
?15: RTS
PrintLocate:
lda <Locate_X
ina
sec
sbc <DispCenterX
bcc ?noshow
pha
cmp #9
beq ?1
bcs ?noshow1
?5: lda <Locate_Y
ina
sec
sbc <DispCenterY
bcc ?noshow1
cmp #7
beq ?2
bcs ?noshow1
?7: tax
lda dlocate,x
sta <oy
plx
lda dlocate,x
sta <ox
bbr0 <FlashFlag,?3
loprintimage Cross
rts
?3: bbs0 <Judge_Flag,?4
loprintimage MeChess
rts
?4: loprintimage CpuChess
rts
?1: lda <DispCenterX
cmp #8
beq ?noshow1
bra ?5
?2: pha
lda <DispCenterY
cmp #10
beq ?6
pla
bra ?7
?6: pla
?noshow1:
pla
?noshow:rts
ShowUp:
stz <ox
stz <oy
loprintimage UpBorder
rts
ShowDown:
stz <ox
;;lda #58 ;;#42
;;lda #56 ;;#42
lda #72 ;;zjw
sta <oy
loprintimage DownBorder
rts
ShowLeft:
stz <ox
stz <oy
loprintimage fiLeftBorder
rts
ShowRight:
;;lda #74
lda #72
sta <ox
stz <oy
loprintimage fiRightBorder
rts
ShowUpLeft:
stz <ox
stz <oy
loprintimage UpLeft
rts
ShowDownLeft:
stz <ox
;;lda #58
lda #56+8+8
sta <oy
loprintimage DownLeft
rts
ShowUpRight:
stz <oy
lda #74 ;;#54
sta <ox
loprintimage UpRight
rts
ShowDownRight:
lda #74 ;;#54
sta <ox
;;lda #58 ;;#42
lda #56+16
sta <oy
loprintimage DownRight
rts
IncStep:sed
clc
lda <StepDig1
adc #1
sta <StepDig1
lda <StepDig2
adc #0
sta <StepDig2
cld
rts
ShowStep:
lda #16 ;;1
sta <oy
lda #102
sta <ox
ldx #>StepPrompt
ldy #<StepPrompt
;; jsr DrawText
LDrawText
lda #48
sta <oy
lda #102+4
sta <ox
ldx <StepDig2
;; beq ?1
LA2XY
tya
tax
LDrawChar
ldx <StepDig1
LA2XY
?3: phy
LDrawChar
plx
LDrawChar
rts
; ***************************************************************************
ShowWin:
LDA #88
STA <ox
LDA #16
STA <oy
JSR ShowBlankStr
LDA #88
STA <ox
LDA #48
STA <oy
JSR ShowBlankStr
bbs0 <EquFlag,?4
bbr6 <WinFlag,?1
ldx #>LostPrompt
ldy #<LostPrompt
bra ?2
?1:
ldx #>WinPrompt
ldy #<WinPrompt
BRA ?2
?4:
ldx #>EquPrompt
ldy #<EquPrompt
?2:
lda #88
sta <ox
lda #32
sta <oy
LDrawText
RTS
; ***************************************************************************
ShowBlankStr:
LDX #>EmptyPrompt
LDY #<EmptyPrompt
LDrawText
RTS
; ***************************************************************************
;;=====================================================
;; 堵フ囱笴栏祘Α跋
;;
;;=====================================================
Bw_help:
db '用[',0f8h,0d0h,']`[',0f8h,0d1h,']`[',0f8h,0d2h,']`[',0f8h,0b9h,']移动到想放棋子的地方.',0dh
db '[输入]做下子工作.',0dh
db '自己棋子将对方棋子夹住,无论直,横或斜线,包夹住的棋子'
db '成为自已棋子.',0dh
db '轮流下子,若无子可下时,下棋者必须这一步让对方走.',0dh
db '当双方无子可下时,游戏结束,棋子多者为赢家.',0dh
db '[返回]退出游戏.',0
BwStart:
lda <PRRh
sta GamePRRh
lda <PRRl
sta GamePRRl
lda #PsHelp
sta <HelpOffset
lda #>Bw_help
sta <HelpTextPH
lda #<Bw_help
sta <HelpTextPL
lda #<BwStart-1
sta HelpRtPrc
lda #>BwStart-1
sta HelpRtPrc+1
stz <Level ;; 秈
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -