當前位置:編程學習大全網 - 源碼下載 - 要求用匯編語言編寫的小遊戲程序

要求用匯編語言編寫的小遊戲程序

Code SEGMENT

Assume CS:Code, DS:Code

Org 100h

start: push 0b800h

pop es

push cs

pop ds

mov cx, 0fffh ;========清屏

rep stosw

drawfen: ;========分數標簽

lea si, fen

mov di, 160+10

call print

sub di, 4

mov [fi], di ;label cursor

drawfoot: ;========擺放食物

mov di, 160+40

mov ax, 0a05h

mov cl, 8

drf: add di, 160*2+90

stosw

loop drf

drawQian: ;========繪制墻壁

xor di, di

mov cl, 80

mov ax, 0C1Fh

repnz stosw

mov di, 160*24

mov cl, 80

mov ax, 0C1Eh

repnz stosw

xor di, di

mov cl, 24

mov ax, 0C10h

Q1: mov es:[di], ax

add di, 160

loop Q1

mov di, 158

mov cl, 24

mov ax, 0C11h

Q2: mov es:[di], ax

add di, 160

loop Q2

;============================初始化蛇的數據

InitS: mov bp, 0 ;bp=方向, ch=節數, [Snake+_newxy]=XY坐標

mov ch, 3

mov word ptr[Snake+_newxy], _center

MainL: ;遊戲開始

Call movSnake

Call OperKey

jmp short MainL

exit: lea si, over

mov di, _center

call print

int 20h ;結束

;===========================移動頭

movSnake: lea si, snake

mov bx, word ptr[si+_newxy] ;get currentXY

push bx

add bx, word ptr[dir+bp] ;add offsetXY

mov ax, es:[bx]

cmp al, 01h ;撞到自己的身體

Je exit

cmp al, 10h ;撞到墻

Je exit

cmp al, 11h ;撞到墻

Je exit

cmp al, 1Eh ;撞到墻

Je exit

cmp al, 1Fh ;撞到墻

Je exit

cmp al, 05h ;吃食物

Jne mgo

Call Eat

mgo:

mov word ptr[si+_newxy],bx ;update

mov word ptr es:[bx], 0e02h ;drawHead ('_')

pop bx

mov word ptr[si+_oldxy], bx ;Save oldxy

add si, _len ;==============移動並繪制身體

mov cl, ch

dec cl

Jz mb

mlin:

push word ptr[si+_newxy] ;Save currentXY

mov di, word ptr[si-_len+_oldxy] ;get prev.oldxy

mov word ptr[si+_newxy], di ;update currentXY

mov ax, 1e01h ;draw body

stosw

pop word ptr[si+_oldxy] ;Save oldXY

add si, _len ;get next

dec cl

Jnz mlin

mov di, word ptr[si-_len+_oldxy] ;Erase the last!

xor ax, ax

stosw

mb: ret

;=======================吃食物

Eat: inc ch ;

Jns v0

Jmp exit

v0: mov word ptr es:[bx], 0 ;erase it

mov di, bx

add di, 90

cmp di, 0f00h

Jb v2

mov di, dx

and di, 0f00h

v2:mov word ptr es:[di], 0a05h

mov di, word ptr [fi] ;只能顯示到99

cmp byte ptr es:[di],'9'

JB v1

mov byte ptr es:[di], '0'

sub di, 2

v1: inc byte ptr es:[di]

ret

;=====================顯示字符串

print: mov ah, 0dh

sa: lodsb

stosw

cmp al, 0

jnz sa

ret

;=====================鍵盤操縱區

OperKey: ;the Operator key For Game

push bx cx

mov ah, 0

int 1ah

add dx, 4

mov bx, dx

wt: int 1ah

cmp dx, bx

jb wt

pop cx bx

in al, 60h

k0: cmp al, left

Jne k1

mov bp, 0

k1: cmp al, right

Jne k2

mov bp, 2

k2: cmp al, up

Jne k3

mov bp, 4

k3: cmp al, down

Jne k4

mov bp, 6

k4: cmp al, escape

Jne retk

Jmp exit

retk: ret

;========================數據區

over db 'GAME OVER', 0

fen db 'Score=000', 0

fi dw ?

dir dw -2, +2, -160, +160

_center equ 160*12+60

_newxy equ 0

_oldxy equ 2

_len equ 4

LEFT EQU 75

RIGHT EQU 77

UP EQU 72

DOWN EQU 80

ESCAPE EQU 1

Snake:

code ends

end start

  • 上一篇:求單機版(在沒聯網的情況下,壹個人跟電腦玩的那種)的麻將遊戲,最好是長沙麻將!!!
  • 下一篇:牛指數公式源代碼
  • copyright 2024編程學習大全網