|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
|
2008-8-11 15:59 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
2 楼』:
已经更新为实现输入更改数字,更直观!!!
@echo off&Setlocal Enabledelayedexpansion
title 数字九宫格游戏 Code By cn-dos moniuming
color 1e
echo.&echo 欢迎使用本绿色免安装版九宫格数字游戏, 在进入游戏前请详细阅读此说明
echo.&echo 进入游戏会出现以下的画面,第一行和第一列分别为横坐标和纵坐标,仅作参考
echo.&echo 游戏规则为: 用数字替换各个符号, 使每行和每列都出现 1~9 这 9 个数字
echo.&echo 玩法: 比如下图中要把 4 填在第 9 行第 1 列的位置,输入 491 然后回车即可
echo.&echo 由于本程序存在一些漏洞,所以请严格按要求填写,否则错误的输入将可能无法更改
echo.&echo 请按任意键进入游戏, 祝你玩得愉快...... ^^_^^
echo.
echo 1 2 3 4 5 6 7 8 9
echo.
echo. 1 6 7 + 1 2 3 _ 8 4
echo. 2 1 9 6 4 _ 2 8 - +
echo. 3 8 4 - 9 5 + _ 6 7
echo. 4 3 8 _ 5 4 - + 9 2
echo. 5 + 2 - 7 3 8 _ 1 6
echo. 6 - _ 9 8 6 4 2 3 +
echo. 7 2 3 7 - + _ 1 4 9
echo. 8 5 _ 3 2 1 - 4 7 +
echo. 9 _ 1 8 3 9 7 - 2 5
pause>nul&cls
set "cod= +-_/\#"&set "st= 1 2 3 4 5 6 7 8 9"
for /l %%i in (1 1 9) do (set "bat=!bat! %%i")
:begin
echo.&echo 1~6为难度选择,3为默认的难度
set "input=3"&set "num=0"
echo.&set /p input=请输入:
cls
if %input% gtr 6 (echo.&echo 选择错误&goto :begin)
if %input% lss 1 (echo.&echo 选择错误&goto :begin)
echo %st%&echo.
for /l %%i in (1 1 9) do (set "str%%i=%bat%")
for /l %%a in (9 -1 1) do (call :loop1 %%a)
set "num3=0"
:more_
echo.&echo 请按照"替换数字,行,列"(不包括引号)的顺序连续输入数字
echo 或者ans显示答案(默认),new开启新游戏,out退出本游戏
echo.&set "ent=ans"&set /p ent=请输入:
if /i "%ent%"=="out" (
cls&for /l %%a in (1 1 9) do echo.
echo 谢谢使用本游戏,再见......
ping -n 4 127.1>nul&exit
)
if /i "%ent%"=="ans" (
for /l %%l in (9 -1 1) do (echo !ming%%l!)
goto :begin
)
if /i "%ent%"=="new" goto :begin
set "ma=%ent:~,1%"&set "mb=%ent:~1,1%"&set "mc=%ent:~2,1%"
for /f "tokens=%mc%" %%a in ("!min%mb%!") do (
set "min%mb%=!min%mb%:%%a=%ma%!"
)
cls
echo %st%&echo.
for /l %%a in (1 1 9) do (echo %%a !min%%a!)
goto :more_
:loop1
set "dfc=1"
if "%n%"=="9" (
for /l %%k in (1 1 9) do (set "%%k=")
set "ming%1=!var!"
call :loop3
set /a "num+=1"
set "n=0"&echo !num! !var!&set "var="&set "num2=0"
for /l %%c in (1 1 9) do (set "%%c="&set "string%%c=")
goto :eof
)
set /a "n+=1"
for /l %%f in (1 1 9) do (if not defined string%%f (set "string%%f=!str%%f!"))
:loop2
set /a "ttl+=1"
if "%ttl%"=="30" (
set "ttl=0"&set "var="&set "n=0"
for /l %%e in (1 1 9) do (set "%%e="&set "str%%e=!string%%e!")
goto :loop1
)
set /a "mdl=%random%%%%1+1"
for /f "tokens=%mdl%" %%d in ("!str%n%!") do (
if defined %%d goto :loop2
set "ttl=0"
set "var=!var! %%d"
set "%%d=dos"
set "str%n%=!str%n%:%%d=!"
)
goto :loop1
:loop3
set /a "num1=%random%%%9+1"
for /f "tokens=%num1%" %%g in ("%var%") do (
if defined %%g goto :loop3
set /a "num2+=1"
call call set "var=%%%%var:%%g=%%cod:~!num2!,1%%%%%%"
set "%%g=god"
)
if "%dfc%"=="%input%" (
set /a "num3+=1"
set "min!num3!=!var!"
for /l %%h in (1 1 9) do (set "%%h=")
goto :eof
) else (
set /a "dfc+=1"&goto :loop3
) [ Last edited by moniuming on 2008-8-15 at 12:17 PM ]
|
|
2008-8-15 12:11 |
|
|
wgx1688
初级用户
积分 60
发帖 34
注册 2007-4-24
状态 离线
|
|
2008-8-15 14:19 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
4 楼』:
其实这个游戏的BUG在于:当一行出现2个同样的数字时,无法更改其中的一个,这样就会出错
当一行中已经输入某个数字,而这个数字是错误的(当然不是重复的),可以把已经输入的数字用字母代替,然后再把它替换,比如:
某行中: 5 2 6 7 _ 1 + - 4 第9位的4应该在第8位,如果先把第8位更改为4,再想把第9位的4更改为其它的数字就无法实现了,正确的做法为先把第9位的4用字母代替,再把第8位改为4即可.(5 2 6 7 _ 1 + - 4==>5 2 6 7 _ 1 + - a==>5 2 6 7 _ 1 + 4 a)
|
|
2008-8-15 14:37 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
|
2008-8-15 14:39 |
|
|
523066680
银牌会员
SuperCleaner
积分 2362
发帖 1133
注册 2008-2-2
状态 离线
|
『第
6 楼』:
哈 我想到一个游戏模式
--确认/返回上一步
能不能用暂时储存,然后让用户有返回的余地
可能做起来会很麻烦吧 只是问问 如果能实现的话 很不错
我没敢面对你的代码。但
我愿意通过写模型的方式,为完善这个游戏尽一份绵薄之力
然后,如果时间允许,我也愿意为游戏结束后的庆祝特效尽一份力
希望大家一起帮忙协助完善这方面。可别只是我一个人做哈 这也是对自己的锻炼
[ Last edited by 523066680 on 2008-8-17 at 06:05 PM ]
|
综合型编程论坛
我的作品索引 |
|
2008-8-16 10:47 |
|
|
523066680
银牌会员
SuperCleaner
积分 2362
发帖 1133
注册 2008-2-2
状态 离线
|
『第
7 楼』:
写了一个可返回的模型,希望能帮上忙,代码还是比较臃肿的
@echo off
setlocal enabledelayedexpansion
:action
set hang=123_56789
cls &echo %hang%
set /p write="请输入一个数,使其完整:"
if "%write%"=="" goto :action
cls
echo,!hang:_=%write%!
:b
set /p choice="确认这个结果y\返回上一步n:"
if "%choice%"=="y" goto :end
if "%choice%"=="n" (goto :action) else (goto :b)
:end
set end=!hang:_=%write%!
cls
echo %end%
pause
|
综合型编程论坛
我的作品索引 |
|
2008-8-17 18:01 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by 523066680 at 2008-8-17 18:01:
写了一个可返回的模型,希望能帮上忙,代码还是比较臃肿的
[code]
@echo off
setlocal enabledelayedexpansion
:action
set hang=123_56789
cls &echo %hang%
set /p writ ... |
|
其实看这句就知道返回是不可能的了
set end=!hang:_=%write%!
假设"_"符号有两个,那么,这一行中将会出现两个相同的数字,想单独更改其中一个已经不可能,也就是说,如果输入错误(在同一行中出现两个相同的数字),那么错误的输入将无法更改...
|
|
2008-8-17 23:49 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
9 楼』:
借鉴523066680的代码(下面链接的31楼),做如下的更新,只提高了效率,未做功能上的改变
http://www.cn-dos.net/forum/view ... id=F6pbks#pid292901
在此非常感谢523066680精彩的代码
@echo off
Setlocal Enabledelayedexpansion
title 数字九宫格游戏
color 1e
echo.&echo 欢迎使用本绿色免安装版九宫格数字游戏, 在进入游戏前请详细阅读此说明
echo.&echo 进入游戏会出现以下的画面,第一行和第一列分别为横坐标和纵坐标,仅作参考
echo.&echo 游戏规则为: 用数字替换各个符号, 使每行和每列都出现 1~9 这 9 个数字
echo.&echo 玩法: 比如下图中要把 4 填在第 9 行第 1 列的位置,输入 491 然后回车即可
echo.&echo 由于本程序存在一些漏洞,所以请严格按要求填写,否则错误的输入将可能无法更改
echo.&echo 请按任意键进入游戏, 祝你玩得愉快...... ^^_^^
echo.
echo 1 2 3 4 5 6 7 8 9
echo.
echo. 1 6 7 + 1 2 3 _ 8 4
echo. 2 1 9 6 4 _ 2 8 - +
echo. 3 8 4 - 9 5 + _ 6 7
echo. 4 3 8 _ 5 4 - + 9 2
echo. 5 + 2 - 7 3 8 _ 1 6
echo. 6 - _ 9 8 6 4 2 3 +
echo. 7 2 3 7 - + _ 1 4 9
echo. 8 5 _ 3 2 1 - 4 7 +
echo. 9 _ 1 8 3 9 7 - 2 5
pause>nul&cls
set "cod= +-_/\#"&set "st= 1 2 3 4 5 6 7 8 9"
:start_
set /a "str=123456789","n=0","a=0","b=0","c=0","line=1","input=3","dfc=1","num3=0"
echo.&echo 1~6为难度选择,3为默认的难度
echo.&set /p input=请输入:
cls
if %input% gtr 6 (echo.&echo 选择错误&goto :begin)
if %input% lss 1 (echo.&echo 选择错误&goto :begin)
:begin
set /a "n+=1"
set "h%n%=%str%"
set "str=%str:~1%%str:~,1%"
if %n% lss 9 goto :begin
for /l %%a in (0,1,9) do (
set "Ex%%a="
set "Ex2%%a="
set "hang%%a="
)
:a
set /a "a+=1"
:a-1
set /a "n=%random%%%9"
if not defined Ex%n% (
for /l %%a in (1,1,9) do (call,set hang%%a=!hang%%a! %%h%%a:~!n!,1%%)
) else (goto :a-1)
set "Ex%n%=ex"
if %a% lss 9 goto :a
:b
set /a "b+=1"
:b-1
set /a "n=%random%%%9+1"
if not defined Ex2%n% (set h%b%=!hang%n%!) else (goto :b-1)
set "Ex2%n%=ex"
if %b% lss 9 goto :b
:c
set /a "c+=1"
:c-1
set /a "n1=%random%%%9+1"
set /a "n2=%random%%%9+1"
if %n1% equ %n2% goto :c-1
for /l %%a in (1,1,9) do (
set "h%%a=!h%%a:%n1%=n!"
set "h%%a=!h%%a:%n2%=%n1%!"
set "h%%a=!h%%a:n=%n2%!"
)
if %c% lss 3 goto :c
for /l %%a in (1,1,9) do (call set hi%%a=%%h%%a%%)
:loop1
set /a "num1=%random%%%9+1"
if defined %num1% goto :loop1
set "%num1%=god"
for /f "tokens=%num1%" %%g in ("!hi%line%!") do (
set /a "num2+=1"
call call set "hi%line%=%%%%hi%line%:%%g=%%cod:~!num2!,1%%%%%%"
)
if %dfc% lss %input% (set /a "dfc+=1"&goto :loop1)
for /l %%a in (1 1 9) do (set "%%a=")
Rem set "num2=0"
set /a "num3+=1","num2=0"
if %num3% lss 9 (set /a "line+=1"&set "dfc=1"&goto :loop1)
echo %st%&echo.
for /l %%a in (1 1 9) do (call echo %%a %%hi%%a%%)
:more_
echo.&echo 请按照"替换数字,行,列"(不包括引号)的顺序连续输入数字
echo 或者ans显示答案(默认),new开启新游戏,out退出本游戏
echo.&set "ent=ans"&set /p ent=请输入:
if /i "%ent%"=="out" (
cls&for /l %%a in (1 1 9) do echo.
echo 谢谢使用本游戏,再见......
ping -n 4 127.1>nul&exit
)
if /i "%ent%"=="ans" (
for /l %%l in (1 1 9) do (echo !h%%l!)
goto :start_
)
if /i "%ent%"=="new" goto :start_
set "ma=%ent:~,1%"&set "mb=%ent:~1,1%"&set "mc=%ent:~2,1%"
for /f "tokens=%mc%" %%a in ("!hi%mb%!") do (
set "hi%mb%=!hi%mb%:%%a=%ma%!"
)
cls
echo %st%&echo.
for /l %%a in (1 1 9) do (echo %%a !hi%%a!)
goto :more_ [ Last edited by moniuming on 2008-8-18 at 02:07 AM ]
|
|
2008-8-18 01:37 |
|
|
flyinspace
银牌会员
积分 1206
发帖 517
注册 2007-3-25
状态 离线
|
『第
10 楼』:
提示:
Call :数独游戏原始模型生成
call :按表生成随机空格,并生成空格列表。
call :游戏表
假设
set "Table_00=123456789"
set "Table_01=123456789"
……
set "Table_09=123456789"
上面为实际答案。
下面就是 :
set "nTable_00=12_4_6789"
……
set "nTable_09=1_3__6__9"
如此,用户接受输入列表
自动生成。
set "ITable_00_[这里是可变值,表示空格位置]=-"
生成序列:
假设用户修改第三行,第4列数字。
用户输入:34
程序判断:if "%ITable_02_3%"=="" (
echo "该数字所在位置为非空格"
goto :EOF
)
:reInput
set /p "ITable_02_3=请输入您要输入的值:"
call :验证输入是否正确,不正确直接返回:input
goto :EOF
[ Last edited by flyinspace on 2008-8-18 at 01:52 AM ]
|
知,不觉多。不知,乃求知 |
|
2008-8-18 01:38 |
|
|
523066680
银牌会员
SuperCleaner
积分 2362
发帖 1133
注册 2008-2-2
状态 离线
|
|
2008-8-18 08:28 |
|
|
hearo
新手上路
积分 2
发帖 1
注册 2008-8-19
状态 离线
|
『第
12 楼』:
楼上都是高手啊!1俺一大菜鸟什么都看不懂啊!!
|
|
2008-8-19 23:39 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
13 楼』:
看了这个帖子才知道真正的九宫格游戏原来是这样的,已经更新,谢谢 flyinspace.
http://www.cn-dos.net/forum/view ... 2306&sid=5zTDSe
由于要避免死循环的出现,代码臃肿,效率较低...
@echo off
title 数额九宫格游戏 Code By CN-DOS Moniuming
Setlocal Enabledelayedexpansion
color 1e
echo.&echo 欢迎使用本绿色免安装版九宫格数字游戏, 在进入游戏前请详细阅读此说明
echo.&echo 进入游戏会出现以下的画面,第一行和第一列分别为横坐标和纵坐标,仅作参考
echo.&echo 游戏规则为: 用数字替换各个符号, 使每行和每列都出现 1~9 这 9 个数字,
echo.&echo 并且每个 3^*3 的区域里也要包含 1~9 这 9 个数字.
echo.&echo 玩法: 比如下图中要把 7 填在第 1 行第 1 列的位置,输入 711 然后回车即可
echo.&echo 由于本程序存在一些漏洞,所以请严格按要求填写,否则错误的输入将可能无法更改
echo.&echo 请按任意键进入游戏, 祝你玩得愉快...... ^^_^^
echo.&echo 1 2 3 4 5 6 7 8 9
echo.
echo. 1 / 3 _ 2 8 6 1 + -
echo. 2 1 2 9 / - 3 _ + 8
echo. 3 _ / - + 4 9 3 2 7
echo. 4 5 _ 3 - 9 / + 7 1
echo. 5 - 9 _ 7 + 1 5 / 4
echo. 6 4 - 7 3 5 2 + / _
echo. 7 _ 8 1 - 3 5 / 6 +
echo. 8 6 + 5 / 2 - 4 1 _
echo. 9 3 4 2 6 + _ 9 / -
pause>nul&cls
set "cod= +-_/\#"&set "st= 1 2 3 4 5 6 7 8 9"
for /l %%a in (1 1 9) do (set "bat=!bat! %%a")
:again
set "input=4"
echo.&echo 1~6为难度选择,4为默认的难度
echo.&set /p input=请输入:
cls
if %input% gtr 6 (echo.&echo 选择错误&goto :again)
if %input% lss 1 (echo.&echo 选择错误&goto :again)
for /l %%i in (1 1 9) do echo.
echo 正在生成游戏,请稍候...
:lp1
for /l %%a in (1 1 3) do (set "str%%a=%bat%")
set /a "a=1","ran=9","lie=1","hng=1","dfc=1","line=1","num2=0","num3=0"
:lp2
if not defined rand set "rand=%ran%"
if "%hng%"=="10" (
for /l %%i in (1 1 9) do (set "mo%%i=!moniuming%%i!")
call :lp3
set /a "ttl=0","tot=0","b=0","hang=0"
set "rand="&set "var="
for /l %%a in (1 1 9) do (set "%%a="&set "moniuming%%a=")
for /l %%a in (1 1 8) do (
for /l %%b in (1 1 9) do (set str%%a%%b=)
)
goto :again
)
if "%lie%"=="10" (
for /l %%i in (1 1 3) do (set "moniuming%hng%=!moniuming%hng%!!va%%i!")
for /l %%i in (1 1 9) do (set "%%i=")
set /a "hang+=1","hng+=1","ran-=3","lie=1","b=0","ttl=0","v=0","a=1","tot=0"
set "rand="
if "!hang!"=="3" (
for /l %%a in (1 1 3) do (set "str%%a=%bat%")
set "ran=9"&set "hang=0"
)
for /l %%i in (1 1 3) do (set "string%%i=!str%%i!")
goto :lp2
)
if "%tot%"=="10" (
set /a "ttl=0","tot=0","b=0","hang=0"
set "rand="&set "var="
for /l %%a in (1 1 9) do (set "%%a="&set "moniuming%%a=")
for /l %%a in (1 1 8) do (
for /l %%b in (1 1 9) do (set str%%a%%b=)
)
goto :lp1
)
set /a "ttl+=1"
if "%ttl%"=="40" (
for /l %%i in (1 1 3) do (set "str%%i=!string%%i!")
for /l %%i in (1 1 9) do (set "%%i="&set "str!hng!%%i=")
set /a "ran=%rand%","lie=1","ttl=0","a=1","b=0","v=0","tot+=1"
set "var="
goto :lp2
)
set /a "m=%random%%%%ran%+1"
for /f "tokens=%m%" %%a in ("!str%a%!") do (
if defined %%a goto :lp2
for /l %%i in (1 1 %hng%) do (if "%%a"=="!str%%i%lie%!" goto :lp2)
set "%%a=god"&set "str%a%=!str%a%:%%a=!"&set "str!hng!!lie!=%%a"&set "var=!var! %%a"
)
set /a "ran-=1","b+=1","lie+=1","ttl=0"
if %b% lss 3 goto :lp2
set /a "v+=1","a+=1","ran+=3","b=0"
set "va%v%=%var%"&set "var="
goto :lp2
:lp3
set /a "num1=%random%%%9+1"
if defined %num1% goto :lp3
set "%num1%=god"
for /f "tokens=%num1%" %%g in ("!mo%line%!") do (
set /a "num2+=1"
call call set "mo%line%=%%%%mo%line%:%%g=%%cod:~!num2!,1%%%%%%"
)
if %dfc% lss %input% (set /a "dfc+=1"&goto :lp3)
for /l %%a in (1 1 9) do (set "%%a=")
set /a "num3+=1","num2=0"
if %num3% lss 9 (set /a "line+=1"&set "dfc=1"&goto :lp3)
cls&echo %st%&echo.
for /l %%a in (1 1 9) do (call echo %%a %%mo%%a%%)
:lp4
echo.&echo 请按照"替换数字,行,列"(不包括引号)的顺序连续输入数字
echo 或者ans显示答案(默认),new开启新游戏,out退出本游戏
echo.&set "ent=ans"&set /p ent=请输入:
if /i "%ent%"=="out" (
cls&for /l %%a in (1 1 9) do echo.
echo 谢谢使用本游戏,再见......
ping -n 4 127.1>nul&exit
)
if /i "%ent%"=="ans" (
for /l %%l in (1 1 9) do (echo !moniuming%%l!)
goto :eof
)
if /i "%ent%"=="new" goto :eof
set "ma=%ent:~,1%"&set "mb=%ent:~1,1%"&set "mc=%ent:~2,1%"
for /f "tokens=%mc%" %%a in ("!mo%mb%!") do (
set "mo%mb%=!mo%mb%:%%a=%ma%!"
)
cls
echo %st%&echo.
for /l %%a in (1 1 9) do (echo %%a !mo%%a!)
goto :lp4
|
|
2008-8-21 15:11 |
|
|
moniuming
银牌会员
永远的菜鸟
积分 1335
发帖 574
注册 2007-11-27 来自 广西
状态 离线
|
『第
14 楼』:
这个代码的核心部分用的是terse的代码,只作了一些小小的优化,避免了一些重复的返回,提高了一点儿效率
这应该是最后的更新了,增加了以下功能:
1.在一行和一列中不允许重复,如果输入错误请用任一字母过渡
2.对结果进行验证,如果正确会有一个无聊的小动画
欢迎大家测试
@echo off
Setlocal Enabledelayedexpansion
rem 核心代码terse 游戏moniuming
color 3e&title 数字九宫格游戏
echo.&echo 欢迎使用本绿色免安装版九宫格数字游戏, 在进入游戏前请详细阅读此说明,
echo.&echo 进入游戏会出现以下的画面,第一行和第一列分别为横坐标和纵坐标,仅作参考,
echo.&echo 游戏规则为: 用数字替换各个符号, 使每行和每列都出现 1~9 这 9 个数字,
echo.&echo 并且 9 个 3^*3 的区域里也要包含 1~9 这 9 个数字. (左图^=^=^>右图)
echo.&echo 玩法: 比如下图中要把 4 填在第 3 行第 1 列的位置,输入 431 然后回车即可.
echo.&echo 请按任意键进入游戏, 祝你玩得愉快...... ^^_^^
echo.&echo 1 2 3 4 5 6 7 8 9
echo.
echo. 1 6 8 7 _ / 1 - + 2 6 8 7 4 9 1 5 3 2
echo. 2 9 3 - 5 8 _ / + 7 9 3 1 5 8 2 4 6 7
echo. 3 / 5 _ 3 + 7 1 8 - 4 5 2 3 6 7 1 8 9
echo. 4 / 6 4 - 1 + _ 9 8 5 6 4 2 1 3 7 9 8
echo. 5 2 9 8 7 5 + / _ - 2 9 8 7 5 6 3 1 4
echo. 6 7 - _ 9 4 + 2 5 / 7 1 3 9 4 8 2 5 6
echo. 7 _ 4 9 6 + 5 / - 1 3 4 9 6 7 5 8 2 1
echo. 8 - _ 5 8 / + 6 4 3 1 7 5 8 2 9 6 4 3
echo. 9 _ / 6 - 3 4 9 + 5 8 2 6 1 3 4 9 7 5
pause>nul&cls
set "cod= +-_/\#"&set "st= 1 2 3 4 5 6 7 8 9"&set "color_=12345689abcde"
set "kong= "
set "echo_=好 极 了, 完 全 正 确, 恭 喜 你, 继 续 努 力 喔 "
for /l %%a in (1 1 80) do (set "tui=!tui!")
:again
color 3e&set "input=4"
for /l %%a in (1 1 9) do (
for /l %%b in (1 1 9) do (set "_%%a%%b="&set "%%a%%b=")
)
echo.&echo 1~6为难度选择,4为默认的难度
echo.&set /p input=请输入:
cls
if %input% gtr 6 (echo.&echo 选择错误&goto :again)
if %input% lss 1 (echo.&echo 选择错误&goto :again)
for /l %%i in (1 1 9) do echo.
echo 正在生成游戏,请稍候...
:st
for /l %%i in (1 1 9) do (set "mor%%i="&set "%%i=")
for /l %%i in (1 1 9) do call:lp %%i
for /l %%a in (1 1 9) do (set "moniuming%%a=!mor%%a!")
:lp3
set /a "num1=%random%%%9+1"
if defined %num1% goto :lp3
set "%num1%=god"
for /f "tokens=%num1%" %%g in ("!mor%line%!") do (
set /a "num2+=1","_%line%%num1%=god"
call set "%line%%num1%=%%cod:~!num2!,1%%"
call call set "mor%line%=%%%%mor%line%:%%g=%%cod:~!num2!,1%%%%%%"
)
if %dfc% lss %input% (set /a "dfc+=1"&goto :lp3)
for /l %%a in (1 1 9) do (set "%%a=")
set /a "num3+=1","num2=0"
if %num3% lss 9 (set /a "line+=1"&set "dfc=1"&goto :lp3)
cls&echo %st%&echo.
for /l %%a in (1 1 9) do (call echo %%a %%mor%%a%%)
:lp4
echo.&echo 请按照"替换数字,行,列"(不包括引号)的顺序连续输入数字
echo 或者ans显示答案(默认),new开启新游戏,out退出本游戏
:lp5
color 3e&echo.&set "ent=ans"&set /p ent=请输入:
if /i "%ent%"=="out" (
cls
for /l %%a in (1 1 9) do echo.
echo 谢谢使用本游戏,再见......
ping -n 4 127.1>nul&exit
)
if /i "%ent%"=="ans" (
for /l %%l in (1 1 9) do (echo !moniuming%%l!)
goto :again
)
if /i "%ent%"=="new" cls&goto :again
set "ma=%ent:~,1%"&set "mb=%ent:~1,1%"&set "mc=%ent:~2,1%"
if not defined _%mb%%mc% (
color fc&echo.&echo 第%mb%行第%mc%列为非替换位置
ping -n 3 127.1>nul&goto :lp5
)
for %%a in (!mor%mb%!) do (
if "%%a"=="%ma%" (
color fc&echo.&echo 第 %mb% 行已经存在 "%ma%"
ping -n 3 127.1>nul&goto :lp5
)
)
for /l %%a in (1 1 9) do (
if "%ma%"=="!%%a%mc%!" (
color fc&echo.&echo 第 %mc% 列已经存在 "%ma%"
ping -n 3 127.1>nul&goto :lp5
)
)
for /f "tokens=%mc%" %%a in ("!mor%mb%!") do (
set "mor%mb%=!mor%mb%:%%a=%ma%!"&set "%mb%%mc%=%ma%"
)
cls
echo %st%&echo.
for /l %%a in (1 1 9) do (echo %%a !mor%%a!)
for /l %%a in (1 1 9) do (if "!mor%%a!"=="!moniuming%%a!" (set /a right+=1))
if "%right%"=="9" (
call :lp6
set "right=0"&goto :again
)
set "right=0"
goto :lp4
:lp
for /l %%i in (1 1 9) do set ".!random!!random!!random!=%%i"
for /f "tokens=1,2 delims==" %%i in ('set .') do (set "str=%%j !str!"&set "%%i=")
for /l %%i in (1 1 9) do set "%1%%i="
set "var=%str%"&set/a lie=1,hx=1,hy=%1-1,lx=1,ly=3,a=%1%%3,dfc=1,line=1,num2=0,num3=0
if %1 geq 4 (
if %1 leq 6 (set/a hx=4) else (set hx=7)
)
:lp0
if %lie% geq 4 (
if %lie% leq 6 (set/a lx=4,ly=6) else (set/a lx=7,ly=9)
)
for %%a in (!var!) do (
for /l %%i in (1 1 %1) do (
if %%a equ !%%i%lie%! (set var=!var:%%a=!&goto lp0)
)
if %a% neq 1 (
for /l %%j in (%hx% 1 %hy%) do (
for /l %%k in (%lx% 1 %ly%) do (
if %%a equ !%%j%%k! set "var=!var:%%a=!"&goto lp0
)
)
)
set "%1!lie!=%%a"
if !lie! lss 9 (set/a lie+=1&set "str=!str:%%a=!"&set "var=!str!"&goto lp0)
)
set "str="&set "lie="
if "!%19!"=="" set/a ttl+=1&if !ttl! gtr 40 (set "ttl="&goto st) else goto lp
for /l %%i in (1 1 9) do (set "mor%1=!mor%1!!%1%%i! ")
set "ttl="&goto :eof
:lp6
echo.
for /l %%a in (1 1 40) do (
set "show=!echo_:~0,%%a!"
set /a "col1=!random!%%13","col2=!random!%%13"
if not "!col1!"=="!col2!" call color %%color_:~!col1!,1%%%%color_:~!col2!,1%%
set /p=!tui!!kong!!show!<nul
ping -n 1 127.1>nul
)
echo. [ Last edited by moniuming on 2008-8-30 at 12:28 AM ]
|
|
2008-8-29 19:08 |
|
|