HTML5+JS实现俄罗斯方块原理及具体步骤


Posted in HTML / CSS onNovember 29, 2013

本游戏实现的基本原理:

游戏区域是限定大小的区域,本游戏的游戏区域有21×25个矩形,每个矩形width为10单位,heght为6个单位(canvas 的绝对单位是固定的,非像素)。

创建RusBlock类包含相应的数据和行为,创建二维数组aState[21][25]记录游戏区域中被标记的矩形。

俄罗斯方块有7个部件,每个部件所占的矩形的个数和位置不同,所以建立部件类,然后建立数组储存7个部件,每个部件包涵数组储存该部件所占的矩形的个数和位置。当下落的部件到底了,就会产生一个新的部件,就部件的被标记的矩形就会赋值给游戏区域的数组。

在游戏循环函数中,打印正在下落的部件,和已经固定好的部件,还有下一下落的部件。

基本知识:

HTML5 CSS JS
本游戏包括三个文件:

RusBlock.html:设定元素
RusBlock.css:设定样式
RusBlock.js:脚本控制

第一步:界面的设置和素材的准备

RusBlock.html

复制代码
代码如下:

<!DOCTYPE html>
<html>
<head>
<title>RusBlock</title>
<link rel=”stylesheet” type=”text/css” href=”RusBlock.css”>
<script type=”text/javascript”>
function ShareGame() {
var URL = “http://share.renren.com/share/buttonshare.do?link=” + document.URL + “&title=RusBlock”;
window.showModalDialog([URL]);
}
</script>
</head>
<body onkeyup=”Action(event)”>
<audio loop=”loop” id=”Background-AudioPlayer” preload=”auto”>
<source src=”audio/background.mp3″ type=”audio/mp3″/>
</audio>
<audio id=”GameOver-AudioPlayer” preload=”auto”>
<source src=”audio/gameover.ogg” type=”audio/ogg”>
</audio>
<audio id=”Score-AudioPlayer” preload=”auto”>
<source src=”audio/score.mp3″ type=”audio/mp3″/>
</audio>
<div id=”Game-Area”>
<div id=”Button-Area”>
<h1 id=”Game-Name”>RusBlock</h1>
<button id=”Button-Game-Start” onclick=”GameStart()”>Start</button>
<button id=”Button-Game-End” onclick=”GameEnd()”>End</button>
<form id=”Form-Game-Level”>
<select id=”Select-Game-Level”>
<option value=”500″ selected=”selected”>Easy</option>
<option value=”300″>Normal</option>
<option value=”200″>Hard</option>
</select>
</form>
<button onclick=”ShareGame()” id=”Button-Game-Share”>分享到人人</button>
</div>
<canvas id=”Game-Canvas”></canvas>
<div id=”Score-Area”>
<h2>Score</h2>
<p id=”Game-Score”>0</p>
</div>
</div>
<script type=”text/javascript” src=”RusBlock.js”></script>
</body>
</html>

第二步:样式
RosBlock.css
复制代码
代码如下:

body {
background-color:gray;
text-align:center;
font-family:’Times New Roman’;
background-image:url(“”);
}
h1#Game-Name {
background-color:white;
width:100%;
font-size:x-large;
}
h2,#Game-Score {
font-size:x-large;
background-color:white;
}
#Game-Area {
position:absolute;
left:10%;
width:80%;
height:99%;
}
canvas#Game-Canvas {
background-color:white;
width:80%;
height:98%;
float:left;
}
#Button-Area ,#Score-Area{
width:10%;
height:100%;
float:left;
}
#Button-Game-Start ,#Button-Game-End,#Button-Game-Share,#Select-Game-Level{
width:100%;
height:10%;
font-size:larger;
border-right-width:3px;
background-color:white;
}
#Select-Game-Level {
width:100%;
height:100%;
font-size:x-large;
border-color:gray;
}

第三步:编写js代码 RusBlock.js

Rusblock类包括的成员解析:

数据:

nCurrentComID:当前下落部件的ID

aState[21][25]:存储游戏区域状态的数组

CurrentCom:当前下落的部件

NextCom:下一部件

ptIndex:当前下落的部件相对游戏区域的索引

函数:

NewNextCom():产生新的下一部件

NextComToCurrentCom():将下一部件的数据转移到当前下落的部件上

CanDown():判断当前部件是否还可以下落

CanNew():判断是否还可以产生新的部件

Left():当前部件向左移动

Right():当前部件向右移动

Rotate():当前部件顺时针旋转

Acceleratet():当前部件向下加速

Disappear():消去一行

CheckFail():判断是否游戏失败

InvalidateRect():刷新当前部件的区域

完成:下载Demo
HTML5+JS实现俄罗斯方块原理及具体步骤

HTML / CSS 相关文章推荐
CSS3中currentColor关键字的妙用
Feb 27 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
Dec 04 HTML / CSS
浅谈CSS3 动画卡顿解决方案
Jan 02 HTML / CSS
详解CSS3中的box-sizing(content-box与border-box)
Apr 19 HTML / CSS
HTML5新增的8类INPUT输入类型介绍
Jul 06 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
May 23 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
Dec 07 HTML / CSS
h5使用canvas画布实现手势解锁
Jan 04 HTML / CSS
小程序canvas中文字设置居中锚点
Apr 16 HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
Jun 20 HTML / CSS
关于html字符串正则判断和匹配的具体使用
Dec 12 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
Aug 11 HTML / CSS
HTML5样式控制示例代码
Nov 27 #HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
Nov 18 #HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
Nov 18 #HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
Nov 18 #HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
Nov 18 #HTML / CSS
HTML5语音识别标签写法附图
Nov 18 #HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
Nov 12 #HTML / CSS
You might like
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
php中autoload的用法总结
2013/11/08 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP反射基础知识回顾
2020/09/10 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
javascript基本类型详解
2014/11/28 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
python简单程序读取串口信息的方法
2015/03/13 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
wxPython实现整点报时
2019/11/18 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
文明学生标兵事迹
2014/01/21 职场文书
大学毕业感言100字
2014/02/03 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
使用CSS实现音波加载效果
2023/05/07 HTML / CSS