热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网页版2048实战--游戏初始化

引言接上一篇博客,本篇博客将会继续介绍网页版2048的游戏初始化部分。游戏初始化1、初始化棋盘格我们在main.js文件中,创建newgame()方法用于开始新的游戏。而
引言

    接上一篇博客,本篇博客将会继续介绍网页版2048的游戏初始化部分。

游戏初始化

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));
}
}
}

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

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("
");
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、随机生成数字

    数字格初始化完成之后,我们需要做的就是在两个随机的数字格中生成两个随机的数字即可。这个需求我利用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);
}

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;
}

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);
}

结语

    今天的介绍就到这里了,在下一篇博客中会介绍游戏的逻辑,请关注后续的更新~


推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
author-avatar
陈家小女u
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有