国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JS小游戲之極速快跑源碼詳解

2024-05-06 16:09:11
字體:
供稿:網(wǎng)友
這篇文章主要介紹了JS小游戲之極速快跑源碼詳解,對游戲的主要流程及原理進行了較為詳細的講解,并附有完整實例源碼,需要的朋友可以參考下

本文實例講述了JS小游戲的極速快跑源碼,分享給大家供大家參考。具體如下:

游戲運行后如下圖所示:

JS小游戲之極速快跑源碼詳解

Javascript部分代碼如下:

/** 極速快跑* Author: fdipzone* Date: 2012-07-15* Ver: 1.0*/var gameimg = ['images/start.png', 'images/start_over.png', 'images/go.png', 'images/go_over.png', 'images/running.gif', 'images/run_start1.gif', 'images/run_start2.gif', 'images/run_start3.gif'];var speed_obj = new SpeedClass();window.onload = function(){ var callback = function(){ speed_obj.init(); } img_preload(gameimg, callback);}// Speed Classfunction SpeedClass(){ this.levelset = [8,5,8,12]; // 難度參數(shù) this.playerlist = null; // 選手列表 this.player = 0; // 選中的選手 this.level = 2; // 難度 this.lock = 0; // 鎖定 this.isstart = 0; // 是否開始 this.isover = 0; // 是否結(jié)束}// initSpeedClass.prototype.init = function(){ this.reset(); this.create_player(); this.create_event();}// resetSpeedClass.prototype.reset = function(){ this.player = 0; this.level = $('level').value; // level this.playerlist = $_tag('li', 'playerlist'); for(var i=0; i<this.playerlist.length; i++){ this.playerlist[i].className = ''; } disp('start_btn', 'show', 'start_btn'); disp('go_btn', 'hide', 'go_btn'); this.lock = 0; // unlock this.isstart = 0; // unstart this.isover = 0; // unover}// create playerSpeedClass.prototype.create_player = function(){ var runway = []; var playerlist = []; for(var i=1; i<=8; i++){ runway[i] = '<li><div></div></li>'; playerlist[i] = '<li>' + i + '</li>'; } $('runway').innerHTML = runway.join(''); $('playerlist').innerHTML = playerlist.join(''); runway = null; playerlist = null;}// create eventSpeedClass.prototype.create_event = function(){ var self = this; this.playerlist = $_tag('li', 'playerlist'); for(var i=0; i<this.playerlist.length; i++){ this.playerlist[i].onmouseover = function(){ if(this.className!='on'){ this.className = 'over'; } } this.playerlist[i].onmouseout = function(){ if(this.className!='on'){ this.className = ''; } } this.playerlist[i].onclick = function(o,c){ return function(){ if(self.lock==0){o.playerlist[c].className = 'on';if(o.player!=0 && o.player!=c+1){ // 不等於0且不等於自己o.playerlist[o.player-1].className = '';}o.player = c + 1; } } }(self, i); }$('start_btn').onmouseover = function(){ this.className = 'start_over_btn'; } $('start_btn').onmouseout = function(){ this.className = 'start_btn'; } $('start_btn').onclick = function(){ if(self.player==0){ return alert('請選擇要支持的選手'); }else{ self.lock = 1; // locked disp('start_btn','hide'); disp('go_btn','show'); for(var i=1; i<=8; i++){ self.start(i); } } }$('go_btn').onmouseover = function(){ this.className = 'go_over_btn'; } $('go_btn').onmouseout = function(){ this.className = 'go_btn'; } $('go_btn').onclick = function(){ self.go(); }}// start gameSpeedClass.prototype.start = function(c){ var o = $('player' + c); var step = 1; var self = this; var exert = 0;o.style.marginLeft = '62px'; // initvar et = setInterval(function(){ if(step<4){ // step 1-3 is ready o.className = 'run_status' + step; }else{ // run if(o.className!='running'){ o.className = 'running'; } // start can go if(self.isstart==0){ self.isstart = 1; } // 已有一名選手到達終點 if(self.isover==1){ clearInterval(et); }else{ if(self.player!=c){ // 其他選手exert = Math.floor(Math.random()* self.levelset[self.level])+3; // 根據(jù)level調(diào)整 } o.style.marginLeft = parseInt(o.style.marginLeft) + Math.floor(Math.random()*8)+4 + exert + 'px'; // 到達終點 if(parseInt(o.style.marginLeft)>=745){clearInterval(et);self.isover = 1;self.gameover(o.id); } } } step ++; }, 350)}// goSpeedClass.prototype.go = function(){ if(this.isstart==1 && this.isover==0){ var o = $('player' + this.player); var exert = Math.floor(Math.random()*3)+2; // 2-5 o.style.marginLeft = parseInt(o.style.marginLeft) + exert + 'px'; } return false;}// gameoverSpeedClass.prototype.gameover = function(id){ id = id.replace('player',''); var self = this; var msg = ''; if(id==this.player){ msg = "恭喜你,你支持的選手獲得勝利/n/n"; }else{ msg = "很遺憾,你支持的選手沒有獲得勝利,獲勝的是" + id + "號選/n/n"; } if(confirm(msg + '是否重新開始?')==true){ setTimeout(function(){ self.init(); },1000); }else{ return false; }}/** common function */// get document.getElementBy(id)function $(id){ this.id = id; return document.getElementById(id);}// get document.getElementsByTagNamefunction $_tag(name, id){ if(typeof(id)!='undefined'){ return $(id).getElementsByTagName(name); }else{ return document.getElementsByTagName(name); }}/* div show and hide* @param id dom id* @param handle show or hide* @param classname*/function disp(id, handle, classname){ if(handle=='show'){ $(id).style.display = 'block'; }else{ $(id).style.display = 'none'; } if(typeof(classname)!='undefined'){ $(id).className = classname; }}/* img preload* @param img 要加載的圖片數(shù)組* @param callback 圖片加載成功后回調(diào)方法*/function img_preload(img, callback){ var onload_img = 0; var tmp_img = []; for(var i=0,imgnum=img.length; i<imgnum; i++){ tmp_img[i] = new Image(); tmp_img[i].src = img[i]; if(tmp_img[i].complete){ onload_img ++; }else{ tmp_img[i].onload = function(){ onload_img ++; } } } var et = setInterval( function(){ if(onload_img==img.length){ // 定時器,判斷圖片完全加載后調(diào)用callback clearInterval(et); callback(); } },200);}

完整實例代碼點擊此處本站下載。

相信本文所述對大家的javascript游戲設(shè)計有一定的借鑒價值。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 广河县| 淮安市| 西和县| 临高县| 绿春县| 卫辉市| 卢龙县| 淮安市| 广水市| 察隅县| 修水县| 贵州省| 开阳县| 获嘉县| 华安县| 桦甸市| 宁城县| 乌鲁木齐市| 内黄县| 盘锦市| 永宁县| 台州市| 安顺市| 和硕县| 义乌市| 漳州市| 咸宁市| 六盘水市| 浑源县| 池州市| 宜黄县| 阿拉善盟| 高邮市| 黄骅市| 宁晋县| 濮阳市| 衡阳县| 延川县| 中宁县| 青神县| 嘉鱼县|