| @echo off&setlocal enabledelayedexpansion |
| title …扫雷(¤)…By-VBT6_村庄 #小静静_特别版 |
| |
| :starts |
| color f0&mode con cols=70 lines=20 |
| set zm=A B C D E F G H I J K L M N O P |
| set lei=¤&set qi=♀&cls&call :sysm&echo. |
| echo.版本说明: |
| echo.。。输入兼容(如:A3;a3;3a;3A)均代表同一坐标点 |
| echo.。。支持一次多个输入,以空格间隔(格式为:1a 2a 3a bj4d cx5f)。 |
| echo.。。请按格式输入,错误输入可能造成未知错误。 |
| echo.。。本版本为小静静特别制作。赢了有奖励哦! |
| echo.。。本版本未作严格测试,部分算法尚未完善,BUG在所难免,欢迎指正! |
| echo.。。最后您有任何意见或疑问可以向117609665@qq.com提出或咨询! |
| echo. By-村庄,于2010#2#17晚。 |
| :::::还有其他功能和便捷操作未作详述,当做小彩蛋自己发掘吧。::::: |
| echo.&set /p qijing=请选择难度(r:容易—9×9 y:困难—16×16 其他:默认-12×12)# |
| set hb=!qijing:~0,1!&set js=!qijing:~1! |
| set jslv=16&for /l %%a in (10 1 30) do if %%a==!js! set /a jslv=%%a |
| if !hb!==r (set nd_=9&set zm=!zm:~0,33!&mode con cols=45 lines=28&set kg= ) else ( |
| if !hb!==y (set nd_=16&mode con cols=70 lines=40&set kg= ) else ( |
| set nd_=12&set zm=!zm:~0,45!&mode con cols=55 lines=32&set kg= ) |
| ) |
| cls&set /a nd#=!nd_!*!nd_! |
| ::初始表 |
| set h1=┳━&set h2=╋━&set h3=┻━ |
| set a1=&set a2=&set a3=&set hb=&set js=0 |
| for /l %%a in (1,1,3) do for /l %%i in (2,1,!nd_!) do set a%%a=!a%%a!!h%%a! |
| for /l %%a in (1,1,!nd_!) do set hb=!hb!┃▓ |
| for /l %%a in (1 1 !nd#!) do set bj%%a=▓&set bj_%%a= |
| ::布雷,默认16% |
| for /l %%i in (2,1,!nd#!) do (set /a s=!random!%%100&if !s! lss !jslv! set bj_%%i=¤) |
| ::标准数据 |
| set js_lei=0 |
| for /l %%a in (1 1 !nd#!) do if !bj_%%a!==¤ (set /a js_lei+=1) else (set pp=0&call :sjk %%a |
| for /l %%b in (!_1!,1,!_2!) do if !x%%b! gtr 0 if !x%%b! leq !nd#! for %%c in (!x%%b!) do if !bj_%%c!==¤ set /a pp+=1 |
| set "bj_%%a=!pp! ") |
| ::查看标准数据可以使用cd.>bjsj.txt&for /l %%a in (1 1 !nd#!) do echo bj_%%a=!bj_%%a!>>bjsj.txt |
| call :huabiao xx 画初始表 |
| ::游戏开始 |
| :yxks |
| echo.上次输入#!qijing! #%1 %2 |
| set /p qijing=请输入坐标(如:3a;标记旗bj3a;撤销标记旗cx3a) # |
| for %%a in (!qijing!) do set sr=%%a&call :zbcl |
| goto yxks |
| ::游戏输入数据处理中心 |
| :zbcl |
| if /i !sr!==xx (goto starts) else (if /i !sr!==qj (cls&goto qj) else (if /i !sr!==sm cls&call :sysm&call :qj)) |
| if /i "!sr:~0,2!"=="bj" (set sr=!sr:~2!&call :chuli 11) else ( |
| if /i "!sr:~0,2!"=="cx" (set sr=!sr:~2!&call :chuli 22) else call :chuli) |
| goto :eof |
| :chuli |
| call :zb |
| for %%a in (!shu!) do ( |
| if "%1"=="" (if "!bj%%a!"=="♀" set /a sx_lei+=1 |
| set bj%%a=!bj_%%a!&set s=!bj_%%a! |
| if "!bj_%%a!"=="0 " set hh=&set js_=0&call :sjk %%a&call :fdg) |
| if "%1"=="11" if "!bj%%a!"=="▓" set bj%%a=♀&set /a sx_lei-=1 |
| if "%1"=="22" if "!bj%%a!"=="♀" set bj%%a=▓&set /a sx_lei+=1 |
| ) |
| call :huabiao yy |
| if !sx_lei!==0 call :_ying |
| if !s!==¤ call :_shu 触雷了 |
| if !sx_lei! lss 0 call :_shu 雷不能为负 |
| goto :eof |
| :zb |
| ::下面屏蔽部分错误输入,增强兼容性 |
| if not "!sr:~3!"=="" set sr=17z |
| if "!sr:~0,1!" gtr "9" set sr=!sr:~1!!sr:~0,1! |
| if !sr:~-1! lss 9 (set sr=17z) else (if !sr:~-1! gtr !zm:~-1! set sr=17z) |
| set x=!sr:~0,-1!&if !x! gtr !nd_! (set sr=17z) else (if !x! lss 0 set sr=17z) |
| if !sr!==17z call :yxks 输入中出现错误 请重新输入 |
| ::得到坐标对应的数值 |
| set /a shu=(!sr:~0,-1!-1)*!nd_! |
| for %%a in (!zm!) do set /a shu+=1&if /i "%%a"=="!sr:~-1!" goto :eof |
| ::数据库 |
| :sjk |
| set /a x2=%1-1&set /a x1=!x2!-!nd_!&set /a x3=!x2!+!nd_! |
| set /a x7=%1+1&set /a x6=!x7!-!nd_!&set /a x8=!x7!+!nd_! |
| set /a x4=%1-!nd_!&set /a x5=%1+!nd_!&set /a ww=!x5!%%!nd_! |
| if !ww!==0 (set _1=1&set _2=5) else (if !ww!==1 (set _1=4&set _2=8) else (set _1=1&set _2=8)) |
| goto :eof |
| ::如果打开的坐标值为“0”,则打开其附近8个坐标.这里最好用递归算法,但本人能力所限不能完成 |
| ::写了下面“fdg”;“fangdigui”两个标签基本实现一定条件下仿递归功能 |
| :fdg |
| if "%1"=="qbbj" set /a js#+=1 |
| for /l %%b in (!_1!,1,!_2!) do if !x%%b! gtr 0 if !x%%b! leq !nd#! for %%c in (!x%%b!) do if "!bj%%c!"=="▓" ( |
| set bj%%c=!bj_%%c!&if "!bj%%c!"=="0 " set hh=!hh!%%c &set /a js_+=1) |
| if "!js#!"=="!js_#!" if not "!hh!"=="" call :fangdigui |
| goto :eof |
| :fangdigui |
| set js#=0&set h3=!hh!&set hh=&set js_#=!js_!&set js_=0 |
| for %%a in (!h3!) do call :sjk %%a&call :fdg qbbj |
| goto :eof |
| ::输 |
| :_shu |
| msg %username% "#%1#你输了!被小静静打屁屁!js_lei!下" |
| set /p qijing=你输了!要再来一盘吗?(Y_确定/S_显示答案/其他_退出): |
| if /i !qijing!==y (goto starts) else ( |
| if /i !qijing!==s (cls&echo.答案:&echo. |
| for /l %%a in (1 1 !nd#!) do set bj%%a=!bj_%%a! |
| call :huabiao xx&set/p=按任意键重新开始&goto starts |
| ) else exit) |
| ::赢 |
| :_ying |
| for /l %%a in (1 1 !nd#!) do if "!bj%%a!"=="▓" goto :eof |
| set js=0&for /l %%a in (1 1 !nd#!) do if !bj%%a!==♀ if !bj_%%a!==¤ set /a js+=1 |
| if !js!==!js_lei! msg %username% " 恭喜你赢了!得到小静静香吻!js_lei!个 "&goto starts |
| goto :eof |
| ::画表 |
| :huabiao |
| cls&set _n=1&set _nn=!nd_!&if %1==xx set sx_lei=!js_lei! |
| echo.!kg!还有$!sx_lei!$雷 ######共有$!js_lei!$雷 |
| echo.###输入:xx重新开始;sm显示使用帮助### |
| echo !zm! |
| echo ┏━!a1!┓ |
| for /l %%i in (1,1,!nd_!) do ( |
| if %%i lss 10 (set hs= %%i) else set hs=%%i |
| set hb=&for /l %%a in (!_n!,1,!_nn!) do set hb=!hb!┃!bj%%a! |
| set /a _n+=!nd_!&set /a _nn+=!nd_! |
| echo !hs!!hb!┃ |
| if not %%i==!nd_! echo ┣━!a2!┫ |
| ) |
| echo ┗━!a3!┛ |
| goto :eof |
| :: 小静静 |
| :qj |
| echo.&echo. |
| echo _____ ^&^&^&^&_^) ^) |
| echo \/,---^< ^&^&^&^&\ \ |
| echo ( )c~c~~@~@ )- - ^&^&\ \ ! |
| echo C ^>/ \^< ^|^&/ 静 |
| echo \_O/ #哇塞美女! _`^*-'_/ / 静 |
| echo ,- ^>o^<-. / ____ _/ 小 |
| echo / \/ \ / /\ _)_) 是 |
| echo / /^| ^| ^|\ \ / / ) ^| #我 |
| echo \ \^| ^| ^|/ / \ \ / ^| |
| echo /_/`___^|_\ /_/\____^| |
| echo ^| ^| ^| ^\ \^| |
| echo ^| ^| ^| `. ) |
| echo ^| ^| ^| / / |
| echo ^|__^|_^|_ /_/^| |
| echo (____)_) ^|^\_\_ |
| echo. &set/p=按任意键返回&cls&call :huabiao _re&goto yxks |
| :: 使用说明数据 |
| :sysm |
| echo.使用说明: |
| echo....输入坐标打开对应方块(如:3a或a3) |
| echo....输入标记旗在坐标前加“bj”前缀(如:bj3a或bja3) |
| echo....撤销标记旗在坐标前加“cx”前缀(如:cx3a或cxa3) |
| echo....输入“xx”重新开始 |
| goto :eofCOPY |