mirror of
https://github.com/fumiama/c64-snake.git
synced 2026-06-05 00:32:39 +08:00
扩展data段,完成食物生成
This commit is contained in:
84
addfood.asm
84
addfood.asm
@@ -3,5 +3,87 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
addfood:
|
addfood:
|
||||||
.scope
|
.scope
|
||||||
|
.data
|
||||||
|
.space seed 6
|
||||||
|
.text
|
||||||
|
lda #<field
|
||||||
|
sta _ptr
|
||||||
|
lda #>field
|
||||||
|
sta _ptr + 1
|
||||||
|
|
||||||
|
`propagate seed, $c3
|
||||||
|
`propagate seed+1, $9e
|
||||||
|
`propagate seed+2, $26
|
||||||
|
`propagate seed, seed+1
|
||||||
|
`propagate seed+1, seed+2
|
||||||
|
`propagate seed+2, seed+3
|
||||||
|
|
||||||
|
lda seed + 5
|
||||||
|
ldx seed + 4
|
||||||
|
sta seed + 4
|
||||||
|
lda seed + 3
|
||||||
|
stx seed + 3
|
||||||
|
ldx seed + 2
|
||||||
|
sta seed + 2
|
||||||
|
lda seed + 1
|
||||||
|
stx seed + 1
|
||||||
|
ldx seed
|
||||||
|
sta seed
|
||||||
|
stx seed + 5
|
||||||
|
|
||||||
|
lda seed
|
||||||
|
tay
|
||||||
|
lda seed + 1
|
||||||
|
and #$03
|
||||||
|
beq +
|
||||||
|
clc
|
||||||
|
adc _ptr + 1
|
||||||
|
sta _ptr + 1
|
||||||
|
* cmp #$03
|
||||||
|
bne +
|
||||||
|
tya
|
||||||
|
cmp #$c0
|
||||||
|
bmi +
|
||||||
|
sbc #$c0
|
||||||
|
tay
|
||||||
|
* lda (_ptr), y
|
||||||
|
iny
|
||||||
|
cmp #csnk
|
||||||
|
beq -
|
||||||
|
cmp #cblk
|
||||||
|
beq -
|
||||||
|
lda #csnk
|
||||||
|
dey
|
||||||
|
sta (_ptr), y
|
||||||
rts
|
rts
|
||||||
.scend
|
.scend
|
||||||
|
|
||||||
|
srand: ; 做随机种子的初始化
|
||||||
|
.scope
|
||||||
|
jsr rdtim
|
||||||
|
sta seed + 5
|
||||||
|
stx seed + 3
|
||||||
|
sty seed + 1
|
||||||
|
rts
|
||||||
|
.scend
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; propagate 进位
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
.macro propagate
|
||||||
|
lda _1
|
||||||
|
clc
|
||||||
|
adc _2
|
||||||
|
bcc _end
|
||||||
|
inc _1 + 1
|
||||||
|
bne _end
|
||||||
|
inc _1 + 2
|
||||||
|
bne _end
|
||||||
|
inc _1 + 3
|
||||||
|
bne _end
|
||||||
|
inc _1 + 4
|
||||||
|
bne _end
|
||||||
|
inc _1 + 5
|
||||||
|
_end:
|
||||||
|
sta _1
|
||||||
|
.macend
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
; DELAY routine. Takes values from the Accumulator and pauses
|
; DELAY routine. Takes values from the Accumulator and pauses
|
||||||
; for that many jiffies (1/60th of a second).
|
; for that many jiffies (1/60th of a second).
|
||||||
.scope
|
.scope
|
||||||
.data zp
|
.data
|
||||||
.space _tmp 1
|
.space _tmp 1
|
||||||
.space _target 1
|
.space _target 1
|
||||||
.text
|
.text
|
||||||
|
|||||||
9
head.asm
9
head.asm
@@ -17,10 +17,11 @@
|
|||||||
.space d 1 ; 方向 值定义如上
|
.space d 1 ; 方向 值定义如上
|
||||||
.space c 1 ; 🐍长度 最大255 最小0
|
.space c 1 ; 🐍长度 最大255 最小0
|
||||||
.space s 2 ; 得分 小端序
|
.space s 2 ; 得分 小端序
|
||||||
|
.space _ptr 2 ; 通用指针
|
||||||
|
|
||||||
|
.alias title $0400
|
||||||
|
.alias field $0428 ; 蛇所在屏幕内存区
|
||||||
|
|
||||||
.data
|
.data
|
||||||
.org $0400
|
.org $c000
|
||||||
.space title 40
|
|
||||||
.space field 960 ; 蛇所在屏幕内存区
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
18
main.asm
18
main.asm
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
main:
|
main:
|
||||||
.scope
|
.scope
|
||||||
|
.data
|
||||||
|
.space lopcnt 1 ; 循环次数计数
|
||||||
|
.text
|
||||||
`init
|
`init
|
||||||
jsr getchar ; 等待输入任意字符开始游戏
|
jsr getchar ; 等待输入任意字符开始游戏
|
||||||
jsr erasehint ; 游戏开始,清空提示
|
jsr erasehint ; 游戏开始,清空提示
|
||||||
@@ -21,7 +24,7 @@ main:
|
|||||||
jsr append
|
jsr append
|
||||||
* jsr calcscore ; 计算得分
|
* jsr calcscore ; 计算得分
|
||||||
jsr printscore ; 打印分数
|
jsr printscore ; 打印分数
|
||||||
lda #60
|
lda #32
|
||||||
jsr delay ; 延时期间最后一个按键位于d
|
jsr delay ; 延时期间最后一个按键位于d
|
||||||
lda d
|
lda d
|
||||||
beq ++
|
beq ++
|
||||||
@@ -29,7 +32,13 @@ main:
|
|||||||
bne +
|
bne +
|
||||||
rts
|
rts
|
||||||
* sta d
|
* sta d
|
||||||
* jsr addfood
|
* inc lopcnt
|
||||||
|
lda lopcnt
|
||||||
|
cmp #16
|
||||||
|
bmi -----
|
||||||
|
lda #0
|
||||||
|
sta lopcnt
|
||||||
|
jsr addfood
|
||||||
jmp -----
|
jmp -----
|
||||||
.scend
|
.scend
|
||||||
|
|
||||||
@@ -51,6 +60,7 @@ main:
|
|||||||
jsr printhint ; 打印开始提示
|
jsr printhint ; 打印开始提示
|
||||||
lda #go_d ; 初始化方向为下
|
lda #go_d ; 初始化方向为下
|
||||||
sta d
|
sta d
|
||||||
|
jsr srand ; 初始化随机数种子
|
||||||
.macend
|
.macend
|
||||||
|
|
||||||
.require "printscore.asm"
|
.require "printscore.asm"
|
||||||
@@ -66,8 +76,8 @@ main:
|
|||||||
.require "calcscore.asm"
|
.require "calcscore.asm"
|
||||||
.require "print.asm"
|
.require "print.asm"
|
||||||
|
|
||||||
.checkpc $A000 ; text段边界
|
.checkpc $a000 ; text段边界
|
||||||
.data zp ; 零页段边界
|
.data zp ; 零页段边界
|
||||||
.checkpc $80
|
.checkpc $80
|
||||||
.data
|
.data
|
||||||
.checkpc $0800 ; data段边界
|
.checkpc $d000 ; data段边界
|
||||||
@@ -13,9 +13,6 @@
|
|||||||
; PRINTSTR routine. Accumulator stores the low byte of the address,
|
; PRINTSTR routine. Accumulator stores the low byte of the address,
|
||||||
; X register stores the high byte.
|
; X register stores the high byte.
|
||||||
.scope
|
.scope
|
||||||
.data zp
|
|
||||||
.space _ptr 2
|
|
||||||
.text
|
|
||||||
printstr:
|
printstr:
|
||||||
sta _ptr
|
sta _ptr
|
||||||
sty _ptr+1
|
sty _ptr+1
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
print16:
|
print16:
|
||||||
.scope
|
.scope
|
||||||
.data zp
|
.data
|
||||||
.space _num 4
|
.space _num 4
|
||||||
.space _num_dec 6
|
.space _num_dec 6
|
||||||
.text
|
.text
|
||||||
|
|||||||
@@ -3,9 +3,6 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
printfield:
|
printfield:
|
||||||
.scope
|
.scope
|
||||||
.data zp
|
|
||||||
.space _ptr 2
|
|
||||||
.text
|
|
||||||
ldx #23 ; i代表行数,不含边框
|
ldx #23 ; i代表行数,不含边框
|
||||||
lda #<field ; 取地址低8位
|
lda #<field ; 取地址低8位
|
||||||
sta _ptr
|
sta _ptr
|
||||||
|
|||||||
Reference in New Issue
Block a user