diff options
| author | Christian Krinitsin <code@krinitsin.xyz> | 2024-11-21 17:27:04 +0100 |
|---|---|---|
| committer | Christian Krinitsin <code@krinitsin.xyz> | 2024-11-21 17:27:04 +0100 |
| commit | 06c6e78a06d486cc6176754e00df7fea03286994 (patch) | |
| tree | 4b71225b15dd574b2d29b7a19cb6df041ed504f1 | |
| parent | 3c90c7ab15aa276b6766f37d6b159a31fbe778bc (diff) | |
| download | x86_64-Snake-06c6e78a06d486cc6176754e00df7fea03286994.tar.gz x86_64-Snake-06c6e78a06d486cc6176754e00df7fea03286994.zip | |
make snake longer when eating fruit
| -rw-r--r-- | src/main.asm | 59 |
1 files changed, 51 insertions, 8 deletions
diff --git a/src/main.asm b/src/main.asm index 559e4bd..c50c33f 100644 --- a/src/main.asm +++ b/src/main.asm @@ -10,7 +10,7 @@ section .data ; x head is at snake[0] ; y head is at snake[1] snake TIMES 250 db 0 - snake_length db 2 + snake_length db 3 ; direction of the snake: ; 3 @@ -48,6 +48,39 @@ section .text global _start global exit +spawn_tail: + inc byte [snake_length] + xor rdx, rdx + mov dl, byte [snake_length] + mov ch, byte [snake+(2*rdx)-4] + mov cl, byte [snake+(2*rdx)-3] + mov byte [snake+(2*rdx)-2], ch + mov byte [snake+(2*rdx)-1], cl + + mov ah, byte [direction] + cmp ah, 0 + jz _spawn_left + cmp ah, 2 + jz _spawn_right + cmp ah, 3 + jz _spawn_down + cmp ah, 1 + jz _spawn_up + ret ; should not reach this line + +_spawn_right: + inc byte [snake+(2*rdx)-2] + ret +_spawn_down: + inc byte [snake+(2*rdx)-1] + ret +_spawn_left: + dec byte [snake+(2*rdx)-2] + ret +_spawn_up: + dec byte [snake+(2*rdx)-1] + ret + draw_snake: push rbx ;;push r12 @@ -89,13 +122,21 @@ _11:push rdx ret move_snake: - ;; TODO: loop this - mov ah, byte [snake] - mov al, byte [snake+1] - mov byte [snake+2], ah - mov byte [snake+3], al - ;; + xor rdx, rdx + mov dl, byte [snake_length] +_move_body: + cmp dl, 1 + jz _move_head + + mov ah, byte [snake+(2*rdx)-4] + mov al, byte [snake+(2*rdx)-3] + mov byte [snake+(2*rdx)-2], ah + mov byte [snake+(2*rdx)-1], al + dec dl + jmp _move_body + +_move_head: cmp byte [direction], 0 je _move_right cmp byte [direction], 1 @@ -131,7 +172,7 @@ _check_y: ret _same_position: ; get longer - inc byte [snake_length] + call spawn_tail call spawn_fruit ret @@ -141,6 +182,8 @@ _start: mov byte [snake+1], 5 mov byte [snake+2], 4 mov byte [snake+3], 5 + mov byte [snake+4], 3 + mov byte [snake+5], 5 call spawn_fruit main_loop: |