JavaScrip实现小游戏2048
最近学习JS,用来练手的小游戏。当然也有借鉴他山之石,缕清思路,这个游戏就很简单了。
_2048.js
// 对象game
// 需要的变量
// 1、全局变量 存储当前2048数据的变量data,二位数组
// 2、全局变量 存储游戏当前状态开始/结束、state,定义两个常量RUNNING\GAMEOVER
// 3、全局变量 总行数总列数 mRow,mCol
// 4、当前的行列row、col
var game = {
data: [],
state: 0,
RUNNING: 1,
GAMEOVER: 0,
mRow: 4,
mCol: 4,
score: 0,
//初始化方法 window.onload(){} start row、col
start: function () {
this.data = [
[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]
];
this.score = 0;
this.state = this.RUNNING;
this.isGameStart();
},
//判断游戏状态并执行方法 isGameStart()
isGameStart: function () {
if (!this.isFull()) {
// alert("isGameStart....true")
this.inint();
return true;
}
for (var i = 0; i < this.mRow; i++) {
for (var j = 0; j < this.mCol; j++) {
if (j < this.mCol - 1) {
if (this.data[i][j] == this.data[i][j + 1]) {
this.inint();
return true;
}
}
if (i < this.mRow - 1) {
if (this.data[i][j] == this.data[i + 1][j]) {
this.inint();
return true;
}
}
}
}
return false;
},
//游戏开始,初始化生成随机数字
inint: function () {
//游戏开始,随机位置取随机的2或4
this.randomNum();
this.randomNum();
//更新2048页面的功能
this.updateView();
},
//产生随机数2、4的方法 randomNum()
randomNum: function () {
if (!this.isFull()) {
while (true) {
// alert("isFull....false")
var row = parseInt(Math.random() * this.mRow);
var col = parseInt(Math.random() * this.mCol);
if (this.data[row][col] == 0) {
var num = Math.random() < 0.5 ? 2 : 4;
this.data[row][col] = num;
//alert("data[row][col]" + this.data[row][col]);
break;
}
}
}
},
//更新2048的数字的方法 updateView()
//更新视图,包含判断游戏是否结束
updateView: function () {
var div = document.getElementById("gameOver");
div.style.display = "none";
for (var i = 0; i < this.mRow; i++) {
for (var j = 0; j < this.mCol; j++) {
var divObj = document.getElementById("c" + i + j);
var curr = this.data[i][j];
//修改div开始标签和结束标签之间的内容
// alert("curr:"+curr)
divObj.innerHTML = curr != 0 ? curr : "";
//修改div的class属性
divObj.className = curr != 0 ? "cell n" + curr : "cell";
}
}
//data数组没有零的值,即游戏没有空间
if (this.data.toString().indexOf("0") == -1) {
//相邻相等的个数
var num = 0;
for (var i = 0; i < this.mRow; i++) {
for (var j = 0; j < this.mCol - 1; j++) {
if (this.data[i][j] == this.data[i][j + 1]) {
num++;
}
}
}
for (var i = 0; i < this.mCol; i++) {
for (var