1
0
mirror of https://github.com/fumiama/c64-snake.git synced 2026-06-21 19:48:10 +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 eat
sta s + 1 ; 初始化分数为0 sta s + 1 ; 初始化分数为0
jsr printscore ; 打印分数 jsr printscore ; 打印分数
lda #csnk jsr move_init
sta field + 11*40 + 19 ; 初始化蛇位置 lda #2
lda #<[field + 11*40 + 19]
ldx #>[field + 11*40 + 19]
sta shead
stx shead+1
lda #1
sta c ; 初始化蛇长为1 sta c ; 初始化蛇长为1
jsr printfield ; 打印蛇,包括边框 jsr printfield ; 打印蛇,包括边框
jsr printhint ; 打印开始提示 jsr printhint ; 打印开始提示

207
move.asm
View File

@@ -1,86 +1,143 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; move 根据d中的值实现蛇的移动 ; move 根据d中的值实现蛇的移动
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
move:
.scope .scope
;lda #1 ;演示用 .data zp
.space _stail 2 ; 蛇尾指针
.space _tmp 1
.text
move:
;lda #0 ;演示用
;sta eat ;sta eat
lda eat ;eat判断,进入两种移动模式 lda eat ;eat判断
;bne +++++ ;进入模式一:四种移动模式(吃到)(头动,尾不动) bne _head_move ;吃到食物直接进入模式一head move否则先执行tail move
lda d 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 ;测试用 ;lda #go_l ;测试用
cmp #go_d `_m_judge_dir_head go_d, 40, _propergate_head
bne + `_m_judge_dir_head go_r, 1, _propergate_head
clc `_m_judge_dir_head go_l, 1, _borrow_head
lda shead ;new head `_m_judge_dir_head go_u, 40, _borrow_head
adc #40
sta shead
lda shead+1
adc #0
sta shead+1
ldy #0 ;head move down
lda #csnk
sta (shead),y
rts rts
* cmp #go_r
bne + move_init:
clc
lda shead ;new head
adc #1
sta shead
lda shead+1
adc #0
sta shead+1
ldy #0 ;head move right
lda #csnk 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 rts
* cmp #go_l
bne + _propergate_tail:
clc `_m_propergate _stail
lda shead ;new head
sec _propergate_head:
sbc #1 `_m_propergate shead
sta shead
lda shead+1 ;;;;;;;;;;;;;;;;;;;;;;;;
sbc #0 ; 减法借位入参为_tmp
sta shead+1 ;;;;;;;;;;;;;;;;;;;;;;;;
ldy #0 ;head move left _borrow_ptr:
lda #csnk `_m_borrow _ptr
sta (shead),y
_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 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
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 .scend
;;;;;;;;;;;;;;;;;;;;;;;;
; 加法进位入参为a
;;;;;;;;;;;;;;;;;;;;;;;;
.macro _m_propergate
clc
adc _1
sta _1
bcc _end
inc _1+1
_end:
rts
.macend
;;;;;;;;;;;;;;;;;;;;;;;;
; _tmp:减数 _1:被减数
;;;;;;;;;;;;;;;;;;;;;;;;
.macro _m_borrow
lda _1
sec
sbc _tmp
sta _1
bcs _end
dec _1+1
_end:
rts
.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
_next:
.macend

BIN
snake.prg

Binary file not shown.