📄 go.asm
字号:
; dec ecx
; jnz @XX2
;
; ;从六线开始设成负值
;中间5*5的点上设负值
mov edi, MMradio.mem
add edi, 21*8*9
add edi, 8*9
mov @Edi, edi
mov eax, 0FFFCFFFCh
mov edx, 7
mov ecx, 7
@YY1:
mov [edi]+4, eax
add edi, 8
dec ecx
jnz @YY1
dec edx
jz @YY2
mov ecx, 5
mov edi, @Edi
add edi, 21*8
mov @Edi, edi
jmp @YY1
;
;
mov edi, MMradio.mem ;
add edi, 21*8*13 ;
add edi, 8*11 ;
mov @Edi, edi ;
mov eax, 0000000h ;
mov edx, 6 ;
mov ecx, 6 ;
@YY11: ;
mov [edi]+4, eax ;
add edi, 8 ;
dec ecx ;
jnz @YY11 ;
dec edx ;
jz @YY2 ;
mov ecx, 6 ;
mov edi, @Edi ;
add edi, 21*8 ;
mov @Edi, edi ;
jmp @YY1 ;
@YY2:
;
mov eax, @FirstQipan
add eax, MemQiPanStep
mov @SecondQipan, eax
;MessageHex @SecondQipan ;delthis
;MessageHex @FirstQipan ;delthis
invoke _MRM_CopyQipan, @FirstQipan, @SecondQipan
mov MMradio.status, MMS_RUNNING
ret
_InitMakeRadioMove endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_InitAllCanPutList proc
;初始化所有可着点之列表
;维护部分放在界面程序中
;是否会引发数据同步的问题
invoke GlobalAlloc, GPTR, 1600
.if eax == NULL
Message '“初始化所有可着点之列表”模块申请内存失败!'
ret
.endif
mov esi, eax
mov lpCanPutList, eax
;可着点有361个;
;add esi, dwCPLCount
;mov [esi], dword ptr 361
mov dword ptr dwCPLCount, 361
mov edi, eax ;edi放数据的位置
mov esi, 22 *8 ;esi为相对位移数据
mov ecx, 19 ;ecx为X计数
mov eax, 19 ;eax为Y计数
@@:
mov [edi],esi
add esi, 8
add edi, 4
sub ecx, 1
.if ecx == 0
;
sub eax, 1
.if eax == 0
ret
.elseif
mov ecx, 19
add esi, 16
jmp @B
.endif
.elseif
jmp @B
.endif
ret
_InitAllCanPutList endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_UnloadAllCanPutList proc
;
;
invoke GlobalFree, lpCanPutList
ret
_UnloadAllCanPutList endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
StoneValue equ 128
MRMLineStep equ 21 * 8
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
;StoneValue equ 128
;MRMLineStep equ 21 * 8
_MRMiCount word 100
_MRMiZiShu word 0
_MRMdwEsi dword 300 dup (?)
.code
;--------------------------------------------------------------------
_MRMTiZi proc _Esi
;将此点及相邻的同色棋子
;清零及设其辐射值
;其辐射点的辐射值?
local @Esi
local @Color:word
mov esi, _Esi
mov @Esi, esi
mov dx, [esi]
mov @Color, dx
xor eax, eax
mov word ptr _MRMiZiShu, 0
mov edi, offset _MRMdwEsi
.if dx == BlackStone
mov ecx, 0FFE00060h
.elseif dx == WhiteStone
mov ecx, 00060FFE0h
.endif
mov [esi], eax
mov [esi] + 4, ecx
@Next:
;下一路
mov esi, @Esi
add esi, MRMLineStep
mov dx, [esi]
.if dx == @Color
mov [edi], esi
add edi, 4
add word ptr _MRMiZiShu, 1 ;数目加1
mov [esi], eax
mov [esi] + 4, ecx
.endif
;上一路
mov esi, @Esi
sub esi, MRMLineStep
mov dx, [esi]
.if dx == @Color
mov [edi], esi
add edi, 4
add word ptr _MRMiZiShu, 1 ;数目加1
mov [esi], eax
mov [esi] + 4, ecx
.endif
;左一路
mov esi, @Esi
sub esi, 8
mov dx, [esi]
.if dx == @Color
mov [edi], esi
add edi, 4
add word ptr _MRMiZiShu, 1 ;数目加1
mov [esi], eax
mov [esi] + 4, ecx
.endif
;右一路
mov esi, @Esi
add esi, 8
mov dx, [esi]
.if dx == @Color
mov [edi], esi
add edi, 4
add word ptr _MRMiZiShu, 1 ;数目加1
mov [esi], eax
mov [esi] + 4, ecx
.endif
.if word ptr _MRMiZiShu != 0
sub edi, 4
mov esi, [edi]
mov @Esi, esi
sub word ptr _MRMiZiShu, 1
jmp @Next
;
.endif
ret
_MRMTiZi endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;.data
;StoneValue equ 128
;MRMLineStep equ 21 * 8
;_MRMiCount word 100
;_MRMiZiShu word 0
;_MRMdwEsi dword 300 dup<?>
;.code
;--------------------------------------------------------------------
_MRMYouQi proc _Esi, _Color
;看此点是否有气
;返回零表示此子无气;如有气,返回1
local @Color:word ;当前点色
local @Esi ;当前点
;
push esi
mov esi, _Esi
add word ptr _MRMiCount, 1
.if CARRY?
mov word ptr _MRMiCount, 100h
.endif
mov word ptr _MRMiZiShu, 0
mov eax, _Color
mov @Color, ax
mov @Esi, esi
mov edi, offset _MRMdwEsi
mov dx, _MRMiCount
;当前情况为:word ptr @Color为原点颜色
;esi为当前点
;edi为未处理完点之列表
;word ptr _MRMiZiShu为未处理完点之个数
;word ptr _MRMiCount为当前标记值
;dx为当前标记值
@Next:
;处理下一路
add esi, MRMLineStep
mov ax, [esi] ;取颜色值
.if ax == 0 ;如为空,则直接返回
mov eax, 1
pop esi
ret
.elseif ax == @Color ;如为相同颜色,则标记后存起
mov bx, [esi] + 2
.if bx != dx ;如此轮没有经过
mov [esi] + 2, dx ;设经过标记
mov [edi], esi ;保存此点
add edi, 4 ;游标向前
add word ptr _MRMiZiShu, 1 ;数目加1
.endif
;其它不用处理
.endif
;处理上一路
mov esi, @Esi
sub esi, MRMLineStep
mov ax, [esi] ;取颜色值
.if ax == 0 ;如为空,则直接返回
mov eax, 1
pop esi
ret
.elseif ax == @Color ;如为相同颜色,则标记后存起
mov bx, [esi] + 2
.if bx != dx ;如此轮没有经过
mov [esi] + 2, dx ;设经过标记
mov [edi], esi ;保存此点
add edi, 4 ;游标向前
add word ptr _MRMiZiShu, 1 ;数目加1
.endif
;其它不用处理
.endif
;处理左一路
mov esi, @Esi
sub esi, 8
mov ax, [esi] ;取颜色值
.if ax == 0 ;如为空,则直接返回
mov eax, 1
pop esi
ret
.elseif ax == @Color ;如为相同颜色,则标记后存起
mov bx, [esi] + 2
.if bx != dx ;如此轮没有经过
mov [esi] + 2, dx ;设经过标记
mov [edi], esi ;保存此点
add edi, 4 ;游标向前
add word ptr _MRMiZiShu, 1 ;数目加1
.endif
;其它不用处理
.endif
;处理右一路
mov esi, @Esi
add esi, 8
mov ax, [esi] ;取颜色值
.if ax == 0 ;如为空,则直接返回
mov eax, 1
pop esi
ret
.elseif ax == @Color ;如为相同颜色,则标记后存起
mov bx, [esi] + 2
.if bx != dx ;如此轮没有经过
mov [esi] + 2, dx ;设经过标记
mov [edi], esi ;保存此点
add edi, 4 ;游标向前
add word ptr _MRMiZiShu, 1 ;数目加1
.endif
;其它不用处理
.endif
.if word ptr _MRMiZiShu != 0
sub edi, 4
mov esi, [edi]
mov @Esi, esi
sub word ptr _MRMiZiShu, 1
jmp @Next
;
.endif
xor eax, eax
@MRMYQExit:
pop esi
ret
_MRMYouQi endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_MRMDoTheRule proc _Esi, _Color
;
local @OtherColor:word
;
mov esi, _Esi
mov ecx, _Color
mov [esi], cx ;试下一子
;得到相反的棋子颜色
.if dword ptr _Color == WhiteStone
mov @OtherColor, BlackStone
.elseif dword ptr _Color == BlackStone
mov @OtherColor, WhiteStone
.endif
;下一路棋子是否对方棋子,如是则数气
mov esi, _Esi
add esi, MRMLineStep
mov cx, [esi]
.if cx == @OtherColor
invoke _MRMYouQi, esi, @OtherColor
.if eax == 0
invoke _MRMTiZi, esi
.endif
.endif
;上一路棋子是否对方棋子,如是则数气
mov esi, _Esi
sub esi, MRMLineStep
mov cx, [esi]
.if cx == @OtherColor
invoke _MRMYouQi, esi, @OtherColor
.if eax == 0
invoke _MRMTiZi, esi
.endif
.endif
;左一路棋子是否对方棋子,如是则数气
mov esi, _Esi
add esi, 8
mov cx, [esi]
.if cx == @OtherColor
invoke _MRMYouQi, esi, @OtherColor
.if eax == 0
invoke _MRMTiZi, esi
.endif
.endif
;右一路棋子是否对方棋子,如是则数气
mov esi, _Esi
sub esi, 8
mov cx, [esi]
.if cx == @OtherColor
invoke _MRMYouQi, esi, @OtherColor
.if eax == 0
invoke _MRMTiZi, esi
.endif
.endif
;本身气数是否为零
mov esi, _Esi
invoke _MRMYouQi, esi, _Color
.if eax == 0
;dothis
.endif
;mov esi, _Esi
;mov word ptr [esi], 0 ;试下一子提回
;居然不让提回!!!dothis
ret
_MRMDoTheRule endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
ZN equ 168 ;正偏移
FN equ -168 ;负偏移
RPN00 equ 40 ;直线取值
RPN01 equ 28 ;
RPN02 equ 20 ;
RPN03 equ 14 ;
RPN04 equ 12 ;
RPN05 equ 6 ;
RPN0 equ 64 ;曲线取值
RPN1 equ 33 ;
RPN2 equ 18 ;
RPN3 equ 14 ;
RPN4 equ 12 ;
RPN5 equ 6 ;
SHIDI equ 33
BuPinTan equ 000f000fh
; RPN00 equ 64 ;测试取值
; RPN01 equ 32 ;
; RPN02 equ 20 ;
; RPN03 equ 14 ;
; RPN04 equ 12 ;
; RPN05 equ 6 ;
; RPN0 equ 64 ;测试取值
; RPN1 equ 32 ;
; RPN2 equ 18 ;
; RPN3 equ 13 ;
; RPN4 equ 8 ;
; RPN5 equ 6 ;
; RPN0 equ 120 ;原始取值
; RPN1 equ 60 ;
; RPN2 equ 30 ;
; RPN3 equ 15 ;
; RPN4 equ 7 ;
; RPN5 equ 3 ;
;
;请将“工程”“管理工程”“编辑工程”中“文件”“设置与语法”“制表符与缩进”改成“10”“10”来看此表;
;按“位置偏移”,“取值加权”来排列;TZFSZ001
;
;当前程序只是通过“影响值”最大的一点来选择着手;
;也可以通过其它几个概念来进行选择:
;如:实地多、影响范围大、及以上的影响值;
;也可对以上几点进行加权来选择;
;
;现各辐射点取值不好,将做成如下(或进一步加大未端取值):
;X 64 32 20 14 12
;64 40 26 16 12
;32 26 16 12
;20 16 12
;16 12
;12
;如何使对内的实地值与对外的实地值都合理,是个问题;
align 4
PreRadioPath dd 0 ,0 ,0 ,0
RadioPath dd 8 ,RPN00 ,16 ,RPN01 ,24 ,RPN02 ,32 ,RPN03 ,40 ,RPN04 ,0,0 ;右
dd -8 ,RPN00 ,-16 ,RPN01 ,-24 ,RPN02 ,-32 ,RPN03 ,-40 ,RPN04 ,0,0 ;左
dd ZN ,RPN00 ,ZN*2 ,RPN01 ,ZN*3 ,RPN02 ,ZN*4 ,RPN03 ,ZN*5 ,RPN04 ,0,0 ;下
dd FN ,RPN00 ,FN*2 ,RPN01 ,FN*3 ,RPN02 ,FN*4 ,RPN03 ,FN*5 ,RPN04 ,0,0 ;上
;以上为右左上下,直线型的路径;64,32,20,13,8,6
dd 8 ,0 ,8-ZN ,RPN2 ,8-ZN*2 ,RPN3 ,8-ZN*3 ,RPN4 ,8-ZN*4 ,RPN5 ,0,0 ;右一上
dd 8 ,0 ,16 ,0 ,16-ZN ,RPN3 ,16-ZN*2 ,RPN4 ,16-ZN*3 ,RPN5 ,0,0 ;右二上
dd 8 ,0 ,16 ,0 ,24 ,0 ,24-ZN ,RPN4 ,24-ZN*2 ,RPN5 ,0,0 ;右三上
dd 8 ,0 ,16 ,0 ,24 ,0 ,32 ,0 ,32-ZN ,RPN5 ,0,0 ;右四上
dd 8 ,0 ,8+ZN ,RPN2 ,8+ZN*2 ,RPN3 ,8+ZN*3 ,RPN4 ,8+ZN*4 ,RPN5 ,0,0 ;右一下
dd 8 ,0 ,16 ,0 ,16+ZN ,RPN3 ,16+ZN*2 ,RPN4 ,16+ZN*3 ,RPN5 ,0,0 ;右二下
dd 8 ,0 ,16 ,0 ,24 ,0 ,24+ZN ,RPN4 ,24+ZN*2 ,RPN5 ,0,0 ;右三下
dd 8 ,0 ,16 ,0 ,24 ,0 ,32 ,0 ,32+ZN ,RPN5 ,0,0 ;右四下
dd FN ,0 ,FN-8 ,RPN2 ,FN-16 ,RPN3 ,FN-24 ,RPN4 ,FN-32 ,RPN5 ,0,0 ;上一右
dd FN ,0 ,FN*2 ,0 ,FN*2-8 ,RPN3 ,FN*2-16 ,RPN4 ,FN*2-24 ,RPN5 ,0,0 ;上二右
dd FN ,0 ,FN*2 ,0 ,FN*3 ,0 ,FN*3-8 ,RPN4 ,FN*3-16 ,RPN5 ,0,0 ;上三右
dd FN ,0 ,FN*2 ,0 ,FN*3 ,0 ,FN*4 ,0 ,FN*4-8 ,RPN5 ,0,0 ;上四右
dd FN ,0 ,FN+8 ,RPN2 ,FN+16 ,RPN3 ,FN+24 ,RPN4 ,FN+32 ,RPN5 ,0,0 ;上一左
dd FN ,0 ,FN*2 ,0 ,FN*2+8 ,RPN3 ,FN*2+16 ,RPN4 ,FN*2+24 ,RPN5 ,0,0 ;上二左
dd FN ,0 ,FN*2 ,0 ,FN*3 ,0 ,FN*3+8 ,RPN4 ,FN*3+16 ,RPN5 ,0,0 ;上三左
dd FN ,0 ,FN*2 ,0 ,FN*3 ,0 ,FN*4 ,0 ,FN*4+8 ,RPN5 ,0,0 ;上四左
dd -8 ,0 ,FN-8 ,RPN2 ,FN*2-8 ,RPN3 ,FN*3-8 ,RPN4 ,FN*4-8 ,RPN5 ,0,0 ;左一上
dd -8 ,0 ,-16 ,0 ,FN-16 ,RPN3 ,FN*2-16 ,RPN4 ,FN*3-16 ,RPN5 ,0,0 ;左二上
dd -8 ,0 ,-16 ,0 ,-24 ,0 ,FN-24 ,RPN4 ,FN*2-24 ,RPN5 ,0,0 ;左三上
dd -8 ,0 ,-16 ,0 ,-24 ,0 ,-32 ,0 ,FN-32 ,RPN5 ,0,0 ;左四上
dd -8 ,0 ,ZN-8 ,RPN2 ,ZN*2-8 ,RPN3 ,ZN*3-8 ,RPN4 ,ZN*4-8 ,RPN5 ,0,0 ;左一下
dd -8 ,0 ,-16 ,0 ,ZN-16 ,RPN3 ,ZN*2-16 ,RPN4 ,ZN*3-16 ,RPN5 ,0,0 ;左二下
dd -8 ,0 ,-16 ,0 ,-24 ,0 ,ZN-24 ,RPN4 ,ZN*2-24 ,RPN5 ,0,0 ;左三下
dd -8 ,0 ,-16 ,0 ,-24 ,0 ,-32 ,0 ,ZN-32 ,RPN5 ,0,0 ;左四下
dd ZN ,0 ,ZN-8 ,RPN2 ,ZN-16 ,RPN3 ,ZN-24 ,RPN4 ,ZN-32 ,RPN5 ,0,0 ;下一左
dd ZN ,0 ,ZN*2 ,0 ,ZN*2-8 ,RPN3 ,ZN*2-16 ,RPN4 ,ZN*2-24 ,RPN5 ,0,0 ;下二左
dd ZN ,0 ,ZN*2 ,0 ,ZN*3 ,0 ,ZN*3-8 ,RPN4 ,ZN*3-16 ,RPN5 ,0,0 ;下三左
dd ZN ,0 ,ZN*2 ,0 ,ZN*3 ,0 ,ZN*4 ,0 ,ZN*4-8 ,RPN5 ,0,0 ;下四左
dd ZN ,0 ,ZN+8 ,RPN2 ,ZN+16 ,RPN3 ,ZN+24 ,RPN4 ,ZN+32 ,RPN5 ,0,0 ;下一右
dd ZN ,0 ,ZN*2 ,0 ,ZN*2+8 ,RPN3 ,ZN*2+16 ,RPN4 ,ZN*2+24 ,RPN5 ,0,0 ;下二右
dd ZN ,0 ,ZN*2 ,0 ,ZN*3 ,0 ,ZN*3+8 ,RPN4 ,ZN*3+16 ,RPN5 ,0,0 ;下三右
dd ZN ,0 ,ZN*2 ,0 ,ZN*3 ,0 ,ZN*4 ,0 ,ZN*4+8 ,RPN5 ,0,0 ;下四右
dd 0 ,0 ,0 ,0
;RadioPath dd 8 ,RPN0 ,16 ,RPN1 ,24 ,RPN2 ,32 ,RPN3 ,40 ,RPN4 ,0,0 ;右
; dd -8 ,RPN0 ,-16 ,RPN1 ,-24 ,RPN2 ,-32 ,RPN3 ,-40 ,RPN4 ,0,0 ;左
; dd ZN ,RPN0 ,ZN*2 ,RPN1 ,ZN*3 ,RPN2 ,ZN*4 ,RPN3 ,ZN*5 ,RPN4 ,0,0 ;下
; dd FN ,RPN0 ,FN*2 ,RPN1 ,FN*3 ,RPN2 ,FN*4 ,RPN3 ,FN*5 ,RPN4 ,0,0 ;上
;
; dd 8 ,0 ,8-ZN ,RPN2 ,8-ZN*2 ,RPN3 ,8-ZN*3 ,RPN4 ,8-ZN*4 ,RPN5 ,0,0 ;右一上
; dd 8 ,0 ,16 ,0 ,16-ZN ,RPN3 ,16-ZN*2 ,RPN4 ,16-ZN*3 ,RPN5 ,0,0 ;右二上
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -