- UID
- 74000
- 在线时间
- 0 小时
- 最后登录
- 2018-5-1
- 注册时间
- 2012-3-7
- 宅魂
- 5393 点
- 贡献
- 6632 点
- 宅币
- 7890 枚
- 宅の石(入宅度)
- 0 块
- 元气(技能点)
- 128 点
- 活跃
- 9 ℃
- 听众
- 39
- 收听
- 12
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
吃货
❤~(`・ω・´) 保【FSC】姆 (´・ω・`)~❤
- 积分
- 50565
|
本帖最后由 吃货呐冒个泡 于 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
屠版组
我们有神一般的手速
刷帖是我们毁灭世界的利器
签章 = ω =
|
|