jq實(shí)現(xiàn)簡單的九宮格拼圖

效果圖,點(diǎn)擊開始圖片打亂順序,點(diǎn)擊圖片換位置

下面是代碼飞蛹,剛?cè)腴T不久的小白肆汹,記錄一下自己的成長歷程


//用數(shù)字保存大div也就是#game中的9小格子所在的位置唧席,0表示沒有格子懂讯;

//為了邏輯簡單點(diǎn)刻获,所有的數(shù)組第一個位置沒有內(nèi)容坪创。

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

//用二維數(shù)組放每個位置上的小格子可以移動的位置塌鸯;

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]

]

// 用二維數(shù)組放大div中9個位置對應(yīng)定位的坐標(biāo)

var posxy = [

,

[0,0],

[150,0],

[300,0],

[0,150],

[150,150],

[300,150],

[0,300],

[150,300],

[300,300]

]

//設(shè)置開始按鈕的標(biāo)志位侍瑟,當(dāng)游洗開始了之后不可以在點(diǎn)擊

var pause=true;

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

//遍歷小格子給他們加點(diǎn)擊事件

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

$(this).click(function () {

move(index+1);

//調(diào)用move函數(shù),index加1丙猬,表示當(dāng)前點(diǎn)擊的格子的位置

});

});

if (pause) {

//點(diǎn)擊開始按鈕涨颜,打亂圖片順序

restart();

//讓標(biāo)志位變?yōu)閒alse,此時開始按鈕不能點(diǎn)擊

pause=false;

}

});

//重新開始按鈕可以讓游戲重新開始

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

restart();

})

//設(shè)置move函數(shù)茧球,點(diǎn)擊時讓格子移動位置

function move(num) {

//用for循環(huán)遍歷格子庭瑰,確認(rèn)我們點(diǎn)擊的格子的標(biāo)號

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

if (d[j]==num) {

console.log(d[j]);

break;

}

}

//調(diào)用去哪函數(shù)判斷我們當(dāng)前點(diǎn)擊的格子是否可以移動,如果可以變移動

var target_d = canwhere(j);

//target_d變量保存了canwhere函數(shù)的結(jié)果

if (target_d!=0) {

//如果不為0抢埋,則表示當(dāng)前點(diǎn)擊的格子可以移動到target_d這個位置去弹灭。

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

//通過id選中格子讓他的定位坐標(biāo)等于target_d的定位坐標(biāo)

d[j]=0;

//因為點(diǎn)擊的格子已經(jīng)移走,則讓該位置保存的數(shù)值變?yōu)?揪垄,表示沒有格子

d[target_d]=num;

//讓target_d位置編號則變?yōu)楫?dāng)前移動的格子標(biāo)號

}

//判斷是否拼圖完整

var finish_flag = true;

//當(dāng)所有的格子都按順序排好穷吮,則完成拼圖

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

if (d[k]!=k) {

finish_flag = false;

break;

}

}

if (finish_flag) {

alert('完成拼圖');

}

}

//格子可以移動的位置的函數(shù)

function canwhere(j) {

var move_flag;//設(shè)格子是否可以移動的標(biāo)志位

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

//遍歷點(diǎn)擊格子可去的位置是否為空,這些位置在數(shù)組d中保存的值是否為0饥努,如果為0則表示這個位置是空的捡鱼;

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

//設(shè)置標(biāo)志位為true;

move_flag = true;

break;

//跳出循環(huán)

}

}

if (move_flag) {

//如果move_flag酷愧,返出格子可以移動的位置驾诈。

return direiton[j][i];

}else {

//否則返回0;

move_flag = false;

return 0;

}

}

//打亂圖片順序

function restart() {

//從第9張圖片開始溶浴,通過隨機(jī)數(shù)產(chǎn)生一個隨機(jī)位置乍迄,與該圖片換位置

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

開始

再來一局

//用數(shù)字保存大div也就是#game中的9小格子所在的位置,0表示沒有格子士败;

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

//用二維數(shù)組放每個位置上的小格子可以移動的位置闯两;

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]

]

// 用二維數(shù)組放大div中9個位置對應(yīng)定位的坐標(biāo)

var posxy = [

,

[0,0],

[150,0],

[300,0],

[0,150],

[150,150],

[300,150],

[0,300],

[150,300],

[300,300]

]

//設(shè)置開始按鈕的標(biāo)志位,當(dāng)游洗開始了之后不可以在點(diǎn)擊

var pause=true;

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

//遍歷小格子給他們加點(diǎn)擊事件

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

$(this).click(function () {

move(index+1);

//調(diào)用move函數(shù)拱烁,index加1生蚁,表示當(dāng)前點(diǎn)擊的格子的位置

});

});

if (pause) {

//點(diǎn)擊開始按鈕,打亂圖片順序

restart();

//讓標(biāo)志位變?yōu)閒alse戏自,此時開始按鈕不能點(diǎn)擊

pause=false;

}

});

//重新開始按鈕可以讓游戲重新開始

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

restart();

})

//設(shè)置move函數(shù)邦投,點(diǎn)擊時讓格子移動位置

function move(num) {

//用for循環(huán)遍歷格子,確認(rèn)我們點(diǎn)擊的格子的標(biāo)號

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

if (d[j]==num) {

console.log(d[j]);

break;

}

}

//調(diào)用去哪函數(shù)判斷我們當(dāng)前點(diǎn)擊的格子是否可以移動擅笔,如果可以變移動

var target_d = canwhere(j);

//target_d變量保存了canwhere函數(shù)的結(jié)果

if (target_d!=0) {

//如果不為0志衣,則表示當(dāng)前點(diǎn)擊的格子可以移動到target_d這個位置去屯援。

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

//通過id選中格子讓他的定位坐標(biāo)等于target_d的定位坐標(biāo)

d[j]=0;

//因為點(diǎn)擊的格子已經(jīng)移走,則讓該位置保存的數(shù)值變?yōu)?念脯,表示沒有格子

d[target_d]=num;

//讓target_d位置編號則變?yōu)楫?dāng)前移動的格子標(biāo)號

}

//判斷是否拼圖完整

var finish_flag = true;

//當(dāng)所有的格子都按順序排好狞洋,則完成拼圖

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

if (d[k]!=k) {

finish_flag = false;

break;

}

}

if (finish_flag) {

alert('完成拼圖');

}

}

//格子可以移動的位置的函數(shù)

function canwhere(j) {

var move_flag;//設(shè)格子是否可以移動的標(biāo)志位

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

//遍歷點(diǎn)擊格子可去的位置是否為空,這些位置在數(shù)組d中保存的值是否為0绿店,如果為0則表示這個位置是空的吉懊;

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

//設(shè)置標(biāo)志位為true;

move_flag = true;

break;

//跳出循環(huán)

}

}

if (move_flag) {

//如果move_flag假勿,返出格子可以移動的位置借嗽。

return direiton[j][i];

}else {

//否則返回0;

move_flag = false;

return 0;

}

}

//打亂圖片順序

function restart() {

//從第9張圖片開始转培,通過隨機(jī)數(shù)產(chǎn)生一個隨機(jī)位置恶导,與該圖片換位置

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;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市浸须,隨后出現(xiàn)的幾起案子惨寿,更是在濱河造成了極大的恐慌,老刑警劉巖删窒,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裂垦,死亡現(xiàn)場離奇詭異,居然都是意外死亡易稠,警方通過查閱死者的電腦和手機(jī)缸废,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門包蓝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驶社,“玉大人,你說我怎么就攤上這事测萎⊥龅纾” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵硅瞧,是天一觀的道長份乒。 經(jīng)常有香客問我,道長腕唧,這世上最難降的妖魔是什么或辖? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮枣接,結(jié)果婚禮上颂暇,老公的妹妹穿的比我還像新娘。我一直安慰自己但惶,他們只是感情好耳鸯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布湿蛔。 她就那樣靜靜地躺著,像睡著了一般县爬。 火紅的嫁衣襯著肌膚如雪阳啥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天财喳,我揣著相機(jī)與錄音察迟,去河邊找鬼。 笑死耳高,一個胖子當(dāng)著我的面吹牛卷拘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祝高,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栗弟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了工闺?” 一聲冷哼從身側(cè)響起乍赫,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陆蟆,沒想到半個月后雷厂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叠殷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年改鲫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片林束。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡像棘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壶冒,到底是詐尸還是另有隱情缕题,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布胖腾,位于F島的核電站烟零,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咸作。R本人自食惡果不足惜锨阿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望记罚。 院中可真熱鬧墅诡,春花似錦、人聲如沸毫胜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荐吉,卻和暖如春焙糟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背样屠。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工穿撮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痪欲。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓悦穿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親业踢。 傳聞我的和親對象是個殘疾皇子栗柒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容