在此,要非常感谢namejm的大力帮助,也请大家都来挑战一下这极限的效率(单
单大循环就是361*361次,其中还要涉及到call...)
----------------------------------------------------------------------------------------------------------
[ Last edited by zw19750516 on 2008-7-18 at 08:16 PM ]
单大循环就是361*361次,其中还要涉及到call...)
----------------------------------------------------------------------------------------------------------
@echo off&color 1f&mode con cols=50 lines=25&setlocal enabledelayedexpansion
title 五子棋 by zw19750516 thanks for namejm
set "codes=A B C D E F G H I J K L M N O P Q R S"
set "code= %codes: =%"
for /l %%a in (1,1,19) do (
for /l %%i in (1,1,19) do (
set "a=!code:~%%i,1!"&set /a num+=1
set ".!num!=%%a!a!"
))
for /l %%i in (1,1,381) do (
set /a a=!random!%%381+1
call,set "b=%%.!a!%%"
set ".!a!=!.%%i!"
set ".%%i=!b!"
)
:begin
set /a n+=1,m+=1&if !m! equ 2 set m=0
if !m! equ 0 (set "zi=●"&set "vins=●●●●●") else (set "zi=○"&set "vins=○○○○○")
set "_!.%n%!=%zi%"
echo.>temp.txt
echo ┌───────────────────┐>>temp.txt
for /l %%a in (1,1,19) do (
for /l %%i in (1,1,19) do (
if %%a equ 1 (
if %%i equ 1 (
set "_p=│┌"
) else (
if %%i equ 19 (
set "_p=┐│"
) else (
set "_p=┬"
))) else (
if %%a equ 19 (
if %%i equ 1 (
set "_p=│└"
) else (
if %%i equ 19 (
set "_p=┘│"
) else (
set "_p=┴"
))) else (
if %%i equ 1 (
set "_p=│├"
) else (
if %%i equ 19 (
set "_p=┤│"
) else (
set "_p=┼"
))))
set str=!code:~%%i,1!
if defined _%%a!str! (
call :lop %%a %%i
) else (
if %%i equ 19 (
set /p=!_p!%%a<nul>>temp.txt
) else (
set /p=!_p!<nul>>temp.txt
)))
echo.>>temp.txt
)
echo └───────────────────┘>>temp.txt
echo %codes%>>temp.txt
cls&type temp.txt
if defined vin (
if %m% equ 0 (set /p=白子胜,<nul) else (set /p=黑子胜,<nul)
echo 最后落子为:%a%%b%。
del /q temp.txt&pause>nul&goto :eof
)
if %n% neq 361 (goto begin) else (echo 结果不分胜负!&pause>nul&goto :eof)
:lop
if %2 equ 1 (set "ll=set /p=│<nul>>temp.txt&") else (set "ll=")
if %2 equ 19 (set "rr=&set /p=│%1<nul>>temp.txt") else (set "rr=")
%ll%set /p=!_%1%str%!<nul>>temp.txt%rr%
if "%1%str%" equ "!.%n%!" (set "a=%1"&set "b=%str%"&goto judge) else (goto :eof)
:judge
rem 判断是否胜出
set "hang="&set "lie="&set "ls="&set "rs="&set "ss="&set "x=0"&set "y=0"&set "z=0"
set /a x1=%2-4,x2=%2+4,y1=%1+4,y2=%1-4
if %x1% lss 0 set "x1=0"
if %y2% lss 0 set "y2=0"
if %x2% gtr 19 set "x2=19"
if %y1% gtr 19 set "y1=19"
for /l %%i in (%x1%,1,%x2%) do set "ss=!ss! !code:~%%i,1!"
for %%i in (%ss%) do if defined _%1%%i (set "hang=!hang!!_%1%%i!") else (set "hang=!hang!#")
for /l %%i in (%y2%,1,%y1%) do if defined _%%i%str% (set "lie=!lie!!_%%i%str%!") else (set "lie=!lie!#")
for %%a in (%ss%) do (
set /a x+=1,y=0,z=0
for /l %%b in (%y1%,-1,%y2%) do (
set /a y+=1
if !x! equ !y! (
if defined _%%b%%a (
set "ls=!ls!!_%%b%%a!"
) else (
set "ls=!ls!#"
)))
for /l %%c in (%y2%,1,%y1%) do (
set /a z+=1
if !x! equ !z! (
if defined _%%c%%a (
set "rs=!rs!!_%%c%%a!"
) else (
set "rs=!rs!#"
))))
for %%i in (%hang% %lie% %ls% %rs%) do (
set var=%%i
if "!var:%vins%=!" neq "!var!" set vin=a&goto :eof
)
[ Last edited by zw19750516 on 2008-7-18 at 08:16 PM ]
