Use a direction value instead of dx, dy pair for movement
This commit is contained in:
parent
8246dc5240
commit
c81dee26f2
103
mato8.asm
103
mato8.asm
|
@ -11,11 +11,15 @@ define down_key 8
|
||||||
define left_key 4
|
define left_key 4
|
||||||
define right_key 6
|
define right_key 6
|
||||||
|
|
||||||
define game_over_reg v8
|
define direction_up 0
|
||||||
define fruit_x_reg v9
|
define direction_down 6
|
||||||
define fruit_y_reg va
|
define direction_left 12
|
||||||
define head_dx_reg vb
|
define direction_right 18
|
||||||
define head_dy_reg vc
|
|
||||||
|
define game_over_reg v9
|
||||||
|
define fruit_x_reg va
|
||||||
|
define fruit_y_reg vb
|
||||||
|
define head_direction_reg vc
|
||||||
define head_x_reg vd
|
define head_x_reg vd
|
||||||
define head_y_reg ve
|
define head_y_reg ve
|
||||||
|
|
||||||
|
@ -26,8 +30,7 @@ start:
|
||||||
rnd head_x_reg, 63
|
rnd head_x_reg, 63
|
||||||
rnd head_y_reg, 31
|
rnd head_y_reg, 31
|
||||||
|
|
||||||
ld head_dx_reg, 1
|
ld head_direction_reg, direction_right
|
||||||
ld head_dy_reg, 0
|
|
||||||
|
|
||||||
ld i, single_pixel
|
ld i, single_pixel
|
||||||
drw head_x_reg, head_y_reg, 1
|
drw head_x_reg, head_y_reg, 1
|
||||||
|
@ -40,19 +43,19 @@ mainloop:
|
||||||
|
|
||||||
ld v0, up_key
|
ld v0, up_key
|
||||||
sknp v0
|
sknp v0
|
||||||
call dir_up
|
call turn_up
|
||||||
|
|
||||||
ld v0, down_key
|
ld v0, down_key
|
||||||
sknp v0
|
sknp v0
|
||||||
call dir_down
|
call turn_down
|
||||||
|
|
||||||
ld v0, left_key
|
ld v0, left_key
|
||||||
sknp v0
|
sknp v0
|
||||||
call dir_left
|
call turn_left
|
||||||
|
|
||||||
ld v0, right_key
|
ld v0, right_key
|
||||||
sknp v0
|
sknp v0
|
||||||
call dir_right
|
call turn_right
|
||||||
|
|
||||||
call move_snake
|
call move_snake
|
||||||
|
|
||||||
|
@ -106,54 +109,72 @@ spawn_fruit:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
dir_up:
|
turn_up:
|
||||||
; Allow only 90° turns
|
; Don't allow 180° turns (which would kill the snake instantly)
|
||||||
se head_dy_reg, 0
|
se head_direction_reg, direction_down
|
||||||
ret
|
ld head_direction_reg, direction_up
|
||||||
ld head_dx_reg, 0
|
|
||||||
ld head_dy_reg, #ff
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
dir_down:
|
turn_down:
|
||||||
se head_dy_reg, 0
|
se head_direction_reg, direction_up
|
||||||
ret
|
ld head_direction_reg, direction_down
|
||||||
ld head_dx_reg, 0
|
|
||||||
ld head_dy_reg, 1
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
dir_left:
|
turn_left:
|
||||||
se head_dx_reg, 0
|
se head_direction_reg, direction_right
|
||||||
ret
|
ld head_direction_reg, direction_left
|
||||||
ld head_dx_reg, #ff
|
|
||||||
ld head_dy_reg, 0
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
dir_right:
|
turn_right:
|
||||||
se head_dx_reg, 0
|
se head_direction_reg, direction_left
|
||||||
ret
|
ld head_direction_reg, direction_right
|
||||||
ld head_dx_reg, 1
|
|
||||||
ld head_dy_reg, 0
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
move_snake:
|
move_snake:
|
||||||
ld v0, head_x_reg
|
ld v0, head_direction_reg
|
||||||
add head_x_reg, head_dx_reg
|
call unpack_direction
|
||||||
ld v2, 63
|
|
||||||
and head_x_reg, v2
|
|
||||||
|
|
||||||
ld v1, head_y_reg
|
ld v2, head_x_reg
|
||||||
add head_y_reg, head_dy_reg
|
add head_x_reg, v0
|
||||||
ld v2, 31
|
ld v0, 63
|
||||||
and head_y_reg, v2
|
and head_x_reg, v0
|
||||||
|
|
||||||
|
ld v3, head_y_reg
|
||||||
|
add head_y_reg, v1
|
||||||
|
ld v0, 31
|
||||||
|
and head_y_reg, v0
|
||||||
|
|
||||||
ld i, single_pixel
|
ld i, single_pixel
|
||||||
drw head_x_reg, head_y_reg, 1
|
drw head_x_reg, head_y_reg, 1
|
||||||
se vf, 0
|
se vf, 0
|
||||||
call collision
|
call collision
|
||||||
drw v0, v1, 1
|
drw v2, v3, 1
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
unpack_direction:
|
||||||
|
jp v0, unpack_direction_table
|
||||||
|
unpack_direction_table:
|
||||||
|
; Up
|
||||||
|
ld v0, 0
|
||||||
|
ld v1, #ff
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Down
|
||||||
|
ld v0, 0
|
||||||
|
ld v1, 1
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Left
|
||||||
|
ld v0, #ff
|
||||||
|
ld v1, 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Right
|
||||||
|
ld v0, 1
|
||||||
|
ld v1, 0
|
||||||
|
ret
|
||||||
|
|
||||||
collision:
|
collision:
|
||||||
se head_x_reg, fruit_x_reg
|
se head_x_reg, fruit_x_reg
|
||||||
jp tail_collision
|
jp tail_collision
|
||||||
|
|
Loading…
Reference in New Issue