|
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
状态 离线
|
|
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 |
|
|
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 来自 重庆市
状态 离线
|
|
2006-12-21 08:56 |
|
|
jmz573515
银牌会员
积分 1212
发帖 464
注册 2006-12-13
状态 离线
|
|
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 |
|