返回列表 发帖

[代码合集] 黑白棋V1.3.1(未完成)已优化1次,修复0个BUG(疯狂更新中...)

本帖最后由 cmd1152 于 2021-7-24 12:27 编辑

此游戏是我和路过共同制作,已优化1次,修复0个BUG
日志:
2021/7/20 13:31 修复显示BUG
2021/7/20 13:32 升级版本至V1.1.1
2021/7/21 11:25 升级版本至V1.2
2021/7/21 11:41 升级版本至V1.2.1
2021/7/21 11:43 升级版本至V1.2.2
2021/7/21 11:46 升级版本至V1.2.2.1
2021/7/21 11:53 升级版本至V1.2.3.1
2021/7/21 12:05 升级版本至V1.2.3.2
2021/7/21 12:19 升级版本至V1.2.3.4
2021/7/21 12:30 升级版本至V1.2.3.5
2021/7/21 13:18 升级版本至V1.2.3.6
2021/7/21 15:12 升级版本至V1.2.3.7
2021/7/21 15:15 升级版本至V1.2.3.8
2021/7/22 12:47 升级版本至V1.3.1(未完成)
@echo off
title 黑白棋V1.3.1(未完成)
color f0
echo;黑白棋V1.3.1(未完成) Made By 路过 ^& cmd1152
echo;
echo;                      游戏规则
echo;============================================================
echo;  1.  棋局开始时黑棋位于e4和d5,白棋位于d4和e5。
echo;  2.  黑方先行,双方交替下棋。
echo;  3.  一步合法的棋步包括:在一个空格新落下一个棋子,并且翻转
echo;    对手一个或多个棋子。
echo;  4.  新落下的棋子与棋盘上已有的同色棋子间,对方被夹住的所有
echo;    棋子都要翻转过来。可以是横着夹,竖着夹,或是斜着夹。夹住
echo;    的位置上必须全部是对手的棋子,不能有空格。
echo;  5.  除非至少翻转了对手的一个棋子,否则就不能落子。如果一方
echo;    没有合法棋,也就是说不管他下到哪里,都不能至少翻转对手的
echo;    一个棋子,那他这一轮只能跳过,而由他的对手继续落子直到他
echo;    有合法棋可下。
echo;  6.  如果一方至少有一步合法棋可下,他就必须落子,不得跳过。
echo;  7.  棋局持续下去,直到棋盘填满或者双方都无合法棋可下。
echo;============================================================
pause
mode con cols=44 lines=22
%程序初始化%
set .=%path%
for /f "delims== eol=." %%z in ('set ') do (set "%%z=")
set path=%.%
if not exist hbqtmp\fp\ (md hbqtmp\fp)
set mqp=;=0abcdefgh;1=1;2=2;3=3;4=4;5=5;6=6;7=7;8=8;.0=白;.1=黑;_0=○;_1=●;_2= ;_5=※
set/a m49=7,m59=7,m19=5,m29=5,m79=4,m89=3,m99=6%mqp:;=&set .%
setlocal enabledelayedexpansion
:Init %游戏初始化%
for /l %%x in (1,1,8) do (for /l %%y in (1,1,8) do (set m%%x%%y=2))
set /a m44=0,m55=0,m54=1,m45=1,mh=2,mb=2,ms=1,ht=0,sp=0,fp=0
set "mqp= "&(for /f %%z in ('set m') do (echo;%%z))>hbqtmp\m0.txt
call :Read q
pause
:Map %显示地图%
cls
echo;┏ABCDEFGH┓
for /l %%y in (1,1,8) do (
set "sc="
for /l %%x in (1,1,8) do (
for /f %%c in ("!m%%x%%y!") do (set sc=!sc!!._%%c!)
)
echo;!.%%y!!sc!
)
echo;┗重玩━读谱━←→跳
echo;黑%mh%%mb%
echo;
set np=%1%mqp:~-4%
if "!np!"=="0 0 " (goto :Judge)
if !ht! neq 0 (echo;跳过无效,可下步已用%._5%标出
for /l %%x in (1,1,8) do (for /l %%y in (1,1,8) do (set/a m%%x%%y=!m%%x%%y! %% 3)))
echo;请!..%ms%!棋落子
set ht=0
if "%1"=="1" (goto :eof)
:Mouse %获取鼠标%
for /l %%a in (1,1,400) do (echo.>nul)
cmos 0 -1 1
set /a P=%errorlevel%
set /a X=%P:~0,-3%
set /a Y=%P%-1000*%X%
set /a "nx=(X-1)/2,ny=y-1"
if not defined m%nx%%ny% goto :Mouse
if "!M%nx%%ny%!"=="7" (%读谱%
call :Read
set np=!errorlevel!
if !np!==0 (goto :Map)
goto :Fupan
)
if "!M%nx%%ny%!"=="6" (%跳过%
set "mqp=!mqp!0 "
set/a sp+=1
(for /f %%z in ('set m') do (echo;%%z))>hbqtmp\m!sp!.txt
goto :Check
)
if "!M%nx%%ny%!"=="5" (%重玩%
call :Replay
if !errorlevel!==1 (
del /q /a /f hbqtmp\m* >nul
goto :Init
) else (
goto :Map
)
)
if "!M%nx%%ny%!"=="4" (%后退%
set/a tp=sp-1
if exist hbqtmp\m!tp!.txt (
set/a sp-=1
for /f %%z in (hbqtmp\m!sp!.txt) do (set %%z)
goto :Map
)
)
if "!M%nx%%ny%!"=="3" (%前进%
set/a tp=sp+1
if exist hbqtmp\m!tp!.txt (
set/a sp+=1
for /f %%z in (hbqtmp\m!sp!.txt) do (set %%z)
goto :Map
)
)
if not "!M%nx%%ny%!"=="2" goto :Mouse
call :Valid %nx% %ny% 1
if %errorlevel% neq 0 (%落子成功%
set "mqp=!mqp!%nx%%ny% "
if %ms%==1 (set/a mh+=1) else (set/a mb+=1)
set/a m%nx%%ny%=ms,sp+=1
set/a "ms=(ms+1) %% 2"
(for /f %%z in ('set m') do (echo;%%z))>hbqtmp\m!sp!.txt
)
set/a x=mh+mb,y=mh*mb
if %x%==64 (goto :Judge)
if %y%==0 (goto :Judge)
goto :Map
:Judge %判断胜负%
set xqp=%mqp:0=跳%
for /l %%a in (1,1,8) do (for /f %%z in ("!.:~%%a,1!") do (set xqp=!xqp: %%a= %%z!))
call :Map 1
set np=%mqp:~-4%
if "!np!"=="0 0 " (echo;无棋可走)
echo;棋谱:%xqp%
echo;
if %mh% gtr %mb% (echo;黑棋赢!!)
if %mh% lss %mb% (echo;白棋赢!!)
if %mh%==%mb% (echo;和棋!!!)
call :Save
del /q /a /f hbqtmp\m* >nul
pause
goto :Init
:Check %判断一方是否无合法步%
for /l %%x in (1,1,8) do (
for /l %%y in (1,1,8) do (
if !m%%x%%y!==2 (
call :Valid %%x %%y 2
if !errorlevel! neq 0 (set/a m%%x%%y=5,ht+=1)
)
)
)
if !ht!==0 (set/a "ms=(ms+1) %% 2")
goto :Map
:Valid %判断落子是否有效%
setlocal
set/a et=0,x=%1,y=%2,as=1-ms
for %%x in (+1 +0 -1) do (for %%y in (+1 +0 -1) do (call :Get %%x %%y))
if %3==2 (endlocal&exit /b %et%)
if %ms%==1 (set "ml=mh+=%et%,mb-=%et%") else (set "ml=mb+=%et%,mh-=%et%")
for /l %%z in (1,1,%et%) do (set "ml=!ml!,m!w%%z!=ms")
(endlocal&set/a %ml%&exit /b %et%)
:Get %获取吃子信息%
set/a xx=x,yy=y,st=et
set rx=%1
set ry=%2
for /l %%w in (1,1,8) do (
set/a xx=xx%rx%,yy=yy%ry%
for /f %%z in ("!xx!!yy!") do (set va=!m%%z!
if "!va!"=="%as%" (
set/a et+=1
set w!et!=%%z
) else (
if "!va!" neq "%ms%" (set/a et=st)
goto :eof
)
)
)
goto :eof
:Replay %重玩%
cls
echo;重玩将删除所有记录,并且不能前进和后退。
echo;输入Y回车表示重玩,其他输入皆返回
set /p np=
if /i "!np!"=="Y" (exit /b 1)
exit /b 0
:Read %读谱%
if "%1"=="q" (
if exist hbqtmp\m1.txt (for /l %%w in (2,1,64) do (set/a np=%%w-1
if not exist hbqtmp\m%%w.txt (for /f %%z in (hbqtmp\m!np!.txt) do (set %%z)
set sp=!np!
goto :eof)))
)
cls
echo;请输入棋谱名[不需要加后缀,如1]
echo;输入0并回车将返回游戏
set np=
set /p np=
if !np!==0 (exit /b 0)
if not exist hbqtmp\!np!.hbqqp (
echo;文件不存在!
pause
) else (
exit /b !np!
)
goto :Read
:Save %保存棋谱%
for /l %%z in (1,1,9999) do (if not exist hbqtmp\%%z.hbqqp (echo;mqp=%mqp%>hbqtmp\%%z.hbqqp
goto :eof))
goto :eof
:Fupan %复盘%
set/a fp=1
%复盘功能尚未实现%
exitCOPY
第三方:Cmos

无法打开                         乱码

TOP

本帖最后由 cmd1152 于 2021-7-19 14:00 编辑

回复 2# Rasm


    另存为ANSI文件再打开试试

TOP

没有第三方,能不能发一下里面用到的所有第三方

TOP

回复 4# zdeity


    基础程序你没有?

TOP

回复 4# zdeity


    一看就知道要cmos,去批处理第三方下载

TOP

还有就是开头如果是color f0的话似乎看得更顺畅一点

TOP

本帖最后由 cmd1152 于 2021-7-20 13:37 编辑

回复 7# zdeity

对后面显示不友好

TOP

回复 7# zdeity


    已修复

TOP

连我都看不下去了

TOP

本帖最后由 cmd1152 于 2021-7-21 12:33 编辑

回复 10# 路过


    的确可以不用标签,但我就是喜欢用

TOP

毕竟这不是bat的主菜。

TOP

回复 12# qixiaobin0715


    的确不是bat的主菜。

TOP

bat主菜是实用
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

返回列表