标题: [游戏娱乐] 人机对战五子棋批处理游戏 [打印本页]
作者: netbenton 时间: 2009-5-5 23:22 标题: 人机对战五子棋批处理游戏
在网上看到多个关于五子棋的批处理游戏,已经可以做到,人与人对战,并判断胜负。但是大多数人认为批处理的效率有问题,都不敢做人与机对战的尝试。批处理的效率真的有那么低吗?出于对dos的热爱,我就不相信批处理真的就做不到真正的五字棋人机对战!于是,这个问题花了我二天的时间,功夫不负有心人,批处理人机对战游戏出来了! 此批处理的棋盘延用了batman的显示方案,但是在输出算法上有所不同。虽然,这个话题已经有很多人写了很多代码,但是,此批处理的算法关键部分由本人自己写出来,所以打上了原创,若有不妥,请大家指正改过。谢谢。(初版3.85K,已多次更新增强)
注:
一楼保持了第一版,是能实现的基本原理,不想改了。
以下为更新记录:
5.6 根据一些网友的意见,做了一点改进:
把棋盘搞大一点了,增加了悔棋功能,增加了音效,
把系统提示放到了更合理的地方,
并增加了一点电脑方的棋艺,(还是不够完善,没有做到多方考虑)
5.7 修改:增加了电脑方最后一手特别显示
5.10修改:固定为黑子先手,第一手固定下在天元 JJ10 位置增加了几行代码,却提速不少,
5.14 修改:提速100%(最主要是原来代码中的一个BUG改正)
以上修改在(7楼)
5.17 修改(在20楼):电脑智能升级了,但速度却慢了,
5.21 更新(原在23楼):完善了电脑智能,并在有多个等效下法时进行随机取位,增加了可玩性,速度也不错。
5.25 增加了背景音乐《春江花月夜》,如高山流水般的声音,听着下五棋子,太爽了
6.2 小更新 (在23楼) 小更新:增强了一点点电脑棋艺。
***看到网上有人贴出,玩家先下时,九手就赢了电脑,特此改进。 ***
6.14 增加了可以用鼠标操作,但是用到了一个鼠标支持的三方工具,(请看32楼)
2009.8.14修改
修正一些bug,并更新三方鼠标工具,并组合了背景音乐。
2009.10.2 更新
修正了,存放路径中含有空格时出错的问题
请看一楼附件
- @echo off&setlocal enabledelayedexpansion
- set li0=┌───────────────────┐
- set li1=│┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐│1
- for /l %%a in (2,1,18) do (set li%%a=│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│%%a)
- set li19=│└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘│19
- set li20=└───────────────────┘
- set li21= A B C D E F G H I J K L M N O P Q R S
- for %%a in (%li21%) do (set/a .+=1,%%a=.&set z!.!=%%a)
- set z0= &set z20= &set "z21= "
- set li5=!li5! 五 棋 子 人 机 对 战
- set li7=!li7! 批 处 理
- set li9=!li9! 电 脑 水 平 中 等
- set li12=!li12! 由 netbenton 编写完成
- set li14=!li14! 棋盘设计参照了 batman
- title 批处理五子棋
-
- set str=###################
- set .=0
- for /l %%a in (1,1,19) do (
- set he%%a=!str!&set sh%%a=!str!
- for /l %%b in (1,1,19) do set [%%a.%%b=0
- )
- set .=33
- for /l %%a in (5,1,19) do (
- set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
- set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
- set/a .-=1
- )
-
- set ●=○&set a●=电脑
- set ○=●&set a○=玩家
- ::设置电脑IQ
- set idea=@@@@#1 #@@@@5 @#@@@4 @@@#@2 @@#@@3 $#$$$4 $$#$$3 $$$#$2 $$$$#1 #$$$$5 #$$#$#3 #$#$$#4 #@@@##2 ##@@@#5 #@@#@#3 #@#@@#4 #@@@#1
- set idea=!idea! ##@@@4 @@@##2 ##$$$#5 #$$$##2 #$$$#1 ##@@#4 #@@##2 ##$$#4 #$$##2 #$#$#3 @@###3 ###@@3
- set idea=!idea! ##@##2 ###@#3 #@###3 @####4 ####@2 ##############7 ###########6 ########4 #####3 ####2
- set ttr=!idea:@=●!&set ttr=!ttr:$=○!
- for %%a in (!ttr!) do (set var=%%a&set !var:~,-1!=!var:~-1!&set idea=!idea! !var:~,-1!)
- set ttr=
- ::设置电脑IQ
- :restart
- for /l %%a in (0,1,21) do (echo !z%%a!!li%%a!)
- setlocal enabledelayedexpansion
- set li21=!li21! reboot重新开始,exit退出。
- set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:
- if /i "!var!" equ "Q" goto :eof
- if /i "!var!" equ "W" (set zhi=●) else (set zhi=○)
- echo.
-
- :loop
- if %zhi% equ ● goto :men
- set .=&set put1=
- for %%a in (!idea!) do (
- for %%b in (he sh) do (
- for /l %%c in (1,1,19) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
- ) )
- for %%b in (pi ni) do (
- for /l %%c in (5,1,33) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
- ) )
- if defined put1 set put=%%a&goto :get
- )
- echo. 已经和棋了
- pause
- goto :restart
- :men
- for /l %%a in (0,1,21) do (echo !z%%a!!li%%a!)
- set /p user=[列前,行后]:
- echo.
- if "!user!" equ "reboot" endlocal&goto :restart
- if "!user!" equ "exit" exit
- set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
- if not defined [!poh!.!pos! echo 输入点不存在&goto :men
- if "!he%poh%:~%var%,1!" neq "#" echo 该点已经有子&goto men
- goto :getok
- :get
- set /a .=!random!%%.+1
- set put=!put%.%! !put!
- ::随机取最佳的走法
- for /f "tokens=1-3" %%a in ("%put%") do (
- set var=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
- set/a var=!var:~19,1!+%%c
- if "%%a" equ "he" (set/a poh=%%b,pos=20-var)
- if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)
- if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
- if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
- if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
- )
- echo 电脑最后下在:!z%pos%!!z%poh%!(%poh%)
- :getok
- set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
- set/a piph=poh+pos-1,lips=pos+1,niph=19+pos-poh
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
-
- for %%a in ("li!poh! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- if defined %%b (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- if "!%%b:%win%=!" neq "!%%b!" set win=y
- )
- )
- )
- set/a asc%zhi%+=1
- if !win! neq y goto :loop
- for /l %%a in (0,1,21) do (echo !z%%a!!li%%a!)
- set/p= !a%zhi%! %zhi%子 第!asc%zhi%!手 胜出 <nul
- pause
- endlocal&goto :restart
复制代码
作者: wjjy 时间: 2009-5-6 02:51
占位,发红包,发红包^_%
[ 本帖最后由 wjjy 于 2009-5-6 02:52 编辑 ]
作者: inittab 时间: 2009-5-6 07:09
厉害,这个五子棋p的iq 很棒。
作者: wxcute 时间: 2009-5-6 11:05
set idea 这个思路相当精彩!相当!
作者: yslyxqysl 时间: 2009-5-6 16:52
A B C D E F G H I J K L M N O P Q R S reboot重新开始,exit退出。
玩家 ○子 第10手 胜出 请按任意键继续. . .
┌───────────────────┐
A│┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐│1
B│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│2
C│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│3
D│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│4
E│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│5 五 棋 子 人 机 对 战
F│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│6
G│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│7 批 处 理
H│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│8
I│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│9 电 脑 水 平 中 等
J│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│10
K│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│11
L│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│12 由 netbenton 编写完成
M│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│13
N│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│14 棋盘设计参照了 batman
O│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│15
P│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│16
Q│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│17
R│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│18
S│└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘│19
└───────────────────┘
A B C D E F G H I J K L M N O P Q R S
选择谁先下[ W,玩家 D,电脑 Q,退出 ]:
少了cls不好看。
还有,电脑的智商还是不高,能不能像Flash那样把我下赢?
[ 本帖最后由 yslyxqysl 于 2009-5-6 16:55 编辑 ]
作者: 随风 时间: 2009-5-6 19:10
实在静不下心来研究楼主的算法,
测试了下,智能很不错,效率也很不错,佩服!
作者: netbenton 时间: 2009-5-6 21:28
- @echo off&setlocal enabledelayedexpansion
- mode con: lines=43 cols=110
- set li39= A B C D E F G H I J K L M N O P Q R S
- set li0= ┌─────────────────────────────────────┐
- set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
- set var=1
- for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
- for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)
- set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
- set li38= └─────────────────────────────────────┘
- set str=a b c d e f g h i j k l m n o p q r s
- for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)
- set li5=!li5! 五 棋 子 人 机 对 战
- set li7=!li7! 批 处 理
- set li10=!li10! 电 脑 水 平 中 等
- set li31=!li31! 由 netbenton 编写完成
- set li33=!li33! 棋盘设计参照了 batman
- title 批处理五子棋
-
- set str=###################
- set .=0
- for /l %%a in (1,1,19) do (
- set he%%a=!str!&set sh%%a=!str!
- for /l %%b in (1,1,19) do set [%%a.%%b=0
- )
- set .=33
- for /l %%a in (5,1,19) do (
- set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
- set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
- set/a .-=1
- )
-
- set ●=○&set ○=●
- set zhi=●
- set say=say
- ::设置电脑IQ
- set idea=@@@@#1 #@@@@5 @#@@@4 @@@#@2 @@#@@3 $$$$#1 #$$$$5 $$#$$3 $#$$$4 $$$#$2 #@@@##2 ##@@@#5 #@@#@#3 #@#@@#4 #@#@@3 @#@@#4 #@@@#1
- set idea=!idea! ##@@@4 @@@##2 @##@@#4 #@##@@3 #@#@#@4 @#@#@#3 #$$#$#3 #$#$$#4 ##$$$#5 #$$$##2 #$$$#1 ##@@#4 #@@##2 #@#@#3 ##$$#4 #$$##2 #$#$#3 #$##$#3
- set idea=!idea! @@###3 ###@@3 ##@##2 ###@#3 #@###3 @####4 ####@2 ##$##2 #####3
- set idea=!idea! #$###3 $####3 ##$##2 ###$#3 ####$3 $$###3 ###$$3 $#$##2 ##$#$4 #$##$3 $##$#3 $###$3 $$$##2 #$$#$2 $$##$2 $#$$#4 $##$$3 ##$$$4
-
- :restart
- (
- setlocal enabledelayedexpansion
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set li39=!li39! reboot重新开始,exit退出。
- set li37=!li37! back 悔棋
- set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:
- if /i "!var!" equ "Q" goto :eof
- if /i "!var!" equ "D" (set onez=○&set towz=●&set hou=☆) else (set onez=●&set towz=○&set hou=★)
- set a!onez!=电脑&set a!towz!=玩家
- )
- (
- set ttr=!idea:@=%onez%!&set ttr=!ttr:$=%towz%!
- set idea=
- for %%a in (!ttr!) do (set var=%%a&set !var:~,-1!=!var:~-1!&set idea=!idea! !var:~,-1!)
- set ttr=
- set li27=!li27! !onez! !a%onez%!
- set li25=!li25! !towz! !a%towz%!
- set/a pos=10,poh=10&goto :getok
- )
- :loop
- (if %zhi% equ %onez% goto :men
- set .=
- for %%a in (!idea!) do (
- for %%b in (he sh) do (
- set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (1,1,19) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
- )
- ) )
- for %%b in (pi ni) do (
- set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (5,1,33) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
- )
- ) )
- if defined . set put=%%a&goto :get
- ))
- echo. 已经和棋了
- pause
- endlocal&goto :restart
- :men
- (
- set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)
- set li38=!li38![%悔:~,24%]
- cls
- for /l %%a in (0,1,39) do (echo !li%%a!)
- for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- set li38=%li38%
- set /p user=!say:say=%error%! [列前,行后]:
- if "!user!" equ "reboot" endlocal&goto :restart
- if "!user!" equ "exit" exit
- if "!user!" equ "back" call :悔&goto :men
- set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
- if not defined [!poh!.!pos! set error=输入点不存在&goto :men
- )
- if "!he%poh%:~%var%,1!" neq "#" set error=该点已经有子&goto men
- goto :getok
- :get
- set /a .=!random!%%.+1
- set put=!put%.%! !put!
- ::随机取最佳的走法
- for /f "tokens=1-3" %%a in ("%put%") do (
- set var=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
- set/a var=!var:~19,1!+%%c
- if "%%a" equ "he" (set/a poh=%%b,pos=20-var)
- if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)
- if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
- if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
- if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
- )
- set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在:
- :getok
- set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
- (set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
- for %%a in ("li!liph! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- if "!%%b:%win%=!" neq "!%%b!" set win=y
- )
- ))
- (set/a asc%zhi%+=1
- set 悔= !z%pos%!!z%poh%!!悔!
- if !win! neq y goto :loop)
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set/p= !a%zhi%! %zhi%子 第!asc%zhi%!手 !z%pos%!!z%poh%!(%poh%) 胜出 <nul
- pause
- endlocal&goto :restart
- :悔
- if not defined 悔 goto :eof
- if "!悔:~6,1!" equ "" goto :eof
- for %%a in (!悔:~^,6!) do (set str=%%a
- set/a poh=!str:~-1!,pos=!str:~,1!
- set/a piph=poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
- for %%a in ( "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!#!%%b:~%%c!)
- )
- )
- for /f "tokens=1,2" %%b in ("li!liph! !lips!") do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!┼!%%b:~%%c!)
- ))
- set/a asc%zhi%-=1
- set 悔=!悔:~6!
- set error=你悔棋,耍赖皮!
- if not defined 悔 goto :eof
- set/a poh=!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1
- set say=say !z%pos%!!z%poh%!(%poh%)
- goto :eof
复制代码
[ 本帖最后由 netbenton 于 2009-5-19 12:55 编辑 ]
作者: yslyxqysl 时间: 2009-5-6 22:00
在顶楼更新一下就好了
作者: yslyxqysl 时间: 2009-5-7 17:14
^G音效太恐怖了。。。
作者: netbenton 时间: 2009-5-7 18:25 标题: re 楼上
我只能做到这样了。
另外,在7楼做了一点修改:增加了最后一步特别显示,这样更容易看清电脑下在哪里了。
作者: Batcher 时间: 2009-5-10 01:30
在没有禁手的前提下,如果电脑先手,可以采用花月、浦月等必胜开局来赢棋。
楼主能否研究一下这些开局并把它们放到你这个批处理中以增加电脑的棋力?
作者: Batcher 时间: 2009-5-10 01:37
zh159兄把它转换成HTA了,界面挺漂亮^_^
[attach]1301[/attach]- <html>
- <title>五子棋界面 - zh159</title>
- <hrad>
-
- <HTA:APPLICATION
- ID="MyhyliApp"
- APPLICATIONNAME="五子棋界面 - zh159"
- BORDER="thin"
- BORDERSTYLE=""
- VERSION="1.0"
- SCROLL="no"
- ICON="C:\WINDOWS\System32\wuauclt.exe"
- INNERBORDER="no"
- CONTEXTMENU="no"
- CAPTION="yes"
- MAXIMIZEBUTTON="no"
- MINIMIZEBUTTON="yes"
- SHOWINTASKBAR="yes"
- SINGLEINSTANCE="yes"
- SYSMENU="yes"
- WINDOWSTATE="normal"
- NAVIGABLE="yes"
- />
- </hrad>
-
- <script language="javascript"></script>
- <script language="VBScript"></script>
-
- <style>
- .GUIwh {width:24;height:24;cursor:hand;}
- </style>
-
- <body background="bg.gif" scroll="no" style="background: SteelBlue ;color:#ffffff;">
-
- <table align="center" width="630" border="1" cellspacing="0" cellpadding="10" borderColor="#ffffff" style="font: 13px 宋体;border-collapse:collapse;">
- <tr align="center">
- <td width="450" height="450">
- <table border="0" cellspacing="0" cellpadding="0" borderColor="#ffffff" style="font: 21px 宋体;border:2px solid #ffffff;">
- <script language="VBScript">
- str = "ABCDEFGHIJKLMNOPQRS"
- For i = 1 To Len(str)
- with document
- .write "<tr align='center'>"
- For n = 1 To Len(str)
- stri = MID(str,i,1)
- strn = MID(str,n,1)
- tdstr = "<td id='GUI_" & strn & stri & "' class='GUIwh'><span onclick='Test(this)' onMouseOver='innerText=""●"";style.color=""blue""' onMouseOut='innerText=""┼"";style.color=""""'>┼</span></td>"
- s = "┼"
-
- If (stri = "A" and strn = "A") Then .write Replace(tdstr,s,"┌")
- If stri = "A" Then If not (strn = "A" or strn = "S") Then .write Replace(tdstr,s,"┬")
- If (stri = "A" and strn = "S") Then .write Replace(tdstr,s,"┐")
-
- If not (stri = "A" or stri = "S") Then If strn = "A" Then .write Replace(tdstr,s,"├")
- If not (stri = "A" or stri = "S" or strn = "A" or strn = "S") Then .write tdstr
- If not (stri = "A" or stri = "S") Then If strn = "S" Then .write Replace(tdstr,s,"┤")
-
- If (stri = "S" and strn = "A") Then .write Replace(tdstr,s,"└")
- If stri = "S" Then If not (strn = "A" or strn = "S") Then .write Replace(tdstr,s,"┴")
- If (stri = "S" and strn = "S") Then .write Replace(tdstr,s,"┘")
- Next
- .write "</tr>"
- end with
- Next
- </script>
- </table>
- </td>
- <td>
- <span id="PC"><button>电脑先下</button>
-
- 直接点击为玩家先下</span>
- </td>
- </tr>
- </table>
- </body>
-
- <script language="VBScript">
-
- width = 660
- height = 550
- window.resizeTo width, height
- ileft=(window.screen.width-width)/2
- itop=(window.screen.height-height)/2
- window.moveTo ileft,itop
-
- Sub Test(this)
- this.parentNode.style.cursor = "default"
- this.parentNode.innerHtml = "●"
- PC.style.display = "none"
- End Sub
-
-
- Sub Title
- Document.title = "五子棋 - zh159 - " & FormatDateTime(Now, 1) & " " & WeekdayName(WeekDay(now)) & " " & FormatDateTime(Now, 3)
- End Sub
-
- Title:setInterval "Title()",500
-
- </script>
-
- </html>
复制代码
原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=47326
[ 本帖最后由 Batcher 于 2009-5-10 01:39 编辑 ]
作者: yslyxqysl 时间: 2009-5-10 12:00
五子棋开局是有限制的哦
还有禁手规则也没添进去(不过难度比较大)
作者: Batcher 时间: 2009-5-10 12:45 标题: 回复 13楼 的帖子
花月、浦月等开局正是在没有禁手的前提下才能必胜的,因此不是开局有限制,归根结底还是禁手的限制。
既然现在还没有添加禁手,为何不让电脑用必胜开局呢?将来添加了禁手,电脑自然就不会选择这些开局了。
作者: 随风 时间: 2009-5-10 13:25
我的电脑是怎么了,为何保存12楼的代码运行后是乱码?
作者: netbenton 时间: 2009-5-10 13:26
其实我对五子棋的规则只知道连五为胜,其它规则还不是很了解,对于“花月”“浦月”技巧也不了解,呵呵
re 15楼:
12楼的是html脚本
[ 本帖最后由 netbenton 于 2009-5-10 13:28 编辑 ]
作者: Batcher 时间: 2009-5-10 13:35 标题: 回复 15楼 的帖子
看看你电脑的HTA文件关联是不是出问题了
作者: ye5022 时间: 2009-5-16 23:21
高手!!!
不错!
作者: 523066680 时间: 2009-5-17 08:00
很认同楼主说的话:
但是大多数人认为批处理的效率有问题,都不敢做人与机对战的尝试。批处理的效率真的有那么低吗?出于对dos的热爱,我就不相信批处理真的就做不到真正的五字棋人机对战!
真正热爱批处理的,是知难而上,而不是因为一些条件框框而止步,试过了才知道。
楼主的行动将改变一些人对批处理的观点。
[ 本帖最后由 523066680 于 2009-5-17 08:05 编辑 ]
作者: netbenton 时间: 2009-5-17 22:14
升级了!电脑智能增强了。
- @echo off&setlocal enabledelayedexpansion
- mode con: lines=43 cols=110
- set li39= A B C D E F G H I J K L M N O P Q R S
- set li0= ┌─────────────────────────────────────┐
- set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
- set var=1
- for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
- for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)
- set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
- set li38= └─────────────────────────────────────┘
- set str=a b c d e f g h i j k l m n o p q r s
- for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)
-
- set li5=!li5! 五 棋 子 人 机 对 战
- set li7=!li7! 批 处 理
- set li10=!li10! 电 脑 水 平 中 等
- set li31=!li31! 由 netbenton 编写完成
- set li33=!li33! 棋盘设计参照了 batman
- title 批处理五子棋
-
-
- set str=###################
- set .=0
- for /l %%a in (1,1,19) do (
- set he%%a=!str!&set sh%%a=!str!
- for /l %%b in (1,1,19) do set [%%a.%%b=0
- )
-
- set .=33
- for /l %%a in (5,1,19) do (
- set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
- set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
- set/a .-=1
- )
-
-
- set ●=○&set ○=●
- set zhi=●
- set say=say
-
- ::设置电脑IQ
- set idea=@@@@#.1 #@@@@.5 @#@@@.4 @@@#@.2 @@#@@.3 $$$$#.1 #$$$$.5 $$#$$.3 $#$$$.4 $$$#$.2 vs1 #@@@##.2 ##@@@#.5 #@@#@#.3 #@#@@#.4 vs2 #@##@@#.4-5 #@@##@#.4-3 #@#@@.3-5 @#@@#.4-1 #@@@#.1-5 vs3
- set idea=!idea! ##@@@.4-5 @@@##.2-1 @##@@#.4-5 #@##@@.3-4 #@#@#@.4-2 @#@#@#.3-5 vs4 #$$#$#.3-6-1 #$#$$#.4-1-6 ##$$$#.5-1 #$$$##.2-5 vs5 #$$$#.1-5 ##@@#.4-5-1 #@@##.2-1-5 #@#@#.3 vs6 ##$$#.4-1-5 #$$##.2-5-1 #$#$#.3 #$##$#.3-4 vs7
- set idea=!idea! @@###.3-2 ###@@.3-4 ##@###.3-5 ###@##.2-4 ###@#.3 #@###.3 vs8 @####.4 ####@.2 ##$##.2-4 #$###.3 ###$#.3 ##@##.2-4 vs9
- set idea=!idea! #####.3 $####.3 ####$.3 $$###.3 ###$$.3 $#$##.2 ##$#$.4 #$##$.3 $##$#.3 $###$.3 $$$##.2 #$$#$.2 $$##$.2 $#$$#.4 $##$$.3 ##$$$.4 vs10
- set iqam=1000000000
-
- :restart
- (
- setlocal enabledelayedexpansion
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set li39=!li39! reboot重新开始,exit退出。
- set li37=!li37! back 悔棋
-
- set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:
- if /i "!var!" equ "Q" goto :eof
-
- if /i "!var!" equ "D" (set onez=○&set towz=●&set hou=☆) else (set onez=●&set towz=○&set hou=★)
- set a!onez!=电脑&set a!towz!=玩家
- )
- (
- set ttr=!idea:@=%onez%!&set ttr=!ttr:$=%towz%!
- set idea=
- for %%a in (!ttr!) do (
- for /f "tokens=1,2 delims=." %%b in ("%%a") do (set %%b=%%c&set idea=!idea! %%b)
- )
-
- set ttr=
- set li27=!li27! !onez! !a%onez%!
- set li25=!li25! !towz! !a%towz%!
-
- set/a pos=10,poh=10&goto :getok
- )
- :loop
-
- (if %zhi% equ %onez% goto :men
- set .=
- setlocal enabledelayedexpansion
- for %%a in (!idea!) do (
- set str=%%a
- if "!str:~,2!" neq "vs" (
-
- for %%b in (he sh) do (
- set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (1,1,19) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
- )
- ) )
- for %%b in (pi ni) do (
- set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (5,1,33) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
- )
- ) )
- ) else (
- set/a "iqam=(iqam+1)/8"
- if !.! gtr 20 goto :get
-
-
- )
-
- ))
- if defined . (goto :get)
-
- echo. 已经和棋了
- pause
- endlocal&goto :restart
-
- :men
- (
- set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)
- set li38=!li38![%悔:~,24%]
- cls
- for /l %%a in (0,1,39) do (echo !li%%a!)
- for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- set li38=%li38%
- set /p user=!say:say=%error%! [列前,行后]:
- if "!user!" equ "reboot" endlocal&goto :restart
- if "!user!" equ "exit" exit
- if "!user!" equ "back" call :悔&goto :men
- set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
- if not defined [!poh!.!pos! set error=输入点不存在&goto :men
- )
- if "!he%poh%:~%var%,1!" neq "#" set error=该点已经有子&goto men
- goto :getok
-
- :get
- set `=
- ::取最佳的走法
- for /l %%z in (!.!,-1,1) do (
- for /f "tokens=1,2,3 delims=." %%1 in ("!put%%z!") do (
-
-
- for /f "tokens=1-4" %%a in ("%%1 %%2") do (
- set vara=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
- set iqm=%%3
- for %%4 in (!%%2:-^=;!) do (
- set/a var=!vara:~19,1!+%%4
- if "%%a" equ "he" (set/a poh=%%b,pos=20-var)
- if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)
- if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
- if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
- if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
- if not defined R!pos!R!poh!R set /a `+=1&set ram!`!=R!pos!R!poh!R
- set/a R!pos!R!poh!R+=iqm,"iqm=%%3/16"
- )
-
- )
-
- )
-
- )
-
-
- set rmk=0
- for /l %%a in (1,1,!.!) do (
- for %%b in (!ram%%a!) do (
- for %%c in (!%%b!) do (
- if %%c gtr !rmk! set rmk=%%c&set rmz=%%b
- )
- ) )
-
- for /f "tokens=1,2 delims=R" %%a in ("!rmz!") do (set/a pos=%%a,poh=%%b)
-
- rem start set r^&pause^&exit
-
-
- endlocal&set/a pos=%pos%,poh=%poh%
- set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在:
- :getok
- set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
- (set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
- for %%a in ("li!liph! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- if "!%%b:%win%=!" neq "!%%b!" set win=y
- )
- ))
-
- (set/a asc%zhi%+=1
- set 悔= !z%pos%!!z%poh%!!悔!
- if !win! neq y goto :loop)
-
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set/p= !a%zhi%! %zhi%子 第!asc%zhi%!手 !z%pos%!!z%poh%!(%poh%) 胜出 <NUL
- pause
- endlocal&goto :restart
- :悔
- if not defined 悔 goto :eof
- if "!悔:~6,1!" equ "" goto :eof
-
- for %%a in (!悔:~^,6!) do (set str=%%a
- set/a poh=!str:~-1!,pos=!str:~,1!
- set/a piph=poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1
-
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
-
- for %%a in ( "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!#!%%b:~%%c!)
- )
- )
- for /f "tokens=1,2" %%b in ("li!liph! !lips!") do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!┼!%%b:~%%c!)
- ))
-
- set/a asc%zhi%-=1
- set 悔=!悔:~6!
- set error=你悔棋,耍赖皮!
- if not defined 悔 goto :eof
- set/a poh=!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1
- set say=say !z%pos%!!z%poh%!(%poh%)
- goto :eof
复制代码
作者: Batcher 时间: 2009-5-19 11:54
1、能否在顶楼记录一下更新历史?
2、围棋、五子棋、国际象棋的棋盘和落点通常是用英文字母+数字来表示的,是否考虑更新一下?
作者: netbenton 时间: 2009-5-19 13:10
原帖由 Batcher 于 2009-5-19 11:54 发表
1、能否在顶楼记录一下更新历史?
2、围棋、五子棋、国际象棋的棋盘和落点通常是用英文字母+数字来表示的,是否考虑更新一下?
原来是这样呀,我当初想的是为了输入点时能方便一点,因为又要输入字母又要输入数字,而且数字的还是两位
不方便。
作者: netbenton 时间: 2009-5-21 20:08
现在下起来,是有输有赢了!
通常是先下的赢。
2009.6.2 更新
- @echo off&setlocal enabledelayedexpansion
- mode con: lines=43 cols=110
- set li39= A B C D E F G H I J K L M N O P Q R S
- set li0= ┌─────────────────────────────────────┐
- set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
- set var=1
- for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
- for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)
- set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
- set li38= └─────────────────────────────────────┘
- set str=a b c d e f g h i j k l m n o p q r s
- for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)
- set li5=!li5! 五 棋 子 人 机 对 战
- set li7=!li7! 批 处 理
- set li10=!li10! 电 脑 水 平 中 等
- set li31=!li31! 由 netbenton 编写完成
- set li33=!li33! 棋盘设计参照了 batman
- title 批处理五子棋
-
- set str=###################
- set .=0
- for /l %%a in (1,1,19) do (
- set he%%a=!str!&set sh%%a=!str!
- for /l %%b in (1,1,19) do set [%%a.%%b=0
- )
- set .=33
- for /l %%a in (5,1,19) do (
- set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
- set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
- set/a .-=1
- )
-
- set ●=○&set ○=●
- set zhi=●
- set say=say
- ::设置电脑IQ
- set idea=@@@@#.1 #@@@@.5 @#@@@.4 @@@#@.2 @@#@@.3 vs0 $$$$#.1 #$$$$.5 $$#$$.3 $#$$$.4 $$$#$.2 vs1 #@@@##.2 ##@@@#.5 #@@#@#.3 #@#@@#.4 vs2 #@##@@#.4-5 #@@##@#.4-3 #@#@@.3-5 @#@@#.4-1 #@@@##.2-W-1 ##@@@#.5-W-6 vs3
- set idea=!idea! ##@@@.4-W-5 @@@##.2-W-1 @##@@#.4-5 #@##@@.3-4 #@#@#@.4-2 @#@#@#.3-5 vs4 #$$#$#.3-W-6-1 #$#$$#.4-W-1-6 ##$$$#.5-W-1-6 #$$$##.2-W-1-6 vs5 ##@@##.2-5-W-6-1 #@#@#.3-w-1-5 ##$$$.W-4-5 $$$##.W-2-1 $$##$.W-2-3 $##$$.W-3-4 $#$$#.W-4-1 $#$#$.W-4-2 #$$#$.W-2-5 ##$$#.W-4-W-1-5 #$$##.W-2-W-1-5 #$#$#.W-3-W-1-5 #$##$#.W-3-4
- set idea=!idea! vs7 #$$$#.1-5 @@###.4-3 ###@@.3-4 ###@###.3-5-W-2-6-W-1-7 vs8 ###$###.3-5 vs9 @####.4 ####@.2 #$###.3 ###$#.3
- set idea=!idea! ###@#.3 #@###.3 $####.3 ####$.3 $$###.3 ###$$.3 $#$##.2 ##$#$.4 #$##$.3 $##$#.3 $###$.3 vs10
- set iqam=1000000000
- :restart
- (
- setlocal enabledelayedexpansion
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set li39=!li39! reboot重新开始,exit退出。
- set li37=!li37! back 悔棋
- set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:
- if /i "!var!" equ "Q" goto :quit
- if /i "!var!" equ "D" (set onez=○&set towz=●&set hou=☆) else (set onez=●&set towz=○&set hou=★)
- set a!onez!=电脑&set a!towz!=玩家
- )
- (
- set ttr=!idea:@=%onez%!&set ttr=!ttr:$=%towz%!
- set idea=
- for %%a in (!ttr!) do (
- for /f "tokens=1,2 delims=." %%b in ("%%a") do (set %%b=%%c&set idea=!idea! %%b)
- )
- set ttr=
- set li27=!li27! !onez! !a%onez%!
- set li25=!li25! !towz! !a%towz%!
- set/a pos=10,poh=10&goto :getok
- )
- :loop
- (if %zhi% equ %onez% goto :men
- set .=
- setlocal enabledelayedexpansion
- for %%a in (!idea!) do (
- set str=%%a
- if "!str:~,2!" neq "vs" (
- for %%b in (he sh) do (
- set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (1,1,19) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
- )
- ) )
- for %%b in (pi ni) do (
- set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (5,1,33) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
- )
- ) )
- ) else (
- set/a "iqam=(iqam+1)/8"
- if %%a equ vs8 if defined . goto :get
- if %%a equ vs9 if defined . goto :get
-
-
- )
- ))
- if defined . (goto :get)
- echo. 已经和棋了
- pause
- endlocal&goto :restart
- :men
- (
- set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)
- set li38=!li38![%悔:~,24%]
- cls
- for /l %%a in (0,1,39) do (echo !li%%a!)
- for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- set li38=%li38%
- set /p user=!say:say=%error%! [列前,行后]:
- if "!user!" equ "reboot" endlocal&goto :restart
- if "!user!" equ "exit" goto :quit
- if "!user!" equ "back" call :悔&goto :men
- set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
- if not defined [!poh!.!pos! set error=输入点不存在&goto :men
- )
- if "!he%poh%:~%var%,1!" neq "#" set error=该点已经有子&goto men
- goto :getok
- :get
- set `=
- ::取最佳的走法
- for /l %%z in (!.!,-1,1) do (
- for /f "tokens=1,2,3 delims=." %%1 in ("!put%%z!") do (
- for /f "tokens=1-4" %%a in ("%%1 %%2") do (
- set iqm=%%3
- set vara=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
- for %%4 in (!%%2:-^=;!) do (
- if "%%4" equ "W" (set/a iqm=iqm/5*3) else (
- set/a var=!vara:~19,1!+%%4
- if "%%a" equ "he" (set/a poh=%%b,pos=20-var)
- if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)
- if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
- if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
- if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
- if not defined R!pos!R!poh!R set /a `+=1&set ram!`!=R!pos!R!poh!R
- set/a R!pos!R!poh!R+=iqm
- )
- )
- )
- )
- )
- set rmk=0
- for /l %%a in (1,1,!`!) do (
- for %%b in (!ram%%a!) do (
- for %%c in (!%%b!) do (
- if %%c gtr !rmk! set/a rmk=%%c,.=0
- if %%c equ !rmk! set rmz!.!=%%b&set/a .+=1
- )
- ) )
- set/a .=!random!%%.
- for /f "tokens=1,2 delims=R" %%a in ("!rmz%.%!") do (set/a pos=%%a,poh=%%b)
-
- rem start set r^&echo !.!^&pause^&exit
-
- endlocal&set/a pos=%pos%,poh=%poh%
- set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在:
- :getok
- set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
- (set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
- for %%a in ("li!liph! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- if "!%%b:%win%=!" neq "!%%b!" set win=y
- )
- ))
- (set/a asc%zhi%+=1
- set 悔= !z%pos%!!z%poh%!!悔!
- if !win! neq y goto :loop)
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set/p= !a%zhi%! %zhi%子 第!asc%zhi%!手 !z%pos%!!z%poh%!(%poh%) 胜出 <nul
- pause
- endlocal&goto :restart
- :悔
- if not defined 悔 goto :eof
- if "!悔:~6,1!" equ "" goto :eof
- for %%a in (!悔:~^,6!) do (set str=%%a
- set/a poh=!str:~-1!,pos=!str:~,1!
- set/a piph=poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
- for %%a in ( "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!#!%%b:~%%c!)
- )
- )
- for /f "tokens=1,2" %%b in ("li!liph! !lips!") do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!┼!%%b:~%%c!)
- ))
- set/a asc%zhi%-=1
- set 悔=!悔:~6!
- set error=你悔棋,耍赖皮!
- if not defined 悔 goto :eof
- set/a poh=!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1
- set say=say !z%pos%!!z%poh%!(%poh%)
- goto :eof
- :quit
- taskkill /fi "WINDOWTITLE eq 批处理五子棋*" /im cmd.exe
复制代码
[ 本帖最后由 netbenton 于 2009-6-4 12:42 编辑 ]
作者: netbenton 时间: 2009-5-25 22:37
增加了背景音乐《春江花月夜》,如高山流水般的声音,听着下五棋子,太爽了,包含播放代码及音乐文件仅96K,请看链接:http://www.cn-dos.net/forum/viewthread.php?tid=47326&fpage=1 (在41楼)
正在想学习vbs,所以搞了这个;写得不好,大家不要见笑呀!
[要看最终修改请到一楼下载附件]
[ 本帖最后由 netbenton 于 2009-8-14 21:02 编辑 ]
作者: Batcher 时间: 2009-6-3 01:35
23楼没有看到更新记录啊?
作者: zt404834426 时间: 2009-6-3 11:42
这个都能做出来,真是让我这个菜鸟震惊!是在佩服楼主的强大能力。五体投地佩服ing..
只是我老是看花眼,如果能支持鼠标的话那真是完美啊!!.
作者: netbenton 时间: 2009-6-3 12:49
re 25楼
不好意思,现在补上了
re 26楼
有时间的话,看来要做个支持鼠标的才行;不过得用到三方。
要是用vbs协助,可以支持鼠标的话就好了。
作者: sclijunjie12 时间: 2009-6-4 11:54
看来我得加紧的学习 这样的都有
作者: lovecmd 时间: 2009-6-4 17:19 标题: 努力
我玩过LZ的老版本,那个时候我还能赢上几盘,现在真是没的赢了。
我是新手,看到各位老师如此厉害,试想我也行吗?
作者: netbenton 时间: 2009-6-14 18:41
鼠标版批处理五子棋做好了,需要cmos.exe三方鼠标支持
cmos.exe 下载地址:http://bbs.bathome.net/viewthread.php?tid=3148&extra=&page=1
- @echo off&setlocal enabledelayedexpansion
- mode con: lines=43 cols=110
- set li39= A B C D E F G H I J K L M N O P Q R S
- set li0= ┌─────────────────────────────────────┐
- set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
- set var=1
- for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
- for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)
- set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
- set li38= └─────────────────────────────────────┘
- set str=a b c d e f g h i j k l m n o p q r s
- for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)
-
- set li5=!li5! 五 棋 子 人 机 对 战
- set li7=!li7! 批 处 理
- set li10=!li10! 电 脑 水 平 中 等
-
- set li31=!li31! 由 netbenton 编写完成
- set li33=!li33! 棋盘设计参照了 batman
- set li35=!li35! 鼠标三方支持 Defanive
-
- set li16=!li16! [重来]
- set li17=!li17! [退出]
- set li22=!li22! [悔棋]
- set li19=!li19! 电脑最后下在:
-
- title 批处理五子棋
-
-
- set str=###################
- set .=0
- for /l %%a in (1,1,19) do (
- set he%%a=!str!&set sh%%a=!str!
- for /l %%b in (1,1,19) do set [%%a.%%b=0
- )
-
- set .=33
- for /l %%a in (5,1,19) do (
- set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
- set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
- set/a .-=1
- )
-
-
- set ●=○&set ○=●
- set zhi=●
- set say=say
-
- ::设置电脑IQ
- set idea=@@@@#.1 #@@@@.5 @#@@@.4 @@@#@.2 @@#@@.3 vs0 $$$$#.1 #$$$$.5 $$#$$.3 $#$$$.4 $$$#$.2 vs1 #@@@##.2 ##@@@#.5 #@@#@#.3 #@#@@#.4 vs2 #@##@@#.4-5 #@@##@#.4-3 #@#@@.3-5 @#@@#.4-1 #@@@##.2-W-1 ##@@@#.5-W-6 vs3
- set idea=!idea! ##@@@.4-W-5 @@@##.2-W-1 @##@@#.4-5 #@##@@.3-4 #@#@#@.4-2 @#@#@#.3-5 vs4 #$$#$#.3-W-6-1 #$#$$#.4-W-1-6 ##$$$#.5-W-1-6 #$$$##.2-W-1-6 vs5 ##@@##.2-5-W-6-1 #@#@#.3-w-1-5 ##$$$.W-4-5 $$$##.W-2-1 $$##$.W-2-3 $##$$.W-3-4 $#$$#.W-4-1 $#$#$.W-4-2 #$$#$.W-2-5 ##$$#.W-4-W-1-5 #$$##.W-2-W-1-5 #$#$#.W-3-W-1-5 #$##$#.W-3-4
- set idea=!idea! vs7 #$$$#.1-5 @@###.4-3 ###@@.3-4 ###@###.3-5-W-2-6-W-1-7 vs8 ###$###.3-5 vs9 @####.4 ####@.2 #$###.3 ###$#.3
- set idea=!idea! ###@#.3 #@###.3 $####.3 ####$.3 $$###.3 ###$$.3 $#$##.2 ##$#$.4 #$##$.3 $##$#.3 $###$.3 vs10
- set iqam=1000000000
- color 2f
- :restart
-
- cls
- setlocal enabledelayedexpansion
- for /l %%a in (0,1,18) do (echo; )
- set /p = 选择谁先下: [玩家] [电脑] [退出]<NUL
-
- :cmos1
- cmos c f
- set var=!errorlevel!
- set /a var=!var:~-2!*100+!var:~-6,-3!/4
- if "!var!" equ "2015" goto :quit
- if "!var!" equ "2013" (set onez=○&set towz=●&set hou=☆)
- if "!var!" equ "2011" (set onez=●&set towz=○&set hou=★)
- if not defined onez goto :cmos1
-
- set a!onez!=电脑&set a!towz!=玩家
-
- (
- set ttr=!idea:@=%onez%!&set ttr=!ttr:$=%towz%!
- set idea=
- for %%a in (!ttr!) do (
- for /f "tokens=1,2 delims=." %%b in ("%%a") do (set %%b=%%c&set idea=!idea! %%b)
- )
-
- set ttr=
- set li27=!li27! !onez! !a%onez%!
- set li25=!li25! !towz! !a%towz%!
-
- set/a pos=10,poh=10&goto :getok
- )
- :loop
-
- (if %zhi% equ %onez% goto :men
- set .=
- setlocal enabledelayedexpansion
- for %%a in (!idea!) do (
- set str=%%a
- if "!str:~,2!" neq "vs" (
-
- for %%b in (he sh) do (
- set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (1,1,19) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
- )
- ) )
- for %%b in (pi ni) do (
- set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33!
- if "!all:%%a=!" neq "!all!" (
- for /l %%c in (5,1,33) do (
- if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
- )
- ) )
- ) else (
- set/a "iqam=(iqam+1)/8"
- if %%a equ vs8 if defined . goto :get
- if %%a equ vs9 if defined . goto :get
-
-
- )
-
- ))
- if defined . (goto :get)
-
- echo. 已经和棋了
- pause
- endlocal&goto :restart
-
- :men
- (
- set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)
- set li38=!li38![%悔:~,24%]
- cls
- for /l %%a in (0,1,39) do (echo !li%%a!)
- for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- set li38=%li38%
- echo !say:say=%error%!
- )
-
- :cmoslp
- (cmos c f
- set user=!errorlevel!
-
- set/a poh1=1!user:~-2!-100,pos1=!user:~-6,-3!/2-2
- set/a poh=poh1/2,pos=pos1/2,poh1=poh1-poh,pos1=pos1-pos,var=pos-1
-
- if "!poh!.!pos!" equ "8.23" endlocal&goto :restart
- if "!poh!.!pos!" equ "9.23" goto :quit
- if "!poh!.!pos!" equ "11.23" call :悔&goto :men
-
- if !poh1!!pos1! neq !poh!!pos! goto :cmoslp
-
- if not defined [!poh!.!pos! set error=输入点不存在!auser!&goto :men
- )
- if "!he%poh%:~%var%,1!" neq "#" set error=该点已经有子&goto men
- goto :getok
-
- :get
- set `=
- ::取最佳的走法
- for /l %%z in (!.!,-1,1) do (
- for /f "tokens=1,2,3 delims=." %%1 in ("!put%%z!") do (
- for /f "tokens=1-4" %%a in ("%%1 %%2") do (
- set iqm=%%3
- set vara=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
- for %%4 in (!%%2:-^=;!) do (
- if "%%4" equ "W" (set/a iqm=iqm/5*3) else (
- set/a var=!vara:~19,1!+%%4
- if "%%a" equ "he" (set/a poh=%%b,pos=20-var)
- if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)
- if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
- if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
- if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
- if not defined R!pos!R!poh!R set /a `+=1&set ram!`!=R!pos!R!poh!R
- set/a R!pos!R!poh!R+=iqm
- )
-
- )
-
- )
- )
- )
-
- set rmk=0
- for /l %%a in (1,1,!`!) do (
- for %%b in (!ram%%a!) do (
- for %%c in (!%%b!) do (
- if %%c gtr !rmk! set/a rmk=%%c,.=0
- if %%c equ !rmk! set rmz!.!=%%b&set/a .+=1
- )
- ) )
-
- set/a .=!random!%%.
-
- for /f "tokens=1,2 delims=R" %%a in ("!rmz%.%!") do (set/a pos=%%a,poh=%%b)
-
-
- rem start set r^&echo !.!^&pause^&exit
-
-
- endlocal&set/a pos=%pos%,poh=%poh%
- set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在:
- :getok
- set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
- (set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
- for %%a in ("li!liph! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
- if "!%%b:%win%=!" neq "!%%b!" set win=y
- )
- ))
-
- (set/a asc%zhi%+=1
- set 悔= !z%pos%!!z%poh%!!悔!
- if !win! neq y goto :loop)
- cls
- for /l %%a in (0,1,39) do (echo !li%%a!)
- set/p= !a%zhi%! %zhi%子 第!asc%zhi%!手 !z%pos%!!z%poh%!(%poh%) 胜出 单击鼠标继续。。。 <NUL
- cmos c f
- endlocal&goto :restart
- :悔
- if not defined 悔 goto :eof
- if "!悔:~6,1!" equ "" goto :eof
-
- for %%a in (!悔:~^,6!) do (set str=%%a
- set/a poh=!str:~-1!,pos=!str:~,1!
- set/a piph=poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1
-
- if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
- if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
-
- for %%a in ( "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
- for /f "tokens=1,2" %%b in (%%a) do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!#!%%b:~%%c!)
- )
- )
- for /f "tokens=1,2" %%b in ("li!liph! !lips!") do (
- set/a .=%%c-1
- for %%d in (!.!) do (set %%b=!%%b:~0,%%d!┼!%%b:~%%c!)
- ))
-
- set/a asc%zhi%-=1
- set 悔=!悔:~6!
- set error=你悔棋,耍赖皮!
- if not defined 悔 goto :eof
- set/a poh=!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1
- set say=say !z%pos%!!z%poh%!(%poh%)
- goto :eof
-
- :quit
- taskkill /fi "WINDOWTITLE eq 批处理五子棋*" /im cmd.exe
复制代码
作者: zhouyongjun 时间: 2009-6-30 20:53
我电脑上set /a var=!var:~-2!*100+!var:~-6,-3!/4 这句报错,说找不到操作数?
作者: netbenton 时间: 2009-7-1 07:24
可能是鼠标三方已经更新,请到下面的地址下载打包好的:
http://www.cn-dos.net/forum/viewthread.php?tid=47326&fpage=1
50楼
60楼有所更新
对比了一下,一些flash做的五子棋游戏的智能还比不上这个批处理的,所以该的批处理五子棋游戏,可玩性还是有的,无聊时可以休闲玩一下对比了一下,一些flash做的五子棋游戏的智能还比不上这个批处理的,所以该的批处理五子棋游戏,可玩性还是有的,无聊时可以休闲玩一下
点此下载:http://www.cn-dos.net/forum/attachment.php?aid=4906&checkid=af590&download=1
[要看最新终修改请到一楼下载附件]
[ 本帖最后由 netbenton 于 2009-8-14 21:00 编辑 ]
作者: hacker_ 时间: 2009-7-5 17:53
非常佩服楼主!!!!
作者: allisfree 时间: 2009-9-22 21:27
哥们太牛了,不知道bash下有没有类似的东西?
作者: a4188809b 时间: 2009-10-2 08:42
这是什么原因啊 怎么不能用 出错!
作者: netbenton 时间: 2009-10-2 13:04
回复35楼,
谢谢作用。
第一张图是因为:存放的路径中含有空格所至,已经在一楼更正,请重新下载
第二、三张图是因为:三方工具工作的不稳定,正在联系写cmos.exe的作者更正。
=========
为出错给你造成的不便表示谦意。。。
作者: home 时间: 2009-10-4 09:47
太好玩了,批处理也能做出游戏,劲
作者: cnhacker 时间: 2009-10-28 16:25
好牛X啊,不得不顶!
作者: BillGates 时间: 2010-7-17 10:57
能不能去掉那个主机箱滴的一声呀?
作者: zcydez 时间: 2010-7-17 11:26
12L的是HTML代码
应该保存为*.html。
作者: cjiabing 时间: 2010-8-20 13:10
楼主NB,大胆创新,说干就干,呵呵,关键还是技术高超,顶礼膜拜!~~
作者: wofei1314 时间: 2010-9-18 11:36 标题: 回复 1楼 的帖子
太厉害了,佩服!!!!
作者: Hello123World 时间: 2011-1-24 12:40
算法精妙,不过玩了一把,玩的眼花(心思都花在看几行几列了),如果能支持鼠标就牛x了
作者: wankoilz 时间: 2011-5-16 13:28
我下输了...:
作者: cjiabing 时间: 2011-8-4 02:14
回复 36# netbenton
老兄,改下颜色喂!~棋子的颜色和棋盘的颜色没有明显区分,看着吃力!~最好换成三色的,棋盘绿色,黑子(蓝色)、白子(黄色)各一色。
作者: CrLf 时间: 2011-8-4 12:02
回复 46# cjiabing
那刷新棋盘的效率也太低了吧...除非决定了用第三方,要不然恐怕本顿不会选择彩色棋子
作者: cjiabing 时间: 2011-8-4 15:05
回复 47# CrLf
放心,LZ有秘密武器。
作者: CrLf 时间: 2011-8-4 17:18
回复 48# cjiabing
sybc 吗?不过话说回来,忽然发现顶楼的代码已经用到了第三方了...
作者: cjiabing 时间: 2011-8-4 18:05
回复 49# CrLf
正是,你又知道?
很郁闷,我的系统不支持它这个三方,有空换系统了再测试。
作者: CUer 时间: 2011-8-4 19:30
回复 50# cjiabing
你用的哪个?sybc.exe?还是动态生成的.com?
作者: cjiabing 时间: 2011-8-4 19:45
回复 51# CUer
syxq.com
syxq.com用法演示及说明.bat
没有结果,不停滴在那里闪光标。
作者: 狱渊 时间: 2013-5-1 14:09
很不错的游戏
作者: afeng999 时间: 2013-7-5 09:18
谢谢分享,技术贴...
作者: xiaozhou309 时间: 2013-8-15 10:48
好东西,学习学习
1
作者: tail88 时间: 2014-12-26 14:15
感谢分享啊。
作者: 凡凡之呗 时间: 2015-2-5 12:32
回复 1# netbenton
这个怎么用啊
作者: 飛雪 时间: 2015-2-27 10:12
學習了,趕快玩看看
作者: 尘丶 时间: 2015-4-4 22:31
有点小难,跟我差不多水平- =不错 就是看不到电脑下的那颗棋子
作者: hqmwj 时间: 2015-4-21 08:53
我想,我如果看完这个看懂的话,那就好了。
我也能达到初级或中级的级别了,膜拜了!
作者: weln2015 时间: 2015-5-18 11:46
这个不错 下来研究下
作者: 465202 时间: 2015-5-30 19:38
回复 15# 随风
十二楼是网页代码,但我的是
[attach]8756[/attach]
作者: shujutong 时间: 2015-6-18 15:05
唉!!!这都行。。。。真是佩服
作者: shujutong 时间: 2015-6-18 15:20
测试 win7退出时 会出现不能关闭的现象 比如CMD窗口标题获取管理员权限时会加上 管理员: 批处理五子棋什么什么,而导致不能识别,xp没试
可以稍微动下taskkill命令
作者: bugkill 时间: 2016-2-10 21:33
不支持win10啊,鼠标点不了
作者: mantianxinglzm 时间: 2016-4-26 17:28
感谢楼主分享,下载还不要积分,楼主真好,论坛真好
作者: 懒蚁 时间: 2016-8-18 15:55
牛人.
作者: a2002 时间: 2017-6-29 15:53
牛逼啊,好游戏
作者: hztccy 时间: 2021-8-23 00:59
好多大神牛掰
作者: newuser 时间: 2021-9-27 10:19
东西南北合
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |