初見 我是在這里看到這個游戲的
請看這里
http://www.webhek.com/misc/inverter.
看到這個小游戲就覺得挺有意思的,於是想要去自己實現它。
開始 下面的是這個小游戲,大家玩玩看
Oh!藍色拼圖
當前級別:
以下是代碼 寫完后自己看着都覺得惡心...很想把它放到一個對象里面,但是太懶了,能用就行(つд⊂)
.gamebox {
background-color: #4D4D4D;
border-radius: 4px;
height: 200px;
margin: 0 auto;
margin-bottom: 50px;
position: relative;
width: 60%;
max-width:500px;
}
.gamecard {
background-color: rgb(230, 171, 94);
border-radius: 4px;
position: absolute;
}
var gameBox;
$(function() {
gameBox = $("#gameBox");
loadLevel(1);
$(window).resize(function() {
setBoxPosition();
});
});
var gameOptions = {
level: 1,
border: 15,
array: []
};
function showHowToPlay() {
bootbox.dialog({
title: "玩法說明",
message: "
如何才算贏:使拼板全部變成藍色。
玩法:每個方塊一面橙色,一面藍色。點擊一個方塊,這個方塊的顏色會翻轉,並且,與它鄰接的方塊的顏色也會翻轉。
",
buttons: {
btn: {
label: "了解",
className: "btn btn-success"
}
}
});
}
function reloadLevel() {
bootbox.dialog({
title: "確定要這么做么?",
message: "你將要從Lv1重新開始游戲",
buttons: {
cancel: {
label: "算了",
className: "btn btn-success"
},
btn: {
label: "我確定",
className: "btn btn-danger",
callback: function() {
loadLevel(1);
}
}
}
});
}
function reloadGame() {
bootbox.dialog({
title: "確定要這么做么?",
message: "你將重新開始該等級的游戲",
buttons: {
cancel: {
label: "算了",
className: "btn btn-success"
},
btn: {
label: "我確定",
className: "btn btn-danger",
callback: function() {
loadLevel(gameOptions.level);
}
}
}
});
}
function fillCard() {
gameBox.empty();
gameOptions.array = [];
for (var x = 0; x < gameOptions.level; x++) {
var row = new Array();
for (var y = 0; y < gameOptions.level; y++) {
var card = "
";
gameBox.append(card); //添加元素
row.push(0);
}
gameOptions.array.push(row); //添加二維數組,定義元素狀態,默認全為0
}
}
function setBoxPosition() {
var boxwidth = gameBox.width();
gameBox.height(boxwidth); //寬高相等
var border = gameOptions.border; //間隔寬度
var len = (boxwidth - (gameOptions.level + 1) * border) / gameOptions.level;
for (var x = 0; x < gameOptions.level; x++) {
for (var y = 0; y < gameOptions.level; y++) {
var ele = gameBox.children("div[data-x=" + x + "][data-y=" + y + "]");
var eleX = x * len + (x + 1) * border;
var eleY = y * len + (y + 1) * border;
ele.css({ "left": eleX + "px", "top": eleY + "px" });
ele.width(len).height(len);
}
}
}
function loadLevel(level) {
gameOptions.level = level;
fillCard();
setBoxPosition();
$("#tip-level").html(level);
}
function clickCard(x, y) {
changeState(x, y);
changeState(x - 1, y);
changeState(x + 1, y);
changeState(x, y + 1);
changeState(x, y - 1);
checkWin();
}
function changeState(x, y) {
var lel = gameOptions.level;
if (x < 0 || x >= lel || y < 0 || y > lel) {
return;
}
var num = getNum(x, y);
num = num == 1 ? 0 : 1;
setNum(x, y, num); //當前塊狀態改變
var ele = gameBox.children("div[data-x=" + x + "][data-y=" + y + "]");
ele.css("background-color", num == 1 ? "rgb(92, 144, 255)" : "rgb(230, 171, 94)"); //改變顏色
}
function setNum(x, y, num) {
gameOptions.array[x][y] = num;
}
function getNum(x, y) {
return gameOptions.array[x][y];
}
function checkWin() {
var win = true;
for (var x = 0; x < gameOptions.level; x++) {
for (var y = 0; y < gameOptions.level; y++) {
var num = getNum(x, y);
if (num != 1) {
win = false;
break;
}
}
if (!win) break;
}
if (win) {
var lev = gameOptions.level + 1;
makeDialog("完成拼圖!", "進入下一關,Lv" + lev, function() {
loadLevel(lev);
}, 10);
}
}
Σ( ゚д゚) 上面的代碼一直調不好
我不知道怎么回事,,,大家將就看吧,不知道為什么代碼被分成幾節了...
實在不行看源碼,哈哈
.
