📄 showhand.asm
字号:
ShowAllCard:
stz <CardIndex
lda <CoverCard
?1: beq ?2
lsr
bcc ?3
pha
bbs7 <WinFlag,?4
PlayMelody SpcSound
?4: jsr ShowCard
bbs7 <Winflag,?5
jsr Delay250ms
?5: bbs2 <IENAB,?5
pla
?3: inc <CardIndex
bra ?1
?2: rts
ShowIndexHold:
ldx <CardIndex
lda <CoverCard
?1: lsr
dex
bpl ?1
bcc ?2
jsr ShowHoldBlank
rts
?2: jsr ShowHoldW
rts
ShowHoldW:
jsr ShowHoldLocate
loprintimage HoldWhite
rts
ShowHoldBlank:
jsr ShowHoldLocate
LoClrImage HoldWhite
rts
ShowHoldLocate:
lda #14+8 ;;14+4
sta <oy
lda #8
sta <ox
lda <CardIndex
?1: dec
bmi ?2
pha
clc
lda <ox
adc #30
sta <ox
pla
bra ?1
?2: rts
GetCardValue:
ldx #0 ;; ┓
lda <CoverCard ;; 依序比较5张牌
?clrcard: ;; 如为盖牌,则重新
lsr ;; 给予新值
bcc ?clrCardValue ;;
pha ;;
lda #0ffh ;;
sta <Card1,x ;;
pla ;;
?clrCardValue: ;;
inx ;;
cpx #5 ;;
bne ?Clrcard ;; ┛
stz <CardIndex
lda <CoverCard
sta <CardTemp ;; 保存covercard的值
?0: lda <CardTemp
beq ?2 ;; 如果covervard=0 (即无盖牌) 则返回
lsr <CardTemp
bcc ?1
?01:
LNxSeed ;;读取乱数值
lda <Seed ;;
adc <ShowHandRand
pha
and #00001111b ;;牌点小於13时,重新取牌值
cmp #13 ;;
pla
bcs ?01 ;;
;; lda <Seed ;;
and #00111111b ;;将牌值牌色存入卡片
ldx <CardIndex ;;
sta <Card1,x ;;
phx
?3: dex
bmi ?5
cmp <Card1,x ;;与前几张牌比较
beq ?02 ;;如果相同则重新取牌
bra ?3
?02: plx
bra ?01
?5:
plx
?4: inx ;;
cpx #5 ;;是否与後几张牌相同
beq ?1 ;;
cmp <Card1,x ;;
beq ?01 ;;
bra ?4
?1:
inc <CardIndex
bra ?0
?2: rts
ShowBet:
lda #3+4
sta <oy
lda #89+40
sta <ox
lda <Bet
and #11110000b
beq ?HideBetH
lsr
lsr
lsr
lsr
tax
LDrawNum
bra ?ShowBetL
?HideBetH:
lda <ox
sta <lcd_ox
lda <oy
sta <lcd_oy
LClrNum
?ShowBetL:
lda #97+40
sta <ox
lda <Bet
and #00001111b
tax
LDrawNum
rts
ShowScore:
lda #3+4
sta <oy
lda #1
sta <ox
lda <SHScoreH
and #11110000b
bne ?1
lda <ox
sta <lcd_ox
lda <oy
sta <lcd_oy
LClrNum
lda #9
sta <ox
lda <SHScoreH
bne ?2
lda <ox
sta <lcd_ox
lda <oy
sta <lcd_oy
LClrNum
lda #17
sta <ox
lda <ShScoreL
and #11110000b
bne ?3
lda <ox
sta <lcd_ox
lda <oy
sta <lcd_oy
LClrNum
bra ?4
?1: lsr
lsr
lsr
lsr
tax
LDrawNum
lda #9
sta <ox
lda <SHScoreH
and #00001111b
?2: tax
LDrawNum
lda #17
sta <ox
lda <SHScoreL
?3: lsr
lsr
lsr
lsr
tax
LDrawNum
?4: lda #25
sta <ox
lda <ShScoreL
and #00001111b
tax
LDrawNum
rts
ScoreSbcBet:
sed
sec
lda <SHScoreL
sbc <Bet
sta <SHScoreL
lda <SHScoreH
sbc #0
sta <SHScoreH
cld
rts
AddBet: lda <Bet
cmp <SHScoreL
bne ?1
lda <SHScoreh
bne ?1
lda #5
sta <Bet
rts
?1: sed
clc
lda #5
adc <Bet
cmp #25H
bne ?2
lda #5
?2: sta <Bet
cld
rts
SubBet: lda <Bet
sed
sec
sbc #5
bne ?2
lda <SHScoreH
bne ?3
lda <SHScoreL
cmp #20h
bcs ?3
lda <SHScoreL
bra ?2
?3: lda #20h
?2: sta <Bet
cld
rts
SHJudgeScore:
stz <CoverCard
stz <ScoreStatus
stz <scoretime
jsr SHCmpStraight
jsr SHCmpFlush
jsr SHCmpPair
smb6 <Winner
stz <ScoreTime
lda ScoreStatus
ldx #0
?0: cmp SHStatusTable,x
beq ?1
inx
cpx #8
bcc ?0
PlayMelody LostSong
bra ?2
?1: rmb6 <Winner
txa
inc
sta <scoretime
PlayMelody WinSong
?2: smb7 <Winflag
rmb6 <SHCoverStatus
rts
SHCmpStraight:
stz <CardIndex
ldx #0
?1: lda <Card1,x ;; ┓
and #00001111b ;; Card 存至 CardTemp
sta <CardTemp1,x ;;
inx ;;
cpx #5 ;;
bne ?1 ;; ┛
ldy #3 ;; ┓
?2: ldx #0 ;;
?3: lda <CardTemp1,x ;; CardTemp排序
cmp <CardTemp1+1,x ;;
bcs ?4 ;;
pha ;; CardTemp1 >CardTemp5
lda <CardTemp1+1,x ;; 大 小
sta <CardTemp1,x ;;
pla ;;
sta <CardTemp+1,x ;;
?4: inx ;;
cpx #4 ;;
bne ?3 ;;
dey ;;
bpl ?2 ;; ┛
?6: ldx #0
?5: sec
lda <CardTemp1,x
sbc <CardTemp1+1,x
cmp #1
bne ?NoStraight
inx
cpx #4
bne ?5
smb7 <Straight
lda #00011111b
sta <CoverCard
?NoStraight:
cpx #0
bne ?StraightRet
lda <CardTemp1
cmp #12
bne ?StraightRet
lda #4
sta <CardTemp1
bra ?6
?StraightRet:
rts
SHCmpFlush:
stz <CardIndex
ldx #0
?1: lda <Card1,x
and #00110000b
sta <CardTemp1,x
inx
cpx #5
bne ?1
ldx #0
?2: lda <CardTemp1,x
cmp <CardTemp1+1,x
bne ?3
inx
cpx #4
bne ?2
smb6 <Flush
lda #00011111b
sta <CoverCard
?3: rts
SHCmpPair:
ldx #0
?1: lda <Card1,x
and #00001111b
sta <Cardtemp1,x
inx
cpx #5
bne ?1
stz <SHPairNum
stz <CardIndex
?2: ldx <CardIndex
lda <CardTemp1,x
?3:
cmp <CardTemp1+1,x
bne ?5
pha
phx
sta <SHPairValue
inc <SHPairNum
lda ValueTran+1,x
ora <CoverCard
sta <CoverCard
ldx <CardIndex
lda ValueTran,x
ora <CoverCard
sta <CoverCard
plx
pla
?5: inx
cpx #4
bne ?3
lda <SHPairNum
beq ?6
cmp #3
beq ?7
cmp #2
beq ?8
cmp #1
beq ?9
?6: inc <CardIndex
lda <CardIndex
cmp #4
bne ?61
bbr2 <OnePair,?62
bbs4 <ThreeOfKind,?62
lda <SHPairValue
cmp #9
bcs ?62
rmb2 <OnePair
?62:
rts
?61: ldx <CardIndex
lda ValueTran,x
and <CoverCard
beq ?2
bra ?6
?7: smb5 <FourOfKind
rts
?8: smb4 <ThreeOfKind
stz <SHPairNum
bra ?6
?9: bbs2 <OnePair,?10
smb2 <OnePair
stz <ShPairNum
bra ?6
?10: rmb2 <OnePair
smb3 <TwoPair
rts
SShowCardBlank:
lda #31+4
sta <oy
;; lda #02
;; sta <ox
?draw_blank_pai:
loprintimage blank_pai
;; clc
;; lda <ox
;; adc #30
;; sta <ox
;; cmp #150
;; bcc ?draw_blank_pai
rts
ShowHandHalfSec:
inc <ShowHandRand
bbs6 <FlashOpt,?K1
jmp jmplmainu
?K1:
lda #00000001b
eor <FlashFlag
sta <FlashFlag
bbr7 <SHBetStatus,?notbetstatus
?showbet:
bbs0 <FlashFlag,?showbet1
?hidebet:
lda #56+32
sta <ox
lda #0+4
sta <oy
ldx #>ShowHandBetTitleMask
ldy #<ShowHandBetTitleMask
LDrawText
jmp jmplmainu
?showbet1:
jsr ShowBetTitle
jmp jmplmainu
?notbetstatus:
bbr6 <SHCoverStatus,?notCoverStatus
bbs0 <FlashFlag,?hideCard1
jsr ShowCard
jmp jmplmainu
?HideCard1:
jsr HideCard
jmp jmplmainu
?notCoverStatus:
lda #64
sta <ox
lda #0+4
sta <oy
bbs0 <FlashFlag,?HideWinTitle
?ShowWintitle:
bbs6 <Winner,?ShowCry
loprintimage ShowHandSmile
jsr ShowAllCard
jmp jmplmainu
?ShowCry:
loprintimage ShowHandCry
jmp jmplmainu
?HideWinTitle:
LoClrImage ShowHandCry
bbs6 <Winner,?ret
jsr HideAllCard
?ret:
jmplmainu:
lda <keyno
cmp #EnterKey
beq ?dsfdsif
cmp #RightKey
beq ?dsfdsif
rmb3 <eflag
?dsfdsif:
Lmainu
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -