1
0
mirror of https://github.com/fumiama/c64-snake.git synced 2026-06-05 00:32:39 +08:00

添加move

This commit is contained in:
laffey98
2021-04-13 19:09:55 +08:00
parent 18826c58b6
commit 20576ee7f8
3 changed files with 132 additions and 80 deletions

View File

@@ -46,13 +46,8 @@ main:
sta eat
sta s + 1 ; 初始化分数为0
jsr printscore ; 打印分数
lda #csnk
sta field + 11*40 + 19 ; 初始化蛇位置
lda #<[field + 11*40 + 19]
ldx #>[field + 11*40 + 19]
sta shead
stx shead+1
lda #1
jsr move_init
lda #2
sta c ; 初始化蛇长为1
jsr printfield ; 打印蛇,包括边框
jsr printhint ; 打印开始提示

203
move.asm
View File

@@ -1,86 +1,143 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; move 根据d中的值实现蛇的移动
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
move:
.scope
;lda #1 ;演示用
.data zp
.space _stail 2 ; 蛇尾指针
.space _tmp 1
.text
move:
;lda #0 ;演示用
;sta eat
lda eat ;eat判断,进入两种移动模式
;bne +++++ ;进入模式一:四种移动模式(吃到)(头动,尾不动)
lda d
lda eat ;eat判断
bne _head_move ;吃到食物直接进入模式一head move否则先执行tail move
lda #csps
ldy #0
sta (_stail),y ;tail move
ldy #40
lda (_stail),y
cmp #csnk ;down search
bne +
lda #40
jsr _propergate_tail
* ldy #1
lda (_stail),y
cmp #csnk ;right search
bne +
lda #1
jsr _propergate_tail
* jsr _copy_to_ptr
lda #40
sta _tmp
jsr _borrow_ptr
ldy #0
lda (_ptr),y
cmp #csnk ;up search
bne +
jsr _copy_to_tail
* jsr _copy_to_ptr
lda #1
sta _tmp
jsr _borrow_ptr
lda (_ptr),y
cmp #csnk ;left search
bne _head_move
jsr _copy_to_tail
;;;;;;;;;;;;;;;;;;;;;;;;;
; head move
;;;;;;;;;;;;;;;;;;;;;;;;;
_head_move:
;lda #go_l ;测试用
cmp #go_d
bne +
clc
lda shead ;new head
adc #40
sta shead
lda shead+1
adc #0
sta shead+1
ldy #0 ;head move down
lda #csnk
sta (shead),y
`_m_judge_dir_head go_d, 40, _propergate_head
`_m_judge_dir_head go_r, 1, _propergate_head
`_m_judge_dir_head go_l, 1, _borrow_head
`_m_judge_dir_head go_u, 40, _borrow_head
rts
* cmp #go_r
bne +
clc
lda shead ;new head
adc #1
sta shead
lda shead+1
adc #0
sta shead+1
ldy #0 ;head move right
move_init:
lda #csnk
sta (shead),y
sta field + 10*40 + 19 ; 初始化蛇位置
sta field + 11*40 + 19 ; 初始化蛇位置
lda #<[field + 11*40 + 19] ;初始化蛇头
ldx #>[field + 11*40 + 19]
sta shead
stx shead+1
lda #<[field + 10*40 + 19] ;初始化蛇尾
ldx #>[field + 10*40 + 19]
sta _stail
stx _stail+1
rts
* cmp #go_l
bne +
_propergate_tail:
`_m_propergate _stail
_propergate_head:
`_m_propergate shead
;;;;;;;;;;;;;;;;;;;;;;;;
; 减法借位入参为_tmp
;;;;;;;;;;;;;;;;;;;;;;;;
_borrow_ptr:
`_m_borrow _ptr
_borrow_head:
`_m_borrow shead
_copy_to_ptr:
lda _stail
sta _ptr
lda _stail+1
sta _ptr+1
rts
_copy_to_tail:
lda _ptr
sta _stail
lda _ptr+1
sta _stail+1
rts
.scend
;;;;;;;;;;;;;;;;;;;;;;;;
; 加法进位入参为a
;;;;;;;;;;;;;;;;;;;;;;;;
.macro _m_propergate
clc
lda shead ;new head
adc _1
sta _1
bcc _end
inc _1+1
_end:
rts
.macend
;;;;;;;;;;;;;;;;;;;;;;;;
; _tmp:减数 _1:被减数
;;;;;;;;;;;;;;;;;;;;;;;;
.macro _m_borrow
lda _1
sec
sbc #1
sta shead
lda shead+1
sbc #0
sta shead+1
ldy #0 ;head move left
lda #csnk
sta (shead),y
sbc _tmp
sta _1
bcs _end
dec _1+1
_end:
rts
* cmp #go_u
bne +
clc
lda shead ;new head
sec
sbc #40
sta shead
lda shead+1
sbc #0
sta shead+1
ldy #0 ;head move up
.macend
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; _1:方向 _2:进位/借位数 _3:进位/借位函数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.macro _m_judge_dir_head
lda d
cmp #_1
bne _next
lda #_2
sta _tmp
jsr _3
lda #csnk
sta (shead),y
* rts
;模式二:四种移动模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; lda d
; lda #go_d ;实验用
; cmp go_d
; beq +
; lda #csps
; ldy #0
; sta (shead),y
; lda #csnk
; ldy #40
; sta (shead),y
; clc
; lda shead
; adc #40
; sta shead
; lda shead+1
; adc #0
; sta shead+1
;* rts
.scend
sta (shead),y
rts
_next:
.macend

BIN
snake.prg

Binary file not shown.