最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS小游戲之仙劍翻牌源碼詳解

 更新時(shí)間:2014年09月25日 09:40:46   投稿:shichen2014  
這篇文章主要介紹了JS小游戲之仙劍翻牌源碼,是一款比較經(jīng)典的卡牌類游戲,對于javascript游戲設(shè)計(jì)有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了JS小游戲的仙劍翻牌源碼,是一款非常優(yōu)秀的游戲源碼。分享給大家供大家參考。具體如下:

一、游戲介紹:

這是一個(gè)翻牌配對游戲,共十關(guān)。

1.游戲隨機(jī)從42張牌中抽取9張進(jìn)行游戲,每組為2張相同的牌,共18張牌。
2.連續(xù)翻到兩張相同的為勝利,當(dāng)9組全部翻到則過關(guān)。如不是翻到連續(xù)兩張相同的,則需要重新翻。
3.游戲共有10關(guān),在規(guī)定時(shí)間內(nèi)通過為挑戰(zhàn)成功。
4.如果某關(guān)在規(guī)定時(shí)間內(nèi)沒有通過,則會從當(dāng)前關(guān)繼續(xù)游戲。
5.游戲中的卡牌圖片與音樂均為大宇公司所有。
6.需要支持html5的瀏覽器,chrome與firefox效果最好。

游戲圖片:

完整實(shí)例代碼點(diǎn)擊此處本站下載

二、Javascript部分:

/** 仙劍翻牌游戲
*  Date:  2013-02-24
*  Author: fdipzone
*  Ver   1.0
*/
window.onload = function(){
  var gameimg = [
          'images/start.png', 
          'images/success.png',
          'images/fail.png',
          'images/clear.png',
          'images/cardbg.jpg',
          'images/sword.png'
         ];

  for(var i=1; i<=card.get_total(); i++){
    gameimg.push('images/card' + i + '.jpg');
  }

  var callback = function(){
    card.init();
  }

  img_preload(gameimg, callback);
}

/** card class */
var card = (function(total,cardnum){

  var gametime = [0,65,60,55,50,45,40,35,30,25,20]; // 每關(guān)的游戲時(shí)間
  var turntime = 8;                 // 觀看牌時(shí)間
  var level = 1;                  // 當(dāng)前關(guān)卡
  var carddata = [];                // 記錄牌的數(shù)據(jù)
  var leveldata = [];                // 當(dāng)前關(guān)卡牌數(shù)據(jù)
  var is_lock = 0;                 // 是否鎖定
  var is_over = 0;                 // 游戲結(jié)束
  var first = -1;                  // 第一次翻開的卡
  var matchnum = 0;                 // 配對成功次數(shù)

  // 初始化
  init = function(){
    tips('show');
    $('startgame').onclick = function(){
      tips('hide');
      start();
    }
  }

  // 開始游戲
  start = function(){
    reset();
    create(cardnum);
    show();

    var curtime = turntime;

    setHtml('livetime', curtime);
    
    var et = setInterval(function(){
      if(curtime==0){
        clearInterval(et);
        turnall();
        set_event();
        message('start', process);
        return ;
      }

      if(curtime==turntime){
        turnall();
      }

      curtime--;
      setHtml('livetime', curtime);
    }, 1000)
  }

  // 隨機(jī)抽取N張牌
  create = function(n){
    carddata = [];
    leveldata = [];
    
    // 創(chuàng)建所有牌
    for(var i=1; i<=total; i++){
      carddata.push(i);
    }
  
    // 抽取牌
    for(var i=0; i<n; i++){
      var curcard = carddata.splice(Math.random()*carddata.length, 1).pop();
      leveldata.push({'cardno':curcard,'turn':0}, {'cardno':curcard,'turn':0});
    }

    // 生成隨機(jī)順序游戲牌
    leveldata = shuffle(leveldata);
  }

  // 生成牌
  show = function(){
    var cardhtml = '';
    for(var i=0; i<leveldata.length; i++){
      cardhtml += '<div class="cardplane">';
      cardhtml += '<div class="card viewport-flip" id="card' + i + '">';
      cardhtml += '<div class="list flip out"><img src="images/card' + leveldata[i]['cardno'] + '.jpg"></div>';
      cardhtml += '<div class="list flip"><img src="images/cardbg.jpg"></div>';
      cardhtml += '</div>';
      cardhtml += '</div>';

    }
    setHtml('gameplane', cardhtml);
  }

  // 全部翻轉(zhuǎn)
  turnall = function(){
    for(var i=0; i<leveldata.length; i++){
      turn_animate(i);
    }
  }

  // 翻轉(zhuǎn)動畫
  turn_animate = function(key){
    var obj = $_tag('div', 'card' + key);
    var cardfont, cardback;
    
    if(getClass(obj[0]).indexOf('out')!=-1){
      cardfont = obj[0];
      cardback = obj[1];
    }else{
      cardfont = obj[1];
      cardback = obj[0];
    }

    setClass(cardback, 'list flip out');
    var et = setTimeout(function(){
      setClass(cardfont, 'list flip in');
    }, 225);
  }

  // 設(shè)置點(diǎn)擊事件
  set_event = function(){
    var o = $_tag('div', 'gameplane');
    for(var i=0,count=o.length; i<count; i++){
      if(getClass(o[i])=='card viewport-flip'){
        o[i].onclick = function(){
          turn(this.id);
        }
      }
    }
  }

  // 計(jì)時(shí)開始
  process = function(){

    is_lock = 0;

    var curtime = gametime[level];
    setHtml('livetime', curtime);

    var et = setInterval(function(){
      if(matchnum==cardnum){
        clearInterval(et);
        return ;
      }
      curtime--;
      setHtml('livetime', curtime);
      
      if(curtime==0){
        clearInterval(et);
        is_over = 1;
        message('fail', start);
      }

    }, 1000);
  }


  // 游戲訊息動畫
  message = function(type, callback){

    is_lock = 1;

    var message = $('message');
    var processed = 0;
    var opacity = 0;
    var soundtime = {
          'start': 1500,
          'success': 4000,
          'fail': 6000,
          'clear': 4000
    };

    disp('message','show');
    setClass(message,'message_' + type);
    setOpacity(message, opacity);
    setPosition(message, 'left', 0);
    setPosition(message, 'top', 390);

    if(type=='start'){
      bgsound(type, true);
    }else{
      bgsound(type);
    }

    var et = setInterval(function(){
      var message_left = getPosition(message,'left');
      processed = processed + 25;

      if(processed>=500 && processed<=750){
        opacity = opacity+10;
        setPosition(message, 'left', message_left + 30);
        setOpacity(message, opacity);
      }else if(processed>=soundtime[type] && processed<=soundtime[type]+250){
        opacity = opacity-10;
        setPosition(message, 'left', message_left + 35);
        setOpacity(message, opacity);
      }else if(processed>soundtime[type]+250){
        disp('message','hide');
        clearInterval(et);
        if(typeof(callback)!='undefined'){
          callback();
        }
      }
    },25);
  }

  // 翻牌
  turn = function(id){
    if(is_lock==1){
      return ;
    }

    var key = parseInt(id.replace('card',''));
  
    if(leveldata[key]['turn']==0){ // 未翻開
      if(first==-1){ // 第一次翻
        turn_animate(key);
        first = key;
        leveldata[key]['turn'] = 1;
      }else{ // 第二次翻
        turn_animate(key);
        leveldata[key]['turn'] = 1;
        check_turn(key);
      }
    }
  }

  // 檢查是否翻牌成功
  check_turn = function(key){
    is_lock = 1;

    if(leveldata[first]['cardno']==leveldata[key]['cardno']){ // 配對成功
      matchnum ++;

      if(matchnum==cardnum){
        var et = setTimeout(function(){
          message('success', levelup);
        }, 225);
      }
      first = -1;
      is_lock = 0;

    }else{ // 配對失敗,將翻開的牌翻轉(zhuǎn)

      var et = setTimeout(function(){
          turn_animate(first);
          leveldata[first]['turn'] = 0;
          turn_animate(key);
          leveldata[key]['turn'] = 0;

          first = -1;
          
          if(is_over==0){
            is_lock = 0;
          }
        }, 300);
    }
  }

  // 過關(guān)
  levelup = function(){
    if(level<gametime.length-1){
      level ++;
      setHtml('level', level);
      start();
    }else{
      clear();
    }
  }

  // 全部通關(guān)
  clear = function(){
    level = 1;
    disp('levelplane','hide');
    disp('process', 'hide');
    setHtml('gameplane','');
    message('clear',init);
  }

  // 音樂播放
  bgsound = function(file, loop){
    var id = 'audioplayer';

    if(typeof(file)!='undefined'){
      if(typeof(loop)=='undefined'){
        loop = false;
      }

      var audiofile = [];
      audiofile['mp3'] = 'music/' + file + '.mp3';
      audiofile['ogg'] = 'music/' + file + '.ogg';
      audioplayer(id, audiofile, loop);
    }else{
      audioplayer(id);
    }
  }

  // 游戲玩法
  tips = function(type){
    disp('tips', type);
  }

  // 獲取牌總數(shù)
  get_total = function(){
    return total;
  }

  // 重置參數(shù)
  reset = function(){
    disp('levelplane','show');
    setHtml('level', level);
    disp('process', 'show');
    setHtml('livetime', '');
    setHtml('gameplane', '');
    is_lock = 1;
    is_over = 0;
    first = -1;
    matchnum = 0;
  }

  return this;

})(42,9);

相信本文所述對大家javascript游戲設(shè)計(jì)的學(xué)習(xí)有一定的借鑒價(jià)值。

相關(guān)文章

  • 游覽器中javascript的執(zhí)行過程(圖文)

    游覽器中javascript的執(zhí)行過程(圖文)

    在講這個(gè)問題之前,先來補(bǔ)充幾個(gè)知識點(diǎn),如果對此已經(jīng)比較了解可以直接跳過
    2012-05-05
  • 20多個(gè)小事例帶你重溫ES10新特性(小結(jié))

    20多個(gè)小事例帶你重溫ES10新特性(小結(jié))

    這篇文章主要介紹了20多個(gè)小事例帶你重溫ES10新特性(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • ES6生成器用法實(shí)例分析

    ES6生成器用法實(shí)例分析

    這篇文章主要介紹了ES6生成器用法,結(jié)合實(shí)例形式分析了ECMAScript6中生成器的概念、語法、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • Code Review 方法論與實(shí)踐總結(jié)梳理

    Code Review 方法論與實(shí)踐總結(jié)梳理

    這篇文章主要為大家介紹了Code Review 方法論與實(shí)踐總結(jié)梳理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • layui table 表格模板按鈕的實(shí)例代碼

    layui table 表格模板按鈕的實(shí)例代碼

    今天小編就為大家分享一篇layui table 表格模板按鈕的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 紅米手機(jī)搶購的js代碼

    紅米手機(jī)搶購的js代碼

    這篇文章主要介紹了紅米手機(jī)搶購時(shí)返回的js代碼,制作紅米搶購軟件時(shí)可以用到,,需要的朋友可以參考下
    2014-03-03
  • JS的replace方法

    JS的replace方法

    在javascript中,String的函數(shù)replace()簡直太讓人喜愛了。它靈活而強(qiáng)大的字符替換處理能力,這里簡單介紹下,方便需要的朋友
    2013-12-12
  • 基于Flowplayer打造一款免費(fèi)的WEB視頻播放器附源碼

    基于Flowplayer打造一款免費(fèi)的WEB視頻播放器附源碼

    Flowplayer是一款免費(fèi)的WEB視頻播放器。它支持播放flv、swf等流媒體和圖片文件,能夠非常流暢的播放視頻文件,支持自定義配置和擴(kuò)展。下面本篇文章給大家介紹基于Flowplayer打造一款免費(fèi)的WEB視頻播放器,需要的朋友可以參考下
    2015-09-09
  • 基于javascript實(shí)現(xiàn)checkbox復(fù)選框?qū)嵗a

    基于javascript實(shí)現(xiàn)checkbox復(fù)選框?qū)嵗a

    這篇文章主要介紹了基于javascript實(shí)現(xiàn)checkbox復(fù)選框?qū)嵗a,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 支付寶小程序從手動埋點(diǎn)到自動埋點(diǎn)的實(shí)現(xiàn)過程

    支付寶小程序從手動埋點(diǎn)到自動埋點(diǎn)的實(shí)現(xiàn)過程

    埋點(diǎn)的意思是在你想要的數(shù)據(jù)節(jié)點(diǎn)出進(jìn)行設(shè)置,可以方便進(jìn)行采集,下面這篇文章主要給大家介紹了關(guān)于支付寶小程序從手動埋點(diǎn)到自動埋點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論

晋中市| 从化市| 泰来县| 玉环县| 连城县| 东明县| 长垣县| 葵青区| 青神县| 双辽市| 乳山市| 若羌县| 乐亭县| 石门县| 游戏| 新蔡县| 北票市| 湖州市| 策勒县| 安国市| 涞源县| 铁岭县| 石狮市| 安丘市| 定安县| 即墨市| 博白县| 松阳县| 潜山县| 锡林郭勒盟| 茂名市| 平武县| 黑山县| 兴义市| 信丰县| 定州市| 阆中市| 新民市| 馆陶县| 龙游县| 清新县|