js做拼图游戏存在随机生成的图形,有时不可还原的问题
2011-06-30 15:04
477 查看
本人最近忽然心血来潮,想做个个简单的游戏,做什么游戏比较简单易实现呢,偶然想起小时候玩的拼图游戏,索性做一个玩玩,结果很快就做出来的一个,思想是控制每个小图的id,通过交换id来来实现图片移动,具体代码如下:
所以接下来修改了哈js随机数组:
function confuseArray1(array){
var arrlength=array.length;//获取数组长度
var tmparr;
var tmparray= new Array;
for(var i=0;i<arrlength;i++){
var tid1 = parseInt(array.length*Math.random());//获取从0到数组长度的随机值
var tid2 = parseInt(array.length*Math.random());//获取从0到数组长度的随机值
while(tid1==tid2)
{tid2 = parseInt(array.length*Math.random());}//不能交换同一个数
tmparr = array[tid1];//交换数组
array[tid1] = array[tid2];
array[tid2] = tmparr;
}
return array;
};
这样做的目的就是随机的交换图片偶数次,这样就可以了,而且试了多次每次都可以拼图成功....
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Zcolor-comevc</title> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript"> function confuseArray1(array){//生成随机图片 var arrlength=array.length;//获取数组长度 var tmparr; var tmparray= new Array; for(var i=0;i<arrlength;i++){ var tid1 = parseInt(array.length*Math.random());//获取从0到数组长度的随机值 tmparr = array[tid]; array[tid] = array[arrlength-1]; array[arrlength-1] = tmparr; array.pop();//数组将最后一个值也就是选中的值消掉,防止重复 tmparray.push(tmparr); } return tmparray; }; </script> <script type="text/javascript"> $(document).ready(function(){ var id; var value1=9; var value2; id="item9";//默认第九个图片为空白 var flag=false; var array=new Array("item1","item2","item3","item4","item5","item6","item7","item8")//把前8个小图的id装进数组 array=confuseArray1(array);//产生随机id var i=0; $('li').each(function(){ if(i<8) $(this).find('a').attr('id',array[i]); i++; }); $("li").click(function(){ //判断当前对象是否临近空白图片,因为是每3个图片为一行,总共9个小图区域,所以相对位置差是1、3才可以移动(假如换行了位置差还是1的还要做判断) value2=$('li').index($(this))+1; switch(value2) { case value1-1: if (value2%3!=0) {flag=true;} else{flag=false;} break; case value1+1: if (value1%3!=0) {flag=true;} else{flag=false;} break; case value1+3: flag=true; break; case value1-3: flag=true; break; default : flag=false; break; } if(flag)//根据上面的判断,如果可以移动则交换位置(交换id而已) { var a=$(this).find('a').attr('id'); id1="#"+id; $(id1).attr('id',a); $(this).find('a').attr('id',id); value1=value2; } }); }) </script> <style> ul { width:300px; height:300px; margin:0px auto; padding:0px; overflow:hidden; background:transparent url(image/menu_color.jpg); border:1px solid #F0F;} li {list-style-type:none; width:100px; height:100px; float:left} li a{ display:block; width:100px; height:100px; text-decoration:none; background:transparent url(image/menu_color.jpg) no-repeat 500px 500px; cursor:pointer;} a#item1{background-position: 0 0; } a#item2 {background-position: -100px 0;} a#item3 {background-position: -200px 0;} a#item4{background-position: 0 -100px;} a#item5 {background-position: -100px -100px;} a#item6 {background-position: -200px -100px;} a#item7 {background-position: 0 -200px;} a#item8 {background-position: -100px -200px;} a#item9 {background-color:#fff;} </style> </head> </head> <body> <div id="main"> <ul> <li><a id="item1" title="Item 1"> </a></li> <li><a id="item2" title="Item 2"> </a></li> <li><a id="item3" title="Item 3"> </a></li> <li><a id="item4" title="Item 4"> </a></li> <li><a id="item5" title="Item 5"> </a></li> <li><a id="item6" title="Item 6"> </a></li> <li><a id="item7" title="Item 7"> </a></li> <li><a id="item8" title="Item 8"> </a></li> <li><a id="item9" title="Item 9" > </a></li> </ul> </div> </html>效果是出来了,可以拼图游戏了,但是还没结束,发现通过随机生成的图形,并不能每次都能拼图成功,有时候拼到最后,发现始终剩下两张相邻的小图是错位的,怎么移动也不能还原,这就引发了问题!——假如随机导致的最后结果是一对相邻图片错位,是不能拼图成功的,如果是两对图片错位就可以,所以必须是偶数对才能拼成功!
所以接下来修改了哈js随机数组:
function confuseArray1(array){
var arrlength=array.length;//获取数组长度
var tmparr;
var tmparray= new Array;
for(var i=0;i<arrlength;i++){
var tid1 = parseInt(array.length*Math.random());//获取从0到数组长度的随机值
var tid2 = parseInt(array.length*Math.random());//获取从0到数组长度的随机值
while(tid1==tid2)
{tid2 = parseInt(array.length*Math.random());}//不能交换同一个数
tmparr = array[tid1];//交换数组
array[tid1] = array[tid2];
array[tid2] = tmparr;
}
return array;
};
这样做的目的就是随机的交换图片偶数次,这样就可以了,而且试了多次每次都可以拼图成功....
相关文章推荐
- 渣渣用JavaScript开发的消消乐,由于没有按照正规消消乐形式生成,是随机产生图形,所以存在一个算法bug,具体看下面,高手想到可以告诉我
- js 生成随机汉字的问题
- js 生成随机汉字的问题
- JS动态生成界面中存在的问题!
- 解决cocos2d-js集成到ios原生应用中退出游戏,再加载游戏时会奔溃的问题
- JAVA 小功能 随机生成图形验证码
- 关于“搭桥”游戏生成随机地图的设计思路
- js随机生成hex色值
- 浏览器解析js生成的html出现的样式问题
- VB----随机生成一个不同种类的图形
- js随机生成姓名、手机号、身份证号、银行卡号【实现代码】
- js随机生成颜色代码
- 浏览器解析js生成的html出现样式问题的解决方法
- JS生成随机字符串的多种方法
- python程序1(生成可重复或不可重复随机字符串、生成多个文件夹和文件,并将生成的字符串写入文件中)
- JS随机生成密码
- js生成input file并调用click问题
- MOCK.JS 生成随机数据,拦截 Ajax 请求
- js随机生成4位验证码
- 你不可错过的二维码生成与解析-java后台与前端js都有