org 100hjmp starts_size equ 7snake dw s_size dup(0)tail dw ?left equ 4bhright equ 4dhup equ 48hdown equ 50hcur_dir db rightwait_time dw 0start:mov ah, 1mov ch, 2bhmov cl, 0bhint 10hgame_loop:mov al, 0mov ah, 05hint 10hmov dx, snake[0]mov ah, 02hint 10hmov al, '*'mov ah, 09hmov bl, 0ehmov cx, 1int 10hmov ax, snake[s_size * 2 - 2]mov tail, axcall move_snakemov dx, tailmov ah, 02hint 10hmov al, ' 'mov ah, 09hmov bl, 0ehmov cx, 1int 10hcheck_for_key:mov ah, 01hint 16hjz no_keymov ah, 00hint 16hcmp al, 1bhje stop_gamemov cur_dir, ahno_key:mov ah, 00hint 1ahcmp dx, wait_timejb check_for_keyadd dx, 4mov wait_time, dxjmp game_loopstop_game:mov ah, 1mov ch, 0bhmov cl, 0bhint 10hretmove_snake proc nearmov ax, 40hmov es, ax mov di, s_size * 2 - 2 mov cx, s_size-1move_array: mov ax, snake[di-2] mov snake[di], ax sub di, 2 loop move_arraycmp cur_dir, left je move_leftcmp cur_dir, right je move_rightcmp cur_dir, up je move_upcmp cur_dir, down je move_downjmp stop_movemove_left: mov al, b.snake[0] dec al mov b.snake[0], al cmp al, -1 jne stop_move mov al, es:[4ah] dec al mov b.snake[0], al jmp stop_movemove_right: mov al, b.snake[0] inc al mov b.snake[0], al cmp al, es:[4ah] jb stop_move mov b.snake[0], 0 jmp stop_movemove_up: mov al, b.snake[1] dec al mov b.snake[1], al cmp al, -1 jne stop_move mov al, es:[84h] mov b.snake[1], al jmp stop_movemove_down: mov al, b.snake[1] inc al mov b.snake[1], al cmp al, es:[84h] jbe stop_move mov b.snake[1], 0 jmp stop_movestop_move: retmove_snake endp
Comments
Post a Comment