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

📄 汇编源码.txt

📁 游戏中有一条贪吃的蛇
💻 TXT
📖 第 1 页 / 共 2 页
字号:
writestring MACRO y,x,color,info,len    ;在y,x点画出color色的字符串,宏定义,在相应位置写字符串
            PUSH ES
            PUSH BP
            PUSH AX
            PUSH BX
            PUSH CX
            PUSH DX

            MOV AX,SEG info
            MOV ES,AX
            MOV  BP,OFFSET info
            MOV AH,13h
            MOV AL,0
            MOV BH,0
            MOV BL,color
            MOV CX,len
            MOV DH,y
            MOV DL,x
            INT 10h

            POP DX
            POP CX
            POP BX
            POP AX
            POP BP
            POP ES
            ENDM
              
data SEGMENT                             ;数据段 
       
     message01 DB        'Welcome to the game!!'
     message02 DB        '----Edacious Snake'     
     message03 DB        'push 1 to easygame'     
     message04 DB        'push 2 to genericgame'  
     message05 DB        'push 3 to diffcultgame'                                          
     message1 DB        'Edacious Snake'       ;定义所写信息 
     message2 DB        'mark'
     message3 DB        'difficulty'
     message4 DB        'highestmark'
     message5 DB        'Game Over'
     message6 DB        'Do you want to try again(y/n)' 
     message7 DB        'easygame'
     message8 DB        'genericgame'
     message9 DB        'diffcultgame'                                                                     
     circle DB 44,44,44,44               ;定义点矩阵 
            DB 44,00,00,44
            DB 44,00,00,44
            DB 44,44,44,44
     
     marks    DW        100
     
     string   DB        4 DUP(?)
           
     difficulty DW        ?
              
     diffc    DB        ?
              
     snake     DW        32160,32164,32168,32172,32176,95 DUP(?)  ;定义初始蛇形的各点位置以队列结构存取
              
     END_label DW        ?       ;获取队尾物理内存的偏移地址 
              
     headp     DW        ?       ;定义存于队列的蛇头指针
              
     tailp     DW        ?       ;定义存于队列的蛇尾指针
              
     dir       DW        4       ;定义方向值
              
     d         DW        ?       ;定义存储豆位置的变量 
     
data ENDS
              
code SEGMENT                  ;代码段
              
main PROC FAR                 ;主程序
     ASSUME CS:code,DS:data
start:
     PUSH DS
     SUB AX,AX
     PUSH AX

     MOV AX,data
     MOV DS,AX

     MOV AX,0a000h
     MOV ES,AX
     
     MOV AH,00h               ;定义屏幕显示方式
     MOV AL,13h
     INT 10h
 start1:      
     CALL      firstv
     CALL      clear_screen
     JMP      welcome
  welcomeend:                     
     CALL      clear_screen
     CALL      diffcult       
            MOV       AX,99                    ;绘制矩形上线 
            MOV       CX,4
            MOV       DX,320
            MOV       DI,0
            CALL      drawR
            
            MOV       CX,4                     ;绘制矩形下线 
            MOV       DI,62720
            CALL      drawR
            
            MOV       CX,192                   ;绘制矩形左线 
            MOV       DX,4
            MOV       DI,1280
            CALL      drawR
              
            MOV       CX,192                   ;绘制矩形右线 
            MOV       DX,4
            MOV       DI,1596
            CALL      drawR
              
            MOV       CX,192                    ;绘制矩形中线 
            MOV       DX,4
            MOV       DI,1400
            CALL      drawR
              
       writestring 5,1,40,message1,14           ;显示游戏界面基本信息 
       writestring 8,1,47,message2,4
       writestring 12,1,47,message3,10
       writestring 16,1,47,message4,11
      
        LEA       SI,snake      ;初始蛇形
        MOV       DI,[SI]
        CALL      drawD       
        MOV CX,4
        next2:
        ADD       SI,2
        MOV       DI,[SI]
        CALL      drawD
        LOOP next2
             
     CALL      markstring
     
     CALL      random2           ;画出初始随机豆
     MOV       d,AX
     MOV       DI,AX
     CALL      drawD
        
     LEA       SI,snake         ;蛇身移动 
     MOV       tailp,SI
     ADD       SI,8
     MOV       headp,SI                    
     next:
     CALL delay  
     MOV AH,06
     MOV DL,0ffh
              INT       21h                   ;响应键盘
              JZ        TEST1
              
              CMP       AL,27                 ;响应键盘,按“ESC”键退出游戏
              JNE        keya
              JMP       return1
             keya: 
              CMP       AL,'a'                ;响应键盘,按"A"蛇向右行进
              JNE       keyd
              CMP       DIr,4                 ;屏蔽蛇原地转身
              JE         TEST1
              MOV       DIr,-4
             keyd:
              CMP       AL,'d'                ;响应键盘,按"D"蛇向左行进
              JNE       keyw
              CMP       DIr,-4                ;屏蔽蛇原地转身
              JE         TEST1
              MOV       DIr,4 
             keyw:
              CMP       AL,'w'                ;响应键盘,按"W"蛇向上行进
              JNE       keys
              CMP       DIr,1280              ;屏蔽蛇原地转身
              JE         TEST1
              MOV       DIr,-1280
             keys:           
              CMP       AL,'s'                ;响应键盘,按"S"蛇向下行进
              JNE       keyp
              CMP       DIr,-1280             ;屏蔽蛇原地转身
              JE         TEST1
              MOV       DIr,1280
              
              keyp:
              CMP       AL,'p'                ;响应键盘,按“P”暂停游戏
              JNE       TEST1
              MOV       AH,7
              INT       21h
              CMP       AL,'p'                ;响应键盘,再按"P"继续游戏
              JNE       keyp
   test1:                
              CALL      testhead               ;调用子程序判断蛇头情况
             
              CMP       AL,2h                  ;判断是否吃到豆 
              JE        return 
              CMP       AL,0
              JE        cm                      ;否,则跳转到CM继续前行
              CALL      addhead                 ;是,则加长蛇身,即加一蛇头,同时指针前进
              
              CALL      random2           ;画出随机豆
              MOV       d,AX              ;将豆的随机位置保存到变量d中
              ADD       marks,1           ;没吃一个豆加1分
              CALL      markstring
                              
  CM:                                     ;无键盘响应时,蛇身沿直线前进
              MOV       DI,d              ;为避免豆随机画在蛇身上,豆随蛇动而重复画
              CALL      drawD
                    
              MOV       SI,tailp          ;获取蛇尾位置
              MOV       DI,[SI]
              CALL      clearD             ;擦除蛇尾    

              CALL      cuttail            ;调用子程序,尾指针前进
              
              CALL      addhead            ;调用子程序,头指针前进
              
              MOV       SI,headp           ;获取蛇头位置
              MOV       DI,[SI]              
              CALL      drawD               ;画出蛇头
              
      JMP next
      return:                               ;游戏结束,显示结束界面,并提问是否继续游戏
          CALL      clear_screen           
          writestring 8,10,44,message5,9
          writestring 10,8,47,message6,29
          MOV       AH,7
          INT       21h
          CMP       AL,'y'                
          JNE       return1
          JMP       start1     
      return1: 
     RET
main ENDP
              
testhead      PROC      NEAR                ;子程序,检测蛇头位置
              MOV       SI,headp
              MOV       AX,[SI]
              ADD       AX,DIr              ;判断蛇头位置是否与豆的位置重合
              CMP       AX,d
              JNE       nextstate           ;否,则跳转到下一判断状态
              MOV       AL,1                ;是,则返回值为1,存于AL中 
              JMP       returntest

⌨️ 快捷键说明

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