mirror of
https://github.com/fumiama/c64-snake.git
synced 2026-07-02 09:50:33 +08:00
5
main.asm
5
main.asm
@@ -46,9 +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 #1
|
|
||||||
sta c ; 初始化蛇长为1
|
sta c ; 初始化蛇长为1
|
||||||
jsr printfield ; 打印蛇,包括边框
|
jsr printfield ; 打印蛇,包括边框
|
||||||
jsr printhint ; 打印开始提示
|
jsr printhint ; 打印开始提示
|
||||||
|
|||||||
138
move.asm
138
move.asm
@@ -1,7 +1,143 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; move 根据d中的值实现蛇的移动
|
; move 根据d中的值实现蛇的移动
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
move:
|
|
||||||
.scope
|
.scope
|
||||||
|
.data zp
|
||||||
|
.space _stail 2 ; 蛇尾指针
|
||||||
|
.space _tmp 1
|
||||||
|
.text
|
||||||
|
move:
|
||||||
|
;lda #0 ;演示用
|
||||||
|
;sta eat
|
||||||
|
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 ;测试用
|
||||||
|
`_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
|
||||||
|
|
||||||
|
move_init:
|
||||||
|
lda #csnk
|
||||||
|
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
|
||||||
|
|
||||||
|
_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
|
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
|
||||||
Reference in New Issue
Block a user