中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: [游戏]批处理版汉诺塔游戏 上一主题 | 下一主题
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『楼 主』:  [游戏]批处理版汉诺塔游戏 使用 LLM 解释/回答一下

首发地址:
批处理版汉诺塔游戏
@echo off
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::本汉诺塔游戏的规则如下:
:: 把a上的盘子(从上到下依次为1.2.3...大于1的数字为多个重复只是为了直观的显示盘子的大小,
::并无其它意义)借住b逐个全部移到c上,在移动的过程中,不能把大的盘子放在小盘子上面.
:: 输入的规则为:第一个字符为要移动的盘子的编号,第二个字符为要移动的盘子所在的位置,
::第三个字符为盘子移动后的位置.如下所示:
:: 1
:: 222
:: 33333
:: _______ _______ _______
:: a b c
::要把编号为1的盘子移动到c上,输入"1ac"回车即可.
::
::以下为最终的目的:
:: 1
:: 222
:: 33333
:: _______ _______ _______
:: a b c
::
::在提示输入盘子个数时可以输入"h"观看游戏演示
::本游戏由于要考虑效率的关系,并没做太多错误输入的判断,所以请严格按要求输入...
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:bgn
echo.
setlocal enabledelayedexpansion
set "ttl=9"
:agn
set input=&set /p input=请输入盘子的个数(2~7)(h游戏演示,回车退出):
if not defined input goto :eof
if /i "%input%"=="h" (
set "movie=movie"
set /a "input=!random!%%5+3"
goto :skp
)
if %input% lss 2 (echo.别那么弱智好不好...&goto :agn)
if %input% gtr %ttl% (echo.太多了,你想玩到猴年马月呀...&goto :agn)
:skp
cls
set /a a=1,all=1
for /l %%a in (%input% -1 1) do (
set /a n+=1,m=n*2-1,all*=2
set "space="
for /l %%i in (1 1 %%a) do (set "space=!space! ")
for /l %%x in (1 1 !m!) do (call set "code!n!=%%code!n!%%!n!")
call set "col_a!n!=!space!%%code!n!%%!space!"
call echo.%%col_a!n!%%
)
set /a m+=2,all-=1&set "space="&set "kong= "
for /l %%a in (1 1 %m%) do (
set "line=!line!_"
set "empty=!empty! "
)
set "line=!line!!kong!!line!!kong!!line!"
echo.!line!
set /a "tmp_=%m%/2"
for /l %%a in (1 1 %tmp_%) do (set "space=!space! ")
set "line2=!space!a!space!!kong!!space!b!space!!kong!!space!c"
echo.!line2!
for /l %%i in (1 1 %input%) do (
set "a%%i=ok"
set "col_b%%i=%empty%"
set "col_c%%i=%empty%"
)
if defined movie (goto :movie)
:game
echo.&set in=&set /p in=请输入(回车开始新游戏):
if not defined in (endlocal&goto :bgn)
echo.%in:~-2%|findstr /i /v "^*$" >nul
if "%errorlevel%"=="0" (
echo.目标位置不正确^^^!^^^!^^^!
goto :game
)
if "%in:~-2,1%"=="%in:~-1%" (
echo.请别开这种玩笑好不好^^^!^^^!^^^!
goto :game
)
if %in:~0,-2% gtr !input! (
echo.盘子的编号超出范围了^^^!^^^!^^^!
goto :game
)
if %in:~0,-2% lss 1 (
echo.盘子的编号超出范围了^^^!^^^!^^^!
goto :game
)
set /a "tmp_=%in:~0,-2%-1"&set "tmp_1=!in:~-1!"&set "tmp_2=!in:~-2,1!"
if %tmp_% gtr 0 (
for /l %%a in (1 1 !tmp_!) do (
if defined !tmp_2!%%a (
echo.请先把上面的小盘子移走...
goto :game
)
if defined !tmp_1!%%a (
echo.大盘子不能放在小盘子的上面^^^!^^^!^^^!
goto :game
)
)
)
set /a "times+=1"
set "%in:~-2,1%%in:~0,-2%="
set "%in:~-1%%in:~0,-2%=ok"
call set "var=%%col_!in:~-2,1!!%in:~-2,1%!%%"
call :set_ %in:~-1% "!var!"
set "col_%in:~-2,1%!%in:~-2,1%!=%empty%"
set /a %in:~-2,1%+=1
cls
set n=0
for /l %%i in (1 1 %input%) do (
echo.!col_a%%i!!kong!!col_b%%i!!kong!!col_c%%i!
if defined c%%i (set /a n+=1)
)
echo.!line!&echo.!line2!
if "%n%"=="%input%" (
echo.&echo.恭喜你,完全正确,你用%times%步完成了这次游戏...&echo.
if "%times%"=="%all%" (
echo.你的方法是最便捷的,太厉害了^^^!^^^!^^^!
) else (
echo.最便捷的方法只用%all%步就可以完成哦,继续努力^^^!^^^!^^^!
)
endlocal
goto :bgn
)
goto :game

:set_
for /l %%a in (%input% -1 1) do (
if "!col_%1%%a: =!"=="" (
set "col_%1%%a=%~2"
set "%1=%%a"
goto :eof
)
)
goto :eof

:movie
set "str="
call :show !input! a b c
for %%i in (!str!) do (
set "in=%%i"
call call set "var=%%%%col_!in:~-2,1!%%!in:~-2,1!%%%%%%"
call :set_ !in:~-1! "!var!"
call set "col_!in:~-2,1!%%!in:~-2,1!%%=!empty!"
set /a "!in:~-2,1!+=1"
ping -n 2 127.1 >nul
cls
for /l %%m in (1 1 !input!) do (
echo.!col_a%%m!!kong!!col_b%%m!!kong!!col_c%%m!
)
echo.!line!&echo.!line2!
)
echo.&echo.演示完毕...&endlocal&goto :bgn

:show
if "%1"=="1" (
set "str=!str!%1%2%4 "
) else (
set /a "var=%1-1"
call :show !var! %2 %4 %3
set "str=!str!%1%2%4 "
set /a "var=%1-1"
call :show !var! %3 %2 %4
)
goto :eof


   此帖被 +17 点积分      点击查看详情   
评分人:【 slore 分数: +8  时间:2009-6-12 08:59
评分人:【 netbenton 分数: +9  时间:2009-6-13 21:07


2009-6-12 08:03
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: