这是一个基于浏览器的数字拼图游戏。你可以花些时间研究怎样利用jquery库创建javascript应用程序。这个小游戏由游戏数据及UI组成,它仅仅包含26行的代码及jquery库。
<style type="text/css">
#game15 {
width: 255px; height: 290px; border: 1px solid gray;
}
#game15-controls {
margin: 10px;
height: 25px;
}
<!--本文转载自http://www.hotajax.org -->
#game15-field {
width: 240px;
height: 240px;
margin: 10px 0px 10px 10px;
}
.game-cell {
width: 55px;
height: 55px;
border: 1px solid gray;
text-align: center;
line-height: 55px;
color: #aaa;
font-family: arial;
font-weight: bold;
font-size: 30px;
background: white;
position: absolute;
overflow: hidden;
}
</style>
<script type="text/javascript">
jQuery(function () {
// Game model object
var field = new (function () {
this.moves = 0;
this.cells = [ [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0] ];
this.isFree = function (row, col) {
return -1 < col && 4 > col && -1 < row && 4 > row && 16 == this.cells[row][col];
};
this.isSolved = function () {
for (var i = 15; i > -1; i--) {
if ((i + 1) != this.cells[(i - (i % 4)) / 4][i % 4]) {
return false;
}
}
return true;
};
this.move = function (p) {
var d = [[-1, 0], [1, 0], [0, -1], [0, 1]];
if (16 != this.cells[p.row][p.col]) {
for (var k in d) {
if (this.isFree(p.row + d[k][1], p.col + d[k][0])) {
this.cells[p.row + d[k][1]][p.col + d[k][0]] = this.cells[p.row][p.col];
this.cells[p.row][p.col] = 16;
p.col += d[k][0];
p.row += d[k][1];
return ++this.moves;
}
}
}
return false;
};
this.reset = function () {
var i = 16, values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
while (i--) {
this.cells[(i - (i % 4)) / 4][i % 4] = (1
+ parseInt(values.splice(Math.floor(Math.random() * values.length), 1)));
}
this.moves = 0;
<!--本文转载自http://www.hotajax.org -->
};
})();
// View with jQuery
var lock = false;
$('#shuffle').click(function () {
if (lock) return;
field.reset();
$('#moves').html('0');
$('#game15-field').empty();
for (var col = 0; col < 4; col++) {
for (var row = 0; row < 4; row++) {
!field.isFree(row, col) && ($('#game15-field').get(0).appendChild(
$("<div class='game-cell'>" + field.cells[row][col] + "</div>")
.css({ 'left' : col * 60 + 10, 'top' : row * 60 + 45})
.click(function () {
if (!lock && field.move(this._p)) {
lock = true;
$('#moves').html('' + field.moves);
$(this).animate(
{'left' : this._p.col * 60 + 10, 'top' : this._p.row * 60 + 45},
300, '', function () {
field.isSolved() && alert('You win!');
lock = false;
});
}
}).get(0))._p = {'row': row, 'col': col});
}
}
}).click();
});
</script>
<div id="game15">
<div id="game15-controls">
<button id="shuffle">Shuffle</button> Moves: <span id="moves"></span> <a href="
http://www.alexatnet.com/node/68">Alex @ Net</a>
</div>
<div id="game15-field"></div>
</div>%20%3Cstyle%20type%3D%22text%2Fcss%22%3E%0A%0D%0A%23game15%20%20%20%7B%0A%0D%0Awidth%3A%20255px%3B%20height%3A%20290px%3B%20border%3A%201px%20solid%20%20%20gray%3B%0A%0D%0A%7D%0A%0D%0A%23game15-controls%20%7B%0A%0D%0Amargin%3A%2010px%3B%0A%0D%0Aheight%3A%20%20%2025px%3B%0A%0D%0A%7D%0A%0D%0A%3C%21--%E6%9C%AC%E6%96%87%E8%BD%AC%E8%BD%BD%E8%87%AAhttp%3A%2F%2Fwww.hotajax.org%20--%3E%0D%0A%23game15-field%20%7B%0A%0D%0Awidth%3A%20240px%3B%0A%0D%0Aheight%3A%20240px%3B%0A%0D%0Amargin%3A%2010px%20%20%200px%2010px%2010px%3B%0A%0D%0A%7D%0A%0D%0A.game-cell%20%7B%0A%0D%0Awidth%3A%2055px%3B%0A%0D%0Aheight%3A%2055px%3B%0A%0D%0Aborder%3A%20%20%201px%20solid%20gray%3B%0A%0D%0Atext-align%3A%20center%3B%0A%0D%0Aline-height%3A%2055px%3B%0A%0D%0Acolor%3A%20%20%20%23aaa%3B%0A%0D%0Afont-family%3A%20arial%3B%0A%0D%0Afont-weight%3A%20bold%3B%0A%0D%0Afont-size%3A%20%20%2030px%3B%0A%0D%0Abackground%3A%20white%3B%0A%0D%0Aposition%3A%20absolute%3B%0A%0D%0Aoverflow%3A%20%20%20hidden%3B%0A%0D%0A%7D%0A%0D%0A%3C%2Fstyle%3E%0A%0D%0A%3Cscript%20%20%20type%3D%22text%2Fjavascript%22%3E%0A%0D%0AjQuery%28function%20%28%29%20%7B%0A%0D%0A%2F%2F%20Game%20model%20%20%20object%0A%0D%0Avar%20field%20%3D%20new%20%28function%20%28%29%20%7B%0A%0D%0Athis.moves%20%3D%200%3B%0A%0D%0Athis.cells%20%3D%20%5B%20%20%20%5B0%2C0%2C0%2C0%5D%2C%20%5B0%2C0%2C0%2C0%5D%2C%20%5B0%2C0%2C0%2C0%5D%2C%20%5B0%2C0%2C0%2C0%5D%20%5D%3B%0A%0D%0Athis.isFree%20%3D%20function%20%28row%2C%20%20%20col%29%20%7B%0A%0D%0Areturn%20-1%20%3C%20col%20%26amp%3B%26amp%3B%204%20%3E%20col%20%26amp%3B%26amp%3B%20-1%20%3C%20row%20%20%20%26amp%3B%26amp%3B%204%20%3E%20row%20%26amp%3B%26amp%3B%2016%20%3D%3D%20%20%20this.cells%5Brow%5D%5Bcol%5D%3B%0A%0D%0A%7D%3B%0A%0D%0Athis.isSolved%20%3D%20function%20%28%29%20%7B%0A%0D%0Afor%20%28var%20i%20%3D%2015%3B%20%20%20i%20%3E%20-1%3B%20i--%29%20%7B%0A%0D%0Aif%20%28%28i%20%2B%201%29%20%21%3D%20this.cells%5B%28i%20-%20%28i%20%25%204%29%29%20%2F%204%5D%5Bi%20%25%204%5D%29%20%20%20%7B%0A%0D%0Areturn%20false%3B%0A%0D%0A%7D%0A%0D%0A%7D%0A%0D%0Areturn%20true%3B%0A%0D%0A%7D%3B%0A%0D%0Athis.move%20%3D%20function%20%28p%29%20%20%20%7B%0A%0D%0Avar%20d%20%3D%20%5B%5B-1%2C%200%5D%2C%20%5B1%2C%200%5D%2C%20%5B0%2C%20-1%5D%2C%20%5B0%2C%201%5D%5D%3B%0A%0D%0Aif%20%2816%20%21%3D%20%20%20this.cells%5Bp.row%5D%5Bp.col%5D%29%20%7B%0A%0D%0Afor%20%28var%20k%20in%20d%29%20%7B%0A%0D%0Aif%20%28this.isFree%28p.row%20%2B%20%20%20d%5Bk%5D%5B1%5D%2C%20p.col%20%2B%20d%5Bk%5D%5B0%5D%29%29%20%7B%0A%0D%0Athis.cells%5Bp.row%20%2B%20d%5Bk%5D%5B1%5D%5D%5Bp.col%20%2B%20d%5Bk%5D%5B0%5D%5D%20%3D%20%20%20this.cells%5Bp.row%5D%5Bp.col%5D%3B%0A%0D%0Athis.cells%5Bp.row%5D%5Bp.col%5D%20%3D%2016%3B%0A%0D%0Ap.col%20%2B%3D%20%20%20d%5Bk%5D%5B0%5D%3B%0A%0D%0Ap.row%20%2B%3D%20d%5Bk%5D%5B1%5D%3B%0A%0D%0Areturn%20%2B%2Bthis.moves%3B%0A%0D%0A%7D%0A%0D%0A%7D%0A%0D%0A%7D%0A%0D%0Areturn%20%20%20false%3B%0A%0D%0A%7D%3B%0A%0D%0Athis.reset%20%3D%20function%20%28%29%20%7B%0A%0D%0Avar%20i%20%3D%2016%2C%20values%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%20%20%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%5D%3B%0A%0D%0Awhile%20%28i--%29%20%7B%0A%0D%0Athis.cells%5B%28i%20-%20%20%20%28i%20%25%204%29%29%20%2F%204%5D%5Bi%20%25%204%5D%20%3D%20%281%0A%0D%0A%2B%20parseInt%28values.splice%28Math.floor%28Math.random%28%29%20%2A%20%20%20values.length%29%2C%201%29%29%29%3B%0A%0D%0A%7D%0A%0D%0Athis.moves%20%3D%200%3B%0A%0D%0A%3C%21--%E6%9C%AC%E6%96%87%E8%BD%AC%E8%BD%BD%E8%87%AAhttp%3A%2F%2Fwww.hotajax.org%20--%3E%0D%0A%7D%3B%0A%0D%0A%7D%29%28%29%3B%0A%0D%0A%2F%2F%20View%20with%20%20%20jQuery%0A%0D%0Avar%20lock%20%3D%20false%3B%0A%0D%0A%24%28%27%23shuffle%27%29.click%28function%20%28%29%20%7B%0A%0D%0Aif%20%28lock%29%20%20%20return%3B%0A%0D%0Afield.reset%28%29%3B%0A%0D%0A%24%28%27%23moves%27%29.html%28%270%27%29%3B%0A%0D%0A%24%28%27%23game15-field%27%29.empty%28%29%3B%0A%0D%0Afor%20%20%20%28var%20col%20%3D%200%3B%20col%20%3C%204%3B%20col%2B%2B%29%20%7B%0A%0D%0Afor%20%28var%20row%20%3D%200%3B%20row%20%3C%204%3B%20row%2B%2B%29%20%20%20%7B%0A%0D%0A%21field.isFree%28row%2C%20col%29%20%26amp%3B%26amp%3B%20%20%20%28%24%28%27%23game15-field%27%29.get%280%29.appendChild%28%0A%0D%0A%24%28%22%3Cdiv%20class%3D%27game-cell%27%3E%22%20%2B%20%20%20field.cells%5Brow%5D%5Bcol%5D%20%2B%20%22%3C%2Fdiv%3E%22%29%0A%0D%0A.css%28%7B%20%27left%27%20%3A%20col%20%2A%2060%20%2B%2010%2C%20%27top%27%20%20%20%3A%20row%20%2A%2060%20%2B%2045%7D%29%0A%0D%0A.click%28function%20%28%29%20%7B%0A%0D%0Aif%20%28%21lock%20%26amp%3B%26amp%3B%20%20%20field.move%28this._p%29%29%20%7B%0A%0D%0Alock%20%3D%20true%3B%0A%0D%0A%24%28%27%23moves%27%29.html%28%27%27%20%2B%20%20%20field.moves%29%3B%0A%0D%0A%24%28this%29.animate%28%0A%0D%0A%7B%27left%27%20%3A%20this._p.col%20%2A%2060%20%2B%2010%2C%20%27top%27%20%3A%20%20%20this._p.row%20%2A%2060%20%2B%2045%7D%2C%0A%0D%0A300%2C%20%27%27%2C%20function%20%28%29%20%7B%0A%0D%0Afield.isSolved%28%29%20%26amp%3B%26amp%3B%20%20%20alert%28%27You%20win%21%27%29%3B%0A%0D%0Alock%20%3D%20false%3B%0A%0D%0A%7D%29%3B%0A%0D%0A%7D%0A%0D%0A%7D%29.get%280%29%29._p%20%3D%20%7B%27row%27%3A%20row%2C%20%20%20%27col%27%3A%20col%7D%29%3B%0A%0D%0A%7D%0A%0D%0A%7D%0A%0D%0A%7D%29.click%28%29%3B%0A%0D%0A%7D%29%3B%0A%0D%0A%3C%2Fscript%3E%0A%0D%0A%3Cdiv%20%20%20id%3D%22game15%22%3E%0A%0D%0A%3Cdiv%20id%3D%22game15-controls%22%3E%0A%0D%0A%3Cbutton%20%20%20id%3D%22shuffle%22%3EShuffle%3C%2Fbutton%3E%26amp%3Bnbsp%3B%26amp%3Bnbsp%3BMoves%3A%20%3Cspan%20%20%20id%3D%22moves%22%3E%3C%2Fspan%3E%26amp%3Bnbsp%3B%26amp%3Bnbsp%3B%3Ca%20%20%20href%3D%22%0D%0Ahttp%3A%2F%2Fwww.alexatnet.com%2Fnode%2F68%22%3EAlex%20%40%20%20%20Net%3C%2Fa%3E%0A%0D%0A%3C%2Fdiv%3E%0A%0D%0A%3Cdiv%20%20%20id%3D%22game15-field%22%3E%3C%2Fdiv%3E%0A%0D%0A%3C%2Fdiv%3E
<p><iframe frameborder="0" style="width: 280px; height: 300px;" </p>
<p>src="
http://www.hotajax.org/download/jquery/Fifteen puzzle.htm"></iframe></p>
%0D%0A%3Cp%3E%3Ciframe%20frameborder%3D%220%22%20style%3D%22width%3A%20%20%20280px%3B%20height%3A%20300px%3B%22%20%3C%2Fp%3E%0D%0A%3Cp%3Esrc%3D%22%0D%0Ahttp%3A%2F%2Fwww.hotajax.org%2Fdownload%2Fjquery%2FFifteen%20puzzle.htm%22%3E%3C%2Fiframe%3E%3C%2Fp%3E