体验地址:
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