标题: [游戏娱乐] 批处理五子棋2008-04-06更新 [打印本页]
作者: 随风 时间: 2008-4-5 09:51 标题: 批处理五子棋2008-04-06更新
纯 bat 五子棋
特点:
新增功能:判定胜负后,可以显示胜出的棋子位置。
不产生临时文件,能自动判定胜负
作了一定的走子错误判断,如目标位置已经有子,或目标位置不存在等。。
初步测试没发现错误,欢迎测试。。。
可以选择由电脑随机走棋,以判断程序是否正确
:- @echo off&mode con cols=80 lines=22&color 1f&title 批处理五子棋
- :: code 随风 @bbs.bathome.net 2008-04-06
- echo\&echo 请选择 y 电脑自动走棋(随机乱走,以判断程序是否正确)
- echo\&echo 选择 n 人走棋,不能人机对弈
- echo\&set /p cs= y n ?
- if /i not "%cs%"=="y" (set "cs=") ELSE (set cs=现在是由电脑随机走棋)
- set gz1= 走棋方法
- set gz3= 输入行和列的代号即可
- set gz5= 英文字母代表列,数字代表行
- set gz7= 如输入: h8 或 8h
- set gz9= 即是在 h列 和 行8 的交叉点落子
- set gz11= 如屏幕变成红色,则说明走棋错误
- :start
- setlocal enabledelayedexpansion&cls&color 1f
- set a1=┌&set o1=┐&set a12=└&set "o12=┘"&set "yans=0"
- for %%j in (2 3 4 5 6 7 8 9 10 11) do (set a%%j=├&set o%%j=┤)
- for %%z in (b c d e f g h i j k l m n) do (
- set %%z1=┬&set "%%z12=┴"
- for /l %%j in (2 1 11) do set "%%z%%j=┼"
- )
- for %%z in (a b c d e f g h i j k l m n o) do (
- set /a max+=1&set %%z=!max!&set "!max!=%%z"
- )
- for /l %%a in (0 1 9) do set abc%%a=a
- goto :xs
- :loop
- if !yans! equ 0 (set ya=白棋&set bk=●) else (set ya=黑棋&set bk=○)
- if not defined cs (
- set flag=&echo\&set /p zou= 请走!ya!
- ) else (
- set zzzmm=ABCDEFGHIJKLMNO
- set /a www=!random!%%12+1
- set /a www1=!random!%%14+0
- call set zzzmm1=%%zzzmm:~!www1!,1%%
- set flag=&echo\&set zou=!zzzmm1!!www!
- )
- if "!zou!"=="" set flag= 输入不能为空&set zou=&goto xs
- set "zou=!zou: =!"
- if "!zou:~1,1!"=="" set flag= !zou! 输入不正确!&set zou=&goto xs
- if not "!zou:~3,1!"=="" set flag= !zou! 输入不正确!&set zou=&goto xs
- set "abc=!zou:~0,1!"
- if defined abc!abc! set "zou=!zou:~-1!!zou:~0,-1!"
- set "abc=!zou:~0,1!"
- if defined abc!abc! (set flag= 输入不正确!&set zou=&goto xs)
- if /i "!zou!"=="ccc" endlocal&goto start
- if not defined !zou! set flag= !zou! 目标位置不存在!&set zou=&goto xs
- if defined !zou!x set flag= 不能走 !zou!&set zou=&goto xs
- set "!zou!x=!ya!"
- set "!zou!=!bk!"
- :xs 显示棋盘
- cls&echo 批处理五子棋
- echo\&echo 输入 ccc 重新开始游戏 %cs%
- if not defined flag set /a yans=^^!yans
- echo\&echo A B C D E F G H I J K L M N O
- for /l %%i in (1 1 12) do (
- set "ko= "
- if %%i lss 10 (set ko= !ko!)
- set/p=!ko!%%i <nul
- for %%z in (a b c d e f g h i j k l m n o) do set/p=!%%z%%i!<nul
- if defined gz%%i set /p= !gz%%i!<nul
- echo.
- )
- if defined flag (
- echo\&echo !flag!&color cf
- ping/n 2 127.1>nul&color 1f
- goto loop
- )
- if not defined zou goto loop
- ::判断胜负
- :pd
- set hang=!zou:~0,1!&set lie=!zou:~1!
- set /a _hangx=!lie!-4,_hangda=!lie!+4
- call set _lie=%%!hang!%%
- set /a lx=!_lie!-4,lda=!_lie!+4
- :: 判断列是否定出胜负
- for /l %%a in (!_hangx! 1 !_hangda!) do (
- set zon=!zou:~0,1!%%ax
- call set _zon=%%!zon!%%-!zon!
- if defined _zon (set _pphen=!_pphen! !_zon!) else (
- set _pphen=!_pphen! x
- ))
- call :sss "!_pphen!"
- if defined jiesu endlocal&goto ok
- :: 判断横向是否定出胜负
- set _pphen=&set _x_x=&set xie=!_hangx!
- set _you=&set _you1=
- for /l %%a in (!lx! 1 !lda!) do (
- set "phx=!%%a!!zou:~1!x"
- call set "pphen=%%!phx!%%-!%%a!!zou:~1!x"
- if defined pphen (set _pphen=!_pphen! !pphen!) else (
- set "_pphen=!_pphen! x"
- )
- rem 判断左上至右下是否胜出
- call set "_xie=%%!%%a!!xie!x%%"
- call set "_xie_=%%_xie%%-!%%a!!xie!x"
- set /a xie+=1
- if defined _xie_ (set _x_x=!_x_x! !_xie_!) else (
- set "_x_x=!_x_x! x"
- )
- rem 判断右上至左下是否胜出
- call set "you=%%!%%a!!_hangda!x%%"
- call set "_you=%%you%%-!%%a!!_hangda!x"
- set /a _hangda-=1
- if defined _you (set _you1=!_you1! !_you!) else (
- set "_you1=!_you1! x"
- )
- )
- call :sss "!_pphen!"
- if defined jiesu endlocal&goto ok
- call :sss "!_you1!"
- if defined jiesu endlocal&goto ok
- call :sss "!_x_x!"
- if defined jiesu endlocal&goto ok
- goto loop
- :sss
- set _pphen=%~1&set pdpd=0&set num1=&set "num2="&set "jiesu="
- for %%a in (!_pphen!) do (
- set "num1=!num2!"
- set "num2=%%a"
- if /i "!num1:~0,3!"=="!num2:~0,3!" (
- if not "!num1:~0,1!"=="-" (
- set /a pdpd+=1&set "senc=!senc! !num2:~0,-1!"
- if !pdpd! geq 4 (
- call set "jiesu=%%senc:!num2:~0,3!=%%"
- echo\&echo !num1:~0,2! 胜出 !jiesu!
- goto :eof
- )
- ) else (set pdpd=0&set senc=!num2:~0,-1!)
- ) else (set pdpd=0&set senc=!num2:~0,-1!)
- )
- goto :eof
- :ok
- echo\&echo 按任意键重新开始。。。
- for /l %%i in (1 1 5) do (
- for %%a in (a d) do color %%af&ping/n 1 127.1>nul
- )
- pause>nul
- goto start
复制代码
作者: 小竹 时间: 2008-4-5 11:31
小楼果然牛B!
不过,斜向好像不能判断胜负
作者: 小竹 时间: 2008-4-5 11:34
输入ccc好像也不能重新开始。
作者: 随风 时间: 2008-4-5 11:43
多谢提醒:
输入ccc 不能重新开始。 是因为后来又加了个出错判断,应该放在ccc下面才对,以改正
斜向 不能判断胜负 应该是在行为10以上时出现的吧?以改正。
作者: foxJL 时间: 2008-4-5 15:31
厉害!又见强贴.
作者: 随风 时间: 2008-4-6 00:09
居然忘了判断反斜向的胜负。已经更新。
新增显示胜出棋子位置功能。
欢迎继续测试。。。。
作者: slxxx 时间: 2008-4-6 03:00
这样的帖子得顶!!!
作者: gfwlxx 时间: 2008-4-16 00:51
什么叫做厉害 今天我算是领教了
我看了代码差点没吐血
作者: zyz0304360 时间: 2008-4-17 15:56
原帖由 gfwlxx 于 2008-4-16 00:51 发表
什么叫做厉害 今天我算是领教了
我看了代码差点没吐血
同感
哈哈
作者: jsj30651 时间: 2008-4-20 12:29
太强悍了吧!!!
学习中……
作者: w19880321 时间: 2008-5-2 13:23
不懂,惭愧啊!我是新人
作者: 不断努力 时间: 2008-5-2 22:28
厉害!!!!!!!!!
作者: 杨风 时间: 2008-6-21 15:57
什么叫做厉害 今天我算是领教了
太强悍了吧!!!
学习中……
作者: 骚鸡 时间: 2008-7-13 16:00
楼主真厉害~不知道可以做个朋友不?
我QQ331475019
作者: lipeng 时间: 2008-7-26 17:08 标题: 真的不错
这么些代码,要多久才能写出来啊?
作者: 嘿嘿问题特困户 时间: 2008-8-4 16:18
厉害~~强贴~~向您好好学习!頂你個肺~~~
作者: hisplay 时间: 2008-8-6 16:17
太强了,简直是看不懂啊
作者: tjtchly 时间: 2008-8-7 19:38
好贴,顶一下。学习了。
作者: Clark2505 时间: 2008-8-7 21:55
斜向还是不能判断胜负
作者: 帝魂神 时间: 2008-8-21 02:16
蛮好玩的,但是貌似还可以改好点的。我明天试试。
作者: yzzsjc2008 时间: 2009-4-16 07:50
发现这里牛年牛人多啊!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |