游戏制作:猜数字算法(as2_0) - 闪吧教材
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
游戏制作:猜数字算法(as2.0) - 闪吧教材 首页 作品区作品区首页
上传Flash
最新作品
动画标签分类
统计排行
Flash专题
上传.管理
实验作品区
搜索
排行榜每周投票排行榜
往期排行榜
本月作品人气榜
今周作品人气榜
今日作品人气榜
网友作品评分榜
闪客闪客投票排行榜
闪客列表
闪客人气排行榜
闪客总投票排行榜
闪客新闻
小游戏最新小游戏
游戏推荐榜
游戏人气榜
游戏月榜
游戏周榜
游戏日榜
音乐MV音乐MTV视频
最新音乐动画
招聘招聘信息
发布招聘
新闻所有最新新闻
行业新闻
动漫新闻
闪客新闻
软件资讯
活动新闻
专业书讯
教材所有最新教材
Flash教学
Flash-问答专栏
Flash-初级操作
Flash-Action应用
Flash-实例教学
Flash-经验技巧
Flash-文字效果
Flash-特殊效果
Flash-特别应用
Flash-游戏制作
Flash-辅助软件
平面设计
3D技术
网页设计
多媒体
源文件最新源文件
统计排行
上传源文件
资源素材矢量图库
音源音效
闪吧字库
软件下载
酷站展示
闪吧电子杂志
FM综合音乐MTV视频
FM-音乐盒
MTV视频
FM-相册
FM-视频贺卡
FM-网络收藏夹
FM-天气预报(演示)
涂鸦开始涂鸦
推荐涂鸦
最新涂鸦
涂鸦排行榜
涂鸦高手榜
涂鸦精品展示
影像开始影像
推荐影像
最新影像
影像排行榜
影像高手榜
影像精品展示
博客闪吧space首页
我的space空间管理
最新博客推荐
个人空间-相册
个人空间-书签
家园 论坛FLASH技术交流
教材发布区
Action Script讨论区
RIA综合讨论区
Flash动画技术区
Flash游戏技术区
图形处理与视觉传达
手绘艺术与角色设计
Flash资源共享
视频后期动画专区
flash展示区
供求热线
Flash 3d 技术
网页设计与编程
精品WEB-SITE
比赛竞技场
情感空间
贴图园地
闪吧灌水区
闪吧电脑学校
闪吧站务管理
教材提供 教材区首页 最新教材列表 游戏制作:猜数字算法(as2.0)
作者:柯南 类型:原创 来源:
猜数字是我初中时在课堂上最喜欢玩的游戏....游戏平台嘛.....我的文曲星PC260........
这个游戏的规则比较简单,一般两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的
4位数,不能让猜得人知道。猜的人就可以开始猜。
每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。
接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。
次数限制
有的时候,这个游戏有猜测次数上的限制。根据计算机测算,这个游戏,如果以最严谨的计算,任何数字可以在7次之内猜出。而有些地方把次数限制为6次或更
少,则会导致有些数可能猜不出来。而有些地方考虑到人的逻辑思维难以达到计算机的那么严谨,故设置为8次甚至10次。也有的没有次数上的限制。
首先我们先来完成对游戏的实现,反过来再为游戏完成算法反猜...[游戏预览]
游戏的实现必没有什么难度,只是一些简单的算法而已,首先生成一个各不相同的四位数,可以向用一个项为0~9的数组,然后每次从数组里随机取出一个数字并删除该位置的数字,这样便可以保证四位数在各个位上互不相同..代码实现为:
view plaincopy to clipboardprint?
function getRandomNum()//生成四位不相同數字
{
var strArray = new Array(0,1,2,3,4,5,6,7,8,9);
var s="";
for(var i=0;i<4;i++)
{
s += strArray.splice(parseInt(strArray.length *Math.random()),1)
}
return s;
}
function chkSameNum(s)//檢查數字中是否有相同數字
{
for(var i=0;i
for(var j=i+1;j
if(s.substr(i,1) == s.substr(j,1))
{
return true;
}
}
}
return false;
}
完整代码可以进入游戏,通过右键,查看源文件得到。
刚实现了计算机出题,让我们猜,那可以让我们出题,让计算机来猜吗?当然可以,而且也可以验证一下计算机是不是都能在七次以内完成数字的猜测..首先先看一下算法的演示.[点进预览]
算法的原理,还是使用网上较为普遍的枚举排除法,因为原理简单,所以也较容易理解与实现.
从0~9随便取出四位组成一个互不相同的四位数,按照组合的算法,一共有10*9*8*7=5040个.也就是无论你想的是哪一个数,一定是在这
5040个里面.所以我们每一步就必须枚举出这5040个可能组合,并存于一个数组中,我们称这个数组为字典,我们的答案就存在这个字典里面,每一次我们
都从字典里取出一个来猜测,并排除一切不符合判断结果的项,从字典里删除,一直排除到只剩
一项的时候,就是我们的正确答案了.
我们可以先通过一个函数来检测这个四位数是否是各个位置上都不相同的.
var dictArray ;//当前可能枚举的数组
function chkSameNum(num)//检查数字中是否有相同的数字
{
num = parseInt(num,10);//保证如0123这样的数能够正确的被转化为10进制的数
var a=parseInt(num/1000)%10;
var b=parseInt(num/100)%10;
var c=parseInt(num/10)%10;
var d=parseInt(num)%10;
if(a==b || a==c || a==d || b==c || b==d || c==d) return true;
return false;
}
接着我们可以通过一个循环来存储整个初始枚举字典.
dictArray = new Array();
for(var i=123;i<=9876;i++)
{
if(!chkSameNum(i))
{
if(i<1000)dictArray.push("0"+i);
else dictArray.push(""+i);
}
}
对任何一个数的猜测,到底有多少种判断结果呢?我们先来罗列一下.
0A0B,0A1B,0A2B,0A3B,0A4B
1A0B,1A1B,1A2B,1A3B
2A0B,2A1B,2A2B
3A0B
4A0B
可以看到一共有十四种判断结果,注意,是不会有出现3A1B的情况的.我们可以将每一个判断用一个数字来表示.10位数表示A,个位数表示为B,则
任何一种判断可以表示为A*10+B
.chkScore函数是对随意的两个四位数进行比较,并返回比较的判断结果,如两个数的判断结果为40,也即4A0B,所以两个数为相同的数.
function chkScore(guessnum,textnum)
{
var a=0,b=0;
for(var i=0;i<4;i++)
{
for(var j=0;j<4;j++)
{
if(guessnum.substr(j,1)==textnum.substr(i,1))
{
if(i==j)a++;
else b++;
}
}
}
return a*10+b;
}
那么我们只要将每次猜测的数与字典里的每个数做比较得到判断结果,然后再独个的与用户输入的判断结果做比较,不相同的则从字典里删除,这样,只要多次猜测多次排除就可以得到一个唯一的结果,也即正确的结果.
for(var i=dictArray.length-1;i>=0;i--)
{
if(chkScore(guessnum,dictArray[i])!=score)
dictArray.splice(i,1);
}
完整的源码可以通过演示预览,并通过右键查看源文件得到...
在枚举所有可能值与第一次猜测的时候,需要花费很长的时间(大概在10S左右)导致假死状态,也关无法响应,其实这并不是算法太慢的问题,而是下拉列表要显示太多的选项而拖慢了..
责任编辑:silvia 时间:2008年7月2日 上一篇: ActionScript 3.0垃圾回收 相关教材 猜数字游戏--AS处女作
最近更新 在photoshop中制作火焰文字效果 新手必看:Photoshop 165条实操技 PHOTOSHOP CS4跨越3D之门
Flash片头加载loading的基础讨论 Illustrator CS3绘制矢量荷花插画 层叠加的五条叠加法则 Bitmap特效:被风吹散
闪刀浪子教你利用JSFL制作swf素材 AS3将字体转矢量图形 AS 2.0实例教程:加载进度条之一遮 Photoshop鼠绘教程:绘制一块逼真
Dreamweaver CS3中的CSS布局规则 Fireworks教程:制作超级光线水晶 CorelDraw教程:
灵活使用蒙板技术 Flash
cs3教程:仿真艺术设计2.4-- 查看所有评论关于我们 联系我们 商业服务 合作伙伴 站点地图 免责声明 版权声明 报告错误