📄 源代码.asm
字号:
jne n1
mov byte ptr mchess[bp][si],'b' ;for store chess
call showbchess ;show backchess
; call stopbtime
mov exflg,0
call bjudgechess ;judge up to five backchess
cmp exflg,1
je inmouse1 ;up to five
jmp n2
inmouse2:
jmp inmouse1
exit12: ;out of jump 75byte
jmp exit1
; call wchesstime
n2: ;for white chess
mov ah,1
int 16h
jnz inkey1
call mousepressed
cmp ax,1
jb n2
; shr cx,1
cmp cx,90
jb n2
cmp cx,390
jb wchesspan1
cmp cx,515
jb n2
cmp cx,605
ja n2
cmp dx,77
jb n2
cmp dx,288
ja n2
jmp inm
wchesspan1:
cmp dx,90
jb n2
cmp dx,390
ja n2
wchesspan2:
call countmemchess
cmp byte ptr mchess[bp][si],0
jne n2
mov byte ptr mchess[bp][si],'w'
call showwchess
; call stopwtime
mov exflg,0
call wjudgechess
cmp exflg,1
je inmouse2
jmp start1
exit1:
ret
submain endp
;------------------------------
mainfrm2 proc near
cmp colorflg,1 ;for change chessblock
ja chang1
blockpos 3,402,402,78,78
jmp block1
chang1:
cmp colorflg,2
ja chang2
blockpos 5,402,402,78,78
jmp block1
chang2:
cmp colorflg,3
ja chang3
blockpos 8,402,402,78,78
jmp block1
chang3:
cmp colorflg,4
ja chang4
blockpos 7,402,402,78,78
jmp block1
chang4:
mov colorflg,0
blockpos 2,402,402,78,78
block1:
call colorblock ;for chess background
call linechess
ret
mainfrm2 endp
;----------------------------------
countmemchess proc near ;for search chess in mem pos
sub cx,90
mov bl,20
mov ax,cx
div bl
cmp ah,10
jb little1
inc al
little1:
mov a1,al
mov b1,ah
and ax,00ffh
mov si,ax ;for horizion pos
sub dx,90
mov bl,20
mov ax,dx
div bl
cmp ah,10 ; < 10 ?
jb little2
inc al
little2:
mov a2,al
mov b2,ah
and ax,00ffh
mov ccount,al
mov bl,16
mul bl
mov bp,ax
ret
countmemchess endp
;---------------------------------
chessopen1 proc near ; open chess
blockpos 6,402,402,78,78
call colorblock
call linechess
mov di,0
mov mflg1,di
rotate1:
cmp byte ptr tempmchess[di],'b'
je showback
cmp byte ptr tempmchess[di],'w'
je showwhite
jmp nextchess
showback:
mov cl,tempmchess[di]
mov mchess[di],cl
mov ax,di
mov bl,16
div bl
mov ccount,al
mov dl,ah
and dx,00ffh
mov si,dx
call showbchess
jmp nextchess
showwhite:
mov cl,tempmchess[di]
mov mchess[di],cl
mov ax,di
mov bl,16
div bl
mov ccount,al
mov dl,ah
and dx,00ffh
mov si,dx
call showwchess
nextchess:
inc mflg1
mov di,mflg1
; inc di
cmp di,256
jbe rotate1
ret
chessopen1 endp
;-----------------------------------------
showbchess proc near ;show black chess in pan
push bp
push si
push di
mov chessrad,10
mov ax,si ;calculate x and y
and ax,00ffh
mov bl,20
mul bl
add ax,90
mov x,ax
mov al,ccount
mov bl,20
mul bl
add ax,90
mov y,ax
call mouseshut
mov al,chessrad
cbw
mov di,ax
loopx:
mov al,chessrad
cbw
mov si,ax
loopy:
cal si ;calcuate (x-x0)*(x-x0)
mov tempt1,ax
cal di ;calcuate (y-y)*(y-y0)
add tempt1,ax
mov al,chessrad
cbw
cal ax
sub tempt1,ax ;(x-x0)*(x-x0)+(y-y0)*(y-y0)-R*R
jns nextd ; if > 0 ?
mov dx,y ; < 0 in circle
mov cx,x
call writeb ;write pit in (x,y)
add dx,di
add cx,si
call writeb ;write pit in (x+si,y+di)
sub cx,si
sub cx,si
call writeb ;write pit in (x-si,y+di)
mov dx,y
mov cx,x
sub dx,di
sub cx,si
call writeb ;write pit in (x-si,y-di)
add cx,si
add cx,si
call writeb ;write pit in (x+si,y-di)
nextd:
dec si
cmp si,0
jl nextdb
jmp loopy
nextdb:
dec di
cmp di,0
jl exitdb
jmp loopx
exitdb:
call mouseshow
pop di
pop si
pop bp
ret
showbchess endp
;-------------------------------
writeb proc near
mov al,0
mov ah,0ch
int 10h
exitw:
ret
writeb endp
;------------------------------------
showwchess proc near ;for show whitechess in pan
push bp
push si
push di
mov chessrad,10
mov ax,si
and ax,00ffh
mov bl,20
mul bl
add ax,90
mov cx,ax
mov x,cx
mov al,ccount
mov bl,20
mul bl
add ax,90
mov dx,ax
mov y,dx
call mouseshut
mov al,chessrad
cbw
mov di,ax
wloopx:
mov al,chessrad
cbw
mov si,ax
wloopy:
cal si
mov tempt1,ax
cal di
add tempt1,ax
mov al,chessrad
cbw
cal ax
sub tempt1,ax
jns wnextd
mov dx,y
mov cx,x
call writew
add dx,di
add cx,si
call writew
sub cx,si
sub cx,si
call writew
mov dx,y
mov cx,x
sub dx,di
sub cx,si
call writew
add cx,si
add cx,si
call writew
wnextd:
dec si
cmp si,0
jl wnextdb
jmp wloopy
wnextdb:
dec di
cmp di,0
jl wexitdb
jmp wloopx
wexitdb:
call mouseshow
pop di
pop si
pop bp
ret
showwchess endp
;------------------------------
writew proc near
; mov ah,0dh
; int 10h
; cmp al,9
; je wexitw
mov al,0fh
mov ah,0ch
int 10h
wexitw:
ret
writew endp
;-----------------------------------
bjudgechess proc near ;judge if five black chess
mov row2,bp
mov col2,si
horizion: ;judge horizion
sub si,4
mov ch,5
cp1:
mov cl,0
mov bx,si
cp2:
cmp mchess[bp][si],'b'
jne unsame1
inc si
inc cl
cmp cl,5
je exitaa
jmp cp2
unsame1:
inc bx
mov si,bx
dec ch
jnz cp1
vertical: ;judge vertical
mov bp,row2
mov si,col2
sub bp,4*16
mov ch,5
cp3:
mov cl,0
mov bx,bp
cp4:
cmp mchess[bp][si],'b'
jne unsame2
add bp,16
inc cl
cmp cl,5
je exitaa
jmp cp4
unsame2:
add bx,16
mov bp,bx
dec ch
jnz cp3
jmp direct1
exitaa:
jmp exita
direct1: ;judge direct1
mov bp,row2
mov si,col2
sub bp,4*16
sub si,4
mov ch,5
cp5:
mov cl,0
mov bx,bp
mov di,si
cp6:
cmp mchess[bp][si],'b'
jne unsame3
add bp,16
inc cl
inc si
cmp cl,5
je exita
jmp cp6
unsame3:
add bx,16
inc di
mov bp,bx
mov si,di
dec ch
jnz cp5
direct2: ;judge direct2
mov bp,row2
mov si,col2
sub bp,4*16
add si,4
mov ch,5
cp7:
mov cl,0
mov bx,bp
mov di,si
cp8:
cmp mchess[bp][si],'b'
jne unsame4
inc cl
add bp,16
dec si
cmp cl,5
je exita
jmp cp8
unsame4:
add bx,16
dec di
mov bp,bx
mov si,di
dec ch
jnz cp7
jmp exitb
exita:
setcursor 15,20 ;for blackwin
call mouseshut
showmessage mc
call mouseshow
mov exflg,1
exitb:
ret
bjudgechess endp
;--------------------------
wjudgechess proc near ;judge if five white chess
mov row2,bp
mov col2,si
whorizion: ;judge horizion
sub si,4
mov ch,5
wcp1:
mov cl,0
mov bx,si
wcp2:
cmp mchess[bp][si],'w'
jne wunsame1
inc si
inc cl
cmp cl,5
je wexitaa
jmp wcp2
wunsame1:
inc bx
mov si,bx
dec ch
jne wcp1
wvertical: ;judge vertical
mov bp,row2
mov si,col2
sub bp,4*16
mov ch,5
wcp3:
mov cl,0
mov bx,bp
wcp4:
cmp mchess[bp][si],'w'
jne wunsame2
add bp,16
inc cl
cmp cl,5
je wexitaa
jmp wcp4
wunsame2:
add bx,16
mov bp,bx
dec ch
jnz wcp3
jmp wdirect1
wexitaa:
jmp wexita
wdirect1: ;judge direct1
mov bp,row2
mov si,col2
sub bp,4*16
sub si,4
mov ch,5
wcp5:
mov cl,0
mov bx,bp
mov di,si
wcp6:
cmp mchess[bp][si],'w'
jne wunsame3
add bp,16
inc cl
inc si
cmp cl,5
je wexita
jmp wcp6
wunsame3:
add bx,16
inc di
mov bp,bx
mov si,di
dec ch
jnz wcp5
wdirect2: ;judge direct2
mov bp,row2
mov si,col2
sub bp,4*16
add si,4
mov ch,5
wcp7:
mov cl,0
mov bx,bp
mov di,si
wcp8:
cmp mchess[bp][si],'w'
jne wunsame4
inc cl
add bp,16
dec si
cmp cl,5
je wexita
jmp wcp8
wunsame4:
add bx,16
dec di
mov bp,bx
mov si,di
dec ch
jnz wcp7
jmp wexitb
wexita:
setcursor 15,20 ;for blackwin
call mouseshut
showmessage md
call mouseshow
mov exflg,1
wexitb:
ret
wjudgechess endp
;--------------------------------------
chesssave1 proc near
blockpos 1,64,385,46,173
call colorblock ;for save frame color
setcursor 3,22
showmessage msave
setcursor 3,42
mov al,'Y' ;for 'Y' output
mov bl,10110100b
mov cx,1
mov ah,9
int 10h
setcursor 3,44 ;for or output
showmessage msor
setcursor 3,47
mov al,'N'
mov bl,10110100b
mov cx,1
mov ah,9
int 10h
wait1:
mov ah,1
int 16h
jz wait1
cmp ah,15h ;15h is yes scan code
je save2
cmp ah,31h ;31h is no scan code
je no_save
jmp wait1
save2:
mov ah,0ch ; clear buffter
mov al,0
int 21h
lea si,mchess ;save information
lea di,tempmchess
mov cx,256
cld
rep movsb
jmp clsframe
no_save:
mov ah,0ch ;for clear buffter
mov al,0
int 21h
clsframe:
blockpos 9,64,385,46,173, ;clear saveframe
call colorblock
ret
chesssave1 endp
;---------------------------------------
chessabout1 proc near
xor aboutflg,11111111b ;for is show name
cmp aboutflg,1
je hideabout
setcursor 26,34
showmessage mprod
setcursor 27,16
showmessage mhuang
setcursor 27,48
showmessage mzhao
setcursor 28,4
showmessage mzhu
setcursor 28,33
showmessage mwu
setcursor 28,63
showmessage mhong
jmp t1
hideabout:
blockpos 9,468,620,416,32
call colorblock
t1:
ret
chessabout1 endp
;-------------------------------
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -