• 程序设计项目十三


    程序设计项目十三

       

    编写左手逃生法则演示程序。参看demo7.gif示例。

       

    提示:

    (1)地图中只有三种元素:墙、通道、出口。设计地图时,要给不同的元素赋予不同的编码。

    (2)什么情况下改变行进的方向。遇到这些情况后根据当前方向决定下一步方向变化的规律是什么。

    (3)左手逃生法则简述:在一个有出入口,没有回路的迷宫中,一直保持左手贴着墙壁向前走,总能找到迷宫出口。

    代码:

    第一次写的时候,数据段保存的数据dw,是按照db格式读取的,导致一直判断下一个坐标的四周可否通行有问题,,,,,,,,

      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,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,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               ;修改ds段地址
     53         mov ds,ax
     54         call lefthandrule
     55         jmp over
     56 
     57 lefthandrule:
     58      mov dx,0e4fh
     59     mov di,2398
     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 ;根据当前方向的不同,得到在下一个点时,左手边在哪里
     74 ensurenext:                 
     75         mov ax,ds:[0]
     76         cmp ax,1
     77         je nowleft
     78         cmp ax,2
     79         je nowup
     80         cmp ax,3
     81         je nowright
     82     cmp ax,4
     83         je nowdown
     84     okae: 
     85         ret   
     86 
     87    nowleft:
     88     mov ax,ds:[8]
     89     cmp ax,1
     90     je nextdown
     91     mov ax,ds:[2]
     92     cmp ax,1
     93     je nextleft
     94     jmp nextup
     95    nowup:
     96         mov ax,ds:[2]
     97     cmp ax,1
     98     je nextleft
     99     mov ax,ds:[4]
    100     cmp ax,1
    101     je nextup
    102     jmp nextright
    103    nowright:
    104     mov ax,ds:[4]
    105     cmp ax,1
    106     je nextup
    107     mov ax,ds:[6]
    108     cmp ax,1
    109     je nextright
    110     jmp nextdown
    111    nowdown:
    112     mov ax,ds:[6]
    113     cmp ax,1
    114     je nextright
    115     mov ax,ds:[8]
    116     cmp ax,1
    117     je nextdown
    118     jmp nextleft
    119      
    120    nextleft:
    121     mov word ptr ds:[0],1
    122         jmp okae
    123    nextup:
    124     mov word ptr ds:[0],2
    125         jmp okae
    126    nextright:    
    127     mov word ptr ds:[0],3
    128         jmp okae 
    129    nextdown:    
    130     mov word ptr ds:[0],4
    131     jmp okae
    132 
    133 getnext:
    134         mov ax,ds:[0]
    135         cmp ax,1
    136         je goleft
    137         cmp ax,2
    138         je goup
    139         cmp ax,3
    140         je goright
    141     cmp ax,4
    142     je godown
    143    oka:
    144         ret
    145 
    146    goleft:
    147         sub di,2
    148         sub dl,1
    149         jmp oka
    150    goup:
    151         sub di,160
    152         sub dh,1
    153         jmp oka
    154    goright:
    155         add di,2
    156         add dl,1
    157     jmp oka
    158    godown:
    159         add di,160
    160         add dh,1
    161         jmp oka
    162 
    163 draw_now:
    164         mov ax,ds:[0]
    165         cmp ax,1
    166         je drawleft
    167         cmp ax,2
    168         je drawup
    169         cmp ax,3
    170         je drawright
    171         cmp ax,4
    172         je drawdown
    173   overdn:
    174         mov es:[di],bx
    175         ret
    176 
    177   drawleft:
    178         mov bx,0611h
    179         jmp overdn
    180   drawup:
    181         mov bx,061eh
    182         jmp overdn
    183   drawright:
    184         mov bx,0610h
    185         jmp overdn
    186   drawdown:
    187         mov bx,061fh
    188     jmp overdn
    189 
    190 nextsizhou:    ;确定下一个点四周的情况
    191         call left
    192         call up
    193         call right
    194         call down
    195         ret
    196 
    197 left:
    198         push dx
    199         push di
    200         cmp dl,0
    201         je unleft
    202         sub di,2
    203         mov ax,es:[di]
    204         cmp ax,0
    205         je cnleft
    206     cmp ax,2020h
    207     je cnleft
    208   unleft:
    209         mov word ptr ds:[2],0
    210         jmp overleft
    211   cnleft:
    212         mov word ptr ds:[2],1
    213   overleft:
    214         pop di
    215         pop dx
    216         ret
    217 
    218 up:
    219         push dx
    220         push di
    221         cmp dh,0
    222         je unup
    223         sub di,160
    224         mov ax,es:[di]
    225         cmp ax,0
    226         je cnup
    227     cmp ax,2020h
    228     je cnup
    229   unup:
    230         mov word ptr ds:[4],0
    231         jmp overup
    232   cnup:
    233         mov word ptr ds:[4],1
    234   overup:
    235         pop di
    236         pop dx
    237         ret
    238 
    239 right:
    240     push dx
    241         push di
    242         cmp dl,79
    243         je unright
    244         add di,2
    245         mov ax,es:[di]
    246         cmp ax,0
    247         je cnright
    248     cmp ax,2020h
    249     je cnright
    250   unright:
    251         mov word ptr ds:[6],0
    252         jmp overright
    253   cnright:
    254         mov word ptr ds:[6],1
    255   overright:
    256         pop di
    257         pop dx
    258         ret
    259 
    260 down:
    261         push dx
    262         push di
    263         cmp dh,24
    264         je undown
    265         add di,160
    266         mov ax,es:[di]
    267         cmp ax,0
    268         je cndown
    269     cmp ax,2020h
    270     je cndown
    271   undown:
    272         mov word ptr ds:[8],0
    273         jmp overdown
    274   cndown:
    275         mov word ptr ds:[8],1
    276   overdown:
    277         pop di
    278         pop dx
    279         ret
    280 
    281 draw_map:
    282         mov di,0
    283         mov si,0
    284         mov cx,2000
    285      dps0:
    286         push cx
    287         mov al,ds:[si]
    288         cmp al,0
    289         je go0
    290         cmp al,2
    291         je go2
    292         mov word ptr es:[di],4020h
    293         jmp go0
    294      go2:
    295         mov word ptr es:[di],2020h
    296      go0:
    297         inc si
    298         add di,2
    299         pop cx
    300         loop dps0
    301         ret
    302 
    303 sleep_1s:
    304         push cx
    305         mov cx,4h
    306      sp0:
    307         push cx
    308         mov cx,0ffffh
    309      sp1:
    310         loop sp1
    311         pop cx
    312         loop sp0
    313         pop cx
    314         ret
    315 
    316 clear_screen:
    317         push cx
    318         push di
    319         mov di,0
    320         mov cx,25
    321      css0:
    322         push cx
    323         mov cx,80
    324      css1:
    325         mov word ptr es:[di],0
    326         add di,2
    327         loop css1
    328         pop cx
    329         loop css0
    330         pop di
    331         pop cx
    332         ret
    333 
    334 over:
    335         mov ax,4c00h
    336         int 21h
    337 code ends
    338 end start
    339         
    hj13.asm

     

  • 相关阅读:
    多线程
    带缓存的字符输入输出流
    输入输出流(I/O)
    课本235页2-3题
    包装&工具类
    集合类SetMap
    tp框架之增删改查
    tp框架之数据添加
    tp框架之查询
    tp框架之Model类与命名空间
  • 原文地址:https://www.cnblogs.com/regconfi/p/4286846.html
Copyright © 2020-2023  润新知