中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]批处理再现文曲星上猜字游戏
作者:
标题: [原创]批处理再现文曲星上猜字游戏 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  [原创]批处理再现文曲星上猜字游戏

实际上也是来潮于批处理之家一位兄弟的问题,代码是百分之百的原创,原贴见
http://bbs.bathome.cn/viewthread.php?tid=1083&extra=page%3D1
@echo off&color 1f&mode con cols=55 lines=30
setlocal enabledelayedexpansion
title 猜数字游戏 by zw19750516
echo.&echo.
echo.&echo               ***** 游戏规则 *****
echo.&echo    程序会自动生成一组四个互不相同的0-9内的整数,
echo.&echo    请你根据猜测和判断,每次输入一组四个互不相同
echo.&echo    0-9内的整数,中间请用空格格开,如:1 2 3 4,
echo.&echo    程序会将你每次输入的数组与其生成的数组进行比
echo.&echo    较,并将比较的结果输出屏幕上以帮助你进一步的
echo.&echo    判断,直到你所输入的数组与其生成的数组的数值
echo.&echo    和次序完全相同,或你已用完了所有的猜测机会。
echo.&echo    如果你已经看懂了规则,请按任意键开始本次游戏。
set var=A&pause>nul
:begin
set /a a=%random%%%10
for %%a in (%var%) do if %%a equ %a% goto begin
set var=%var% %a%
if "%var:~8%" equ "" goto begin
set var=%var:~2%&set m=0
:again
set /a n=0,v=0,ws=0,s=0,t=10-m
if %t% equ 0 goto end
cls&echo.&echo    请注意你总共只有10次机会,现在还剩下%t%次机会
if "%m%" neq "0" for /l %%i in (1,1,%m%) do echo.&echo !_%%i!
set codes=A
echo.&set /p code=   请在此输入:
echo %code: =%|findstr "[^0-9]"&&goto wrong
for %%a in (%code%) do (
    for %%i in (!codes!) do if %%i equ %%a goto wrong
    set codes=!codes! %%a
    set /a n+=1
)
if %n% neq 4 goto wrong
set codes=%codes:~2%
for %%i in (%codes%) do (
    set str=%%i
    if "!str:~1!" neq "" goto wrong
)
for %%a in (%var%) do (
    set /a v+=1,x=0
    for %%i in (%codes%) do (
        set /a x+=1
        if %%a equ %%i if !x! equ !v! (
           set /a ws+=1,s+=1
           ) else (
           set /a s+=1
        )
    )
)
set /a m+=1
if "%var%" equ "%codes%" goto suc
set _%m%=  %codes%中数值正确的有%s%个,其中位置数值都正确的有%ws%个&goto again
:wrong
cls
echo.&echo     所输入的非合法十进制整数,或数值不合要求,
echo.&echo     或有重复数,或输入的数值个数不是4个。
ping /n 2 127.1>nul&goto again
:suc
if %m% equ 1 cls&echo.&echo   不会吧,1次就搞定了,你是不是神仙下凡啊?&goto select
if %m% leq 3 cls&echo.&echo   你真是聪明绝顶啊,只用%m%次就猜中了。&goto select
if %m% leq 5 cls&echo.&echo   看来你还是很厉害,用了%m%次就猜中了。&goto select
if %m% leq 9 cls&echo.&echo   呵呵,猜了%m%次,勉强过关了。&goto select
if %m% equ 10 cls&echo.&echo   你太精明了,硬是把机会给用完成功过关。
:select
ping /n 3 127.1>nul
cls&echo.&set select=&set /p select=  是否再来一次(是就输入y/Y,其它任意键退出):
if /i "%select%" equ "y" (goto begin) else (goto exit)
:end
cls&echo.&echo   对不起你已经用完了所有的机会了。正确答案是%var%&goto select
:exit
ping /n 3 127.1>nul




批处理之家新域名:www.bathome.net
2008-6-20 13:18
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复

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


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



论坛跳转: