⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 汇编源码.txt

📁 游戏中有一条贪吃的蛇
💻 TXT
📖 第 1 页 / 共 2 页
字号:
              nextstate:
              MOV       SI,headp
              MOV       AX,[SI]
              ADD       AX,DIr
              MOV       DI,AX
              CMP       BYTE PTR ES:[DI],0   ;判断蛇头所处位置是否为黑色
              JE       nextstate2             ;是,则跳转到下一状态
              MOV       AL,2h                 ;否,则返回值为2 ,存于AL中
              JMP       returntest  
             
              nextstate2:
              MOV       AL,0                  ;则返回值为0,存于AL中
              
              returntest:
              RET
testhead      ENDP

addhead       PROC      NEAR          ;子程序,加蛇尾,即在队列中前移头指针
              MOV       SI,headp            
              MOV       AX,[SI]
              ADD       AX,DIr

              ADD       headp,2
              LEA       BX,END_label
              CMP       headp,BX
              JL        continue_head
              LEA       SI,snake
              MOV       headp,SI
              continue_head:    

              MOV       SI,headp              
              MOV       [SI],AX

              RET
addhead       ENDP
              
cuttail       PROC      NEAR                ;子程序,去除蛇尾,即在队列中前移尾指针
              
              ADD       tailp,2
              LEA       BX,END_label
              CMP       tailp,BX
              JL        continue_tail
              LEA       SI,snake
              MOV       tailp,SI
              continue_tail:    
              RET
                
cuttail       ENDP
              
drawD PROC NEAR                  ;在DI位置处画豆
      PUSH AX
      PUSH CX
      PUSH      SI      
     
     MOV SI,OFFSET circle
     MOV CX,4
     next_line1:
     MOV AX,CX
     MOV CX,4
     REP movsb
     ADD DI,316
     MOV CX,AX
     LOOP next_line1
     POP       SI
     POP CX
     POP AX
     RET
drawD ENDP
     
clearD PROC NEAR                ;在DI位置处擦除豆
      PUSH AX
      PUSH CX      
     
     MOV CX,4
     MOV AL,0        
     next_line:
     MOV DX,CX
     MOV CX,4
     REP STOSB
     ADD DI,316
     MOV CX,DX
     LOOP next_line
     
     POP CX
     POP AX
     RET
clearD ENDP

random        PROC      NEAR            ;产生随机数,存在AL 0~46
              IN        AL,40h
              MOV       AH,AL
              AND       AH,0fh
              IN        AL,40h
              AND       AL,1fh
              ADD       AL,AH
              MOV       AH,0
              RET
random        ENDP

random2       PROC      NEAR               ;限制豆出现在蛇活动区,产生在合法区域出现的位置存于AX中
              CALL      random
              MOV       DL,4
              MUL       DL
              ADD       AX,124
              MOV       BX,AX
              CALL      random
              MOV       DL,4
              MUL       DL
              ADD       AX,4
              MOV       DX,320
              MUL       DX
              ADD       AX,BX
           
              RET
random2        ENDP        
              
markstring    PROC      NEAR                    ;将记分变量转化成字符类型
              MOV       AX,marks
              MOV       DX,0
              MOV       CX,1000                 ;计算千位 
              DIV       CX
              ADD       AL,30h
              MOV       string[0],AL
              MOV       AX,DX
              MOV       CL,100                  ;计算百位 
              DIV       CL
              ADD       AL,30h
              MOV       string[1],AL
              MOV       AL,AH
              MOV       AH,0
              MOV       CL,10                   ;计算十位 
              DIV       CL
              ADD       AL,30h
              MOV       string[2],AL
              ADD       AH,30h                  ;存储个位
              MOV       string[3],AH
              writestring 9,5,40,string,4
              

              RET
markstring    ENDP       
            
welcome       PROC      NEAR                    ;欢迎界面显示,并选择游戏难度
              writestring 8,10,40,message01,21
              writestring 9,14,44,message02,18
              writestring 12,14,38,message03,18
              writestring 13,14,38,message04,22
              writestring 14,14,38,message05,23
              welc:
              MOV       AH,7
              INT       21h
              CMP       AL,'1'
              MOV       difficulty,0ffffh
              JE        wreturn  
              CMP       AL,'2'
              MOV       difficulty,08fffh
              JE        wreturn   
              CMP       AL,'3'
              MOV       difficulty,04fffh
              JE        wreturn   
              CMP       AL,27                 ;响应键盘,按"ESC"键退出游戏
              JNE       welc
              JMP        return1
              
              wreturn:
              MOV       diffc,AL
              JMP       welcomeend
welcome       ENDP
              
diffcult      PROC      NEAR                    ;子程序,判断选择的难度,在相应位置显示信息
              MOV       AL,diffc
              CMP       AL,'1'
              writestring 13,3,40,message7,8
              JE        dreturn  
              CMP       AL,'2'
              writestring 13,3,40,message8,11
              JE        dreturn   
              CMP       AL,'3'
              writestring 13,3,40,message9,12
              JE        dreturn   
              dreturn:                
              RET
diffcult      ENDP
              
clear_screen PROC NEAR        ;清屏
     MOV DI,0
     MOV CX,32000
     MOV AX,0
     REP stosw
     RET
clear_screen ENDP
                           
drawR         PROC      NEAR                    ;画矩形的子程序
              
              MOV       BX,320
              SUB       BX,DX
              next_line2:
              PUSH CX
              MOV CX,DX
              REP STOSB
              ADD DI,BX
              POP       CX
              LOOP next_line2
             
              RET
drawR         ENDP
             
firstv        PROC      NEAR                     ;子程序,初始化变量
              MOV       marks,100
              MOV       snake[0],32160
              MOV       snake[2],32164
              MOV       snake[4],32168
              MOV       snake[6],32172
              MOV       snake[8],32176
              LEA       SI,snake          
              MOV       tailp,SI
              ADD       SI,8
              MOV       headp,SI                    
              RET
firstv        ENDP
              
delay PROC NEAR           ;61h端口触发延迟
     PUSH CX
     PUSH AX
     
     MOV CX,difficulty         ;产生(15.08*3147=0.05s) 延迟
     next_delay11:
     IN AL,61h
     AND AL,10h
     CMP AL,AH
     JE  next_delay11
     MOV AH,AL
     LOOP next_delay11

     POP AX
     POP CX
     RET
delay ENDP
             
code ENDS
END start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -