ورود

View Full Version : گفتگو: بازی Snake (خیلی خیلی خیلی ... خیلی ساده و مبتدی)



khazaie01
جمعه 15 خرداد 1388, 23:34 عصر
سلام دوستان
من این ترم اسمبلی دارم یا بهتر بگم داشتم و در طول ترم یک برنامه هم ننوشتم ... استادمون برای این درس گفت بازی Snake را درست کنید البته فقط بتونه حرکت کنه ... این اولین برنامه ای که با اسمبلی نوشتم میذارمش اینجا تا یکم بخندید :لبخند:




include io.h

data segment
GameOverS db " Game Over ",0
WinnerS db "You Winner",0
kerm db 50 dup(2 dup(?))
screen db 80 dup(25 dup(?))
c db 1 dup(?)
v db 1 dup(?)
i dw 1 dup(?)
j dw 1 dup(?)
f db 1 dup(?)
f2 db 1 dup(?)
n db 1 dup(?)
t db 1 dup(?)
last dw 1 dup(?)
lastn db 1 dup(?)
data ends

stack1 segment
dw 32 dup(?)
stack1 ends

;**************************** Procedure Codes Segment *******************************

ProcedureCodes segment
assume cs:ProcedureCodes,ds:data,ss:stack1
Pclrscr proc far
mov ah,0
mov al,3
int 10h
Pclrscr endp
Pcout proc far
mov dl,25
mov ah,2
int 21h
Pcout endp
ProcedureCodes ends

;**************************** Macro Codes Segment ***********************************

MacroCodes segment
assume cs:MacroCodes,ds:data,ss:stack1

MSetKermMane macro MSKMx
local Lf,LSh2
mov f,0
Lf:
mov ax,0
mov al,2
mov bl,f
mul bl
mov bx,ax

mov ax,0
mov al,kerm[bx][1]
mov bl,kerm[bx][0]
mov si,ax
mov ax,0
mov al,25
mul bl
mov bx,ax
mov screen[bx][si],MSKMx

inc f
mov al,n
dec al
cmp f,al
jne Lf
endm
MSetForCheck macro
mov ah,0
mov al,25
mov si,last
mov bl,kerm[si][0]
mul bl
mov bx,ax
mov ah,0
mov si,last
mov al,kerm[si][1]
mov si,ax
endm
Msetkerm macro MSi,MSx,MSy
mov al,2
mov bl,MSi
mul bl
mov bx,ax
mov kerm[bx][0],MSx
mov al,2
mov bl,MSi
mul bl
mov bx,ax
mov kerm[bx][1],MSy
endm

Msetscreen macro MSSx,MSSy,MSSm
mov al,25
mov bl,MSSx
mul bl
mov bx,ax
mov ah,0
mov al,MSSy
mov si,ax
mov screen[bx][si],MSSm
endm


Mjabeja macro
local Lf
mov f,1
Lf:
mov ax,0
mov al,2
mov bl,f
mul bl
mov bx,ax
mov bp,bx
sub bp,2
mov al,kerm[bx][0]
mov ah,kerm[bx][1]
mov kerm[bp][0],al
mov kerm[bp][1],ah
inc f
mov al,n
cmp f,al
jne Lf
MSetKermMane 1
endm

Mstart macro
local Lf1,Lf2,LF3,LF4,L,L2
mov ax, SEG data
mov ds,ax
mov n,5
mov last,8
mov lastn,4
mov v,'L'
Msetkerm 0,75,10
Msetkerm 1,74,10
Msetkerm 2,73,10
Msetkerm 3,72,10
Msetkerm 4,71,10

Msetscreen 45,15,3
Msetscreen 60,14,3
Msetscreen 50,4,3
Msetscreen 30,19,3
Msetscreen 55,10,3
Msetscreen 60,3,3
Msetscreen 50,20,3
Msetscreen 30,20,3


Msetscreen 9,15,2
Msetscreen 50,14,2
Msetscreen 10,4,2
Msetscreen 5,19,2
Msetscreen 12,20,2
Msetscreen 20,1,2
Msetscreen 65,14,2
Msetscreen 75,19,2
Msetscreen 12,15,2
Msetscreen 20,14,2
Msetscreen 30,4,2
Msetscreen 50,19,2


mov f,1
Lf1:
Msetscreen f,24,1
Msetscreen f,0,1
inc f
cmp f,78
jne Lf1
mov f,1
Lf2:
Msetscreen 1,f,1
Msetscreen 77,f,1
inc f
cmp f,25
jne Lf2
mov f,5
Lf3:
Msetscreen 14,f,1
Msetscreen 53,f,1
inc f
cmp f,18
jne Lf3
mov f,25
Lf4:
Msetscreen f,6,1
Msetscreen f,20,1
inc f
cmp f,45
jne Lf4
endm


Mclrscr macro
mov ah,0
mov al,3
int 10h
;call far ptr Pclrscr
endm

Mend macro
mov al,0
mov ah,4ch
int 21h
endm

Mcout macro MCchar,MCx,MCy
;Makhfi Kardane Makan nama
mov cx,2000h
mov ah,1
int 10h
;GotoXY
mov ah,2
mov bh,0
mov dh,MCy
mov dl,MCx
int 10h
;Cout char
mov dl,MCchar
mov ah,2
int 21h
;call Pcout
endm

Mcheck macro
local L1,L2,L3,L4,Lexit
mov dl,0ffh
mov ah,6
int 21h
mov c,al

cmp c,'H'
jne L1
mov v,'U'
jmp Lexit
L1:
cmp c,'P'
jne L2
mov v,'D'
jmp Lexit
L2:
cmp c,'M'
jne L3
mov v,'R'
jmp Lexit
L3:
cmp c,'K'
jne L4
mov v,'L'
jmp Lexit
L4:
cmp c,13
jne Lexit
mov v,'E'
jmp Lexit
Lexit:
endm

Mdelay macro
local Li,Lj
mov i,0
mov j,0
Li:
inc i
Lj:
inc j
cmp j,0199
jne Lj
cmp i,0199
jne Li
endm

mshow macro MMc
local Lf,LSh2
mov f,0
Lf:
mov ax,0
mov al,2
mov bl,f
mul bl
mov bx,ax
Mcout MMC,kerm[bx][0],kerm[bx][1]

inc f
mov al,n
cmp f,al
jne Lf
MSetKermMane 0
endm

Mshowmgh macro
local Lf,LF2,L1,L0,L3,Lend2,Lend3
mov f,0
mov f2,0
Lf:
LF2:
mov ax,0
mov al,25
mov bl,f
mul bl
mov bx,ax
mov ah,0
mov al,f2
mov si,ax
cmp screen[bx][si],2
jne L0
Mcout '+',f,f2
L0:

cmp screen[bx][si],3
jne far ptr L3
Mcout '!',f,f2
L3:

cmp screen[bx][si],1
jne L1
Mcout '*',f,f2
L1:
inc f2
cmp f2,24
je Lend3
jmp far ptr LF2
Lend3:
inc f
cmp f,78
je Lend2
jmp far ptr Lf
Lend2:
endm
MacroCodes ends

;**************************** Main Codes Segment ************************************

MainCodes segment
assume cs:MainCodes,ds:data,ss:stack1
main:
Mstart
Mclrscr
Mshowmgh
HalgheAsli:

Mdelay
Mcheck
Mcheck
Mshow ' '
cmp v,'L'
jne ML1
Mjabeja
mov si,last
dec kerm[si][0]
jmp MLexit
ML1:
cmp v,'R'
jne ML2
Mjabeja
mov si,last
inc kerm[si][0]
jmp MLexit
ML2:
cmp v,'U'
jne ML3
Mjabeja
mov si,last
dec kerm[si][1]
jmp MLexit
mL3:
cmp v,'D'
jne MLexit
Mjabeja
mov si,last
inc kerm[si][1]
jmp MLexit
MLexit:
MSetForCheck
cmp screen[bx][si],1
jne L1
LEx:
Mclrscr;
Mcout '',32,15
output GameOverS
Mcout '',1,24
jmp LendProgram
L1:
MSetForCheck
cmp screen[bx][si],2
jne L0
mov screen[bx][si],0
mov si,last
mov al,kerm[si][0]
mov ah,kerm[si][1]
inc n
add last,2
mov si,last
mov kerm[si][0],al
mov kerm[si][1],ah
L0:
MSetForCheck
cmp screen[bx][si],3
jne L10
dec n
sub last,2
mov screen[bx][si],0
L10:
cmp n,12
jne Ls2
Mclrscr;
Mcout '',32,15
output WinnerS
Mcout '',1,24
jmp LendProgram
Ls2:
cmp n,1
jne Lsarekari
jmp far ptr LEx
Lsarekari:
Mshow '*'
cmp v,'E'
je far ptr LendProgram
jmp far ptr HalgheAsli
LendProgram:
Mend
ends MainCodes
end main

;****************************** THE END **********************************************