美文网首页
jq实现简单的九宫格拼图

jq实现简单的九宫格拼图

作者: 张晓懒_ | 来源:发表于2017-09-23 21:32 被阅读0次

效果图,点击开始图片打乱顺序,点击图片换位置

下面是代码,刚入门不久的小白,记录一下自己的成长历程


//用数字保存大div也就是#game中的9小格子所在的位置,0表示没有格子;

//为了逻辑简单点,所有的数组第一个位置没有内容。

var d = [,1,2,3,4,5,6,7,8,0];

//用二维数组放每个位置上的小格子可以移动的位置;

var direiton =[

,

[2,4],

[1,3,5],

[2,6],

[1,5,7],

[2,4,6,8],

[3,5,9],

[4,8],

[5,7,9],

[6,8]

]

// 用二维数组放大div中9个位置对应定位的坐标

var posxy = [

,

[0,0],

[150,0],

[300,0],

[0,150],

[150,150],

[300,150],

[0,300],

[150,300],

[300,300]

]

//设置开始按钮的标志位,当游洗开始了之后不可以在点击

var pause=true;

$('#start').click(function () {

//遍历小格子给他们加点击事件

$('p').each(function (index) {

$(this).click(function () {

move(index+1);

//调用move函数,index加1,表示当前点击的格子的位置

});

});

if (pause) {

//点击开始按钮,打乱图片顺序

restart();

//让标志位变为false,此时开始按钮不能点击

pause=false;

}

});

//重新开始按钮可以让游戏重新开始

$('#restart').click(function () {

restart();

})

//设置move函数,点击时让格子移动位置

function move(num) {

//用for循环遍历格子,确认我们点击的格子的标号

for(var j=1;j<9;j++){

if (d[j]==num) {

console.log(d[j]);

break;

}

}

//调用去哪函数判断我们当前点击的格子是否可以移动,如果可以变移动

var target_d = canwhere(j);

//target_d变量保存了canwhere函数的结果

if (target_d!=0) {

//如果不为0,则表示当前点击的格子可以移动到target_d这个位置去。

$('#d'+num).css({left:posxy[target_d][0],top:posxy[target_d][1]});

//通过id选中格子让他的定位坐标等于target_d的定位坐标

d[j]=0;

//因为点击的格子已经移走,则让该位置保存的数值变为0,表示没有格子

d[target_d]=num;

//让target_d位置编号则变为当前移动的格子标号

}

//判断是否拼图完整

var finish_flag = true;

//当所有的格子都按顺序排好,则完成拼图

for (var k = 0; k < 9; k++) {

if (d[k]!=k) {

finish_flag = false;

break;

}

}

if (finish_flag) {

alert('完成拼图');

}

}

//格子可以移动的位置的函数

function canwhere(j) {

var move_flag;//设格子是否可以移动的标志位

for (var i = 0; i < direiton[j].length; i++) {

//遍历点击格子可去的位置是否为空,这些位置在数组d中保存的值是否为0,如果为0则表示这个位置是空的;

if (d[direiton[j][i]]==0) {

//设置标志位为true;

move_flag = true;

break;

//跳出循环

}

}

if (move_flag) {

//如果move_flag,返出格子可以移动的位置。

return direiton[j][i];

}else {

//否则返回0;

move_flag = false;

return 0;

}

}

//打乱图片顺序

function restart() {

//从第9张图片开始,通过随机数产生一个随机位置,与该图片换位置

for (var m = 9; m>1; m--) {

var rand = parseInt(Math.random()*(m-1)+1);

// console.log(rand);

if (d[m]!=0) {

$('#d'+ d[m]).css({left:posxy[rand][0],top:posxy[rand][1]});

}

if (d[rand]!=0) {

$('#d'+ d[rand]).css({left:posxy[m][0],top:posxy[m][1]});

}

var tem=d[m];

d[m]=d[rand];

d[rand]=tem;

}

}张晶晶 21:26:38

1

2

3

4

5

6

7

8

开始

再来一局

//用数字保存大div也就是#game中的9小格子所在的位置,0表示没有格子;

var d = [,1,2,3,4,5,6,7,8,0];

//用二维数组放每个位置上的小格子可以移动的位置;

var direiton =[

,

[2,4],

[1,3,5],

[2,6],

[1,5,7],

[2,4,6,8],

[3,5,9],

[4,8],

[5,7,9],

[6,8]

]

// 用二维数组放大div中9个位置对应定位的坐标

var posxy = [

,

[0,0],

[150,0],

[300,0],

[0,150],

[150,150],

[300,150],

[0,300],

[150,300],

[300,300]

]

//设置开始按钮的标志位,当游洗开始了之后不可以在点击

var pause=true;

$('#start').click(function () {

//遍历小格子给他们加点击事件

$('p').each(function (index) {

$(this).click(function () {

move(index+1);

//调用move函数,index加1,表示当前点击的格子的位置

});

});

if (pause) {

//点击开始按钮,打乱图片顺序

restart();

//让标志位变为false,此时开始按钮不能点击

pause=false;

}

});

//重新开始按钮可以让游戏重新开始

$('#restart').click(function () {

restart();

})

//设置move函数,点击时让格子移动位置

function move(num) {

//用for循环遍历格子,确认我们点击的格子的标号

for(var j=1;j<9;j++){

if (d[j]==num) {

console.log(d[j]);

break;

}

}

//调用去哪函数判断我们当前点击的格子是否可以移动,如果可以变移动

var target_d = canwhere(j);

//target_d变量保存了canwhere函数的结果

if (target_d!=0) {

//如果不为0,则表示当前点击的格子可以移动到target_d这个位置去。

$('#d'+num).css({left:posxy[target_d][0],top:posxy[target_d][1]});

//通过id选中格子让他的定位坐标等于target_d的定位坐标

d[j]=0;

//因为点击的格子已经移走,则让该位置保存的数值变为0,表示没有格子

d[target_d]=num;

//让target_d位置编号则变为当前移动的格子标号

}

//判断是否拼图完整

var finish_flag = true;

//当所有的格子都按顺序排好,则完成拼图

for (var k = 0; k < 9; k++) {

if (d[k]!=k) {

finish_flag = false;

break;

}

}

if (finish_flag) {

alert('完成拼图');

}

}

//格子可以移动的位置的函数

function canwhere(j) {

var move_flag;//设格子是否可以移动的标志位

for (var i = 0; i < direiton[j].length; i++) {

//遍历点击格子可去的位置是否为空,这些位置在数组d中保存的值是否为0,如果为0则表示这个位置是空的;

if (d[direiton[j][i]]==0) {

//设置标志位为true;

move_flag = true;

break;

//跳出循环

}

}

if (move_flag) {

//如果move_flag,返出格子可以移动的位置。

return direiton[j][i];

}else {

//否则返回0;

move_flag = false;

return 0;

}

}

//打乱图片顺序

function restart() {

//从第9张图片开始,通过随机数产生一个随机位置,与该图片换位置

for (var m = 9; m>1; m--) {

var rand = parseInt(Math.random()*(m-1)+1);

// console.log(rand);

if (d[m]!=0) {

$('#d'+ d[m]).css({left:posxy[rand][0],top:posxy[rand][1]});

}

if (d[rand]!=0) {

$('#d'+ d[rand]).css({left:posxy[m][0],top:posxy[m][1]});

}

var tem=d[m];

d[m]=d[rand];

d[rand]=tem;

}

}

相关文章

网友评论

      本文标题:jq实现简单的九宫格拼图

      本文链接:https://www.haomeiwen.com/subject/aukhextx.html