标题: [游戏娱乐] 批处理版人机对战五子棋 [打印本页]
作者: caruko 时间: 2011-3-21 21:51 标题: 批处理版人机对战五子棋
本帖最后由 caruko 于 2011-5-17 19:38 编辑
跟N版主的算法不同,N版主主要以走法规则来计算结果。
我这个主要以综合评分值来判断,我自身五子棋水平非常低,所以N版主那种就做不出来。
功能还算完善,胜负,简单禁手都有;
电脑智能还行,欺负没有研究过五子棋的应该没问题。
走棋速度也很快,以前更快的0.3秒左右一步,只是增加了让电脑自己不会走禁手以及一些局面判断,所以速度比之前慢了几倍,但是速度仍然小于1秒,是可以接受的程度。
开局定式还没做完,但算法已明晰,图谱写了一半,太多了,有空完善上。- @echo off
- title 五子棋大战(人机对战) BY CafeNoir Email:caruko@qq.com
- mode con: lines=32 cols=90
- :start
- setlocal enabledelayedexpansion
- ::初始变量
- set "tzk=11111_9999999 011110_300000 11110_2400 01111_2400 0011100_3000 11101_2000 10111_2000 11011_2300 11100_500 00111_500 010110_1650 011010_1650 10011_1550 11001_1550 10101_1590 00011000_1000 0010100_950 11000_250 00011_250 0010100_350 010010_300"
- set "p_tzk=22222_9999999 022220_300000 22220_2200 02222_2200 0022200_2800 22202_2000 20222_2000 22022_2100 22200_450 00222_450 020220_1550 022020_1550 20022_1500 22002_1500 20202_1530 00022000_9000 0020200_900 22000_200 00022_200 0020200_280 020020_250"
- set "C_禁手=011010_三 010110_三 011100_三 001110_三 0011100_三 01111_四 11110_四 10111_四 11011_四 11101_四 11111_五 111111_长连"
- set "P_禁手=022020_三 020220_三 022200_三 002220_三 0022200_三 02222_四 22220_四 20222_四 22022_四 22202_四 22222_五 222222_长连"
- set /a key_a=1,key_b=2,key_c=3,key_d=4,key_e=5,key_f=6,key_g=7,key_h=8,key_i=9,key_j=10,key_k=11,key_l=12,key_m=13,key_n=14,key_o=15
- set "error1=坐标格式错误,或者坐标越界。"
- set "error2=该坐标已有棋子,无法在指定坐标下子。"
- set /a 步=0
-
-
-
- ::初始化棋盘
- set "Display_15=┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐"
- for /l %%i in (2 1 14) do (
- set "Display_%%i=├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤"
- )
- set "Display_1=└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘"
- for /l %%i in (1 1 15) do for /l %%j in (1 1 15) do set QP[%%i][%%j]=0
- call :显示棋盘
- ::设置先手
- :xs
- set /p xs_in=请选择先手(玩家Player:P,电脑Computer:C)
- if "!xs_in!"=="C" (set "行动方=Computerr" & set /a k1=10,k2=7 & set "先手=C" & set "qizi1=○" & set "qizi2=●")
- if "!xs_in!"=="c" (set "行动方=Computer" & set /a k1=10,k2=7 & set "先手=C" & set "qizi1=○" & set "qizi2=●")
- if "!xs_in!"=="p" (set "行动方=Player" & set /a k1=7,k2=10 & set "先手=P" & set "qizi1=●" & set "qizi2=○")
- if "!xs_in!"=="P" (set "行动方=Player" & set /a k1=7,k2=10 & set "先手=P" & set "qizi1=●" & set "qizi2=○")
- if not defined 先手 goto :xs
-
- if "!先手!"=="C" (call :设置坐标 8 8 1) else (call :设置坐标 8 8 2 &goto :loop2)
-
- :loop
- call :显示棋盘
- call :玩家走
- if !ERRORLEVEL! gtr 0 (
- echo,!error%ERRORLEVEL%!
- goto :loop
- )
- :loop2
- call :显示棋盘
- call :电脑智能
- goto :loop
-
- :玩家走
- set "行动方=Player"
- set /a zq=0
- set /p P_zb=请输入坐标{A-O1-15}如"K5":
- echo !p_zb!|findstr /i "^[a-oA-O][1-9]$ ^[a-oA-O]1[0-5]$ ^exit$">nul ||exit /b 1
- if "!P_zb!"=="exit" exit
- set p_zb=!key_%p_zb:~0,1%!,%p_zb:~1%
- for /f "tokens=1,2 delims=," %%a in ("!P_zb!") do (
- if "!QP[%%a][%%b]!"=="0" (
- call :设置坐标 %%a %%b 2 || call :胜利 %ERRORLEVEL%
- ) else (
- exit /b 2
- )
- )
- exit /b 0
-
-
-
- :胜利
- call :显示棋盘
- if "%1"=="2" (
- echo !行动方!范"!禁!"禁手,该局判负!
- if "!行动方!"=="Player" (
- echo,╭──╮╭──╮╭╭╮╮╭╮╭╮╭──╮╭──╮╭──╮
- echo,│╭─╯│╭╮││ │││││╰╮╭╯│╭─╯│╭╮│
- echo,││ ││││││││││││ ││ │╰─╮│╰╯│
- echo,││ │││││╭╮│││││ ││ │╭─╯│╭╭╯
- echo,│╰─╮│╰╯││││││╰╯│ ││ │╰─╮││╰╮
- echo,╰──╯╰──╯╰╯╰╯╰──╯ ╰╯ ╰──╯╰╯╰╯
- ) else (
- echo,╭──╮╭╮ ╭──╮╭╮╭╮╭──╮╭──╮
- echo,│╭╮│││ │╭╮││╰╯││╭─╯│╭╮│
- echo,│╰╯│││ │╰╯│╰╮╭╯│╰─╮│╰╯│
- echo,│╭─╯││ │╭╮│ ││ │╭─╯│╭╭╯
- echo,││ │╰─╮││││ ││ │╰─╮││╰╮
- echo,╰╯ ╰──╯╰╯╰╯ ╰╯ ╰──╯╰╯╰╯
- )
- ) else (
- if "!行动方!"=="Computer" (
- echo,╭──╮╭──╮╭╭╮╮╭╮╭╮╭──╮╭──╮╭──╮
- echo,│╭─╯│╭╮││ │││││╰╮╭╯│╭─╯│╭╮│
- echo,││ ││││││││││││ ││ │╰─╮│╰╯│
- echo,││ │││││╭╮│││││ ││ │╭─╯│╭╭╯
- echo,│╰─╮│╰╯││││││╰╯│ ││ │╰─╮││╰╮
- echo,╰──╯╰──╯╰╯╰╯╰──╯ ╰╯ ╰──╯╰╯╰╯
- ) else (
- echo,╭──╮╭╮ ╭──╮╭╮╭╮╭──╮╭──╮
- echo,│╭╮│││ │╭╮││╰╯││╭─╯│╭╮│
- echo,│╰╯│││ │╰╯│╰╮╭╯│╰─╮│╰╯│
- echo,│╭─╯││ │╭╮│ ││ │╭─╯│╭╭╯
- echo,││ │╰─╮││││ ││ │╰─╮││╰╮
- echo,╰╯ ╰──╯╰╯╰╯ ╰╯ ╰──╯╰╯╰╯
- )
- )
- echo,╭╮╭╮╭──╮╭╮╭╮
- echo,││││╰╮╭╯│╰╮│
- echo,│╰╯│ ││ │ │
- echo,││││ ││ │ │
- echo,│ │╭╯╰╮│╰╮│
- echo,╰╰╯╯╰──╯╰╯╰╯
- endlocal
- set /p =按任意键重新开始游戏!<nul
- pause>nul
- goto :start
- goto :eof
-
-
- :显示棋盘
- echo, ╭──────────────────────────────╮
- for /l %%i in (15 -1 2) do (
- if %%i lss 10 (
- echo, %%i │ !Display_%%i! │
- set "Display_%%i=!Display_%%i:★=%qizi1%!"
- set "Display_%%i=!Display_%%i:☆=%qizi1%!"
- ) else (
- echo, %%i │ !Display_%%i! │
- set "Display_%%i=!Display_%%i:★=%qizi1%!"
- set "Display_%%i=!Display_%%i:☆=%qizi1%!"
- )
- echo, │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- )
- echo, 1 │ !Display_1! │
- echo, ╰-A B C D E F G H I J K L M N O-╯
- goto :eof
-
-
- :设置坐标 [x] [y] [1,2]
- set /a QP[%1][%2]=%3,x=%1,y=%2,z=%3,cut1=x*2-2,cut2=x*2-1,最高分=0,fens=0,步+=1,maxC=0,maxP=0
- set "cr=!qizi%3!"
- if "%3"=="1" if "!先手!"=="C" (set "cr=☆" ) else (set "cr=★")
- set "Display_!y!=!Display_%y%:~0,%cut1%!!cr!!Display_%y%:~%cut2%!"
- set "第!步!步=%1,%2"
-
- ::判断禁手,“三四” “成五” 不算禁手,"弎""叁"看似不是活三,两个一起构不成活四,但是跟别的活三,四搭配仍然是活三。
- set "禁="
- set "j="
- if "!行动方:~0,1!"=="!先手!" (
- for %%i in (!%先手%_str[%1][%2]!) do (
- for %%D in (!%先手%_禁手!) do (
- for /f "tokens=1,2 delims=_" %%E in ("%%D") do (
- set "sstr=%%i"
- if not "!sstr!"=="!sstr:%%E=%%F!" ( set "j=%%F" )
- )
- )
- set 禁=!禁!!j!
- set "j="
- )
- )
- if "!禁!"=="三四" set "禁="
- if "!禁!"=="四三" set "禁="
- if not "!禁!"=="!禁:五=!" if "!禁!"=="!禁:长连=!" set "禁="
- if "!禁:~1,1!"=="" set "禁="
- if defined 禁 exit /b 2
-
- ::判断是否5连,断定胜负
- if !步! GTR 1 if "!行动方!"=="Computer" (set /a fens=!C_soce[%1][%2]!) else (set /a fens=!P_soce[%1][%2]!)
- if !fens! GEQ 9999999 exit /b 1
- set "C_str[%1][%2]="
- set "C_soce[%1][%2]="
- set "P_soce[%1][%2]="
- set "P_str[%1][%2]="
-
- ::落子点估值
- for /l %%i in (1 1 4) do (
- for %%j in (%%i_0 %%i_-%%i 0_-%%i -%%i_-%%i -%%i_+0 -%%i_+%%i 0_%%i %%i_%%i) do (
- for /f "tokens=1,2 delims=_" %%x in ("%%j") do (
- set /a xx=x+%%x,yy=y+%%y
- for /f "tokens=1,2" %%a in ("!xx! !yy!") do (
- if defined QP[%%a][%%b] if !QP[%%a][%%b]! EQU 0 (
-
-
- rem 更新双方字串并评分,没有的则重新创建,只更新 x-4 => x+4 范围且在一条直线上的评分。
- set /a a=%%a,b=%%b,c=1
- if "!C_str[%%a][%%b]!"=="" (
- set /a c_str1=c,c_str2=c,c_str3=c,c_str4=c,p_str1=2,p_str2=2,p_str3=2,p_str4=2
- for /l %%I in (-1 -1 -4) do (
- set /a xxx=a+%%I,yyy=b+%%I,lj1=0
- if !xxx! LSS 1 (
- set /a lj1=1
- set "c_str1=x!c_str1!"
- set "p_str1=x!p_str1!"
- ) else (
- for /f "tokens=1,2" %%A in ("!xxx! !b!") do (
- set "c_str1=!QP[%%A][%%B]!!c_str1!"
- set "p_str1=!QP[%%A][%%B]!!p_str1!"
- )
- )
- if !yyy! LSS 1 (
- set /a lj1=1
- set "c_str2=x!c_str2!"
- set "p_str2=x!p_str2!"
- ) else (
- for /f "tokens=1,2" %%A in ("!a! !yyy!") do (
- set "c_str2=!QP[%%A][%%B]!!c_str2!"
- set "p_str2=!QP[%%A][%%B]!!p_str2!"
- )
- )
- if !lj1! EQU 1 (
- set "c_str3=x!c_str3!"
- set "p_str3=x!p_str3!"
- ) else (
- for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
- set "c_str3=!QP[%%A][%%B]!!c_str3!"
- set "p_str3=!QP[%%A][%%B]!!p_str3!"
- )
- )
- set /a xxx=a+%%I,yyy=b-%%I,lj1=0
- if !xxx! LSS 1 set /a lj1=1
- if !yyy! GTR 15 set /a lj1=1
- if !lj1! EQU 1 (
- set "c_str4=x!c_str4!"
- set "p_str4=x!p_str4!"
- ) else (
- for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
- set "c_str4=!QP[%%A][%%B]!!c_str4!"
- set "p_str4=!QP[%%A][%%B]!!p_str4!"
- )
- )
-
- )
- for /l %%I in (1 1 4) do (
- set /a xxx=a+%%I,yyy=b+%%I,lj1=0
- if !xxx! GTR 15 (
- set /a lj1=1
- set "c_str1=!c_str1!x"
- set "p_str1=!p_str1!x"
- ) else (
- for /f "tokens=1,2" %%A in ("!xxx! !b!") do (
- set "c_str1=!c_str1!!QP[%%A][%%B]!"
- set "p_str1=!p_str1!!QP[%%A][%%B]!"
- )
- )
- if !yyy! GTR 15 (
- set /a lj1=1
- set "c_str2=!c_str2!x"
- set "p_str2=!p_str2!x"
- ) else (
- for /f "tokens=1,2" %%A in ("!a! !yyy!") do (
- set "c_str2=!c_str2!!QP[%%A][%%B]!"
- set "p_str2=!p_str2!!QP[%%A][%%B]!"
- )
- )
- if !lj1! EQU 1 (
- set "c_str3=!c_str3!x"
- set "p_str3=!p_str3!x"
- ) else (
- for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
- set "c_str3=!c_str3!!QP[%%A][%%B]!"
- set "p_str3=!p_str3!!QP[%%A][%%B]!"
- )
- )
- set /a xxx=a+%%I,yyy=b-%%I,lj1=0
- if !xxx! GTR 15 set /a lj1=1
- if !yyy! LSS 1 set /a lj1=1
- if !lj1! EQU 1 (
- set "c_str4=!c_str4!x"
- set "p_str4=!p_str4!x"
- ) else (
- for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
- set "c_str4=!c_str4!!QP[%%A][%%B]!"
- set "p_str4=!p_str4!!QP[%%A][%%B]!"
- )
- )
- )
- set /a soce1=0,soce2=0,soce3=0,soce4=0
- for %%X in (!tzk!) do (
- for /f "tokens=1,2 delims=_" %%A in ("%%X") do (
- for /l %%W in (1 1 4) do (
- if not "!c_str%%W!"=="!c_str%%W:%%A=@!" if !soce%%W! LSS %%B (
- set /a soce%%W=%%B
- if !maxP! LSS %%B set /a maxP=%%B
- )
- )
- )
- )
- set "C_str[!a!][!b!]=!c_str1!,!c_str2!,!c_str3!,!c_str4!"
- set "C_soce[!a!][!b!]=!soce1!+!soce2!+!soce3!+!soce4!"
-
- set /a soce1=0,soce2=0,soce3=0,soce4=0
- for %%X in (!p_tzk!) do (
- for /f "tokens=1,2 delims=_" %%A in ("%%X") do (
- for /l %%W in (1 1 4) do (
- if not "!p_str%%W!"=="!p_str%%W:%%A=@!" if !soce%%W! LSS %%B (
- set /a soce%%W=%%B
- if !maxP! LSS %%B set /a maxP=%%B
- )
- )
- )
- )
- set "P_str[!a!][!b!]=!p_str1!,!p_str2!,!p_str3!,!p_str4!"
- set "P_soce[!a!][!b!]=!soce1!+!soce2!+!soce3!+!soce4!"
-
- rem end 创建。
- ) else (
- rem 更新字串及评分,已存在的点会加快效率。
- if %%x NEQ 0 (
- set /a cut1=5-%%x-1,cut2=5-%%x,tk=1,pd=%%x+%%y
- if !pd! EQU 0 (
- set /a cut1=cut1+30,cut2=cut2+30,tk=4
- )
- if %%x EQU %%y (
- set /a cut1=cut1+20,cut2=cut2+20,tk=3
- )
- ) else (
- set /a cut1=15-%%y-1,cut2=15-%%y,tk=2
- )
- for /f "tokens=1,2" %%X in ("!cut1! !cut2!") do (
- set "C_str[%%a][%%b]=!C_str[%%a][%%b]:~0,%%X!!z!!C_str[%%a][%%b]:~%%Y!"
- set "P_str[%%a][%%b]=!P_str[%%a][%%b]:~0,%%X!!z!!P_str[%%a][%%b]:~%%Y!"
- )
- for /f "tokens=1-4 delims=+" %%A in ("!C_soce[%%a][%%b]!") do (
- set /a soce1=%%A,soce2=%%B,soce3=%%C,soce4=%%D
- )
- set /a soce=0,ttk=tk*10-10
- for %%T in (!ttk!) do (
- set "t_str=!C_str[%%a][%%b]:~%%T,9!"
- )
- for %%Q in (!tzk!) do (
- for /f "tokens=1,2 delims=_" %%A in ("%%Q") do (
- if not "!t_str!"=="!t_str:%%A=@!" (
- if !soce! LSS %%B set /a soce=%%B
- )
- )
- )
- set /a soce!tk!=!soce!
- if !maxC! LSS !soce! set /a maxC=soce
- set "C_soce[%%a][%%b]=!soce1!+!soce2!+!soce3!+!soce4!"
-
-
- rem 更新player评分
- for /f "tokens=1-4 delims=+" %%A in ("!P_soce[%%a][%%b]!") do (
- set /a soce1=%%A,soce2=%%B,soce3=%%C,soce4=%%D
- )
- set /a soce=0
- for %%T in (!ttk!) do (
- set "t_str=!P_str[%%a][%%b]:~%%T,9!"
- )
- for %%Q in (!p_tzk!) do (
- for /f "tokens=1,2 delims=_" %%A in ("%%Q") do (
- if not "!t_str!"=="!t_str:%%A=@!" (
- if !soce! LSS %%B set /a soce=%%B
- )
- )
- )
- set /a soce!tk!=!soce!
- if !maxP! LSS !soce! set /a maxP=soce
- set "P_soce[%%a][%%b]=!soce1!+!soce2!+!soce3!+!soce4!"
-
- )
- rem end更新
-
-
-
-
-
- )
- )
- )
- )
- )
- if !maxC! geq !maxP! ( set /a k1=10,k2=7 ) else ( set /a k1=7,k2=10 )
- exit /b 0
-
-
-
-
- :电脑智能
- ::判断定式
- ::if !匹配! equ 1 (
-
-
-
-
- :电脑走
- set "行动方=Computer"
- set /a 最高分=0,num=0
- for /l %%x in (1 1 15) do (
- for /l %%y in (1 1 15) do (
- if defined C_soce[%%x][%%y] (
- set "m=!C_soce[%%x][%%y]!"
- set "n=!P_soce[%%x][%%y]!"
- set /a m=!m!,n=!n!,mn=m*!k1!+n*!k2!
- if !最高分! EQU !mn! (
- set /a num+=1
- set "坐标集=!坐标集! [%%x][%%y]"
- )
- if !最高分! LSS !mn! (
- set /a 最高分=!mn!,num=1
- set "坐标集=[%%x][%%y]"
- )
- )
- )
- )
- set /a get=%RANDOM%%%num+1,dd=0
- for %%i in (!坐标集!) do (
- set /a dd+=1
- if !dd! equ !num! (
- for /f "tokens=1,2 delims=[]" %%x in ("%%i") do (
- call :设置坐标 %%x %%y 1
- )
- )
- )
- goto :eof
-
-
-
-
- :::下面是定式图谱及算法
- x代表第二手棋子位置,然后x周围2*2的位置可以用[方向,距离]来表示位置。
- 而 第二手棋子位置可以有很多,而且可能对称,那么[方向增值,距离]可以表示相对位置。
- 比如这3步棋 [8,8] [8,9] [8,10] ,从第3步起,可以用[0,1]来表示相对第2步的位置变化。
- 加入第二步下在[8,9],方向是4,那么可以得出第三步 方向= (4+0)%16,代进 set "方位_0=ly+=jl",可以得到第3步位置。
- 得分100,表示黑必胜,50表示黑优势,-100表示必败,0表示均势。
-
-
- 位置值表示图
- 14 15 0 1 2
- 13 14 0 2 3
- 12 12 x 4 4
- 11 10 8 6 5
- 10 9 8 7 6
-
-
- set "方位_0=ly+=jl"
- set "方位_1=lx+=1,ly+=2"
- set "方位_2=lx+=jl,ly+=jl"
- set "方位_3=lx+=2,ly+=1"
- set "方位_4=lx=lx+jl"
- set "方位_5=lx+=2,ly-=1"
- set "方位_6=lx=lx+jl,ly=ly-jl"
- set "方位_7=lx+=1,ly-=2
- set "方位_8=ly=ly-jl"
- set "方位_9=lx-=1,ly-=2"
- set "方位_10=lx=lx-jl,ly=ly-jl"
- set "方位_11=lx-=2,ly-=1"
- set "方位_12=lx=lx-jl"
- set "方位_13=lx-=2,ly+=1
- set "方位_14=lx=lx-jl,ly=ly+jl"
- set "方位_15=lx-=1,ly+=2"
-
- ::定式图谱 [方向增值,距离] for /f "delims=" %%i in ('set [直][!第二步!][!第三步!]..')
- ::1,直指开局
- [直][0,1][2,1][10,1]=100
- [直][0,1][3,2][11,2]=100
- [直][0,1][0,2][4,1]=100
- [直][0,1][4,2][4,1]=100
- [直][3,2][4,1][6,1]=0
- [直][3,2][6,1][4,1]=100
- [直][3,2][9,2][4,1]=100
- [直][3,2][10,2][4,1]=100
- [直][3,2][10,2][4,2]=0
- [直][4,1][6,1][7,2]=150
- [直][4,1][6,2][6,1]=150
- [直][4,2][5,2][7,1]=100
- [直][4,2][5,2][9,2]=50
- [直][4,2][10,1][2,1]=100
- [直][4,2][10,1][6,1]=50
- [直][4,2][10,1][3,1]=0
- [直][4,2][9,1][6,1]=100
- [直][4,2][3,1][6,1]=100
- [直][5,2][10,1][2,1]=100
- [直][5,2][10,1][4,1]=50
- [直][5,2][2,1][7,2]=100
- [直][5,2][2,1][4,1]=50
- [直][5,2][9,1][6,1]=100
- [直][5,2][4,1][6,1]=100
- [直][8,2][8,3][6,1]=100
- [直][8,2][8,3][4,1]=50
- [直][8,2][5,2][10,1]=50
- [直][8,2][0,1][6,1]=100
- [直][8,2][2,1][10,1]=100
- [直][6,2][10,1][2,1]=100
- [直][6,2][10,1][10,2]=50
- [直][6,2][9,1][12,1]=50
- [直][6,2][2,1][2,2]=100
- [直][6,2][2,1][7,2]=50
- [直][8,3][2,1][7,2]=100
- [直][8,3][2,1][6,1]=-50
- [直][8,3][2,1][11,2]=-50
- [直][8,3][2,1][5,2]=-50
- [直][8,3][2,1][10,1]=-100
- [直][8,3][2,1][12,1]=-100
- [直][8,3][7,2][9,2]=100
- [直][8,3][2,1][6,2]=100
- [直][8,3][8,2][7,2]=100
- [直][8,3][6,2][9,2]=100
- [直][8,3][6,2][6,1]=100
-
- ::斜止图谱
- ::太长了,累死我了,以后慢慢补上。
-
- 一、斜止:
-
- 1、长星:黑3走J10。
- (1)白4走H10时:J8双方均衡;G9、G11黑不利;I7、I8、K7黑必败。
- 由于白4这步强防时,黑只有一个均衡点可选,实战时当然会被白方拨去,所以在日本职业大赛中,极少出现长星布局。
- (2)白4走H9时:G9、I8、I10、I11、J8、J9双方均衡。
- (3)白4走I7时:H10、I8、I10、K9双方均衡。
- (4)白4走H11时:I8、I11、J8、J9双方均衡。
-
- 2、峡月:黑3走J9。(溪月参照本局)
- (1)白4走I8时:I7黑必胜;H10、J8黑有利。
- (2)白4走J8时:H10黑必胜;H7、K7黑有利;I7、I8双方均衡。
- (3)白4走K8时:H7、H10、I7黑必胜。
- (4)白4走H7时:I10、J8、J10黑必胜;I7双方均衡。
-
- 3、恒星:黑3走J8。
- (1)白4走I8时:I7黑必胜;H9、I10黑有利。
- (2)白4走H7时:I7黑必胜;I10、J9黑有利;I8。
- (3)白4走I7时:I8黑必胜;H7、I10黑有利。
- (4)白4走H6时:I8、J9黑必胜。
-
- 4、水月:黑3走J7。
- (1)白4走I5时:G8、I6黑必胜;G9、I10黑有利。
- (2)白4走J8时:I7、K7黑必胜;H10黑有利。
- (3)白4走H7时:I6、J6黑必胜;I8黑有利。
- (4)白4走I7时:H6、I6黑必胜;I8双方均衡。
-
- 5、流星:黑3走J6。
- (1)白4走G9时:J9双方均衡;J8黑不利;H6、H9黑必败。
- (2)白4走I7时:H6、I6、I8、K7双方均衡。
- (3)白4走G8时:J7黑有利;H9、J8双方均衡;I7黑不利。
- (4)白4走H9时:I7、J9黑必胜;J8黑不利。
-
- 6、云月:黑3走I8。(雨月参照本局)
- (1)白4走J8时:H10黑必胜;G9、K7黑有利;J9双方均衡。
- (2)白4走H7时:G10黑必胜;G9黑有利。
- (3)白4走G8时:H7黑必胜;G10、J9黑有利;H9、J7双方均衡。
- (4)白4走H9时:G8、J8黑必胜;G7双方均衡;H7黑必败。
-
- 7、浦月:黑走I7。(这可是斜止中的最强开局,其实不用我多说,各种各样的棋书都有详尽的介绍。但是,选取这个布局,在第3手时,白方一定会要求交换。黑方等于自掘坟墓了。)
- (1)白4走G9时:J7、J8黑必胜;J9黑有利;H7、H9双方均衡;J6黑不利。
- (2)白4走H7时:G9、J6、J8黑必胜。
- (3)白4走H6时:G9、I6、J6、J7黑必胜。
- (4)白4走J6时:G8、G9、H9、H10黑必胜。
-
- 8、岚月:黑3走I6。
- (1)白4走I10时:H7黑必胜;G9黑有利;H6双方均衡;I8黑不利。
- (2)白4走J8时:H7黑必胜;H10、K7黑有利。
- (3)白4走H9时:G9黑必胜;J9黑有利。
- (4)白4走G9时:J7黑必胜;J9、K8黑有利。
-
- 9、银月:黑3走H7。
- (1)白4走H9时:G9黑必胜;I7、J9双方均衡;I8黑必败。
- (2)白4走H6时:G8、I8黑必胜。
- (3)白4走G8时:H6、I8黑必胜。
- (4)白4走G9时:H9、I8黑必胜。
-
- 10、明星:黑3走H6。
- (1)白4走H9时:G9黑必胜;I7、J6、J8、J9双方均衡。
- (2)白4走G9时:J9黑必胜;J8黑有利;H7黑必败。
- (3)白4走H7时:F8、G7、I7黑必胜。(这是白方最差的防守。)
- (4)白4走I10时:I7、J8黑必胜;H7、H9黑必败。
-
- 11、斜月:黑3走G7。
- (1)白4走H9时:J9黑有利;G9、I8双方均衡;G10、I10黑不利;I7黑必败。
- (2)白4走I10时:I7黑必胜;F8黑有利;G9;F7、I8黑必败。
- (3)白4走G9时:F7、F8黑必胜;F10黑有利;H9;F6黑不利。
- (4)白4走G8时:F6、F7、H6黑必胜;I7双方均衡。
-
- 12、名月:黑3走G6。
- (1)白4走H9时:G9黑必胜;J9黑有利;I8双方均衡。
- (2)白4走I10时:G9、E8黑必胜;I8黑有利。
- (3)白4走I8时:H6黑必胜;I6黑有利。
- (4)白4走J7时:H6、H9黑必胜。
复制代码
作者: CrLf 时间: 2011-3-21 23:02
竟然还有开局库!有创意
作者: bbwanwt123 时间: 2011-3-21 23:24
哈哈 可以玩
作者: hbwazxf 时间: 2011-3-22 11:28
楼主太牛了。佩服。。。
作者: wujianwen0609 时间: 2011-3-24 20:38
楼主,请受在下一拜!
作者: cjiabing 时间: 2011-3-24 21:41
看看,要三方?
作者: caruko 时间: 2011-3-25 22:57
本帖最后由 caruko 于 2011-3-25 22:58 编辑
不用第三方..
只是开局库的数据结构,算法有眉目了。
开局库也只写了26种常规开局中的13种直指开局。所以现在的代码没用上。可以只用前410行
有时间了,再补上。
作者: caruko 时间: 2011-5-17 19:40
=.=
一直没空补上开局库。
有空的时候也研究过 做杀 算法,但是没有很好的思路。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |