中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [趣味游戏]神奇读心术批处理版
« [1] [2] [3] »
作者:
标题: [趣味游戏]神奇读心术批处理版 上一主题 | 下一主题
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『楼 主』:  [趣味游戏]神奇读心术批处理版

  以前9527曾在群里发过吉普赛人祖传的神奇读心术的网址,它能测算出你的内心感应。当时为它的神准所震慑,只觉得自己内心所想全被一股神秘的力量所洞悉。后来转念一想,网络非神物,一定有什么技巧隐藏在里面,一时兴起,稍加推演,找到了原因所在——原来所谓的读心术,只不过如魔术一般,使用的是障眼法而已。

  昨天在群里,又旧事重提,于是有了写个批处理版读心术的念头。12.3抽空写了个代码(版本一),张贴如下,各位可以抱着测试的态度先玩几次,玩过之后再想原理,想不通再看代码(版本二由版本一演变而来):

  版本一:
@echo off
:: code by jm modified by youxi01 2006-12-3 CMD@XP
title 读心术P处理版
mode con cols=80 lines=25

:begin
cls
setlocal enabledelayedexpansion
set str=☆★○●◎◇◆□■△▲※→←↑↓〓@〖〗【】『』≈≡∑∈⊙∵∴¤
for /l %%i in (0,1,99) do (
    set /a random_=!random!%%32
    call set var%%i=%%str:~!random_!,1%%
)
echo.
echo      99 %var99%  79 %var79%  59 %var59%  39 %var39%  19 %var19%    ^|    ① 从10~99之间任意选择一个数
echo      98 %var98%  78 %var78%  58 %var58%  38 %var38%  18 %var81%    ^|
echo      97 %var97%  77 %var77%  57 %var57%  37 %var37%  17 %var17%    ^|    ② 把这个数的十位与个位相加
echo      96 %var96%  76 %var76%  56 %var56%  36 %var81%  16 %var16%    ^|
echo      95 %var95%  75 %var75%  55 %var55%  35 %var35%  15 %var15%    ^|    ③ 再把任意选择的数减去这个和
echo      94 %var94%  74 %var74%  54 %var81%  34 %var34%  14 %var14%    ^|
echo      93 %var93%  73 %var73%  53 %var53%  33 %var33%  13 %var13%    ^|      例如:你选的数是23
echo      92 %var92%  72 %var81%  52 %var52%  32 %var32%  12 %var12%    ^|
echo      91 %var91%  71 %var71%  51 %var51%  31 %var31%  11 %var11%    ^|      然后2+3=5,然后23-5=18
echo      90 %var90%  70 %var70%  50 %var50%  30 %var30%  10 %var10%    ^|
echo      89 %var89%  69 %var69%  49 %var49%  29 %var29%   9 %var81%    ^|    ④ 在图表中找出与差值对应的图形
echo      88 %var88%  68 %var68%  48 %var48%  28 %var28%   8 %var8%    ^|
echo      87 %var87%  67 %var67%  47 %var47%  27 %var81%   7 %var7%    ^|     并把这个图形牢记心中
echo      86 %var86%  66 %var66%  46 %var46%  26 %var26%   6 %var6%    ^|
echo      85 %var85%  65 %var65%  45 %var81%  25 %var25%   5 %var5%    ^|   ⑤ 然后进入下一步
echo      84 %var84%  64 %var64%  44 %var44%  24 %var24%   4 %var4%    ^|
echo      83 %var83%  63 %var81%  43 %var43%  23 %var23%   3 %var3%    ^|   ⑥ 你会发现:显示出来的图形
echo      82 %var82%  62 %var62%  42 %var42%  22 %var22%   2 %var2%    ^|
echo      81 %var81%  61 %var61%  41 %var41%  21 %var21%   1 %var1%    ^|     就是你刚刚心里记下的那个图形
echo      80 %var80%  60 %var60%  40 %var40%  20 %var20%   0 %var0%    ^|
echo                                           ^|
echo _______________________________________________________________________________
echo                               按任意键进入下一步...
pause>nul
cls
for /l %%i in (1,1,9) do echo.
echo                 通过心灵感应,发现这个图形正是你所想的:%var81%
for /l %%i in (1,1,9) do echo.
echo.
echo.
echo                                               按任意键再来一次...
pause>nul
goto begin


pause>nul
goto begin
  版本二:
@echo off
title 读心术P处理版

:begin
mode con cols=90 lines=30
cls
echo.
echo   从10~99之间任意选择一个数,把这个数的十位与个位相加,再把任意选择的数减去这个和,
echo 例如:你选的数是23,然后2+3=5,然后23-5=18,在图表中找出与差值对应的符号,并把这个符号
echo 牢记心中,然后进入下一步,你会发现:显示出来的符号就是你刚刚心里记下的那个符号。
echo.
echo _________________________________________________________________________________________
echo.

set str=☆★○●◎◇◆□■△▲※→←↑↓〓@〖〗【】『』≈≡∑∈⊙∵∴¤
set begin_num=9
set end_num=1
set num=0
setlocal enabledelayedexpansion

:loop
for /l %%i in (9,-1,0) do (
    for /l %%j in (%begin_num%,-2,%end_num%) do (
        set /a num+=1
        set /a random_=!random!%%32
        set /a ordinal=1%%j%%i-100
        if !ordinal! lss 10 set ordinal= !ordinal!
        call set var!ordinal!=%%str:~!random_!,1%%
        set /a ordinal_mod=!ordinal!%%9
        if !num! gtr 1 if !num! lss 100 if !ordinal_mod! equ 0 set var!ordinal!=!var18!
        set /a line_mod=!num!%%5
        call set var=!var! !ordinal! %%var!ordinal!%%
        if !line_mod! equ 0 echo                        !var!&set var=
    )
)
if %num% equ 100 goto end
if %num% equ 50 (
    set begin_num=8
    set end_num=0
    goto loop
)

:end
echo _________________________________________________________________________________________
echo                                                                    按任意键进入下一步...
pause>nul
cls
mode con cols=25 lines=10
echo.
echo      你想要的符号是:
echo        ╭────╮
echo        │        │   
echo        │   %var18%   │
echo        │        │
echo        ╰────╯
echo.
echo   按任意键再来一次...
pause>nul
goto begin
  点这里可以在网上玩flash版的神奇读心术

[ Last edited by namejm on 2006-12-21 at 05:59 PM ]

   此帖被 +12 点积分        点击查看详情   
评分人:【 redtek 分数: +9  时间:2006-12-4 10:53
评分人:【 weapfe 分数: +1  时间:2006-12-5 02:15
评分人:【 jmz573515 分数: +2  时间:2006-12-21 09:58




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-4 10:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

不仅代码好玩,而且这界面做得真漂亮啊!!!



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-4 10:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  界面排版稍微具备一点美观性,但是距离漂亮还有一段距离,redtek 兄谬赞了。本来还想加点动态色彩的,但是没想好做成什么样子的,暂时搁置起来了。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-4 10:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 4 楼』:  

TO namejm斑竹:
     一事不明,为什么要将获得var%%i的值写成一个“函数”,然后call呢?
for /l %%i in (0,1,99) do (
    set num=%%i
    call :get_num
)

call的使用,不是会使运行效率大大打折吗?
将for语句改一改,测试代码:
for /l %%i in (0,1,99) do (
    set /a random_=%random%%%32
    set var%num%=!str:~%random_%,1!
)
是不是要快很多啊?

2006-12-4 11:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

Re youxi01:

  像你那样修改是要出错的,因为在 for 语句内部,如果本次循环中,后面的语句要调用前面语句产生的变量,一般是要启用变量延迟的。如果修改成你那样的语句,则 %random_% 的值始终为空,并非上一句所产生的值。如果用感叹号对的形式,就会写成 set var%num%=!str:~!random_!,1! 的格式,程序无法正确识别引用范围,同样会出错。

  基于上面的原因,我就 call 了段“函数”来绕过这个问题,暂时还没考虑到效率的问题。如果你有更好的解决办法,不妨发出来看看。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-4 11:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 6 楼』:  

call会让效率大大打折吗?不太清楚.
谁以后可以做做试验!

既然用了环境变量延迟倒是可以放里面
for /l %%i in (0,1,99) do (
set /a random_=!random!%%32
call set var%%i=%%str:~!random_!,1%%
)
打错了....

[ Last edited by tao0610 on 2006-12-4 at 12:15 PM ]




认识自己,降伏自己,改变自己
,才能改变别人!
2006-12-4 12:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 7 楼』:  

不好意思,我也看错了,不过以下代码还真的可能快那么一点):(代码同上楼)
@echo off
title 读心术P处理版
mode con cols=80 lines=25

:begin
cls
setlocal enabledelayedexpansion
set str=☆★○●◎◇◆□■△▲※→←↑↓〓@〖〗【】『』≈≡∑∈⊙∵∴¤
for /l %%i in (0,1,99) do (
    set /a random_=!random!%%32
    call set var%%i=%%str:~!random_!,1%%
)
echo.
echo      99 %var99%  79 %var79%  59 %var59%  39 %var39%  19 %var19%    ^|    ① 从10~99之间任意选择一个数
echo      98 %var98%  78 %var78%  58 %var58%  38 %var38%  18 %var81%    ^|
echo      97 %var97%  77 %var77%  57 %var57%  37 %var37%  17 %var17%    ^|    ② 把这个数的十位与个位相加
echo      96 %var96%  76 %var76%  56 %var56%  36 %var81%  16 %var16%    ^|
echo      95 %var95%  75 %var75%  55 %var55%  35 %var35%  15 %var15%    ^|    ③ 再把任意选择的数减去这个和
echo      94 %var94%  74 %var74%  54 %var81%  34 %var34%  14 %var14%    ^|
echo      93 %var93%  73 %var73%  53 %var53%  33 %var33%  13 %var13%    ^|      例如:你选的数是23
echo      92 %var92%  72 %var81%  52 %var52%  32 %var32%  12 %var12%    ^|
echo      91 %var91%  71 %var71%  51 %var51%  31 %var31%  11 %var11%    ^|      然后2+3=5,然后23-5=18
echo      90 %var90%  70 %var70%  50 %var50%  30 %var30%  10 %var10%    ^|
echo      89 %var89%  69 %var69%  49 %var49%  29 %var29%   9 %var81%    ^|    ④ 在图表中找出与差值对应的图形
echo      88 %var88%  68 %var68%  48 %var48%  28 %var28%   8 %var8%    ^|
echo      87 %var87%  67 %var67%  47 %var47%  27 %var81%   7 %var7%    ^|     并把这个图形牢记心中
echo      86 %var86%  66 %var66%  46 %var46%  26 %var26%   6 %var6%    ^|
echo      85 %var85%  65 %var65%  45 %var81%  25 %var25%   5 %var5%    ^|   ⑤ 然后进入下一步
echo      84 %var84%  64 %var64%  44 %var44%  24 %var24%   4 %var4%    ^|
echo      83 %var83%  63 %var81%  43 %var43%  23 %var23%   3 %var3%    ^|   ⑥ 你会发现:显示出来的图形
echo      82 %var82%  62 %var62%  42 %var42%  22 %var22%   2 %var2%    ^|
echo      81 %var81%  61 %var61%  41 %var41%  21 %var21%   1 %var1%    ^|     就是你刚刚心里记下的那个图形
echo      80 %var80%  60 %var60%  40 %var40%  20 %var20%   0 %var0%    ^|
echo                                           ^|
echo _______________________________________________________________________________
echo                               按任意键进入下一步...
pause>nul
cls
for /l %%i in (1,1,9) do echo.
echo                 通过心灵感应,发现这个图形正是你所想的:%var81%
for /l %%i in (1,1,9) do echo.
echo.
echo.
echo                                               按任意键再来一次...
pause>nul
goto begin


pause>nul
goto begin


2006-12-4 12:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


  一个字,强~


2006-12-4 13:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 9 楼』:  

NB




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-12-5 01:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
weapfe
初级用户




积分 144
发帖 66
注册 2006-11-30
状态 离线
『第 10 楼』:  

看不懂楼主和youxi01兄的
set /a random_=!random!%%32
中的"%%32"是什么意思,不知能否教一下小弟....学飞中~~~~

2006-12-5 02:12
查看资料  发送邮件  发短消息 网志  OICQ (261372684)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 11 楼』:  

我还是没有发现那个是怎么算出来的

2006-12-5 04:33
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 12 楼』:  

  呵呵,我们一起来做个算术题:假设一个两位数,个位和十位分别为x和y,那么,按照读心术的规则,就是 x+10y-(x+y),结果为9x。在那张随机表上,只要确保9的倍数后面跟的图形是同一个东西就行了。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-5 04:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
CHINAWY0007
初级用户





积分 40
发帖 18
注册 2006-12-20
来自 重庆市
状态 离线
『第 13 楼』:  

不得不顶.实在太妙了.

2006-12-21 08:56
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (403739168)  编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 14 楼』:  

真是好东西,高手!

2006-12-21 09:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hxuan999
中级用户

DOS之日


积分 337
发帖 161
注册 2006-11-4
状态 离线
『第 15 楼』:  

领会一下



for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
2006-12-21 11:26
查看资料  发送邮件  发短消息 网志  OICQ (33899867)  编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: