批处理之家's Archiver

wangshuping42 发表于 2011-4-25 17:25

批处理小游戏:猜数字

[i=s] 本帖最后由 wangshuping42 于 2011-4-25 17:29 编辑 [/i]

囧,原创区发不了,没权限。发到这里来,算是转载自己的,哈哈[code]
@echo off&title 猜数字游戏 QQ:137563876
mode con: cols=55 lines=40
for %%i in (n m r a0 a1 a2 a3 a4 a5 a6 a7 a8 a9) do (set %%i=0)
setlocal enabledelayedexpansion

echo ┌─────────────────────┐
echo │               规则说明                   │
echo └─────────────────────┘
echo │首先,本程序在打开时会自动使用0~9这10个数 │
echo  ──────────────────────
echo │生成一个随机的4位数,且每个数字只使用 1 次│
echo  ──────────────────────
echo │,这个数是不会显示出来的。在你输入一个4 位│
echo  ──────────────────────
echo │数之后,系统会自动将它与系统初始生成的随机│
echo  ──────────────────────
echo │4 位数相比较。在个、十、百、千位上,每猜中│
echo  ──────────────────────
echo │一位,正确数加1;若猜中数字,但数字所在位 │
echo  ──────────────────────
echo │不对(即数字顺序不对),则位置错误数加1。 │
echo  ──────────────────────
echo │你猜测的历史记录将会显示在列表中 ,你可以 │
echo  ──────────────────────
echo │根据你的猜测记录来推测正确的数字。        │
echo  ──────────────────────
echo │注意:你不能输入含重复数字的4位数。       │
echo  ──────────────────────
echo │     准备好了吗?按任意键开始游戏!!     │
echo └─────────────────────┘
pause>nul
cls
set "f=┌───────────────────────┐"
set "h=│猜测记录│     数字     │  正确  │ 顺序错误 │"
set "i= ────────────────────────"
echo %f%&echo %h%&echo %i%


::随机生成数字不重复的4位数
set u=1
set num0=10
:again
set /a num%u%=%random%%%10
set /a v=u-1
for /l %%i in (1 1 %v%) do (if !num%%i!==!num%u%! goto :again)
if %u% lss 4 set /a u+=1&goto :again
set ans=%num1%%num2%%num3%%num4%

::计算随机数字中0~9每个数字的个数
for /l %%i in (0 1 9) do (
        for %%j in (%num1% %num2% %num3% %num4%) do (
         if %%j==%%i set /a a%%i=a%%i+1
        )
)

::输入猜测数并获取每个位上的数
:input
set t=1
set ent=
set /p "ent=│输入你猜测的有效4位数(超过则截取前4位):"
set "t4=%ent:~3,1%"
if not defined t4 goto :input
set "t1=%ent:~0,1%"
set "t2=%ent:~1,1%"
set "t3=%ent:~2,1%"

::检测输入是否正确(是否有重复数字、输入的是否全是数字)
for /l %%i in (1 1 3) do (
        set /a ii=%%i+1
          for /l %%j in (!ii! 1 4) do (
             if "!t%%i!"=="!t%%j!" goto :input
        )
)
:te
set "t0=!t%t%!"
for /l %%i in (0 1 9) do (if "%t0%"=="%%i" set wr=true)
if defined wr (set /a t+=1) else (goto :input)
set wr=
if %t% lss 5 goto :te
set /a num0-=1


::计算猜对个数
cls
for /l %%i in (1 1 4) do (
          for /l %%j in (%%i 1 %%i) do (
             if "!t%%i!"=="!num%%j!" set /a n+=1
        )
)

::计算输入数字中0~9每个数字的个数
for /l %%i in (0 1 9) do (
        for %%j in (%t1% %t2% %t3% %t4%) do (
         if %%j==%%i (set /a b%%i=b%%i+1)
        )
)

::计算位置错误个数
for /l %%i in (0 1 9) do (
        if !a%%i! gtr 0 (if !b%%i! gtr 0 (set /a m=m+!a%%i!))
)
set /a g=%m%-%n%

::输出猜测记录
set /a r+=1
set /a s=r
if %r% lss 10 set "s=0%r%"
set r%r%=│ 第%s%组 │    %t1% %t2% %t3% %t4%   │   %n%    │     %g%    │
echo %f%
echo %h%
echo %i%
for /l %%i in (1 1 %r%) do (echo !r%%i!&echo %i%)
for %%i in (m n g b0 b1 b2 b3 b4 b5 b6 b7 b8 b9) do (set %%i=0)
if "%ans%"=="%ent%" set zz=      猜对啦,你好厉害哦!!!!   &goto :right
if "%num0%"=="0" set zz=还猜不对啊?笨哪!正确答案是:%ans% &goto :right
goto :input

:right
echo ┌───────────────────────┐
echo │     %zz%      │
echo └───────────────────────┘
pause>nul

[/code]

wangshuping42 发表于 2011-4-25 17:33

貌似贴代码有时候空格会被吃掉,以防万一贴个txt上来

batman 发表于 2011-4-25 19:04

楼主先看看这个贴子:
[url]http://www.bathome.net/viewthread.php?tid=11827&highlight=%CE%C4%C7%FA%D0%C7[/url]

ppmath 发表于 2011-5-24 17:51

蛮好玩的,吸血楼主。

wangxiulin 发表于 2011-7-17 22:10

一样都是没权限~

web 发表于 2012-10-15 22:23

头疼的无聊

狱渊 发表于 2013-4-20 13:10

我不会玩啊

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.