网页版《2048游戏》教程 - 游戏初始化

3.1.     初始化棋盘格

我们在main.js文件中,创建newgame()方法用于开始新的游戏。而开始新游戏需要完成两件事情,一是初始化棋盘格,一是在随机两个格子生成两个数字。

$(function () {
    newgame();
});
function newgame() {
// 初始化棋盘格
    init();
// 在随机两个格子生成数字
generateOneNumber();
    generateOneNumber();
}

我们通过编写init()方法来完成棋盘格的初始化工作。棋盘格是一个4乘4的16块的方格,所以我们需要创建一个二位数组来表示。

var board = new Array();
function init() {
//i 表示4乘 4的格子中的行
for (var i = 0; i < 4; i++) {
         board[i] = new Array();
//j表示 4乘4 的格子中的列
for (var j = 0; j < 4; j++) {
//将每个格子的值初始化为 0
            board[i][j] = 0;
//通过双重遍历获取每个格子元素
var gridCell = $( "#grid-cell-" + i + "-" + j);
//通过 getPosTop()方法设置每个格子距顶端的距离
            gridCell.css("top", getPosTop(i, j));
//通过 getPosLeft()方法设置每个格子距左端的距离
            gridCell.css("left", getPosLeft(i, j));
        }
    }
}

完成以上步骤,我们就将棋盘格的初始化工作完成了。

3.2.     初始化数字格

仅仅初始化棋盘格是不够的,我们还需要一个4乘4的格子用来显示数字。而用来显示数字的格子应该在棋盘格的基础上的,所以初始化数字格的updateBoardView()应该在初始化棋盘格的init()方法最后来执行。

function updateBoardView() {
//首先清空之前的数字格布局内容
   $(".number-cell").remove();
for (var i = 0; i < 4; i++) {
for (var j = 0; j < 4; j++) {
//向棋盘格上增加数字格
        $( "#grid-container").append("<div class='number-cell' id='number-cell-" + i + "-" + j + "'></div>");
var numberCell = $( "#number-cell-" + i + "-" + j);
//如果棋盘格的值为0的话 ,设置数字格为高宽都为0
if (board[i][j] == 0) {
                numberCell.css( "width", "0px");
                numberCell.css( "height", "0px");
                numberCell.css( "top", getPosTop(i, j) + 100);
                numberCell.css( "left", getPosLeft(i, j) + 100);
            }
//如果棋盘格的值不为0的话 ,设置数字格为高宽为75并设置背景色和前景色及数字值
else {
                numberCell.css( "width", "100px");
                numberCell.css( "height", "100px");
                numberCell.css( "top", getPosTop(i, j));
                numberCell.css( "left", getPosLeft(i, j));
                numberCell.css( "background-color", getNumberBackgroundColor(board[i][j]));
                numberCell.css( "color", getNumberColor(board[i][j]));
                numberCell.text(board[i][j]);
            }
        }
    }
//设置数字值的字体样式
    $(".number-cell").css( "line-height", "100px" );
    $(".number-cell").css( "font-size", "60px" );
}

我们还需要在2048.css样式文件中,为number-cell数字格设置一些样式。

.number-cell {
border-radius: 6px ;
font-family: Arial ;
font-weight: bold ;
font-size: 60px ;
line-height: 100px ;
text-align: center ;
position: absolute ;
}

数字格被初始化完毕之后,我们在页面效果上是看不到的。所以,我们要使用火狐浏览器的Firebug工具来查看是否初始化成功。

3.3.     随机生成数字

数字格初始化完成之后,我们需要做的就是在两个随机的数字格中生成两个随机的数字即可。这个需求我利用generateOneNumber()方法来完成,完成这个方法需要进行四步完成:

第一步判断当前的格子是否是空的,如果不为空则返回false,否则返回true。

function generateOneNumber() {
if (nospace(board)) {
return false;
    }
return true;
}

第二步随机一个格子。

function generateOneNumber() {
// 随机一个x坐标的位置
var randx = parseInt(Math.floor(Math.random() * 4));
// 随机一个y坐标的位置
var randy = parseInt(Math.floor(Math.random() * 4));
// 定义一个死循环 ,完成生成随机空格子
while (true) {
// 如果当前格子的值为 0,满足条件
if (board[randx][randy] == 0) {
break;
        }
// 否则重新随机一个位置
var randx = parseInt(Math.floor(Math.random() * 4));
var randy = parseInt(Math.floor(Math.random() * 4));
    }
}

第三步随机一个数字。

function generateOneNumber() {
// 随机一个数字
var randNumber = Math.random() < 0.5 ? 2 : 4;
}

第四步在随机格子中显示随机数字。

function generateOneNumber() {
// 在随机位置显示随机数字
    board[randx][randy] = randNumber;
// 实现随机数字显示的动画
    ShowNumberWithAnimation(randx, randy, randNumber);
}

3.4.     初始化基础逻辑

在初始化棋盘格和数字格时,我们使用了getPosTop()方法和getPosLeft()方法来完成距顶端和距左端的距离设置。

function getPosTop(i, j) {
return 20 + i * 120;
}
function getPosLeft(i, j) {
return 20 + j * 120;
}

在初始化数字格时,我们使用了getNumberBackgroundColor()方法来设置数字的背景色,使用getNumberColor()方法来设置数字的前景色。

function getNumberBackgroundColor(number) {
switch (number) {
case 2:return "#eee4da"; break;
case 4:return "#ede0c8"; break;
case 8:return "#f2b179"; break;
case 16:return "#f59563"; break;
case 32:return "#f67c5f"; break;
case 64:return "#f65e3b"; break;
case 128:return "#edcf72"; break;
case 256:return "#edcc61"; break;
case 512:return "#9c0";break;
case 1024:return "#33b5e5"; break;
case 2048:return "#09c";break;
case 4096:return "#a6c";break;
case 8192:return "#93c";break;
    }
}
function getNumberColor(number) {
if (number <= 4) {
return "#776e65"
    }
return "white";
}

在生成随机数字时,我们使用nospace()方法来判断当前格子是否为空。

function nospace(board) {
for (var i = 0; i < 4; i++) {
for (var j = 0; j < 4; j++) {
if (board[i][j] == 0) {
return false;
            }
        }
    }
return true;
}

3.5.     初始化动画逻辑

在生成随机数字时,我们使用ShowNumberWithAnimation()方法来完成随机数字显示的动画逻辑。

function ShowNumberWithAnimation(i, j, randNumber) {
// 获取当前的数字格
var numberCell = $("#number-cell-" + i + "-" + j);
// 设置当前的数字格的背景色和前景色及数字值
    numberCell.css("background-color" , getNumberBackgroundColor(randNumber));
    numberCell.css("color" , getNumberColor(randNumber));
    numberCell.text(randNumber);
// 设置当前的数字格的显示动画
    numberCell.animate({
        width: "100px",
        height: "100px",
        top: getPosTop(i, j),
        left: getPosLeft(i, j)
    }, 50);
}

网页版《2048游戏》教程 - 游戏初始化,布布扣,bubuko.com

时间: 2024-10-20 22:37:34

网页版《2048游戏》教程 - 游戏初始化的相关文章

从零開始开发Android版2048 (一)初始化界面

自学Android一个月多了,一直在工作之余零零散散地看一些东西.感觉经常使用的东西都有些了解了,可是一開始写代码总会出各种奇葩的问题.感觉还是代码写得太少.这样继续杂乱地学习下去进度也太慢了,并且学一点忘一点,效率太低.所以从今天開始.我打算实际做点小程序.在开发中不断地学习吧. 恰好近期Android上有个游戏2048比較火,所以就那这个练手吧. 由于对Android还没有太深入的了解,所以我写的东西都会比較基础,所以须要看一些高阶开发的朋友能够绕过了,也希望能够有高手们给我一些指导和建议,

21款网页版html5小游戏源码

html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js html5 2048数字游戏源码_2048网页版源码下载 html5盲打高手打飞字游戏下载_网页版英文打飞字游戏源码下载 jQuery flappy bird电脑版小游戏源码下载 网页版html5 3d俄罗斯方块游戏源码下载 jQuery html5迷宫游戏源码下载 html5网页游戏仿flappy

用javascript实现2048的小游戏

前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑. 整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的. 先上图,简直就和原版游戏一样一样的. 下面分享一下整个2048游戏的代码逻辑: 首先,搭建游戏框架 其次,开始我们的代码编写 index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"

基于html5 canvas和js实现的水果忍者网页版

今天爱编程小编给大家分享一款基于html5 canvas和js实现的水果忍者网页版. <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 Raphael,效果很赞,赶紧来膜拜一下.效果图如下: 在线预览   源码下载 实现的代码. html代码: <canvas id="view" width="640" height=&q

网页版《2048游戏》教程 - 完成游戏逻辑

1.     捕获键盘事件 <2048>游戏的操作主要是依靠键盘的上.下.左.右来完成,首先我们需要在game.js文件中捕获键盘响应的事件. $(document).keydown(function (event) { switch (event.keyCode) { case 37://left break; case 38://up break; case 39://right break; case 40://down break; default : break; } }); 键盘事

网页版《2048游戏》教程 - 游戏优化

1.     GameOver部分 下面我们来分析游戏是如何结束的.一种情况是棋盘格中没有空的格子了,一种情况是棋盘格中没有可以移动的格子了. 首先,完成isgameover()方法的逻辑. function isgameover() { if (nospace(board) && nomove(board)) { gameover(); } } 其次,完成棋盘格中没有空的格子. function nospace(board) { for (var i = 0; i < 4; i++

网页版《2048游戏》教程 - 构建页面

1.     游戏标题 <2048>游戏的标题包含游戏名称.开始新游戏的按钮和游戏分数等三项内容. 创建游戏页面index.html: <!DOCTYPE html> <html > <head > < meta charset= "UTF-8"> < title>2048</title > < link rel= "stylesheet" type ="text/c

基于网页版的2048游戏

前段时间有个很火的游戏叫2048,刚好趁着暑假想练习前端,顺带就把它作为练习项目做成Web Applications 该游戏基于HTML5+JS+CSS 文件结构: index.html 游戏界面展示 index.css 主界面的CSS样式,16方格采用绝对布局的方式 main.js 游戏的主要逻辑 show.js 游戏的一些动画效果 support.js 底层支撑 jquery.js 页面做了响应式布局,游戏效果如下: 代码如下: index.hml <!DOCTYPE html PUBLIC

Cocos2d-x 3.x版2048游戏开发

今天给大家介绍如何快速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程,从中你将可以学习到以下内容: 2048游戏的逻辑 Cocos2d-x中上下左右手势的识别 游戏中卡片类的创建 添加卡片到游戏中 游戏中的逻辑实现 游戏中随机卡片的生成 游戏结束判断 游戏分数的添加 游戏美化 笔者的开发环境:    Cocos2d-x 3.1.1(开发引擎)    Visual Studio 2012(Win32)    Xcode 5.1(Mac系统下) 这里注明一下,本教程来自极客学院,小巫对