标签:
程序设计项目十三
编写左手逃生法则演示程序。参看demo7.gif示例。
提示:
(1)地图中只有三种元素:墙、通道、出口。设计地图时,要给不同的元素赋予不同的编码。
(2)什么情况下改变行进的方向。遇到这些情况后根据当前方向决定下一步方向变化的规律是什么。
(3)左手逃生法则简述:在一个有出入口,没有回路的迷宫中,一直保持左手贴着墙壁向前走,总能找到迷宫出口。
代码:
有问题,,,
1 assume cs:code 2 map segment 3 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 4 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 5 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 6 db 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1 7 db 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1 8 db 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1 9 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 10 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 11 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 12 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 13 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,2 14 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 15 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 16 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 17 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 18 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 19 db 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1 20 db 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1 21 db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 22 db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 23 db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 24 db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 25 db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 26 db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 27 db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 28 map ends 29 30 data segment 31 dw 1 ;now direction 1,left 2,up 3,right 4,down 32 dw 0,0,0,0 ;next left,up,right,down ok? 33 data ends 34 35 stack segment 36 dw 16 dup (0) 37 stack ends 38 39 code segment 40 start: 41 mov ax,map 42 mov ds,ax 43 mov ax,0b800h 44 mov es,ax 45 mov ax,stack 46 mov ss,ax 47 mov sp,20h 48 49 call clear_screen 50 gogogo: 51 call draw_map 52 mov ax,data 53 mov ds,ax 54 call run_map 55 jmp over 56 57 run_map: 58 mov dx,0e4fh 59 mov di,2396 60 main: 61 mov ax,es:[di] 62 cmp ax,2020h 63 je find 64 call draw_now 65 call getnext 66 call nextsizhou 67 call ensurenext 68 call sleep_1s 69 jmp main 70 find: 71 ret 72 73 ensurenext: 74 mov ax,ds:[0] 75 cmp ax,1 76 je nowleft 77 cmp ax,2 78 je nowup 79 cmp ax,3 80 je nowright 81 mov ax,ds:[3] 82 cmp ax,1 83 je nextright 84 mov ax,ds:[4] 85 cmp ax,1 86 je nextdown 87 jmp nextleft 88 nowleft: 89 mov ax,ds:[4] 90 cmp ax,1 91 je nextdown 92 mov ax,ds:[1] 93 cmp ax,1 94 je nextleft 95 jmp nextup 96 nowup: 97 mov ax,ds:[1] 98 cmp ax,1 99 je nextleft 100 mov ax,ds:[2] 101 cmp ax,1 102 je nextup 103 jmp nextright 104 nowright: 105 mov ax,ds:[2] 106 cmp ax,1 107 je nextup 108 mov ax,ds:[3] 109 cmp ax,1 110 je nextright 111 jmp nextdown 112 nextleft: 113 mov word ptr ds:[0],1 114 jmp okae 115 nextup: 116 mov word ptr ds:[0],2 117 jmp okae 118 nextright: 119 mov word ptr ds:[0],3 120 jmp okae 121 nextdown: 122 mov word ptr ds:[0],4 123 okae: 124 ret 125 126 getnext: 127 mov ax,ds:[0] 128 cmp ax,1 129 je goleft 130 cmp ax,2 131 je goup 132 cmp ax,3 133 je goright 134 add di,160 135 add dh,1 136 jmp oka 137 goleft: 138 sub di,2 139 sub dl,1 140 jmp oka 141 goup: 142 sub di,160 143 sub dh,1 144 jmp oka 145 goright: 146 add di,2 147 add dl,1 148 oka: 149 ret 150 151 draw_now: 152 mov ax,ds:[0] 153 cmp ax,1 154 je drawleft 155 cmp ax,2 156 je drawup 157 cmp ax,3 158 je drawright 159 cmp ax,4 160 je drawdown 161 jmp overdn 162 drawleft: 163 mov bx,0611h 164 jmp overdn 165 drawup: 166 mov bx,061eh 167 jmp overdn 168 drawright: 169 mov bx,0610h 170 jmp overdn 171 drawdown: 172 mov bx,061fh 173 overdn: 174 mov es:[di],bx 175 ret 176 177 nextsizhou: 178 call left 179 call up 180 call right 181 call down 182 ret 183 184 left: 185 push dx 186 push di 187 cmp dl,0 188 je unleft 189 sub di,2 190 mov ax,es:[di] 191 cmp ax,0 192 je cnleft 193 cmp ax,2020h 194 je cnleft 195 unleft: 196 mov word ptr ds:[1],0 197 jmp overleft 198 cnleft: 199 mov word ptr ds:[1],1 200 overleft: 201 pop di 202 pop dx 203 ret 204 205 up: 206 push dx 207 push di 208 cmp dh,0 209 je unup 210 sub di,160 211 mov ax,es:[di] 212 cmp ax,0 213 je cnup 214 cmp ax,2020h 215 je cnup 216 unup: 217 mov word ptr ds:[2],0 218 jmp overup 219 cnup: 220 mov word ptr ds:[2],1 221 overup: 222 pop di 223 pop dx 224 ret 225 226 right: 227 push dx 228 push di 229 cmp dl,79 230 je unright 231 add di,2 232 mov ax,es:[di] 233 cmp ax,0 234 je cnright 235 cmp ax,2020h 236 je cnright 237 unright: 238 mov word ptr ds:[3],0 239 jmp overright 240 cnright: 241 mov word ptr ds:[3],1 242 overright: 243 pop di 244 pop dx 245 ret 246 247 down: 248 push dx 249 push di 250 cmp dh,24 251 je undown 252 add di,160 253 mov ax,es:[di] 254 cmp ax,0 255 je cndown 256 cmp ax,2020h 257 je cndown 258 undown: 259 mov word ptr ds:[4],0 260 jmp overdown 261 cndown: 262 mov word ptr ds:[4],1 263 overdown: 264 pop di 265 pop dx 266 ret 267 268 draw_map: 269 mov di,0 270 mov si,0 271 mov cx,2000 272 dps0: 273 push cx 274 mov al,ds:[si] 275 cmp al,0 276 je go0 277 cmp al,2 278 je go2 279 mov word ptr es:[di],4020h 280 jmp go0 281 go2: 282 mov word ptr es:[di],2020h 283 go0: 284 inc si 285 add di,2 286 pop cx 287 loop dps0 288 ret 289 290 sleep_1s: 291 push cx 292 mov cx,10h 293 sp0: 294 push cx 295 mov cx,0ffffh 296 sp1: 297 loop sp1 298 pop cx 299 loop sp0 300 pop cx 301 ret 302 303 clear_screen: 304 push cx 305 push di 306 mov di,0 307 mov cx,25 308 css0: 309 push cx 310 mov cx,80 311 css1: 312 mov word ptr es:[di],0 313 add di,2 314 loop css1 315 pop cx 316 loop css0 317 pop di 318 pop cx 319 ret 320 321 over: 322 mov ax,4c00h 323 int 21h 324 code ends 325 end start
标签:
原文地址:http://www.cnblogs.com/regconfi/p/4286846.html