当前位置:首页 > 日记 > 正文

jQuery实现别踩白块儿网页版小游戏

jQuery实现别踩白块儿网页版小游戏

大致介绍

终于结束了考试,放假回家了。这次的别踩白块儿网页版要比之前做的 jQuery编写网页版2048小游戏 要简单一点,基本的思路都差不多。

这篇博客并不是详细的讲解,只是大致介绍函数的作用,其中实现的细节注释中有解释,网上的这个源码有点乱,如果想看比较整齐的源码或者视频的可以QQ联系我(免费)(找共同学习的伙伴)

思路

这个小游戏可以抽象化分为3层

 ◆最底下的一层是基本的样式(可见的)

 ◆中间的层是最主要的,是一个4x3的二维数组,游戏中我们都是对这个二维数组进行操作(不可见的)

 ◆最上面的一层也是一个4x3的二维数组,是用户能最终看见的

我们通过最底下的一层显示最基本的12个小方格,不同的颜色,每个格子对应的中间的层有不同的值,最上面的一层负责显示样式

基本结构与样式

基本的结构和样式都挺简单,直接看代码

结构:

<body> <div id="header"> <h1>别踩白块儿</h1> <div id="timer" >0.0000</div> </div> <div id="container"> <div class="grid" id="grid-0-0"></div> <div class="grid" id="grid-0-1"></div> <div class="grid" id="grid-0-2"></div> <div class="grid" id="grid-1-0"></div> <div class="grid" id="grid-1-1"></div> <div class="grid" id="grid-1-2"></div> <div class="grid" id="grid-2-0"></div> <div class="grid" id="grid-2-1"></div> <div class="grid" id="grid-2-2"></div> <div class="grid" id="grid-3-0"></div> <div class="grid" id="grid-3-1"></div> <div class="grid" id="grid-3-2"></div> </div></body>

样式:

body{ background-color: #008694; font: 12px/20px "黑体" ,arial;}#header { display: block; margin: 0 auto; width: 500px; text-align: center;}#header h1 { font-family: Arial; font-size: 40px; font-weight: bold;}#timer { z-index: 4; font-size: 24px; color: #fa3c3c; font-weight: 700; text-shadow: 2px 2px 3px rgba(0, 0, 0, .3)}#container{ width: 302px; height: 402px; margin: 50px auto; background-color: #55d769; border: 5px solid #000; position: relative;}.grid { width: 100px; height: 100px; background-color: #fff; border: 1px solid #000; position: absolute;}.block { width: 100px; height: 100px; border: 1px solid #000; font-family: Arial; font-weight: bold; font-size: 20px; color: #fff; text-align: center; position: absolute;}.coBlock{ background-color: #000;}.gameover { display: block; margin: 0 auto; width: 300px; text-align: center; vertical-align: middle; position: absolute;}.gameover p { font-family: Arial; font-size: 50px; color: white; margin: 50px auto; margin-top: 150px; } .gameover span { font-family: Arial; font-size: 50px; color: white; margin: 50px auto; } .restartGame { display: block; margin: 20px auto; width: 180px; padding: 10px 10px; background-color: #8f7a66; font-family: Arial; font-size: 30px; color: white; border-radius: 10px; text-decoration: none; } .restartGame:hover { background-color: #9f8b77; }

这里并没有设置每个格子的位置,位置由js代码来设置,以及第二层的二维数组、第三层的显示层都由js来设置,这里和 jQuery编写网页版2048小游戏 并没有什么大的区别

代码:

function init(){ timerRan = 0.000; keyDown = true; for(var i=0;i<4;i++){ board[i] = []; for(var j=0;j<3;j++){  board[i][j] = [];  var grid = $('#grid-'+ i +'-'+ j);  grid.css({  'top':getPosTop(i,j),  'left':getPosLeft(i,j)  });  $('#container').append('<div class="block" id="block-'+ i +'-'+ j +'"></div>');  var block = $('#block-'+ i +'-'+ j);  block.css({  'top':getPosTop(i,j),  'left':getPosLeft(i,j)  });  board[i][j] = 0; } }
function getPosTop(i,j){ return i*100;}function getPosLeft(i,j){ return j*100;}

初始化

游戏开始时,要在每一行随机的位置显示一个黑色的方块,并且在最下面的那一行的黑色方块上要有提示信息

代码:

for(var i=0;i<4;i++){ var randj = parseInt(Math.floor(Math.random() * 3)); if(i >0 && board[i-1][randj] == 1){  randj = parseInt(Math.floor(Math.random() * 3)); } $('#block-'+ i +'-'+ randj).addClass('coBlock'); board[i][randj] = 1; } $('#block-3-0').text('按J开始游戏'); $('#block-3-1').text('按K开始游戏'); $('#block-3-2').text('按L开始游戏');

基本操作

我们通过switch循环,来根据用户不同的输入进行不同的操作

代码:

$(document).keydown(function(event) { switch(event.keyCode){ case 74:  if(board[3][0] == 1 && keyDown){  timeRan();  clearText();  moveDown();  }else{  isgameover();  }  break; case 75:  if(board[3][1] == 1 && keyDown){  timeRan();  clearText();  moveDown();  }else{   isgameover();  }  break; case 76:  if(board[3][2] == 1 && keyDown){  timeRan();  clearText();  moveDown();  }else{  isgameover();  }  break;  }});

在这里设置 keyDown 这个全局变量的目的是为了防止用户在游戏结束时,继续按键。

timeRan()这个函数是显示游戏时间的

代码:

function timeRan(){ clearTimeout(timer); timerRan += 0.001; $('#timer').text(timerRan.toString().slice(0,5)); timer = setTimeout(function(){ timeRan(); },1);}

clearText()这个函数是在游戏开始后,将最下面一行的提示信息去掉

代码:

function clearText(){ $("#block-3-0").text(""); $("#block-3-1").text(""); $("#block-3-2").text("");}

moveDown()这个函数是方块移动的最主要函数,因为方块要向下移动,所以我们要从最下面开始遍历二维数组,如果该格子是黑色的并且是最下面一行的,就只是简单的把该格子的颜色变回白色,如果该格子是黑色的并且是第一行至第三行的,这个格子变为白色,并且它的正下方的一个格子变为黑色,最后,在第一行的随机位置上显示一个黑色的格子

代码:

function moveDown(){ for(var i=3;i>=0;i--){ for(var j=2;j>=0;j--){  if(board[i][j] == 1){  if(i == 3){   $('#block-'+ i +'-'+ j).removeClass('coBlock');   board[i][j] = 0;  }else{   $('#block-'+ i +'-'+ j).removeClass('coBlock');   board[i][j] = 0;   $('#block-'+ (i+1) +'-'+ j).addClass('coBlock');   board[i+1][j] = 1;  }  } } } var randj = parseInt(Math.floor(Math.random() * 3)); $('#block-0-'+ randj).addClass('coBlock'); board[0][randj] = 1;}

isgameover()是显示游戏结束样式的函数,比较简单

代码:

function isgameover(){ keyDown = false; clearTimeout(timer); $('#container').append('<div id="gameover" class="gameover"><p>本次用时</p><span>'+ timerRan.toString().slice(0,5) +'</span><a href="javascript:restartGame()" class="restartGame">重新开始</a></div>'); var gameover = $("#gameover"); gameover.css("width", "300px"); gameover.css("height", "400px"); gameover.css("background-color", "rgba(0, 0, 0, 0.5)");}
function restartGame(){ $('#timer').text('0.000'); $('#gameover').remove(); $('.block').remove(); init();}

总结

这个小游戏,如果学会了之前的 jQuery编写网页版2048小游戏,就会觉得这个挺简单的,基本的思想和方法都大同小异,如果有任何的建议如果或者想看比较整齐的源码或者视频的可以QQ联系我(免费)(找共同学习的伙伴)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

相关文章

PHP对象的浅复制与深复制的实例详

PHP对象的浅复制与深复制的实例详

浅复制,对象,深复制,详解,实例,PHP对象的浅复制与深复制的实例详解最近在看原型模式时注意到这个问题~~PHP中对象 '=' 与‘clone'的区别实例代码://聚合类 class ObjA { public $num = 0; public $objB;//包含的对象 function __co…

Apache下禁止php文件被直接访问的

Apache下禁止php文件被直接访问的

直接访问,方法,文件,电脑软件,Apache,一开始,我想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效。RewriteEngineOnRewriteRule^test$/test.php[L]Re…

两命名方法为6学习变量的例子

两命名方法为6学习变量的例子

变量,学习,方法,例子,电脑软件,前言 众所周知,ES6 ECMAscript 6(以下简称6),对Javascript语言的下一代标准,已于2015年6月正式发布,其目标是使Javascript语言可以用来编写复杂的大型应用程序,成为企业发展的语言。 它完善了ES5的命名规范,并公布了命名变量的两种新方…

ps怎么制作带云雾的星空效果?

ps怎么制作带云雾的星空效果?

云雾,星空,效果,电脑软件,ps,制作浩瀚的夜空效果主要使用ps的滤镜功能,现在就把制作的过程步骤以及截图分享给大家,希望你也能分享更多优质经验,本经验仅供参考使用。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2…

AICS6文件保存为低版本

AICS6文件保存为低版本

文件,保存为,版本,电脑软件,教你如何保存Adobe Illustrator CS6版本为其他低版本。 软件名称:Adobe Illustrator CS6(AI CS6)简化绿色中文版(32位+ 64位)软件大小:205mb更新时间:2014-05-11 1,点击文件;选择存储(A)… 2、在弹出窗口中,单击保存类型(T);…

JavaScript箭头 | arrow函数详解

JavaScript箭头 | arrow函数详解

函数,箭头,详解,电脑软件,JavaScript,为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。本文我们介绍箭头(arrow)函数的优点。更简洁的语法我们先来按常规语法定义函数:function funcName(params) { return p…

ps图案如何安装

ps图案如何安装

安装,图案,电脑软件,ps,一、首先打开photoshop,选择菜单 : 编辑 > 预设管理器 二、在预设类型中选择图案,然后再选载入按钮 三、选择你想要载入的图案 四、载入后就可以看到刚才载入的图案…

风暴声不能播放光盘播放窗口不显示

风暴声不能播放光盘播放窗口不显示

显示,解决方案,光盘,不能播放,窗口,问题: 一个新的电脑给领导,发现电脑不能播放DVD,当暴风播放,它不显示任何图片,也没有错误提示。播放窗口已为黑屏。 答案uff1a 对原因的分析,该盘插入肯定没有问题,因为这是公司统一的视频数据,经过一系列的测…

php实现遍历多维数组的方法

php实现遍历多维数组的方法

遍历,方法,多维数组,电脑软件,php,本文实例讲述了php实现遍历多维数组的方法。分享给大家供大家参考,具体如下:$a=array('fruits'=>array('a'=>'orange','b'=>'grape',c=>'apple'), 'numbers'=>array(1,2,3,4,5,6), 'holes'=…

利用滤镜简单制作老照片效果

利用滤镜简单制作老照片效果

滤镜,老照片,效果,简单,电脑软件,   本教程主要介绍使用Photoshop的外挂滤镜&ldquo;DigiEffects&mdash;旧照片&rdquo;滤镜制作战争时期的黑白电影效果。利用滤镜简单制作老照片效果滤镜安装方法:1、首先解压压缩包,得到一个&ldqu…

理解javascript中的Function.proto

理解javascript中的Function.proto

方法,电脑软件,Function,javascript,bind,在初学Javascript时,我们也许不需要担心函数绑定的问题,但是当我们需要在另一个函数中保持上下文对象this时,就会遇到相应的问题了,我见过很多人处理这种问题都是先将this赋值给一个变量(比如self、_thi…

深入浅析Orcale的nvl函数和SQL Ser

深入浅析Orcale的nvl函数和SQL Ser

函数,电脑软件,nvl,Orcale,isnull,Orcal 的 nvl函数NVL(Expr1,Expr2)如果Expr1为NULL,返回Expr2的值,否则返回Expr1的值,Expr1,Expr2都为NULL则返回NULLNVL2(Expr1,Expr2,Expr3)如果Expr1为NULL,返回Expr2的值,否则返回Expr3的值NULLIF(Expr1,Ex…