lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.top-me.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    贪吃蛇源代码

    分享
    avatar
    金钱利益
    初级会员
    初级会员

    帖子数 : 8
    威望 : 1
    注册日期 : 12-11-28
    年龄 : 26
    地点 : 湖北黄石

    贪吃蛇源代码

    帖子 由 金钱利益 于 2013-01-08, 10:00 pm

    DATA SEGMENT
    HEAD DB 12,46,12,45,12,44,12,43,12,42,12,41,12,40,12,39,12,38,12,37,12,36,12,35,12,34,12,33
    DB 100 DUP(0)
    DIREC DB 1 ;方向变量,1表示向右,2表示向左,3表示向上,4表示向下
    SUM DW 0
    SUM1 DW 0
    ERROR DB "GAME OVER!",0DH,0AH,"$"
    DATA ENDS

    STACK SEGMENT STACK
    DB 100 DUP(?)
    STACK ENDS

    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK
    START:
    MOV AX, DATA
    MOV DS, AX

    MOV AL, 03H
    MOV AH, 0
    INT 10H
    MOV AL, 0 ;清屏功能
    MOV BH, 1EH ;蓝底黄字
    MOV CH, 0 ;左上角行号
    MOV CL, 0 ;左上角列号
    MOV DH, 24 ;右下角行号
    MOV DL, 79 ;右下角列号
    MOV AH, 6 ;功能号
    INT 10H ;中断调用

    MOV AH, 01H
    MOV CX, 1000H
    INT 10H

    MOV DH, 12 ; 置光标位置
    MOV DL, 33
    MOV BH, 0
    MOV AH, 2
    INT 10H
    MOV AH, 2 ;在光标位置显示字符及属性
    MOV DL,'-'
    INT 21H

    MOV AH, 9 ;在光标位置显示字符及属性
    MOV AL, '='
    MOV BH, 0 ;页号
    MOV BL, 1EH ;白底红字
    MOV CX, 12 ;显示字符次数
    INT 10H

    MOV DH, 12 ; 置光标位置
    MOV DL, 46
    MOV BH, 0
    MOV AH, 2
    INT 10H
    MOV DL,'#'
    MOV AH,2
    INT 21H
    CALL MAKE
    RRR:
    MOV DL,0FFH ;输入方向键
    MOV AH,06H
    INT 21H

    CMP AL,77 ;如果是向右
    JE R
    CMP AL,80 ;如果是向下
    JE D
    CMP AL,72 ;如果是向上
    JE U
    CMP AL,75 ;如果是向左
    JE L
    MOV CX,01FFFH
    DELAY:
    MOV AX,CX
    MOV CX,0FFFH
    DELAY1:
    LOOP DELAY1
    MOV CX,AX
    LOOP DELAY
    CMP DIREC,1
    JE R
    CMP DIREC,2
    JE L
    CMP DIREC,3
    JE U
    CMP DIREC,4
    JE D

    R:
    CMP DIREC,2
    JZ RRR
    MOV DIREC,1
    MOV DH,HEAD ;判断头所要前进的方向上有没有字符
    MOV AL,[HEAD+1]
    CMP AL,79 ;如果撞壁就输出err
    JE ERR
    INC AL
    MOV DL,AL
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV AH,08H
    INT 10H
    CMP AL,'=' ;如果不是空格则跳转到ERR
    JE ERR
    CMP AL,'-'
    JE ERR
    MOV CL,AL

    DEC DL ;如果是空格就改变蛇头
    MOV AH,2
    INT 10H
    MOV DL,'='
    MOV AH,2
    INT 21H
    MOV DL,'#'
    MOV AH,2
    INT 21H

    CMP CL,'*'
    JNE GOON
    ADD SUM,2
    ADD SUM1,1
    MOV BX,OFFSET HEAD ;改变蛇身位置坐标
    MOV SI,24
    ADD SI,SUM
    MOV CX,13
    ADD CX,SUM1
    XUNHUANR:
    MOV AL,[BX+SI]
    MOV [BX+SI+2],AL
    MOV AL,[BX+SI+1]
    MOV [BX+SI+3],AL
    SUB SI,2
    LOOP XUNHUANR
    CALL MAKE
    JMP XCHAN
    GOON:
    CALL CHANGE
    XCHAN:
    MOV AL,[HEAD+1]
    INC AL
    MOV [HEAD+1],AL
    JMP RRR

    L:
    CMP DIREC,1
    JZ RRR
    MOV DIREC,2
    MOV DH,HEAD ;判断头所要前进的方向上有没有字符
    MOV AL,[HEAD+1]

    CMP AL,0 ;如果撞壁就输出err
    JE ERR
    DEC AL
    MOV DL,AL
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV AH,08H
    INT 10H
    CMP AL,'-' ;如果不是空格则跳转到ERR
    JE ERR
    CMP AL,'='
    JE ERR
    MOV CL,AL

    MOV AH,2 ;如果是空格就改变蛇头
    INT 10H
    MOV DL,'#'
    MOV AH,2
    INT 21H
    MOV DL,'='
    MOV AH,2
    INT 21H

    CMP CL,'*'
    JNE GOONL
    ADD SUM,2
    ADD SUM1,1
    MOV BX,OFFSET HEAD ;改变蛇身位置坐标
    MOV SI,24
    ADD SI,SUM
    MOV CX,13
    ADD CX,SUM1
    XUNHUANL:
    MOV AL,[BX+SI]
    MOV [BX+SI+2],AL
    MOV AL,[BX+SI+1]
    MOV [BX+SI+3],AL
    SUB SI,2
    LOOP XUNHUANL
    CALL MAKE
    JMP XCHANL
    GOONL:
    CALL CHANGE
    XCHANL:
    MOV AL,[HEAD+1]
    DEC AL
    MOV [HEAD+1],AL
    JMP RRR

    U:
    CMP DIREC,4
    JZ RRR
    MOV DIREC,3
    MOV AL,[HEAD+1] ;判断头所要前进的方向上有没有字符
    MOV DL,AL
    MOV AL,HEAD
    CMP AL,0 ;如果撞壁就输出err
    JE ERR
    DEC AL
    MOV DH,AL
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV AH,08H
    INT 10H
    CMP AL,'=' ;如果不是空格则跳转到ERR
    JE ERR
    CMP AL,'-'
    JE ERR
    MOV CL,AL

    MOV DL,'#' ;如果是空格就改变蛇头
    MOV AH,2
    INT 21H
    MOV DH,HEAD
    MOV DL,[HEAD+1]
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV DL,'='
    MOV AH,2
    INT 21H

    CMP CL,'*'
    JNE GOONU
    ADD SUM,2
    ADD SUM1,1
    MOV BX,OFFSET HEAD ;改变蛇身位置坐标
    MOV SI,24
    ADD SI,SUM
    MOV CX,13
    ADD CX,SUM1
    XUNHUANU:
    MOV AL,[BX+SI]
    MOV [BX+SI+2],AL
    MOV AL,[BX+SI+1]
    MOV [BX+SI+3],AL
    SUB SI,2
    LOOP XUNHUANU
    CALL MAKE
    JMP XCHANU
    GOONU:
    CALL CHANGE
    XCHANU:
    MOV AL,HEAD
    DEC AL
    MOV HEAD,AL
    JMP RRR

    D:
    CMP DIREC,3
    JZ RRR
    MOV DIREC,4
    MOV AL,[HEAD+1] ;判断头所要前进的方向上有没有字符
    MOV DL,AL
    MOV AL,HEAD
    CMP AL,24 ;如果撞壁就输出err
    JE ERR
    INC AL
    MOV DH,AL
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV AH,08H
    INT 10H
    CMP AL,'-' ;如果不是空格则跳转到ERR
    JE ERR
    CMP AL,'='
    JE ERR
    MOV CL,AL

    MOV DL,'#' ;如果是空格就改变蛇头
    MOV AH,2
    INT 21H
    MOV DH,HEAD
    MOV DL,[HEAD+1]
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV DL,'='
    MOV AH,2
    INT 21H

    CMP CL,'*'
    JNE GOOND
    ADD SUM,2
    ADD SUM1,1
    MOV BX,OFFSET HEAD ;改变蛇身位置坐标
    MOV SI,24
    ADD SI,SUM
    MOV CX,13
    ADD CX,SUM1
    XUNHUAND:
    MOV AL,[BX+SI]
    MOV [BX+SI+2],AL
    MOV AL,[BX+SI+1]
    MOV [BX+SI+3],AL
    SUB SI,2
    LOOP XUNHUAND
    CALL MAKE
    JMP XCHAND
    GOOND:
    CALL CHANGE
    XCHAND:
    MOV AL,HEAD
    INC AL
    MOV HEAD,AL
    JMP RRR

    MAKE PROC
    MOV BX,OFFSET HEAD
    MOV AL,[BX+16]
    MOV CL,[BX+23]
    MOV BL,24
    SUB BL,AL
    MOV DH,BL
    MOV BL,79
    SUB BL,CL
    MOV DL,BL
    INC DL
    DEC DH
    MOV BH,0
    MOV AH,2
    INT 10H
    MOV DL,'*'
    MOV AH,2
    INT 21H
    RET
    MAKE ENDP

    CHANGE PROC
    MOV BX,OFFSET HEAD ;改变蛇尾
    MOV SI,SUM
    MOV AL,[BX+SI+26]
    MOV DH,AL
    MOV AL,[BX+SI+27]
    MOV DL,AL
    MOV AH,2
    MOV BH,0
    INT 10H

    MOV DL,32 ;将原来的蛇尾改写成空格
    MOV AH,2
    INT 21H

    MOV BX,OFFSET HEAD ;改变蛇尾前一个位置
    MOV AL,[BX+SI+24]
    MOV DH,AL
    MOV AL,[BX+SI+25]
    MOV DL,AL
    MOV AH,2
    MOV BH,0
    INT 10H

    MOV DL,'-'
    MOV AH,2
    INT 21H

    MOV BX,OFFSET HEAD ;改变蛇身位置坐标
    MOV SI,24
    ADD SI,SUM
    MOV CX,13
    ADD CX,SUM1
    XUNHUAN:
    MOV AL,[BX+SI] ;循环把蛇身加长
    MOV [BX+SI+2],AL
    MOV AL,[BX+SI+1]
    MOV [BX+SI+3],AL
    SUB SI,2
    LOOP XUNHUAN
    RET
    CHANGE ENDP


    ERR:
    mov dh,12
    mov dl,33
    mov bh, 0
    mov ah ,2
    int 10h
    MOV DX,OFFSET ERROR
    MOV AH,9
    INT 21H
    EXIT:
    MOV AH, 4CH
    INT 21H
    CODE ENDS
    END START
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    回复: 贪吃蛇源代码

    帖子 由 Admin 于 2013-01-08, 10:15 pm

    牛啊,,求图片啊 :cheers:
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    回复: 贪吃蛇源代码

    帖子 由 Admin 于 2013-01-08, 10:18 pm

    在哪里运行这个东西啊
    avatar
    金钱利益
    初级会员
    初级会员

    帖子数 : 8
    威望 : 1
    注册日期 : 12-11-28
    年龄 : 26
    地点 : 湖北黄石

    回复: 贪吃蛇源代码

    帖子 由 金钱利益 于 2013-01-08, 11:05 pm

    EMU8086 直接生成exe就行了
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    回复: 贪吃蛇源代码

    帖子 由 Admin 于 2013-01-08, 11:21 pm

    金钱利益 写道::EMU8086 直接生成exe就行了

    嗯嗯,好的
    avatar
    金钱利益
    初级会员
    初级会员

    帖子数 : 8
    威望 : 1
    注册日期 : 12-11-28
    年龄 : 26
    地点 : 湖北黄石

    回复: 贪吃蛇源代码

    帖子 由 金钱利益 于 2013-01-08, 11:29 pm

    :bom:

      目前的日期/时间是2018-07-22, 3:11 am