妙人

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  这是一个翻翻游戏,很简单的游戏,但是对我来说是走出去的第一步,请看到的人别喷我哦。我知道代码没有优化,游戏还有BUG,可玩性也不高,目前我还在想办法处理,我知道的不多,请各位有兴趣发现的大神帮忙点拨点拨,在下感激不尽。先感谢我的同事张童鞋,他给了我不小的帮助。

  

  这是游戏截图:

  

       

         

          游戏玩法:用鼠标点击天蓝色方块,点击一次显示,第二次点击遮盖;同时只能点开两个格子;两个相同图片,增加相应分数,每种图片分数不同;两个不同图片,还原成遮盖状态;

          代码如下图:所有代码都在一个文件中,包含了jquery和我自己的小库,但是没有用到多少里面的东西,代码中只有HZTG.D()是我小库里的,作用是获取制定ID的DOM对象。图片的话,大家有兴趣自己搞个10个图片试试吧。也可以改参数,我在代码中做注释好了。

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5     <title>2012-1-29</title>
  6     <style>
  7         .child{
  8             float:left;
  9             /*border:1px solid #fff;*/
 10             background:skyblue;
 11             margin:10px;
 12             border-radius:5px;
 13             position:relative;
 14         }
 15         .cover
 16         {
 17             width:100%;
 18             height:100%;
 19             position:absolute;
 20             left:0;
 21             background:#ededed;
 22             overflow:hidden;
 23             z-index:999;
 24             border-radius:5px;
 25             filter:alpha(opacity=50);
 26             opacity:0.5;
 27         }
 28         ul,li{ list-style:none;}
 29     </style>
 30     <script type="text/javascript" src="../js/jquery-1.4.1.min.js"></script>
 31     <script type="text/javascript" src="../js/pub.js"></script>
 32 </head>
 33 <body>
 34 </body>
 35 </html>
 36 <script>
 37 Function.prototype.createInstance = function () {
 38     var T = function () { };
 39     T.prototype = this.prototype;
 40     T.prototype.constructor = this;
 41     var o = new T();
 42     this.apply(o, arguments);
 43     return o;
 44 }
 45 function WBoard() {
 46     this.allAry = [];
 47     this.showAry = [];
 48     this.board = document.createElement("div");
 49     this.board.id = "board";
 50     document.getElementsByTagName("body")[0].appendChild(this.board);
 51     this.board.style.border = "1px solid #B0B0FF";
 52     this.board.style.borderRadius = "5px";
 53     this.board.style.display = "block";
 54     this.board.style.position = "relative";
 55     this.board.style.overflow = "hidden";
 56     this.board.style.zIndex = "9999";
 57     this.board.style.padding = "30px 0px 20px 10px";
 58     this.board.style.margin = "0 auto";
 59     this.board.style.background = "url(\"images/board_bg.jpg\") repeat";
 60 }
 61 
 62 function WChild(relid,id) {
 63     if (!this._editAry) this._editAry = [];
 64     this.id = id;
 65     this._editAry.push(id);
 66     this.show = false;
 67     this.className = "child";
 68     this.child = document.createElement("div");
 69     this.child.id = this.id;
 70     this.child.setAttribute("relid", relid);
 71     this.child.className = this.className;
 72 }
 73 
 74 WBoard.prototype.config = {
 75     Items: 1,
 76     Iwidth:"130px",
 77     Iheight:"125px",
 78     cols:5,
 79     WClothes:[],
 80     points:0,
 81     time: 30,
 82     relTime:30,
 83     defTime:30,
 84     start: false,
 85     timer: null,
 86     useTime: 0,
 87     zzOpacity:1,
 88     zzLock:false
 89 
 90 }
 91 
 92 WBoard.prototype.addChild = function (relid) {
 93     this.allAry[this.allAry.length] = new WChild(relid,this.allAry.length);
 94 }
 95 
 96 WBoard.prototype.setChildStyle = function (n) {
 97     n.style.width = this.config.Iwidth;
 98     n.style.height = this.config.Iheight;
 99 }
100 
101 WBoard.prototype.setZheZhao = function () {
102     var _opacity = this.config.zzOpacity, _IE = this.config.zzOpacity * 100;
103     if (!document.getElementById("zz")) {
104         var zz = document.createElement("div");
105         zz.id = "zz";
106         zz.style.zIndex = "10002";
107         zz.style.position = "absolute";
108         zz.style.display = "block";
109         zz.style.left = "0";
110         zz.style.top = "0";
111         zz.style.opacity = _opacity;
112         zz.style.filter = "alpha(opacity=" + _IE + ")";
113         zz.style.backgroundColor = "";
114         zz.style.width = Math.max(document.body.scrollWidth, document.body.clientWidth, $(document).width()) + "px"; // document.body.clientWidth || document.documentElement.clientWidth;
115         zz.style.height = Math.max(document.body.scrollHeight, document.body.clientHeight, $(document).height()) + "px"; // document.body.clientHeight || document.documentElement.clientHeight;
116         document.getElementsByTagName("body")[0].appendChild(zz);
117     } else {
118         HZTG.D("zz").style.opacity = _opacity;
119         HZTG.D("zz").style.filter = "alpha(opacity=" + _IE + ")";
120         HZTG.D("zz").style.display = "block";
121     }
122 
123 }
124 
125 WBoard.prototype.clearNode = function (node) {
126     this.cover(node);
127     node.onclick = null;
128 }
129 
130 WBoard.prototype.getLive = function () {
131     var _keyAry = [];
132     for (var i = 0; i < this.allAry.length; i++) {
133         _keyAry.push("" + this.allAry[i].id + "");
134     }
135     return _keyAry;
136 }
137 
138 WBoard.prototype.kill = function (showId) {
139     var _keyAry = this.getLive();
140     this.allAry.del($.inArray("" + showId + "", _keyAry));
141 }
142 
143 WBoard.prototype.getPoints = function (n) {
144     var _point, _basePoint = n.getAttribute("relid"); //this.config.points;
145     if (_basePoint) { _point = _basePoint * 2; }
146     this.config.points = _point + this.config.points;
147 }
148 WBoard.prototype.setPoints = function () {
149     if (HZTG.D("points")) {
150         HZTG.D("points").innerHTML = this.config.points;
151     }
152 }
153 
154 WBoard.prototype.Buffer = function (node, t) {
155     var sAryVal = node, _this = this;
156     if (!t) {//入库
157         this.showAry[this.showAry.length] = sAryVal;
158         var _timer = null;
159         if (this.showAry.length > 1) {
160             _this.config.zzOpacity = 0.5;
161             this.setZheZhao();
162             _timer = window.setTimeout(function () {
163                 if (_this.compare(_this.showAry[0], _this.showAry[1])) {
164                     _this.getPoints(_this.showAry[0]);
165                     _this.clearNode(_this.showAry[0]);
166                     _this.clearNode(_this.showAry[1]);
167                     for (var i = 0; i < 2; i++) {
168                         _this.kill(_this.showAry[i].id);
169                     }
170                     _this.setPoints();
171                     if (_this.allAry.length == 0) {
172                         //alert("Congratulations! You Win!");
173                         if (_this.config.timer) { clearInterval(_this.config.timer); }
174                         _this.board.style.width = _this.board.offsetWidth + "px";
175                         _this.board.style.height = _this.board.offsetHeight + "px";
176                         //_this.board.innerHTML = "";
177                         _this.config.zzOpacity = 0.5;
178                         _this.setZheZhao();
179                         _this.result();
180                     }
181                 } else {
182                     for (var i = 0; i < 2; i++) {
183                         _this.showAry[i].innerHTML = "";
184                         _this.takeOff(_this.showAry[i]);
185                     }
186                 }
187                 _this.showAry.length = 0;
188                 if(_this.config.time > 0){
189                     HZTG.D("zz").style.display = "none";
190                 }
191             }, "500");
192         }
193     } else {//出库
194         this.showAry.length = 0;
195     }
196 }
197 
198 WBoard.prototype.compare = function (n1, n2) {
199     return (n1.getAttribute("relid") == n2.getAttribute("relid"));
200 }
201 
202 WBoard.prototype.addEvent = function (o, name, fn, argsObj) {
203     var eventHander = fn;
204     var _this = this;
205     if (argsObj) {
206         eventHander = function () {
207             fn.call(_this, argsObj);
208         }
209     }
210     if (o.addEventListener) return o.addEventListener(name, eventHander, false);
211     return o.attachEvent('on' + name, eventHander);
212 }
213 
214 WBoard.prototype.cover = function (n) {
215     var _cover = document.createElement("div");
216     _cover.className = "cover";
217     n.appendChild(_cover);
218 }
219 WBoard.prototype.setTimer = function () {
220     this.config.start = true;
221     var timeL = parseInt(HZTG.D("timer").style.width), beginStep = 2, endStep = false, comparand = 0, s = 0, step = 0, secTime = 0;
222     if (this.config.start) {
223         var _sL = 0, _step = 0, _this = this;
224         this.config.timer = window.setInterval(function () {
225             s++;
226             _step = timeL % _this.config.time;
227             step = timeL / _this.config.time;
228             if (_step == comparand) {
229                 var _timeL = $("#timer").width();
230                 _timeL -= step;
231                 if (!endStep) {
232                     if (!(s > _this.config.time)) {
233                         $("#timer").width(_timeL);
234                         if (s == _this.config.time) {
235                             clearInterval(_this.config.timer);
236                             _this.result();
237                         }
238                     }
239                 } else {
240                     secTime++;
241                     if (!(secTime > _this.config.time)) {
242                         $("#timer").width(_timeL);
243                         if (secTime == _this.config.time) {
244                             clearInterval(_this.config.timer);
245                             _this.result();
246                         }
247                     }
248                 }//end if !endStep
249             } else {
250                 endStep = true;
251                 if (!(s > _this.config.relTime)) {
252                     var _timeL = $("#timer").width();
253                     _timeL -= beginStep;
254                     _sL = --_this.config.time;
255                     _this.config.time = _sL;
256                     timeL = _timeL;
257                     $("#timer").width(_timeL);
258                     if (s == _this.config.relTime) {
259                         clearInterval(_this.config.timer);
260                         _this.result();
261                     }
262                 }
263             }//end _step == comparand
264             _this.config.useTime = s+1;
265         }, "1000");
266     }
267 }
268 WBoard.prototype.nav = function () {
269     var _this = this;
270     if (!HZTG.D("pointsB")) {
271         var _timerB = document.createElement("span");
272         _timerB.style.zIndex = "100004";
273         _timerB.style.padding = "3px 5px";
274         _timerB.style.position = "absolute";
275         _timerB.style.fontSize = "14px";
276         _timerB.style.fontWeight = "bold";
277         _timerB.style.color = "#fff";
278         _timerB.style.right = "64%";
279         _timerB.style.top = "2px";
280         _timerB.style.display = "inline-block";
281         _timerB.style.marginRight = "3px";
282         this.board.appendChild(_timerB);
283         _timerB.innerHTML = "Timer :";
284     }
285 
286     if (!HZTG.D("timerContainer")) {
287         var _timerContainer = document.createElement("span");
288         _timerContainer.id = "timerContainer";
289         _timerContainer.style.zIndex = "100004";
290         _timerContainer.style.width = "100px";
291         _timerContainer.style.padding = "3px";
292         _timerContainer.style.position = "absolute";
293         _timerContainer.style.background = "url(\"images/nav_bg.jpg\") repeat";
294         _timerContainer.style.right = "47%";
295         _timerContainer.style.top = "2px";
296         _timerContainer.style.display = "inline-block";
297         _timerContainer.style.marginRight = "3px";
298         this.board.appendChild(_timerContainer);
299         if (!HZTG.D("timer")) {
300             var _timerDiv = document.createElement("span");
301             _timerDiv.id = "timer";
302             _timerDiv.style.zIndex = "100004";
303             _timerDiv.style.position = "relative";
304             _timerDiv.style.background = "#f50";
305             _timerDiv.style.width = "100px";
306             _timerDiv.style.height = "14px";
307             _timerDiv.style.display = "inline-block";
308             if (HZTG.D("timerContainer")) { HZTG.D("timerContainer").appendChild(_timerDiv); }
309             //_timerDiv.innerHTML = "";
310         }
311     }
312 
313 
314     if (!HZTG.D("pointsB")) {
315         var _pointsB = document.createElement("span");
316         _pointsB.style.zIndex = "100004";
317         _pointsB.style.padding = "3px 5px";
318         _pointsB.style.position = "absolute";
319         _pointsB.style.fontSize = "14px";
320         _pointsB.style.fontWeight = "bold";
321         _pointsB.style.color = "#fff";
322         _pointsB.style.right = "27%";
323         _pointsB.style.top = "2px";
324         _pointsB.style.display = "inline-block";
325         _pointsB.style.marginRight = "3px";
326         this.board.appendChild(_pointsB);
327         _pointsB.innerHTML = "Your Points :";
328     }
329     if (!HZTG.D("points")) {
330         var _points = document.createElement("span");
331         _points.id = "points";
332         _points.style.zIndex = "100004";
333         _points.style.padding = "3px 5px";
334         _points.style.border = "1px solid #fff"; //#CAE1E6
335         _points.style.position = "absolute";
336         _points.style.fontSize = "14px";
337         _points.style.fontWeight = "bold";
338         _points.style.background = "url(\"images/nav_bg.jpg\") repeat";
339         _points.style.borderRadius = "5px";
340         _points.style.color = "#fff";
341         _points.style.width = "60px";
342         _points.style.textAlign = "right";
343         _points.style.right = "15%";
344         _points.style.top = "2px";
345         _points.style.display = "inline-block";
346         _points.style.marginRight = "3px";
347         this.board.appendChild(_points);
348         _points.innerHTML = this.config.points;
349     }
350     if (!HZTG.D("replay")) {
351         var _replay = document.createElement("span");
352         _replay.id = "replay";
353         _replay.style.zIndex = "100004";
354         _replay.style.padding = "3px 5px";
355         _replay.style.border = "1px solid #fff"; //#CAE1E6
356         _replay.style.position = "absolute";
357         _replay.style.fontSize = "14px";
358         _replay.style.fontWeight = "bold";
359         _replay.style.background = "url(\"images/nav_bg.jpg\") repeat";
360         _replay.style.borderRadius = "5px";
361         _replay.style.color = "#fff";
362         _replay.style.right = "0";
363         _replay.style.top = "2px";
364         _replay.style.display = "inline-block";
365         _replay.style.marginRight = "3px";
366         _replay.style.cursor = "pointer";
367         this.board.appendChild(_replay);
368         _replay.innerHTML = "Replay";
369         //this.addEvent(_replay, "click", this.draw)
370         _replay.onclick = function () {
371             _this.draw();
372         }
373     }
374 }
375 
376 WBoard.prototype.result = function () {
377     this.setZheZhao();
378     this.config.time = 0;
379     if(!HZTG.D("result")){
380         this.config.zzLock = true;
381         var _result = document.createElement("div");
382         _result.id = "result";
383         _result.style.display = "block";
384         _result.style.position = "absolute";
385         _result.style.top = "20%";
386         _result.style.left = "40%";
387         _result.style.zIndex = "100007";
388         //alert(this.board.style.width);
389         _result.style.width = this.board.offsetWidth / 2 + "px";
390         _result.style.height = this.board.offsetHeight / 2 + "px";
391         _result.style.margin = "0 auto";
392         _result.style.filter = "alpha(opacity=100)";
393         _result.style.opacity = "1";
394         _result.style.background = "url(\"images/youwin.png\") 50% 20% #ededed no-repeat";
395         document.getElementsByTagName("body")[0].appendChild(_result);
396     } else {
397         //HZTG.D("rReplay").style.display = "block";
398         HZTG.D("result").style.display = "block";
399     }
400     HZTG.D("result").innerHTML = "<ul style=\"width:70%; height:45%; position:relative; left:5%; top:45%; line-height:34px; font-size:26px; font-weight:bold; color:#f60;\"><li>You Use : " + this.config.useTime + "s</li><li>You Earn : " + this.config.points + "points</li><li></li></li></ul>";
401     if (!HZTG.D("rReplay")) {
402         var rReplay = document.createElement("div");
403         rReplay.id = "rReplay";
404         rReplay.style.zIndex = "100008";
405         rReplay.style.position="relative";
406         rReplay.style.padding = "3px 5px";
407         rReplay.style.border = "1px solid #fff"; //#CAE1E6
408         rReplay.style.fontSize = "14px";
409         rReplay.style.marginTop="50px";
410         rReplay.style.left="40%";
411         rReplay.style.fontWeight = "bold";
412         rReplay.style.background = "url(\"images/nav_bg.jpg\") repeat";
413         rReplay.style.borderRadius = "5px";
414         rReplay.style.color = "#fff";
415         rReplay.style.display = "inline-block";
416         rReplay.style.cursor = "pointer";
417         HZTG.D("result").appendChild(rReplay);
418         rReplay.innerHTML = "Replay";
419         //this.addEvent(_replay, "click", this.draw)
420         var _this = this;
421         rReplay.onclick = function () {
422             _this.draw();
423         }
424     }
425     //alert("game over! you use " + this.config.useTime + "s and earn " + this.config.points + "");
426 }
427 
428 WBoard.prototype.dress = function (n) {
429     var _haveClothes = this.config.WClothes.length;
430     for (var i = 0; i < _haveClothes; i++) {
431         if (n.getAttribute("relid") == i) {
432             //n.innerHTML = "<img src=\"" + this.config.WClothes[i] + "\" width=\"98\" height=\"98\" style=\"display:none\"/>";
433             n.style.background = "url(\"" + this.config.WClothes[i] + "\") no-repeat";
434         }
435     }
436 }
437 WBoard.prototype.takeOff = function (n) {
438     n.style.background = "skyblue";
439 }
440 
441 WBoard.prototype.clear = function () {
442     if(HZTG.D("result")){HZTG.D("result").style.display = "none";}
443     if(HZTG.D("zz")){HZTG.D("zz").style.display = "none";}
444     this.config.points = 0;
445     this.allAry.length = 0;
446     this.showAry.length = 0;
447     this.board.innerHTML = "";
448 }
449 
450 WBoard.prototype.init = function () {
451     this.clear();
452     for (var i = 0; i < this.config.Items; i++) {
453         this.addChild(i);
454         this.addChild(i);
455     }
456     this.board.style.width = parseInt(this.config.cols * 152 + 10) + "px";
457     var aAry = this.allAry;
458     var aL = aAry.length;
459     var _this = this;
460     var d = 0;
461     for (var i = 0; i < aL; i++) {
462 
463         this.setChildStyle(aAry[i].child);
464         aAry[i].child.onclick = function () {
465             var sAryKey = this.getAttribute("relid");
466 
467             if (this.innerHTML.length == 0) {//入库
468                 this.innerHTML = " ";//暂时方便判断是否入库用中文状态下的空格填充
469                 _this.dress(this);
470                 _this.Buffer(this, false);
471             } else {//出库
472                 this.innerHTML = "";
473                 _this.takeOff(this);
474                 _this.Buffer(this, true);
475             }
476         }
477         //this.addEvent(aAry[i].child, "click", this.beClick, aAry[i].child);
478     }
479     this.allAry.sort(this.random);
480 }
481 
482 WBoard.prototype.draw = function () {
483     this.init();
484     this.nav();
485     var aL = this.allAry.length;
486     var str = "";
487     for (var i = 0; i < aL; i++) {
488         this.board.appendChild(this.allAry[i].child);
489     }
490     this.config.time=this.config.defTime;
491     this.setTimer();
492 }
493 
494 WBoard.prototype.replay = function () {
495     this.draw();
496 }
497 
498 WBoard.prototype.beClick = function (node) {
499     var sAryKey = node.getAttribute("relid");
500     if (node.innerHTML == "") {//入库
501         //node.innerHTML = sAryKey;
502         this.dress(node);
503         this.Buffer(node, false);
504     } else {//出库
505         //node.innerHTML = "";
506         this.takeOff(node);
507         this.Buffer(node, true);
508     }
509 }
510 
511 WBoard.prototype.random = function (a, b) {
512     return Math.random() > .5 ? -1 : 1; //用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
513 }
514 
515 Array.prototype.del = function (n) {
516     if (n < 0) return false;
517     else {
518         this.splice(n, 1); //.concat(this.slice(n + 1, this.length));
519         return this;
520     }
521 }
522 var testBoard = new WBoard("o");
523 testBoard.config.Items = 10;//这里是要显示的图片种类,最终显示Items*2的格子数,就是n对
524 testBoard.config.WClothes = ["images/apple1.png", "images/chilli1.png", "images/mushroom1.png", "images/lotusroot1.png", "images/grape1.png", "images/carrot1.png", "images/banana1.png", "images/cucumber1.png", "images/cherry1.png", "images/pomegranate1.png"];//这里的图片数必须=Items
525 testBoard.draw();
526 
527 </script>

 

posted on 2013-02-04 22:44  妙人  阅读(1656)  评论(10编辑  收藏  举报
cnmbokeyuan748!