Board logo

标题: [游戏娱乐] 批处理版人机对战五子棋 [打印本页]

作者: caruko    时间: 2011-3-21 21:51     标题: 批处理版人机对战五子棋

本帖最后由 caruko 于 2011-5-17 19:38 编辑

跟N版主的算法不同,N版主主要以走法规则来计算结果。
我这个主要以综合评分值来判断,我自身五子棋水平非常低,所以N版主那种就做不出来。

功能还算完善,胜负,简单禁手都有;
电脑智能还行,欺负没有研究过五子棋的应该没问题。
走棋速度也很快,以前更快的0.3秒左右一步,只是增加了让电脑自己不会走禁手以及一些局面判断,所以速度比之前慢了几倍,但是速度仍然小于1秒,是可以接受的程度。
开局定式还没做完,但算法已明晰,图谱写了一半,太多了,有空完善上。
  1. @echo off
  2. title 五子棋大战(人机对战) BY CafeNoir Email:caruko@qq.com
  3. mode con: lines=32 cols=90
  4. :start
  5. setlocal enabledelayedexpansion
  6. ::初始变量
  7. 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"
  8. 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"
  9. set "C_禁手=011010_三 010110_三 011100_三 001110_三 0011100_三 01111_四 11110_四  10111_四 11011_四  11101_四 11111_五 111111_长连"
  10. set "P_禁手=022020_三 020220_三 022200_三 002220_三 0022200_三 02222_四 22220_四  20222_四 22022_四  22202_四 22222_五 222222_长连"
  11. 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
  12. set "error1=坐标格式错误,或者坐标越界。"
  13. set "error2=该坐标已有棋子,无法在指定坐标下子。"
  14. set /a 步=0
  15. ::初始化棋盘
  16. set "Display_15=┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐"
  17. for /l %%i in (2 1 14) do (
  18.         set "Display_%%i=├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤"
  19. )
  20. set "Display_1=└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘"
  21. for /l %%i in (1 1 15) do for /l %%j in (1 1 15) do set QP[%%i][%%j]=0
  22. call :显示棋盘
  23. ::设置先手
  24. :xs
  25. set /p xs_in=请选择先手(玩家Player:P,电脑Computer:C)
  26. if "!xs_in!"=="C" (set "行动方=Computerr" & set /a k1=10,k2=7 & set "先手=C" & set "qizi1=○" & set "qizi2=●")
  27. if "!xs_in!"=="c" (set "行动方=Computer" & set /a k1=10,k2=7 & set "先手=C" & set "qizi1=○" & set "qizi2=●")
  28. if "!xs_in!"=="p" (set "行动方=Player" & set /a k1=7,k2=10 & set "先手=P" & set "qizi1=●" & set "qizi2=○")
  29. if "!xs_in!"=="P" (set "行动方=Player" & set /a k1=7,k2=10 & set "先手=P" & set "qizi1=●" & set "qizi2=○")
  30. if not defined 先手 goto :xs
  31. if "!先手!"=="C" (call :设置坐标 8 8 1) else (call :设置坐标 8 8 2 &goto :loop2)
  32. :loop
  33. call :显示棋盘
  34. call :玩家走
  35. if !ERRORLEVEL! gtr 0 (
  36.   echo,!error%ERRORLEVEL%!
  37.   goto :loop
  38. )
  39. :loop2
  40. call :显示棋盘
  41. call :电脑智能
  42. goto :loop
  43. :玩家走
  44. set "行动方=Player"
  45. set /a zq=0
  46. set /p P_zb=请输入坐标{A-O1-15}如"K5":
  47. echo !p_zb!|findstr /i "^[a-oA-O][1-9]$ ^[a-oA-O]1[0-5]$ ^exit$">nul ||exit /b 1
  48. if "!P_zb!"=="exit" exit
  49. set p_zb=!key_%p_zb:~0,1%!,%p_zb:~1%
  50. for /f "tokens=1,2 delims=," %%a in ("!P_zb!") do (
  51.         if "!QP[%%a][%%b]!"=="0" (
  52.             call :设置坐标 %%a %%b 2 || call :胜利 %ERRORLEVEL%
  53.          ) else (
  54.             exit /b 2
  55.         )
  56. )
  57. exit /b 0
  58. :胜利
  59. call :显示棋盘
  60. if "%1"=="2" (
  61.   echo !行动方!范"!禁!"禁手,该局判负!
  62.   if "!行动方!"=="Player" (
  63. echo,╭──╮╭──╮╭╭╮╮╭╮╭╮╭──╮╭──╮╭──╮
  64. echo,│╭─╯│╭╮││  │││││╰╮╭╯│╭─╯│╭╮│
  65. echo,││  ││││││││││││ ││ │╰─╮│╰╯│
  66. echo,││  │││││╭╮│││││ ││ │╭─╯│╭╭╯
  67. echo,│╰─╮│╰╯││││││╰╯│ ││ │╰─╮││╰╮
  68. echo,╰──╯╰──╯╰╯╰╯╰──╯ ╰╯ ╰──╯╰╯╰╯
  69.   ) else (
  70. echo,╭──╮╭╮  ╭──╮╭╮╭╮╭──╮╭──╮
  71. echo,│╭╮│││  │╭╮││╰╯││╭─╯│╭╮│
  72. echo,│╰╯│││  │╰╯│╰╮╭╯│╰─╮│╰╯│
  73. echo,│╭─╯││  │╭╮│ ││ │╭─╯│╭╭╯
  74. echo,││  │╰─╮││││ ││ │╰─╮││╰╮
  75. echo,╰╯  ╰──╯╰╯╰╯ ╰╯ ╰──╯╰╯╰╯
  76.   )
  77. ) else (
  78.   if "!行动方!"=="Computer" (
  79. echo,╭──╮╭──╮╭╭╮╮╭╮╭╮╭──╮╭──╮╭──╮
  80. echo,│╭─╯│╭╮││  │││││╰╮╭╯│╭─╯│╭╮│
  81. echo,││  ││││││││││││ ││ │╰─╮│╰╯│
  82. echo,││  │││││╭╮│││││ ││ │╭─╯│╭╭╯
  83. echo,│╰─╮│╰╯││││││╰╯│ ││ │╰─╮││╰╮
  84. echo,╰──╯╰──╯╰╯╰╯╰──╯ ╰╯ ╰──╯╰╯╰╯
  85.   ) else (
  86. echo,╭──╮╭╮  ╭──╮╭╮╭╮╭──╮╭──╮
  87. echo,│╭╮│││  │╭╮││╰╯││╭─╯│╭╮│
  88. echo,│╰╯│││  │╰╯│╰╮╭╯│╰─╮│╰╯│
  89. echo,│╭─╯││  │╭╮│ ││ │╭─╯│╭╭╯
  90. echo,││  │╰─╮││││ ││ │╰─╮││╰╮
  91. echo,╰╯  ╰──╯╰╯╰╯ ╰╯ ╰──╯╰╯╰╯
  92.   )
  93. )
  94. echo,╭╮╭╮╭──╮╭╮╭╮
  95. echo,││││╰╮╭╯│╰╮│
  96. echo,│╰╯│ ││ │  │
  97. echo,││││ ││ │  │
  98. echo,│  │╭╯╰╮│╰╮│
  99. echo,╰╰╯╯╰──╯╰╯╰╯
  100. endlocal
  101. set /p =按任意键重新开始游戏!<nul
  102. pause>nul
  103. goto :start
  104. goto :eof
  105. :显示棋盘
  106. echo,     ╭──────────────────────────────╮
  107. for /l %%i in (15 -1 2) do (
  108.     if %%i lss 10 (
  109.       echo,  %%i  │ !Display_%%i! │
  110.       set "Display_%%i=!Display_%%i:★=%qizi1%!"
  111.       set "Display_%%i=!Display_%%i:☆=%qizi1%!"
  112.     ) else (
  113.       echo, %%i  │ !Display_%%i! │
  114.       set "Display_%%i=!Display_%%i:★=%qizi1%!"
  115.       set "Display_%%i=!Display_%%i:☆=%qizi1%!"
  116.     )
  117.     echo,     │ │  │  │  │  │  │  │  │  │  │  │  │  │  │  │ │
  118. )
  119. echo,  1  │ !Display_1! │
  120. echo,     ╰-A  B  C  D  E  F  G  H  I  J  K  L  M  N  O-╯
  121. goto :eof
  122. :设置坐标 [x] [y] [1,2]
  123. 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
  124. set "cr=!qizi%3!"
  125. if "%3"=="1" if "!先手!"=="C" (set "cr=☆" ) else (set "cr=★")
  126. set "Display_!y!=!Display_%y%:~0,%cut1%!!cr!!Display_%y%:~%cut2%!"
  127. set "第!步!步=%1,%2"
  128. ::判断禁手,“三四” “成五” 不算禁手,"弎""叁"看似不是活三,两个一起构不成活四,但是跟别的活三,四搭配仍然是活三。
  129. set "禁="
  130. set "j="
  131. if "!行动方:~0,1!"=="!先手!" (
  132.     for %%i in (!%先手%_str[%1][%2]!) do (
  133.       for %%D in (!%先手%_禁手!) do (
  134.         for /f "tokens=1,2 delims=_" %%E in ("%%D") do (
  135.           set "sstr=%%i"
  136.           if not "!sstr!"=="!sstr:%%E=%%F!" ( set "j=%%F" )
  137.         )
  138.       )
  139.       set 禁=!禁!!j!
  140.       set "j="
  141.   )
  142. )
  143. if "!禁!"=="三四" set "禁="
  144. if "!禁!"=="四三" set "禁="
  145. if not "!禁!"=="!禁:五=!" if "!禁!"=="!禁:长连=!" set "禁="
  146. if "!禁:~1,1!"=="" set "禁="
  147. if defined 禁 exit /b 2
  148. ::判断是否5连,断定胜负
  149. if !步! GTR 1 if "!行动方!"=="Computer" (set /a fens=!C_soce[%1][%2]!) else (set /a fens=!P_soce[%1][%2]!)
  150. if !fens! GEQ 9999999 exit /b 1
  151. set "C_str[%1][%2]="
  152. set "C_soce[%1][%2]="
  153. set "P_soce[%1][%2]="
  154. set "P_str[%1][%2]="
  155. ::落子点估值
  156. for /l %%i in (1 1 4) do (
  157.         for %%j in (%%i_0 %%i_-%%i 0_-%%i -%%i_-%%i -%%i_+0 -%%i_+%%i 0_%%i %%i_%%i) do (
  158.                 for /f "tokens=1,2 delims=_" %%x in ("%%j") do (
  159.                         set /a xx=x+%%x,yy=y+%%y
  160.                         for /f "tokens=1,2" %%a in ("!xx! !yy!") do (
  161.                                 if defined QP[%%a][%%b] if !QP[%%a][%%b]! EQU 0 (
  162. rem 更新双方字串并评分,没有的则重新创建,只更新 x-4 => x+4 范围且在一条直线上的评分。
  163. set /a a=%%a,b=%%b,c=1
  164. if "!C_str[%%a][%%b]!"=="" (
  165.         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
  166.         for /l %%I in (-1 -1 -4) do (
  167.                 set /a xxx=a+%%I,yyy=b+%%I,lj1=0
  168.                 if !xxx! LSS 1 (
  169.                         set /a lj1=1
  170.                         set "c_str1=x!c_str1!"
  171.                         set "p_str1=x!p_str1!"
  172.                 ) else (
  173.                         for /f "tokens=1,2" %%A in ("!xxx! !b!") do (
  174.                                 set "c_str1=!QP[%%A][%%B]!!c_str1!"
  175.                                 set "p_str1=!QP[%%A][%%B]!!p_str1!"
  176.                         )
  177.                 )
  178.                 if !yyy! LSS 1 (
  179.                         set /a lj1=1
  180.                         set "c_str2=x!c_str2!"
  181.                         set "p_str2=x!p_str2!"
  182.                 ) else (
  183.                         for /f "tokens=1,2" %%A in ("!a! !yyy!") do (
  184.                                 set "c_str2=!QP[%%A][%%B]!!c_str2!"
  185.                                 set "p_str2=!QP[%%A][%%B]!!p_str2!"
  186.                         )
  187.                 )
  188.                 if !lj1! EQU 1 (
  189.                         set "c_str3=x!c_str3!"
  190.                         set "p_str3=x!p_str3!"
  191.                 ) else (
  192.                         for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
  193.                                 set "c_str3=!QP[%%A][%%B]!!c_str3!"
  194.                                 set "p_str3=!QP[%%A][%%B]!!p_str3!"
  195.                         )
  196.                 )
  197.                 set /a xxx=a+%%I,yyy=b-%%I,lj1=0
  198.                 if !xxx! LSS 1 set /a lj1=1
  199.                 if !yyy! GTR 15 set /a lj1=1
  200.                 if !lj1! EQU 1 (
  201.                         set "c_str4=x!c_str4!"
  202.                         set "p_str4=x!p_str4!"
  203.                 ) else (
  204.                         for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
  205.                                 set "c_str4=!QP[%%A][%%B]!!c_str4!"
  206.                                 set "p_str4=!QP[%%A][%%B]!!p_str4!"
  207.                         )
  208.                 )
  209.         )
  210.         for /l %%I in (1 1 4) do (
  211.                 set /a xxx=a+%%I,yyy=b+%%I,lj1=0
  212.                 if !xxx! GTR 15 (
  213.                         set /a lj1=1
  214.                         set "c_str1=!c_str1!x"
  215.                         set "p_str1=!p_str1!x"
  216.                 ) else (
  217.                         for /f "tokens=1,2" %%A in ("!xxx! !b!") do (
  218.                                 set "c_str1=!c_str1!!QP[%%A][%%B]!"
  219.                                 set "p_str1=!p_str1!!QP[%%A][%%B]!"
  220.                         )
  221.                 )
  222.                 if !yyy! GTR 15 (
  223.                         set /a lj1=1
  224.                         set "c_str2=!c_str2!x"
  225.                         set "p_str2=!p_str2!x"
  226.                 ) else (
  227.                         for /f "tokens=1,2" %%A in ("!a! !yyy!") do (
  228.                                 set "c_str2=!c_str2!!QP[%%A][%%B]!"
  229.                                 set "p_str2=!p_str2!!QP[%%A][%%B]!"
  230.                         )
  231.                 )
  232.                 if !lj1! EQU 1 (
  233.                         set "c_str3=!c_str3!x"
  234.                         set "p_str3=!p_str3!x"
  235.                 ) else (
  236.                         for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
  237.                                 set "c_str3=!c_str3!!QP[%%A][%%B]!"
  238.                                 set "p_str3=!p_str3!!QP[%%A][%%B]!"
  239.                         )
  240.                 )
  241.                 set /a xxx=a+%%I,yyy=b-%%I,lj1=0
  242.                 if !xxx! GTR 15 set /a lj1=1
  243.                 if !yyy! LSS 1 set /a lj1=1
  244.                 if !lj1! EQU 1 (
  245.                         set "c_str4=!c_str4!x"
  246.                         set "p_str4=!p_str4!x"
  247.                 ) else (
  248.                         for /f "tokens=1,2" %%A in ("!xxx! !yyy!") do (
  249.                                 set "c_str4=!c_str4!!QP[%%A][%%B]!"
  250.                                 set "p_str4=!p_str4!!QP[%%A][%%B]!"
  251.                         )
  252.                 )
  253.         )
  254.         set /a soce1=0,soce2=0,soce3=0,soce4=0
  255.         for %%X in (!tzk!) do (
  256.                 for /f "tokens=1,2 delims=_" %%A in ("%%X") do (
  257.                         for /l %%W in (1 1 4) do (
  258.                                 if not "!c_str%%W!"=="!c_str%%W:%%A=@!" if !soce%%W! LSS %%B (
  259.                                     set /a soce%%W=%%B
  260.                                     if !maxP! LSS %%B set /a maxP=%%B
  261.                                 )
  262.                         )
  263.                 )
  264.         )
  265.         set "C_str[!a!][!b!]=!c_str1!,!c_str2!,!c_str3!,!c_str4!"
  266.         set "C_soce[!a!][!b!]=!soce1!+!soce2!+!soce3!+!soce4!"
  267.         set /a soce1=0,soce2=0,soce3=0,soce4=0
  268.         for %%X in (!p_tzk!) do (
  269.                 for /f "tokens=1,2 delims=_" %%A in ("%%X") do (
  270.                         for /l %%W in (1 1 4) do (
  271.                                 if not "!p_str%%W!"=="!p_str%%W:%%A=@!" if !soce%%W! LSS %%B (
  272.                                     set /a soce%%W=%%B
  273.                                     if !maxP! LSS %%B set /a maxP=%%B
  274.                                  )      
  275.                         )
  276.                 )
  277.         )
  278.         set "P_str[!a!][!b!]=!p_str1!,!p_str2!,!p_str3!,!p_str4!"
  279.         set "P_soce[!a!][!b!]=!soce1!+!soce2!+!soce3!+!soce4!"
  280. rem end 创建。
  281. ) else (
  282. rem 更新字串及评分,已存在的点会加快效率。
  283.         if %%x NEQ 0 (
  284.                 set /a cut1=5-%%x-1,cut2=5-%%x,tk=1,pd=%%x+%%y
  285.                 if !pd! EQU 0 (
  286.                         set /a cut1=cut1+30,cut2=cut2+30,tk=4
  287.                 )
  288.                 if %%x EQU %%y (
  289.                         set /a cut1=cut1+20,cut2=cut2+20,tk=3
  290.                 )
  291.         ) else (
  292.                 set /a cut1=15-%%y-1,cut2=15-%%y,tk=2
  293.         )
  294.         for /f "tokens=1,2" %%X in ("!cut1! !cut2!") do (
  295.                 set "C_str[%%a][%%b]=!C_str[%%a][%%b]:~0,%%X!!z!!C_str[%%a][%%b]:~%%Y!"
  296.                 set "P_str[%%a][%%b]=!P_str[%%a][%%b]:~0,%%X!!z!!P_str[%%a][%%b]:~%%Y!"
  297.         )
  298.         for /f "tokens=1-4 delims=+" %%A in ("!C_soce[%%a][%%b]!") do (
  299.                 set /a soce1=%%A,soce2=%%B,soce3=%%C,soce4=%%D
  300.         )
  301.         set /a soce=0,ttk=tk*10-10
  302.         for %%T in (!ttk!) do (
  303.                 set "t_str=!C_str[%%a][%%b]:~%%T,9!"
  304.         )
  305.         for %%Q in (!tzk!) do (
  306.                 for /f "tokens=1,2 delims=_" %%A in ("%%Q") do (
  307.                         if not "!t_str!"=="!t_str:%%A=@!" (
  308.                                 if !soce! LSS %%B set /a soce=%%B
  309.                         )
  310.                 )
  311.         )
  312.         set /a soce!tk!=!soce!
  313.         if !maxC! LSS !soce! set /a maxC=soce
  314.         set "C_soce[%%a][%%b]=!soce1!+!soce2!+!soce3!+!soce4!"
  315.         
  316.         
  317. rem 更新player评分
  318.         for /f "tokens=1-4 delims=+" %%A in ("!P_soce[%%a][%%b]!") do (
  319.                 set /a soce1=%%A,soce2=%%B,soce3=%%C,soce4=%%D
  320.         )
  321.         set /a soce=0
  322.         for %%T in (!ttk!) do (
  323.                 set "t_str=!P_str[%%a][%%b]:~%%T,9!"
  324.         )
  325.         for %%Q in (!p_tzk!) do (
  326.                 for /f "tokens=1,2 delims=_" %%A in ("%%Q") do (
  327.                         if not "!t_str!"=="!t_str:%%A=@!" (
  328.                                 if !soce! LSS %%B set /a soce=%%B
  329.                         )
  330.                 )
  331.         )
  332.         set /a soce!tk!=!soce!
  333.         if !maxP! LSS !soce! set /a maxP=soce        
  334.         set "P_soce[%%a][%%b]=!soce1!+!soce2!+!soce3!+!soce4!"
  335.         
  336. )
  337. rem end更新
  338.                                 )
  339.                         )
  340.                 )
  341.         )
  342. )
  343. if !maxC! geq !maxP! ( set /a k1=10,k2=7 ) else ( set /a k1=7,k2=10 )
  344. exit /b 0
  345. :电脑智能
  346. ::判断定式
  347. ::if !匹配! equ 1 (
  348.    
  349.    
  350.    
  351. :电脑走
  352. set "行动方=Computer"
  353. set /a 最高分=0,num=0
  354. for /l %%x in (1 1 15)  do (
  355.         for /l %%y in (1 1 15) do (
  356.                 if defined C_soce[%%x][%%y] (
  357.                         set "m=!C_soce[%%x][%%y]!"
  358.                         set "n=!P_soce[%%x][%%y]!"
  359.                         set /a m=!m!,n=!n!,mn=m*!k1!+n*!k2!
  360.                         if !最高分! EQU !mn! (
  361.                           set /a num+=1
  362.                           set "坐标集=!坐标集! [%%x][%%y]"
  363.                          )
  364.                         if !最高分! LSS !mn! (
  365.                                 set /a 最高分=!mn!,num=1
  366.                                 set "坐标集=[%%x][%%y]"
  367.                         )
  368.                 )
  369.         )
  370. )
  371. set /a get=%RANDOM%%%num+1,dd=0
  372. for %%i in (!坐标集!) do (
  373.         set /a dd+=1
  374.         if !dd! equ !num! (
  375.             for /f "tokens=1,2 delims=[]" %%x in ("%%i") do (
  376.                 call :设置坐标 %%x %%y 1
  377.              )
  378.          )
  379. )
  380. goto :eof
  381. :::下面是定式图谱及算法
  382. x代表第二手棋子位置,然后x周围2*2的位置可以用[方向,距离]来表示位置。
  383. 而 第二手棋子位置可以有很多,而且可能对称,那么[方向增值,距离]可以表示相对位置。
  384. 比如这3步棋 [8,8] [8,9] [8,10] ,从第3步起,可以用[0,1]来表示相对第2步的位置变化。
  385. 加入第二步下在[8,9],方向是4,那么可以得出第三步 方向= (4+0)%16,代进 set "方位_0=ly+=jl",可以得到第3步位置。
  386. 得分100,表示黑必胜,50表示黑优势,-100表示必败,0表示均势。
  387. 位置值表示图
  388. 14 15 0 1 2
  389. 13 14 0 2 3
  390. 12 12 x 4 4
  391. 11 10 8 6 5
  392. 10  9 8 7 6
  393. set "方位_0=ly+=jl"
  394. set "方位_1=lx+=1,ly+=2"
  395. set "方位_2=lx+=jl,ly+=jl"
  396. set "方位_3=lx+=2,ly+=1"
  397. set "方位_4=lx=lx+jl"
  398. set "方位_5=lx+=2,ly-=1"
  399. set "方位_6=lx=lx+jl,ly=ly-jl"
  400. set "方位_7=lx+=1,ly-=2
  401. set "方位_8=ly=ly-jl"
  402. set "方位_9=lx-=1,ly-=2"
  403. set "方位_10=lx=lx-jl,ly=ly-jl"
  404. set "方位_11=lx-=2,ly-=1"
  405. set "方位_12=lx=lx-jl"
  406. set "方位_13=lx-=2,ly+=1
  407. set "方位_14=lx=lx-jl,ly=ly+jl"
  408. set "方位_15=lx-=1,ly+=2"
  409. ::定式图谱 [方向增值,距离] for /f "delims=" %%i in ('set [直][!第二步!][!第三步!]..')
  410. ::1,直指开局
  411. [直][0,1][2,1][10,1]=100
  412. [直][0,1][3,2][11,2]=100
  413. [直][0,1][0,2][4,1]=100
  414. [直][0,1][4,2][4,1]=100
  415. [直][3,2][4,1][6,1]=0
  416. [直][3,2][6,1][4,1]=100
  417. [直][3,2][9,2][4,1]=100
  418. [直][3,2][10,2][4,1]=100
  419. [直][3,2][10,2][4,2]=0
  420. [直][4,1][6,1][7,2]=150
  421. [直][4,1][6,2][6,1]=150
  422. [直][4,2][5,2][7,1]=100
  423. [直][4,2][5,2][9,2]=50
  424. [直][4,2][10,1][2,1]=100
  425. [直][4,2][10,1][6,1]=50
  426. [直][4,2][10,1][3,1]=0
  427. [直][4,2][9,1][6,1]=100
  428. [直][4,2][3,1][6,1]=100
  429. [直][5,2][10,1][2,1]=100
  430. [直][5,2][10,1][4,1]=50
  431. [直][5,2][2,1][7,2]=100
  432. [直][5,2][2,1][4,1]=50
  433. [直][5,2][9,1][6,1]=100
  434. [直][5,2][4,1][6,1]=100
  435. [直][8,2][8,3][6,1]=100
  436. [直][8,2][8,3][4,1]=50
  437. [直][8,2][5,2][10,1]=50
  438. [直][8,2][0,1][6,1]=100
  439. [直][8,2][2,1][10,1]=100
  440. [直][6,2][10,1][2,1]=100
  441. [直][6,2][10,1][10,2]=50
  442. [直][6,2][9,1][12,1]=50
  443. [直][6,2][2,1][2,2]=100
  444. [直][6,2][2,1][7,2]=50
  445. [直][8,3][2,1][7,2]=100
  446. [直][8,3][2,1][6,1]=-50
  447. [直][8,3][2,1][11,2]=-50
  448. [直][8,3][2,1][5,2]=-50
  449. [直][8,3][2,1][10,1]=-100
  450. [直][8,3][2,1][12,1]=-100
  451. [直][8,3][7,2][9,2]=100
  452. [直][8,3][2,1][6,2]=100
  453. [直][8,3][8,2][7,2]=100
  454. [直][8,3][6,2][9,2]=100
  455. [直][8,3][6,2][6,1]=100
  456. ::斜止图谱
  457. ::太长了,累死我了,以后慢慢补上。
  458.      一、斜止:   
  459. 1、长星:黑3走J10。   
  460. (1)白4走H10时:J8双方均衡;G9、G11黑不利;I7、I8、K7黑必败。   
  461.         由于白4这步强防时,黑只有一个均衡点可选,实战时当然会被白方拨去,所以在日本职业大赛中,极少出现长星布局。   
  462. (2)白4走H9时:G9、I8、I10、I11、J8、J9双方均衡。   
  463. (3)白4走I7时:H10、I8、I10、K9双方均衡。   
  464. (4)白4走H11时:I8、I11、J8、J9双方均衡。
  465.    
  466. 2、峡月:黑3走J9。(溪月参照本局)   
  467. (1)白4走I8时:I7黑必胜;H10、J8黑有利。   
  468. (2)白4走J8时:H10黑必胜;H7、K7黑有利;I7、I8双方均衡。   
  469. (3)白4走K8时:H7、H10、I7黑必胜。   
  470. (4)白4走H7时:I10、J8、J10黑必胜;I7双方均衡。
  471.   
  472. 3、恒星:黑3走J8。   
  473. (1)白4走I8时:I7黑必胜;H9、I10黑有利。   
  474. (2)白4走H7时:I7黑必胜;I10、J9黑有利;I8。   
  475. (3)白4走I7时:I8黑必胜;H7、I10黑有利。   
  476. (4)白4走H6时:I8、J9黑必胜。   
  477. 4、水月:黑3走J7。   
  478. (1)白4走I5时:G8、I6黑必胜;G9、I10黑有利。   
  479. (2)白4走J8时:I7、K7黑必胜;H10黑有利。   
  480. (3)白4走H7时:I6、J6黑必胜;I8黑有利。   
  481. (4)白4走I7时:H6、I6黑必胜;I8双方均衡。
  482.   
  483. 5、流星:黑3走J6。   
  484. (1)白4走G9时:J9双方均衡;J8黑不利;H6、H9黑必败。   
  485. (2)白4走I7时:H6、I6、I8、K7双方均衡。   
  486. (3)白4走G8时:J7黑有利;H9、J8双方均衡;I7黑不利。   
  487. (4)白4走H9时:I7、J9黑必胜;J8黑不利。   
  488. 6、云月:黑3走I8。(雨月参照本局)   
  489. (1)白4走J8时:H10黑必胜;G9、K7黑有利;J9双方均衡。   
  490. (2)白4走H7时:G10黑必胜;G9黑有利。   
  491. (3)白4走G8时:H7黑必胜;G10、J9黑有利;H9、J7双方均衡。   
  492. (4)白4走H9时:G8、J8黑必胜;G7双方均衡;H7黑必败。  
  493. 7、浦月:黑走I7。(这可是斜止中的最强开局,其实不用我多说,各种各样的棋书都有详尽的介绍。但是,选取这个布局,在第3手时,白方一定会要求交换。黑方等于自掘坟墓了。)   
  494. (1)白4走G9时:J7、J8黑必胜;J9黑有利;H7、H9双方均衡;J6黑不利。   
  495. (2)白4走H7时:G9、J6、J8黑必胜。   
  496. (3)白4走H6时:G9、I6、J6、J7黑必胜。   
  497. (4)白4走J6时:G8、G9、H9、H10黑必胜。   
  498. 8、岚月:黑3走I6。   
  499. (1)白4走I10时:H7黑必胜;G9黑有利;H6双方均衡;I8黑不利。   
  500. (2)白4走J8时:H7黑必胜;H10、K7黑有利。   
  501. (3)白4走H9时:G9黑必胜;J9黑有利。   
  502. (4)白4走G9时:J7黑必胜;J9、K8黑有利。   
  503. 9、银月:黑3走H7。   
  504. (1)白4走H9时:G9黑必胜;I7、J9双方均衡;I8黑必败。   
  505. (2)白4走H6时:G8、I8黑必胜。   
  506. (3)白4走G8时:H6、I8黑必胜。   
  507. (4)白4走G9时:H9、I8黑必胜。   
  508. 10、明星:黑3走H6。   
  509. (1)白4走H9时:G9黑必胜;I7、J6、J8、J9双方均衡。   
  510. (2)白4走G9时:J9黑必胜;J8黑有利;H7黑必败。   
  511. (3)白4走H7时:F8、G7、I7黑必胜。(这是白方最差的防守。)   
  512. (4)白4走I10时:I7、J8黑必胜;H7、H9黑必败。  
  513. 11、斜月:黑3走G7。   
  514. (1)白4走H9时:J9黑有利;G9、I8双方均衡;G10、I10黑不利;I7黑必败。   
  515. (2)白4走I10时:I7黑必胜;F8黑有利;G9;F7、I8黑必败。   
  516. (3)白4走G9时:F7、F8黑必胜;F10黑有利;H9;F6黑不利。   
  517. (4)白4走G8时:F6、F7、H6黑必胜;I7双方均衡。   
  518. 12、名月:黑3走G6。   
  519. (1)白4走H9时:G9黑必胜;J9黑有利;I8双方均衡。   
  520. (2)白4走I10时:G9、E8黑必胜;I8黑有利。   
  521. (3)白4走I8时:H6黑必胜;I6黑有利。   
  522. (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