1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
| snake_gluttony proc push ax push bx push cx push dx
snake_time word 0 snake_gluttony_begin: snake_count_time: mov ax,sync_time_buffer mov bl,100 div bl xor ah,ah cmp ax,[snake_time] ja snake_flush mov [snake_time],ax jmp snake_count_time
snake_flush: mov [snake_time],ax mov ax,keyboard_input_buffer shr ax,10 and al,00001111B cmp al,00001000B jz snake_fulsh_process_key_w cmp al,00000100B jz snake_fulsh_process_key_s cmp al,00000010B jz snake_fulsh_process_key_a cmp al,00000001B jz snake_fulsh_process_key_d
jmp snake_flush_process
snake_fulsh_process_key_w: mov al,snake_direction cmp al,0 jz snake_flush_process mov snake_direction,3 jmp snake_flush_process
snake_fulsh_process_key_s: mov al,snake_direction cmp al,3 jz snake_flush_process mov snake_direction,0 jmp snake_flush_process
snake_fulsh_process_key_a: mov al,snake_direction cmp al,1 jz snake_flush_process mov snake_direction,2 jmp snake_flush_process
snake_fulsh_process_key_d: mov al,snake_direction cmp al,2 jz snake_flush_process mov snake_direction,1 jmp snake_flush_process
snake_flush_process: snake_flush_process_clear_key: mov ax,keyboard_input_buffer and ax,1100001111111111B mov keyboard_input_buffer,ax
move_snake_body: mov si,offset snake_body_buffer mov di,snake_body_length dec di shl di,1 add di,si mov si,di sub si,2
move_snake_body_every_section: mov al,[si] mov snake_tail_position_x,al mov al,[si+1] mov snake_tail_position_y,al mov cx,snake_body_length dec cx std rep movsw
move_snake_body_first_section: mov si,offset snake_body_buffer mov ah,snake_head_position_y mov al,snake_head_position_x mov [si],ax
move_snake_head: mov al,snake_direction cmp al,3 jz move_snake_head_up cmp al,0 jz move_snake_head_down cmp al,2 jz move_snake_head_left cmp al,1 jz move_snake_head_right
move_snake_head_up: mov al,snake_head_position_y sub ax,1 jnc snake_judge_conflict mov ax,7 jmp snake_judge_conflict
move_snake_head_down: mov al,snake_head_position_y add ax,1 cmp ax,8 jnz snake_judge_conflict mov ax,0 jmp snake_judge_conflict
move_snake_head_left: mov al,snake_head_position_x sub ax,1 jnc snake_judge_conflict mov ax,7 jmp snake_judge_conflict
move_snake_head_right: mov al,snake_head_position_x add ax,1 cmp ax,8 jnz snake_judge_conflict mov ax,0 jmp snake_judge_conflict
snake_judge_conflict: mov food_eaten,0 mov ah,snake_head_position_x mov al,food_x cmp al,ah jnz snake_judge_conflict_not_eat mov ah,snake_head_position_y mov al,food_y cmp al,ah jnz snake_judge_conflict_not_eat mov food_eaten,1 add snake_body_length,1
snake_create_new_food: mov ax,7 mov bx,snake_head_position_x sub ax,bx mov food_x,al mov ax,7 mov bx snake_tail_position_y sub ax,bx mov food_y,al
snake_judge_conflict_not_eat: mov food_eaten,0
snake_lighten_led_red: mov ah,food_y mov al,food_x call make_it_red mov ah,snake_head_position_y mov al,snake_head_position_x call make_it_red mov si,offset snake_body_buffer mov cx,snake_body_length snake_lighten_led_red_body: mov al,[si] mov ah,[si+1] add si,2 loop snake_lighten_led_red_body
jmp snake_gluttony_begin
snake_gluttony_end:
pop dx pop cx pop bx pop ax ret snake_gluttony endp
|