体验地址:
http://www.renyugang.cn/html/h5/
http://www.renyugang.cn/html/h5/oop/
效果图:
代码:
<!DOCTYPE html>
<html>
<head>
<title>H5 Game</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Cache-control" content="no-cache"/>
<meta name="viewport" id="viewport" content="target-densitydpi=high-dpi,user-scalable=no"/>
<meta name="oupengmobile" content="game,fullscreen,lockrotation,portrait"/>
<meta name="tencent-x5-page-direction" content="portrait">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="white">
<meta name="HandheldFriendly" content="true"/>
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
<link href="css/main.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/base.js?v1"></script>
<script type="text/javascript" src="js/utils.js?v1"></script>
<script type="text/javascript" src="js/map.js?v3"></script>
<script type="text/javascript" src="js/game.js?v1"></script>
<style type="text/css">
</style>
</head>
<body>
<div id="gamezone">
<div id="title" style="width:480px;height:25px;background-color:transparent;">
<span id="timeRemain">剩余时间:120s</span>
<span id="score">得分:0</span>
</div><br/>
</div>
<script type="text/javascript">
Base.Game.init();
</script>
</body>
</html>html, body
{
margin:0px;
padding:5px;
line-height:10px;
}
@-webkit-keyframes myfirst
{
from{top:20px,left:23px}
to {top:420px,left:23px}
}
.animation
{
-webkit-animation:myfirst 5s linear;
}
#gamezone
{
padding-top:10px;
padding-left:23px;
padding-right:23px;
width:425px;
height:420px;
margin:0 auto;
background-color:white;
background-image:url("../images/bg.png");
background-repeat:no-repeat;
text-align:left;
}
#gamezone div,.div_-2
{
background-color:#ffffff;
width:25px;
height:25px;
padding:0px;
display:inline-block;
letter-spacing:1px;
/* only for ie*/
*display:inline;
zoom:1;
border:0px solid #ffffff;
border-radius:5px;
-moz-border-radius:5px; /* Old Firefox */
}
#title
{
width:425px;
height:150px;
padding:0px;
display:block;
}
.color_-1
{
/*background-color:rgb(210,210,210);*/
opacity:0;
}
.color_0
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(204,204,104)))
}
.color_1
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(0,100,255)))
}
.color_2
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(110,206,206)))
}
.color_3
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(204,101,204)))
}
.color_4
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(204,101,0)))
}
.color_5
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(187,187,187)))
}
.color_6
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(0,202,0)))
}
.color_7
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(255,101,101)))
}
.color_8
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(255,135,255)))
}
.color_9
{
background: -webkit-gradient(linear, 0% 0%, 10% 50%, from(#fff), to(rgb(255,152,0)))
}/**
* base.js 全局数据定义
*/
var gameMode = {
level:2,
time:120,
score:5,
seriesScore:1.5
}
var gameChunkColor = [];
var gameMapArr = [];
var gameScore = 0;
var gameOver = false;
var timeRemain = gameMode.time;
//base
var Base = {}
//timer
var timer = setInterval("interval()", 1000);
function interval()
{
timeRemain--;
$$("timeRemain").innerHTML = ("剩余时间:" + timeRemain + "s");
if(timeRemain <= 0)
{
clearInterval(timer);
timeRemain = gameMode.time;
gameOver = true;
alert(‘游戏结束,得分:‘ + gameScore);
}
}
function hasClass(obj, cls)
{
return !!(obj.className.match(new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘)));
}
function removeClass(obj, cls)
{
if (hasClass(obj, cls)) {
var reg = new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘);
obj.className = obj.className.replace(reg, ‘‘);
}
}
function addClass(obj, cls)
{
if (!hasClass(obj, cls))
{
obj.className += (" " + cls);
}
}
function $query(selector, e)
{
e = e || document;
return e.querySelector(selector);
}
function $$(id)
{
return document.getElementById(id);
}/**
* game.js 游戏类
*/
(function() {
var Game = {}
Game.init = function()
{
var myGameMap = new Base.GameMap();
myGameMap._initData();
myGameMap._create(Game.clickCallBack);
this.myGameMap = myGameMap;
}
Game.searchBlock =function(i, j)
{
var left = -1;
var right = -1;
var top = -1;
var bottom = -1;
var leftColor, rightColor, topColor, bottomColor;
for(var k = j-1; k >= 0; k--)// search left
{
var color = gameMapArr[i][k]
if(color != "-1")
{
left = k;
leftColor = color;
break;
}
}
for(var k = j+1; k < this.myGameMap._c; k++)// search right
{
var color = gameMapArr[i][k]
if(color != "-1")
{
right = k;
rightColor = color;
break;
}
}
for(var k = i-1; k >= 0; k--)// search top
{
var color = gameMapArr[k][j]
if(color != "-1")
{
top = k;
topColor = color;
break;
}
}
for(var k = i+1; k < this.myGameMap._r; k++)// search bottom
{
var color = gameMapArr[k][j]
if(color != "-1")
{
bottom = k;
bottomColor = color;
break;
}
}
var leftBlock = $$("block_" + i + "_" + left);
var rightBlock = $$("block_" + i + "_" + right);
var topBlock = $$("block_" + top + "_" + j);
var bottomBlock = $$("block_" + bottom + "_" + j);
var colors = new Array();
colors.push(leftColor);
colors.push(rightColor);
colors.push(topColor);
colors.push(bottomColor);
var blocks = new Array();
blocks.push(leftBlock);
blocks.push(rightBlock);
blocks.push(topBlock);
blocks.push(bottomBlock);
//remove
Base.Utils.removeBlocks(blocks, colors);
}
Game.clickCallBack = function(target)
{
if(hasClass(target, "color_-1") == false || gameOver)
return;
var id = target.id;
var array = id.split("_");
var i = array[1];
var j = array[2];
Game.searchBlock(Number(i) , Number(j));
}
/**
* destory
*/
Game.destory = function()
{
}
Base.Game = Game;
})();/**
* map.js
*/
(function(){
/**
*定义map
*/
var GameMap = function(){}
/**
* 创建一个map 需要根据游戏的配置
* @private
*/
GameMap.prototype._create = function(callback)
{
if(!this._r || !this._c || !this._d)
{
this._initData();
}
var gamezone = $$("gamezone");
for(var i = 0; i < this._r; i++)
{
//初始化列
gameMapArr[i] = [];
for(var j = 0; j < this._c; j++)
{
var _div=document.createElement("div"); // 以 DOM 创建新元素
var num = Math.floor((Math.random() * 16));
_div.id = "block_" + i + "_" + j;
if(num >= 10)
{
num = -1;
}
_div.className = "color_" + num;
document.getElementById(‘gamezone‘).appendChild(_div);
gameMapArr[i][j] = "" + num;
// _div.onclick = callback;
_div.addEventListener(‘click‘,function(e)
{
callback(e.currentTarget);
});
}
}
}
/**
* 更新map
* @private
*/
GameMap.prototype._update = function()
{
}
/**
* 删除和销毁已有的map
* @private
*/
GameMap.prototype._destroy = function()
{
}
GameMap.prototype._initData = function()
{
//定义_r行_c列
this._r = [0,10,15,100,110,150][gameMode.level];
this._c = [0,10,17,100,110,150][gameMode.level];
//定义出现的方块种类数
this._d = [0,3,5,8,10,12][gameMode.level];
//定义空方块出现的区间
this._z = [0,3,4,5,6,7,8][gameMode.level]
}
Base.GameMap = GameMap;
})();/**
* utils.js 实用类
*/
(function() {
var Utils = {}
Utils._findDuplicateCount = function(colors, color)
{
var count = 0;
color = color || "-1";
if(color == "-1")//click region
return count;
for(var k = 0; k < colors.length; k++)
{
if(color == colors[k])
count++;
}
return count;
}
Utils._doAnimation = function(block, blockColor, direction)
{
var div=document.createElement("div");
div.className = "div_-2 color_" + blockColor;
var oRect = block.getBoundingClientRect();
var x=oRect.left
var y=oRect.top
div.cssText = "display:block;position:absolute;left:"
+ x + "px;top:" + y + "px;width:300px;background-color:black";
$query("body").appendChild(div);
addClass(div, "animation");
/*
if(direction == "left")
{
$div.animate(
{top:"420px",left:"23px"}, "normal", "swing",
function(){$div.css("display", "none");$div.remove();}
);
}
else
{
$div.animate(
{top:"420px",left:"420px"}, "normal", "swing",
function(){$div.css("display", "none");$div.remove();}
);
}*/
}
Utils.removeBlocks = function(blocks, colors)
{
var count = 0;
var colorArr = new Array();
var size = colors.length;
console.log("colors[0]=" + colors[0]);
console.log("colors[1]=" + colors[1]);
console.log("colors[2]=" + colors[2]);
console.log("colors[3]=" + colors[3]);
for(var i=0; i< size; i++)
{
count = this._findDuplicateCount(colors, colors[i]);
if(count >= 2)
{
var block = blocks[i];
var duplicateColor = colors[i];
block.style.opacity = 0;
removeClass(block, "color_" + duplicateColor);
addClass(block, "color_-1");
var id = block.id;
var array = id.split("_");
//重置array中的颜色记录
gameMapArr[array[1]][array[2]] = "-1";
this._doAnimation(block, duplicateColor, i%2==0 ? "right" : "left");
gameScore++;
$$("score").innerHTML = ("得分:" + gameScore);
}
}
return colorArr;
}
Base.Utils = Utils;
})();原文地址:http://blog.csdn.net/singwhatiwanna/article/details/25163021