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

js推箱子小游戲步驟代碼解析

 更新時間:2018年01月10日 08:45:52   投稿:laozhang  
本篇文章通過代碼分析給大家講解了JS制作推箱子小游戲的步驟以及要點,需要的朋友參考學習下吧。

推箱子小游戲大家肯定都玩過,之所以寫這篇文章,是覺得這個小游戲足夠簡單好理解

demo:

步驟解析:

本文代碼已經(jīng)放在了github上面了,里面也進行了很詳細的代碼注釋,可以copy下來,在本地運行一下看看。

1. 渲染地圖

html結(jié)構:

html結(jié)構十分簡單,只要弄一堆div,來放置地圖的class就可以了,我這里初始化了12*9個div,地圖里最多九行高度。
這些div都是同樣大小,地圖渲染出來區(qū)別的只是顏色的不同。

地圖函數(shù):

 var box=$('.box div'); //地圖使用的div集合
 function create(){ //創(chuàng)建地圖函數(shù)
 box.each(function(index){ //index的數(shù)量是固定的,是box div下面div的數(shù)量
  // 每次創(chuàng)建地圖初始化div
  box.eq(index).removeClass();
 });
 box.each(function(index,element){ //循環(huán)整個div的數(shù)量 二維數(shù)組里數(shù)量不夠的 默認為空白
 //level為關卡數(shù) 根據(jù)關卡渲染地圖 builder為二維數(shù)組,為地圖關卡
  if(builder[level][index]){ //過濾0
   box.eq(index).addClass('type'+builder[level][index]);
  }
 });
 box.eq(origin[level]).addClass("pusher"); //推箱人 皮卡丘位置
 }
 //第一關的地圖長這樣(下面只是栗子,不是代碼),0代表不可抵達區(qū)域,1代表目標(要被推到的地方),
 //2代表普通路徑(可以走的),3代表墻,4代表箱子
 [0,0,0,0,3,3,3,0,0,0,0,0,
 0,0,0,0,3,1,3,0,0,0,0,0,
 0,0,0,0,3,2,3,3,3,3,0,0,
 0,0,3,3,3,4,2,4,1,3,0,0,
 0,0,3,1,2,4,2,3,3,3,0,0,
 0,0,3,3,3,3,4,3,0,0,0,0,
 0,0,0,0,0,3,1,3,0,0,0,0,
 0,0,0,0,0,3,3,3,0,0,0,0] 

2. 捕獲鍵盤事件,判斷是否可以移動
使用$(document).keydown()jqery事件,捕獲鍵盤事件。

捕獲鍵盤事件,上下左右以及wsad。

 $(document).keydown(function (e) {
 var key=e.which;
 switch(key){
 //col 的值為12,上下移動要12個div為一個周期
 //方向鍵上或者w
 case 87:
 case 38:
  move(-col);//判斷移動函數(shù)
 break;
 //方向鍵下或者s
 case 83:
 case 40:
  move(col);
 break;
 //方向鍵左或者a
 case 65:
 case 37:
  move(-1);
 break;
 //方向鍵右或者d
 case 68:
 case 39:
  move(1);
 break;
 }
 setTimeout(win,500); //按鍵之后調(diào)判斷是否過關
 });

判斷是否可以移動。
分為兩個判斷條件:一個是推箱子,一個是不推箱子 自然移動,否則不移動皮卡丘。

 function move(step){ //是否移動判斷
   // 分為兩個判斷條件一個是推箱子,一個是不推箱子 自然移動。 否則不移動皮卡丘
   //step 上下是12個div一個周期,左右是1個div positin是皮卡丘的原來位置
  var pikaqiu1=box.eq(position);//皮卡丘現(xiàn)在的地方
  var pikaqiu2=box.eq(position+step);//皮卡丘要去的下一個地方
  var pushBox=box.eq(position+step*2);//箱子要去的下一個地方
  if(!pikaqiu2.hasClass('type4')&&( pikaqiu2.hasClass('type1')||pikaqiu2.hasClass('type2'))){ //自然移動
   //判斷:如果下一個div的class不包含type4(箱子),并且 下一個div含有type1(目標位置),或者type2(普通路徑)
   //這一步和下一步判斷是否有type4的原因是普通路徑會變成有type4的路徑,這時候就會出現(xiàn)問題
   pikaqiu1.removeClass("pusher"); //移除當前皮卡丘
   pikaqiu2.addClass("pusher");//移動皮卡丘到下一個位置
   position=position+step;//增加position值
  }
  else if((pikaqiu2.hasClass('type4'))&&(!pushBox.hasClass('type4'))&&(pushBox.hasClass('type1')|| pushBox.hasClass('type2')) ) {
   //推箱子 
   //如果下一個div的class包含type4(箱子)并且 不包含重疊type4(箱子) 并且 包含class type1(目標位置)或者 包含type2(空路)
   pikaqiu2.removeClass('type4');//移除當前箱子
   pikaqiu1.removeClass("pusher");//移除當前皮卡丘
   pushBox.addClass('type4');//移動箱子到下一個位置
   pikaqiu2.addClass("pusher").addClass("type2");//
   //本來是type4 移除之后,這里沒有class了,要變成普通路徑
   position=position+step;//增加position值 
  }
 } 

3.勝利判斷:
每次移動都要調(diào)用這個勝利判斷。

function win(){ //勝利條件判斷
 if($(".type1.type4").length===goal){ //推的箱子與關卡設置通過箱子的數(shù)量對比
  if(level<9) {
   alert("666,挑戰(zhàn)下一關吧--OBKoro1");
   level++; //關卡+1
   goal = goalList[level];
   position = origin[level];
   create();
  }else {
   alert("厲害啊 大佬 通關了都");
  }
 }
}

代碼地址

demo地址

相關文章

  • javascript打開新窗口同時關閉舊窗口

    javascript打開新窗口同時關閉舊窗口

    因業(yè)務需要,在網(wǎng)上查找這個問題的解決辦法,但是昏天黑地地搞了半天,找到的方法雖然可以實現(xiàn)功能,但是總是會跳出討厭的“關閉窗口”的提示框,郁悶。
    2009-01-01
  • HTML+CSS+JS實現(xiàn)抓娃娃機游戲

    HTML+CSS+JS實現(xiàn)抓娃娃機游戲

    這篇文章主要介紹了如何利用HTML+CSS+JS制作抓娃娃機游戲,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • Vuex模塊化應用實踐示例

    Vuex模塊化應用實踐示例

    這篇文章主要介紹了Vuex模塊化應用實踐示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • openlayers 3實現(xiàn)車輛軌跡回放

    openlayers 3實現(xiàn)車輛軌跡回放

    這篇文章主要為大家詳細介紹了openlayers 3實現(xiàn)車輛軌跡回放,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 監(jiān)控 url fragment變化的js代碼

    監(jiān)控 url fragment變化的js代碼

    url 里面的 #后面的部分 可以實現(xiàn)無刷新的改變url 的值。這個特點非常有用。比如視頻網(wǎng)站土豆中的豆單,你進入視頻列表以后,點擊播放某個視頻。
    2010-04-04
  • js實現(xiàn)精確到秒的倒計時效果

    js實現(xiàn)精確到秒的倒計時效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)精確到秒的倒計時效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 為什么TypeScript的Enum會出現(xiàn)問題

    為什么TypeScript的Enum會出現(xiàn)問題

    TypeScript引入了很多靜態(tài)編譯語言的特性,今天有一個類型需要著重討論下,這就是enum,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • 微信小程序?qū)崿F(xiàn)底部彈出框封裝

    微信小程序?qū)崿F(xiàn)底部彈出框封裝

    這篇文章主要為大家詳細介紹了微信小程序底部彈出框封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Firefox下提示illegal character并出現(xiàn)亂碼的原因

    Firefox下提示illegal character并出現(xiàn)亂碼的原因

    Firefox下提示illegal character并出現(xiàn)亂碼的問題,時間是是因為編碼的問題導致。
    2010-03-03
  • Js之如何移除Array/數(shù)組中指定元素

    Js之如何移除Array/數(shù)組中指定元素

    這篇文章主要介紹了Js之如何移除Array/數(shù)組中指定元素問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

呼和浩特市| 青岛市| 荃湾区| 孟津县| 定日县| 江源县| 平泉县| 中宁县| 南投市| 盐亭县| 明溪县| 安吉县| 阜宁县| 六枝特区| 阿图什市| 腾冲县| 长垣县| 甘肃省| 昌宁县| 平泉县| 桐乡市| 霞浦县| 陕西省| 牡丹江市| 达州市| 嫩江县| 上思县| 甘孜| 五台县| 苏州市| 巩义市| 利川市| 芦溪县| 莱芜市| 勐海县| 探索| 大同县| 张家港市| 易门县| 洞头县| 荃湾区|