汇编语言写的贪吃蛇小游戏源代码.docx

上传人:b****4 文档编号:3699862 上传时间:2022-11-24 格式:DOCX 页数:27 大小:17.42KB
下载 相关 举报
汇编语言写的贪吃蛇小游戏源代码.docx_第1页
第1页 / 共27页
汇编语言写的贪吃蛇小游戏源代码.docx_第2页
第2页 / 共27页
汇编语言写的贪吃蛇小游戏源代码.docx_第3页
第3页 / 共27页
汇编语言写的贪吃蛇小游戏源代码.docx_第4页
第4页 / 共27页
汇编语言写的贪吃蛇小游戏源代码.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

汇编语言写的贪吃蛇小游戏源代码.docx

《汇编语言写的贪吃蛇小游戏源代码.docx》由会员分享,可在线阅读,更多相关《汇编语言写的贪吃蛇小游戏源代码.docx(27页珍藏版)》请在冰豆网上搜索。

汇编语言写的贪吃蛇小游戏源代码.docx

汇编语言写的贪吃蛇小游戏源代码

DATASEGMENT

dw0,0

snkdb1

blkdb32

fooddb3

tal1db4

tal2db2

adrsdb5

lendb?

pstdb?

addrsdw?

frowdb?

fcoldb?

hwrtdb?

gmovdb'gameoverpressrtorestartpressqtoquit$'

score1db'score:

$'

score2db?

score0db1

zerodb48

writerdb'Developer:

Geniusdot$'

emaildb':

geniusdotgmail.$'

msg1db'Thewaytoplaythegame:

$'

waydb'presswtoup,pressstodown,pressatoleft,pressdtoright$'

msgdb'Pressanykey(excepta,s,d,w)tostart$'

DATAENDS

STACKSEGMENTstack

db200dup(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

start:

movax,data

movds,ax

movax,0

moves,ax

movfrow,10

movfcol,6

movdh,10

movdl,26

movah,2

movbh,0

int10h

movah,9

leadx,msg1

int21h

movdh,11

movdl,7

movah,2

movbh,0

int10h

movah,9

leadx,way

int21h

movdh,12

movdl,20

movah,2

movbh,0

int10h

movah,9

leadx,msg

int21h

movah,0

int16h

movah,6

moval,0

movch,0

movcl,0

movdh,24

movdl,79

movbh,10

int10h

movdh,0

movdl,0

movah,2

movbh,0

int10h

movah,9

leadx,score1

int21h

movdl,15

movah,2

movbh,0

int10h

movah,9

leadx,writer

int21h

movah,9

leadx,email

int21h

movscore2,48

pushes:

[9*4];将原int9入口地址保存

popds:

[0]

pushes:

[9*4+2]

popds:

[2]

movwordptres:

[9*4],offsetint9;更改中断向量表

moves:

[9*4+2],cs

 

jmpaa

writemacrorow,col,cnt;宏定义用于向当前光标处输出字符

pushbx

pushcx

pushdx

movdh,row

movdl,col

movah,2

movbh,0

int10h

movah,9

movbl,11

movcx,1

leadi,cnt;50

moval,[di]

int10h

popdx

popcx

popbx

endm

readhmacrorow,col;宏定义用于读出当前光标处字符

pushdx

pushax

pushbx

movdh,row

movdl,col

movah,2

movbh,0

int10h

movah,08h

int10h

movpst,al

popbx

popax

popdx

endm

wnearmacro;宏定义只用在readcg宏中当readcg的所有判断都不成立调用此宏

localwnext1

localwnext2

localwnext3

localwnext4

pushdx

decdh

readhdh,dl

cmppst,1

jnewnext1

writedh,dl,tal2

jmpwnext4

wnext1:

incdh

decdl

readhdh,dl

cmppst,1

jnewnext2

writedh,dl,tal2

jmpwnext4

wnext2:

incdh

incdl

readhdh,dl

cmppst,1

jnewnext3

writedh,dl,tal2

jmpwnext4

wnext3:

decdh

incdl

readhdh,dl

cmppst,1

jnewnext4

writedh,dl,tal2

wnext4:

popdx

endm

 

readcgmacrorow,col;宏定义用于改变判断出来的字符

localtnup,tnup1,tnup2,tnlf,tnlf1,tnlf2,tndn,tndn1,tndn2,tnrt,tnrt1,tnrt2,goout

pushbx

pushax

pushdx

writedh,dl,tal1

decrow

readhdh,dl

cmppst,4

jnetnup1

jmptnup2

tnup1:

jmpnearptrtnup

tnup2:

writedh,dl,blk

incdh

incdh

readhdh,dl

cmppst,1

jnetnup

writedh,dl,tal2

jmpnearptrgoout

tnup:

popdx

pushdx

deccol

readhdh,dl

cmppst,4

jnetnlf1

jmptnlf2

tnlf1:

jmpnearptrtnlf

tnlf2:

writedh,dl,blk

incdl

incdl

readhdh,dl

cmppst,1

jnetnlf

writedh,dl,tal2

jmpnearptrgoout

tnlf:

popdx

pushdx

incrow

readhdh,dl

cmppst,4

jnetndn1

jmptndn2

tndn1:

jmpnearptrtndn

tndn2:

writedh,dl,blk

decdh

decdh

readhdh,dl

cmppst,1

jnetndn

writedh,dl,tal2

jmpnearptrgoout

tndn:

popdx

pushdx

inccol

readhdh,dl

cmppst,4

jnetnrt1

jmptnrt2

tnrt1:

jmpnearptrtnrt

tnrt2:

writedh,dl,blk

decdl

decdl

readhdh,dl

cmppst,1

jnetnrt

writedh,dl,tal2

jmpnearptrgoout

tnrt:

popdx

pushdx

wnear

goout:

popdx

popax

popbx

endm

 

addone:

;此标号功能是将蛇身增加一

pushdx

incscore2

movdh,1

movdl,0

movcx,23

cmpad1:

pushcx

movcx,79

cmpad2:

readhdh,dl

cmppst,2

jnenextad3

jmpnextad4

nextad3:

jmpnearptrnextad

nextad4:

writedh,dl,snk

decdh

readhdh,dl

cmppst,4

jnenatup

writedh,dl,tal2

decdh

writedh,dl,tal1

jmpouto

natup:

incdh

decdl

readhdh,dl

cmppst,4

jnenatlf

writedh,dl,tal2

decdl

writedh,dl,tal1

jmpouto

natlf:

incdh

incdl

readhdh,dl

cmppst,4

jnenatdn

writedh,dl,tal2

incdh

writedh,dl,tal1

jmpouto

natdn:

decdh

incdl

readhdh,dl

cmppst,4

jnenatrt

writedh,dl,tal2

incdl

writedh,dl,tal1

natrt:

outo:

popcx

jmpnearptrendad

nextad:

incdl

jmpnextad2

chgad2:

jmpnearptrcmpad2

nextad2:

loopchgad2

subdl,79

incdh

popcx

jmpnextad1

chgad1:

jmpnearptrcmpad1

nextad1:

loopchgad1

endad:

popdx

jmpnearptrcrtf

 

aa:

;从这开始产生最原始的蛇

movaddrs,offsetturnright

movdh,10

movdl,1

movcx,3

writedh,dl,tal1

incdl

writedh,dl,tal2

wrt:

incdl

writedh,dl,snk

loopwrt

movlen,6

movax,0

jmpwrt1

ovflw:

;当蛇碰壁或自身转到此游戏结束

movah,6

moval,0

movch,0

movcl,0

movdh,24

movdl,79

movbh,7

int10h

movdh,17

movdl,17

movah,2

movbh,0

int10h

movah,9

leadx,gmov

int21h

movax,0;恢复int9中断

moves,ax

pushds:

[0]

popes:

[9*4]

pushds:

[2]

popes:

[9*4+2]

stop:

movah,0

int16h

cmpal,'r'

jeaa1

jmpaa2

aa1:

jmpnearptrstart

aa2:

cmpal,'q'

jnestop

jmpnearptrexit

wrt1:

;此处蛇行走过程的无限循环

calldly

pushdx

incdh

cmpdh,25

jeovflw

incdl

cmpdl,80

jeovflw

popdx

pushdx

decdh

cmpdh,0

jeovflw

decdl

cmpdl,-1

jeovflw

popdx

pushdx

leaax,turnright

cmpaddrs,ax

jnetonxt2

incdl

readhdh,dl

cmppst,1

jetonxt1

cmppst,2

jetonxt1

cmppst,4

jetonxt1

jmptonxt2

tonxt1:

jmpovflw

tonxt2:

popdx

pushdx

leaax,turnup

cmpaddrs,ax

jnetonxt4

decdh

readhdh,dl

cmppst,1

jetonxt3

cmppst,2

jetonxt3

cmppst,4

jetonxt3

jmptonxt4

tonxt3:

jmpovflw

tonxt4:

popdx

pushdx

leaax,turndown

cmpaddrs,ax

jnetonxt6

incdh

readhdh,dl

cmppst,1

jetonxt5

cmppst,2

jetonxt5

cmppst,4

jetonxt5

jmptonxt6

tonxt5:

jmpovflw

tonxt6:

popdx

pushdx

leaax,turnback

cmpaddrs,ax

jnetonxt8

decdl

readhdh,dl

cmppst,1

jetonxt7

cmppst,2

jetonxt7

cmppst,4

jetonxt7

jmptonxt8

tonxt7:

jmpovflw

tonxt8:

popdx

jmpnexta

crtf1:

jmpnearptraddone

crtf:

callrand1

callrand2

incfrow

movah,frow

moval,fcol

pushdx

movdh,1

movdl,0

pushcx

movcx,23

check1:

pushcx

movcx,79

check2:

readhdh,dl

cmppst,1

jenextn

cmppst,2

jenextn

cmppst,4

jenextn

jmpnextnn

nextn:

cmpax,dx

jecrtf

nextnn:

incdl

loopcheck2

incdh

subdl,79

popcx

loopcheck1

popcx

popdx

writefrow,fcol,food

nexta:

movah,frow

moval,fcol

cmpax,dx

jecrtf12

jmpcrtf13

crtf12:

jmpnearptrcrtf1

crtf13:

pushdx

cmpscore2,58

jlnormal

movscore2,49

incscore0

normal:

movdh,0

movdl,8

writedh,dl,score2

adddl,score0

writedh,dl,zero

popdx

cmpadrs,17

jejmp1

cmpadrs,145

jejmp1

cmpadrs,31

jejmp2

cmpadrs,159

jejmp2

cmpadrs,32

jejmp3

cmpadrs,160

jejmp3

cmpadrs,30

jejmp4

cmpadrs,158

jejmp4

jmpaddrs

jmp1:

leaax,turndown

cmpax,addrs

jejmp2

movaddrs,offsetturnup

jmpnearptrturnup

jmp2:

leaax,turnup

cmpax,addrs

jejmp1

movaddrs,offsetturndown

jmpnearptrturndown

jmp3:

leaax,turnback

cmpax,addrs

jejmp4

movaddrs,offsetturnright

jmpnearptrturnright

jmp4:

leaax,turnright

cmpax,addrs

jejmp3

movaddrs,offsetturnback

jmpnearptrturnback

 

turnright:

;此处实现蛇向左走

pushdx

movdh,1

movdl,0

movcx,23

cmpr1:

pushcx

movcx,79

cmpr2:

readhdh,dl

cmppst,2

jenextr4

jmpnearptrnextr

nextr4:

readcgdh,dl

popcx

jmpnearptrendr

nextr:

incdl

jmpnextr2

chgr2:

jmpnearptrcmpr2

nextr2:

loopchgr2

subdl,79

incdh

popcx

jmpnextr1

chgr1:

jmpnearptrcmpr1

nextr1:

loopchgr1

endr:

popdx

incdl

writedh,dl,snk

jmpnearptrwrt1

 

turnup:

;此处实现蛇向上走

pushdx

movdh,1

movdl,0

movcx,23

cmpu1:

pushcx

movcx,79

cmpu2:

readhdh,dl

cmppst,2

jnenextu3

jmpnextu4

nextu3:

jmpnearptrnextu

nextu4:

readcgdh,dl

popcx

jmpnearptrendu

nextu:

incdl

jmpnextu2

chgu2:

jmpnearptrcmpu2

nextu2:

loopchgu2

subdl,79

incdh

popcx

jmpnextu1

chgu1:

jmpnearptrcmpu1

nextu1:

loopchgu1

endu:

popdx

decdh

writedh,dl,snk

jmpnearptrwrt1

 

turndown:

;此处实现蛇向下走

pushdx

movdh,1

movdl,0

movcx,23

cmpd1:

pushcx

movcx,79

cmpd2:

readhdh,dl

cmppst,2

jnenextd3

jmpnextd4

nextd3:

jmpnearptrnextd

nextd4:

readcgdh,dl

popcx

jmpnearptrendd

nextd:

incdl

jmpnextd2

chgd2:

jmpnearptrcmpd2

nextd2:

loopchgd2

subdl,79

incdh

popcx

jmpnextd1

chgd1:

jmpnearptrcmpd1

nextd1:

loopchgd1

endd:

popdx

incdh

writedh,dl,snk

jmpnearptrwrt1

 

turnback:

;此处实现蛇向右走

pushdx

movdh,1

movdl,0

movcx,23

cmpb1:

pushcx

movcx,79

cmpb2:

readhdh,dl

cmppst,2

jnenextb3

jmpnextb4

nextb3:

jmpnearptrnextb

nextb4:

readcgdh,dl

popcx

jmpnearptrendb

nextb:

incdl

jmpnextb2

chgb2:

jmpnearptrcmpb2

nextb2:

loopchgb2

subdl,79

incdh

popcx

jmpnextb1

chgb1:

jmpnearptrcmpb1

nextb1:

loopchgb1

endb:

popdx

decdl

writedh,dl,snk

jmpnearptrwrt1

 

exit:

 

movax,0;恢复int9中断

moves,ax

pushds:

[0]

popes:

[9*4]

pushds:

[2]

popes:

[9*4+2]

 

movah,4ch

int21h

int9:

;更改后的中断服务程序

pushax

inal,60h

movadrs,al

moval,20h

out20h,al

popax

iret

 

DLYPROCnear;延时子程序

PUSHCX

PUSHDX

MOVDX,10000

DL1:

MOVCX,9801

DL2:

LOOPDL2

DECDX

JNZDL1

POPDX

POPCX

RET

DLYENDP

RAND1PROC

PUSHCX

PUSHDX

PUSHAX

STI

MOVAH,0;读时钟计数器值

INT1AH

MOVAX,DX;清高6位

ANDAH,3

MOVDL,23;除23,产生0~23余数

DIVDL

MOVfrow,AH;余数存frow,作随机行数

POPAX

POPDX

POPCX

RET

RAND1ENDP

RAND2PROC

PUSHCX

PUSHDX

PUSHAX

STI

MOVAH,0;读时钟计数器值

INT1AH

MOVAX,DX;清高6位

ANDAH,3

MOVDL,79;除79,产生0~79余数

DIVDL

MOVfcol,AH;余数存fcol,作随机列数

POPAX

POPDX

POPCX

RET

RAND2ENDP

CODEENDS

ENDstart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1