有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 5602|回复: 59
收起左侧

[折腾] 读心术之原理与实现方法。。。

[复制链接]

签到天数: 3 天

连续签到: 1 天

[LV.2]偶尔看看I

1126

主题

319

好友

5万

积分

吃货

❤~(`・ω・´) 保【FSC】姆 (´・ω・`)~❤

积分
50565
发表于 2012-6-18 20:29:41 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 吃货呐冒个泡 于 2012-6-18 20:32 编辑

前几日,某君推荐玩一个游戏。为吉普赛人的读心术。记得小时候玩过,当时钦佩有加。当时只知道是一个数学游戏。一直不知道其中原理。下午,html5游戏博客,放出了一个demo。既然是web游戏,那么也就是程序,既然是程序,肯定会有其原理。然后就测试做了些试验。原理蕴含着最古老的数学原理。好像是质数和什么原理。含义就是,任何一个数减去其的位数相加之和为9的倍数。

游戏的地址为: http://lufy.netne.net/lufylegend ... ychology/index.html
如图 :

                               
登录/注册后可看大图


规则如图介绍。。。下面是其原理:

首先随机选取几个数。。。这里我选择了   35 ,62 ,74 ,92.。。。即图中的红色框框
通过规则方法,计算出来了 27 54 63 81 .。。。即图中的绿色框框

                               
登录/注册后可看大图



                               
登录/注册后可看大图


结果如上图:随机选取的这个五个数,尽管本身都是不同的图案,计算之后的结果也不一样。可是计算的结果的图案,却惊人的一样。。。
然后点击查看,猜得完美正确。
第二次做这个实验的时候,奇怪的是,图片已经换了一张,也就是重新排布了数字和图案。然后还是选取刚才的那五个数35 ,62 ,74 ,92  如图:

                               
登录/注册后可看大图


                               
登录/注册后可看大图


此时,虽然选取的数字没有变,可是图案都变了。然而 计算的结果仍然是一致的图案。

这里有两个推论。
其一,选取计算的结果,都指向是一个共同的图案。。
其二,计算出的数字,全部都是 9 的 倍数。。

这里还有一个问题,这么的数字,难道结果都指向一个图案嘛。。。猜想,如果都指向一个图案,那么最后计算出的数字,应该都符合上面 9 的倍数的原理。所以最后的计算结果应该是  9,18,27,36,54,3,72,81这些数字。当这些数字都指向一个图案,就无懈可击了。。。事实上结果验证了猜想。下图为所有可能的选择结果。。


                               
登录/注册后可看大图


按规则,能够选的数字可以分成 9 组。而每组计算的结果分别是 9 18 27 36 54 63 72 81 这些 9 的倍数,而这些数又都指向一个结果。。
因此,每次实验,无论选取什么,最后计算的都是一个图案。而这个图案,可以由计算机随机分配给 那几个 9的倍数。每次实验,就换一个结果。也就是第二次再选第一次的数字,也会改变。我之前觉得神奇,是以为那些数据表示一成不变。然后每次都选一个结果,应该不一样。
就像一个小魔术,给一堆牌,让你选一张。然后又给一堆牌,魔术师说已经把你选的牌猜出来,给挑出去了。事实上,魔术师把第一堆的所有牌都挑出去了。所以无论选哪张,都被魔术师挑走了。上面的游戏也大同小异,只是运用了数学原理。
知道原来之后,就是把逻辑变成程序

引用 开源的HTML5 游戏引擎 lufylegend.js。。。
下面是 js 代码:


<script type="text/javascript">init(10,"mylegend",480,700,main);var backLayer,titleLayer,selectLayer,showLayer,ballLayer,bitmap,loadingLayer,index;var imglist = {};var imgData = new Array({name:"img",path:"img.png"});function main(){        LGlobal.preventDefault = false;    backLayer = new LSprite();      addChild(backLayer);        showLayer = new LSprite();      showLayer.alpha = 0;    addChild(showLayer);        loadingLayer = new LoadingSample3();    backLayer.addChild(loadingLayer);       LLoadManage.load(        imgData,        function(progress){            loadingLayer.setProgress(progress);        },        function(result){            imglist = result;            backLayer.removeChild(loadingLayer);            loadingLayer = null;            gameInit();        }    );}function gameInit(){    var i=0,bitmapdata,lable,lx,ly,lindex,txtlist;    index = Math.floor(Math.random()*23);    titleLayer = new LSprite();    backLayer.addChild(titleLayer);    txtlist = ["读心术","任意选择一个两位数(或者说,从10~99之间任意选择一个数),","把这个数的十位与个位相加,再把任意选择的数减去这个和。","例如:你选的数是23,然后2+3=5,然后23-5=18。","在图表中找出与最后得出的数所相应的图形,然后点击水晶球。"];    for(i=0;i<txtlist.length;i++){        lable = new LTextField();        lable.color = "#000000";        lable.text = txtlist;        if (i == 0) {            lable.size = 35;            lable.x = (480 - lable.getWidth()) / 2;        }else{            lable.x = 10;            lable.y = 50 + (i-1)*20;        }        titleLayer.addChild(lable);    }    backLayer.graphics.drawRect(2,"#000000",[0, 0, 480, 700]);    selectLayer = new LSprite();    selectLayer.y = 150;    backLayer.addChild(selectLayer);    for(i=0;i<100;i++){        lx = i % 5;        ly = Math.floor(i/5);        lable = new LTextField();        lable.color = "#000000";        lable.weight = "bold";        lable.size = 15;        lable.text = i;        lable.x = lx*60;        lable.y = ly*26;        selectLayer.addChild(lable);        lindex=index;        if(i % 9 != 0){            while(lindex == index)lindex = Math.floor(Math.random()*23);        }        bitmap = new LBitmap(new LBitmapData(imglist["img"],lindex*26,0,26,26));        bitmap.x = lx*60 + 26;        bitmap.y = ly*26;        selectLayer.addChild(bitmap);    }    ballLayer = new LSprite();    var cx=400,cy=200,r=100;    var my_gradient= LGlobal.canvas.createRadialGradient(cx,cy,r*0.5,cx,cy,r*2);    my_gradient.addColorStop(0, "#cccccc");     my_gradient.addColorStop(1, "#0088ff");    ballLayer.graphics.drawArc(2,"#ffffff",[380, 200,80, 0,Math.PI*2],true,my_gradient);    selectLayer.addChild(ballLayer);    ballLayer.addEventListener(LMouseEvent.MOUSE_UP,toresult);}function toresult(){    if(backLayer.alpha < 1)return;    backLayer.die();    ballLayer = new LSprite();    ballLayer.graphics.drawArc(2,"#000000",[200, 200,80, 0,Math.PI*2]);    showLayer.addChild(ballLayer);    selectLayer = new LSprite();    selectLayer.graphics.drawRect(2,"#000000",[100, 300,200, 50],true,"#cccccc");    showLayer.addChild(selectLayer);    lable = new LTextField();    lable.color = "#000000";    lable.text = "再玩一遍";    lable.size = 20;    lable.x = 150;    lable.y = 310;    showLayer.addChild(lable);    bitmap = new LBitmap(new LBitmapData(imglist["img"],index*26,0,26,26));    bitmap.x = 160;    bitmap.y = 160;    bitmap.width = 90;    bitmap.height = 90;    showLayer.addChild(bitmap);    LTweenLite.to(showLayer,1,{alpha:1});    LTweenLite.to(backLayer,1,{alpha:0,onComplete:function(){        backLayer.removeAllChild();        showLayer.alpha = 1;    }});    selectLayer.addEventListener(LMouseEvent.MOUSE_UP,gamerestart);}function gamerestart(){    if(showLayer.alpha < 1)return;    showLayer.die();    gameInit();    LTweenLite.to(showLayer,1,{alpha:0});    LTweenLite.to(backLayer,1,{alpha:1,onComplete:function(){        showLayer.removeAllChild();        backLayer.alpha = 1;    }});}</script>

原帖地址:http://rsj217.diandian.com/post/2012-06-15/40028099855




                               
登录/注册后可看大图
屠版组

我们有神一般的手速
刷帖是我们毁灭世界的利器

签章 = ω =




签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

277

主题

311

好友

1万

积分

第一章

人形自走黑历史制造者(・ω・)/~

积分
17313
发表于 2012-6-18 21:49:04 | 显示全部楼层
这不科学。。
打卡穷三代,刷卡毁一生【笑
回复 支持 反对

使用道具 举报

该用户从未签到

29

主题

121

好友

2万

积分

第一章

积分
23801
发表于 2012-6-18 22:57:43 | 显示全部楼层
(⊙_⊙)  明天来玩!!
回复 支持 反对

使用道具 举报

该用户从未签到

302

主题

540

好友

21万

积分

版主

瘋紙

积分
213994
发表于 2012-6-20 11:11:13 | 显示全部楼层
... 不科学
变态骷髅有强迫症控制欲施虐症
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

11

好友

2764

积分

Continue

积分
2764
发表于 2012-6-21 00:07:36 | 显示全部楼层
嗷~读心术~~~~我要玩!!!!!!!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

156

主题

215

好友

5万

积分

第三章

(ノ)`ω´(ヾ)是个鸟

积分
52236
发表于 2012-7-20 06:01:14 | 显示全部楼层
  yes,,~
大部分回复通知已取消、有事可戳。
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

27

好友

6583

积分

序章

积分
6583
发表于 2012-7-24 16:37:32 | 显示全部楼层
嘛……去看看……
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

29

好友

1万

积分

第一章

积分
12672
发表于 2012-7-27 20:27:14 | 显示全部楼层
好厉害。。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

9

好友

4799

积分

序章

积分
4799
发表于 2012-7-27 20:40:02 | 显示全部楼层
要不要这么麻烦啊……
设十位数字为x,个位数字为y
则所选择的数字为10x+y
则图形的代码为10x+y - (x+y)=9x
必然为⑨的倍数
仔细看上列图形,所有⑨倍数的图像都一样
还观察个毛

点评

是的,观察个毛  发表于 2012-7-27 20:45
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

17

好友

3665

积分

序章

积分
3665
发表于 2012-7-27 21:28:32 | 显示全部楼层
这个读心术就是利用算法,形成心理误区~
不过也学了一招了,以后做个类似的去忽悠别人,O(∩_∩)O哈哈~~~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

19

主题

173

好友

3万

积分

第二章

积分
34919
发表于 2012-7-27 21:57:57 | 显示全部楼层
soga 于是原理还是不懂
只想来句这不科学><
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

21

好友

3万

积分

第二章

积分
33033
发表于 2012-7-27 22:10:10 | 显示全部楼层
用这个把妹子行不?
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

21

好友

7474

积分

序章

积分
7474
发表于 2012-8-27 14:28:28 | 显示全部楼层
这就是读心术??
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

59

好友

1万

积分

第一章

积分
12468
发表于 2012-8-27 17:29:25 | 显示全部楼层
- -可我小时候做的时候为啥它出来的和我想的都不一样。。。噗- -
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

13

主题

15

好友

1万

积分

第一章

积分
16296
发表于 2012-9-16 08:37:47 | 显示全部楼层
数学啊~~数学
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-5 14:15 , Processed in 0.290640 second(s), 42 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表