微信小程式版2048小遊戲
最近流行微信「跳一跳」小遊戲,本站也有文章分享:php實現微信跳一跳小遊戲,本文主要分享實現2048的演算法以及注意的點,一起來學習吧! (源碼位址見文章末)。
演算法
產生4*4棋盤檢視
隨機產生2或4填入兩個儲存格
記錄使用者touch時的起始位置和結束位置,以此判斷滑動方向
根據滑動方向移動單元格,並進行相同值合併
用戶一次滑動完成後重複執行步驟2
判斷遊戲是否結束,並根據遊戲結果產生不同提示
難點
#確定滑動方向
用戶滑動時相同格子合併,並移到滑動方向一側
實作
視圖實作
1、用wxml+wxss產生棋盤視圖
2、用wx :for將資料渲染到每個單元格
邏輯實現
1、頁面載入完畢隨機用數字2或4填充兩個單元格
2、判斷用戶滑動方向
使用touchStart事件函數取得起始位置touchStartX、touchStartY
#使用touchMove事件函數取得終點位置touchEndX、touchEndY
var disX = this.touchStartX - this.touchEndX; var absdisX = Math.abs(disX); var disY = this.touchStartY - this.touchEndY; var absdisY = Math.abs(disY); // 确定移动方向 // 0:上, 1:右, 2:下, 3:左 var direction = absdisX > absdisY ? (disX < 0 ? 1 : 3) : (disY < 0 ? 2 : 0);
3、根據滑動方向(假設向右滑)移動表格以及相同項目合併
將2048的棋盤產生4*4的二維陣列list,為空的空格用0表示
// 比如棋盘数据如下 var grid = [ [2, 2, 0, 0], [0, 0, 0, 0], [0, 8, 4, 0], [0, 0, 0, 0] ];
根據滑動方向產生4*4二維陣列
var list = [ [0, 0, 2, 2], // 注意是0022不是2200,因为像右滑动所以从右边push入数组 [0, 0, 0, 0], [0, 4, 8, 0], [0, 0, 0, 0] ];
對應程式碼(程式碼中this.board.grid為上面的初始grid):
formList(dir) { // 根据传入的滑动方向生成list的四个数组 var list = [[], [], [], []]; for(var i = 0; i < this.size; i++) for(var j = 0; j < this.size; j++) { switch(dir) { case 0: list[i].push(this.board.grid[j][i]); break; case 1: list[i].push(this.board.grid[i][this.size-1-j]); break; case 2: list[i].push(this.board.grid[this.size-1-j][i]); break; case 3: list[i].push(this.board.grid[i][j]); break; } } return list; }
將list的每一個小數組中的數字提到前面,0放到末尾
list2 = [ [2, 2, 0, 0], [0, 0, 0, 0], [4, 8, 0, 0], [0, 0, 0, 0] ];
對應程式碼:
changeItem(item) { // 将 [0, 2, 0, 2] 改为 [2, 2, 0, 0] var cnt = 0; for(var i = 0; i < item.length; i++) if(item[i] != 0) item[cnt++] = item[i]; for(var j = cnt; j < item.length; j++) item[j] = 0; return item; }
將相同值的儲存格加起來,並將後面的一個儲存格值變成0
list2 = [ [4, 0, 0, 0], [0, 0, 0, 0], [4, 8, 0, 0], [0, 0, 0, 0] ];
對應程式碼:
combine(list) { // 滑动时相同的合并 for(var i = 0; i < list.length; i++) // 数字靠边 list[i] = this.changeItem(list[i]); for(var i = 0; i < this.size; i++) { for(var j = 1; j < this.size; j++) { if(list[i][j-1] == list[i][j] && list[i][j]!=0) { list[i][j-1] += list[i][j]; list[i][j] = 0; } } } for (var i = 0; i < list.length; i++) // 再次数字靠边,避免0220变成0400的情况发生 list[i] = this.changeItem(list[i]); return list; }
將list2回退為list並渲染資料到棋盤檢視
list = [
[0, 0, 0, 4],
[0, 0, 0, 0],
[0, 0, 8, 4],
[0, 0, 0, 0]
];
#對應程式碼:
move(dir) { // 0:上, 1:右, 2:下, 3:左 var curList = this.formList(dir); var list = this.combine(curList); var result = [[],[],[],[]]; for(var i = 0; i < this.size; i++) for(var j = 0; j < this.size; j++) { switch (dir) { case 0: result[i][j] = list[j][i]; break; case 1: result[i][j] = list[i][this.size-1-j]; break; case 2: result[i][j] = list[j][this.size-1-i]; break; case 3: result[i][j] = list[i][j]; break; } } this.board.grid = result; this.setDataRandom(); // 移动一次之后随机用2或4填充两个单元格 return result; }
4、重複步驟1
5、判斷遊戲是否結束
判斷標準:4*4單元格填滿且任一單元格上下左右沒有相同值的儲存格
isOver() { // 游戏是否结束,结束条件:可用格子为空且所有格子上下左右值不等 for (var i = 0; i < this.size; i++) // 左右不等 for (var j = 1; j < this.size; j++) { if (this.board.grid[i][j] == this.board.grid[i][j - 1]) return false; } for (var j = 0; j < this.size; j++) // 上下不等 for (var i = 1; i < this.size; i++) { if (this.board.grid[i][j] == this.board.grid[i - 1][j]) return false; } return true; }
6、根據遊戲結果給出相應提示
po一個源碼地址:windlany/wechat-weapp-2048 有興趣的可以嘗試哦,希望能幫助大家。
相關推薦:
#以上是微信小程式版2048小遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

隨著行動互聯網技術和智慧型手機的普及,微信成為了人們生活中不可或缺的一個應用。而微信小程式則讓人們可以在不需要下載安裝應用程式的情況下,直接使用小程式來解決一些簡單的需求。本文將介紹如何使用Python來開發微信小程式。一、準備工作在使用Python開發微信小程式之前,需要先安裝相關的Python函式庫。這裡推薦使用wxpy和itchat這兩個函式庫。 wxpy是一個微信機器

我們在使用win10作業系統的時候,想知道win10更新了之後是不是還保存有以前舊版本中的自帶遊戲掃雷,據小編所知,我們可以在商店中進行下載安裝,只要在商店中搜尋microsoftminesweeper即可。具體步驟就來跟小編一起看一下~windows10有掃雷遊戲嗎1,先打開win10開始選單,點選。然後搜索,點選搜尋。 2,點擊排在第一位的。 3,然後就可能需要輸入微軟帳號,也就是Microsoft帳號。沒有Microsoft帳號的可以安裝提示註冊即可。輸入帳戶密碼,點選下一步。 4,然後開始下

實作微信小程式中的卡片翻轉特效在微信小程式中,實現卡片翻轉特效是一種常見的動畫效果,可以提升使用者體驗和介面互動的吸引力。以下將具體介紹如何在微信小程式中實現卡片翻轉的特效,並提供相關程式碼範例。首先,需要在小程式的頁面佈局檔案中定義兩個卡片元素,一個用於顯示正面內容,一個用於顯示背面內容,具體範例程式碼如下:<!--index.wxml-->&l

小程式能用react,其使用方法:1、基於「react-reconciler」實作一個渲染器,產生一個DSL;2、建立一個小程式元件,去解析和渲染DSL;3、安裝npm,並執行開發者工具中的建構npm;4、在自己的頁面中引入包,再利用api即可完成開發。

本站10月31日消息,今年5月27日,螞蟻集團宣布啟動“漢字拾光計劃”,最近又迎來新進展:支付寶上線“漢字拾光-生僻字”小程序,用於向社會徵集生僻字,補充生僻字庫,同時提供不同的生僻字輸入體驗,以幫助完善支付寶內的生僻字輸入方法。目前,用戶搜尋「漢字拾光」、「生僻字」等關鍵字就可以進入「生僻字」小程式。在小程式裡,使用者可以提交尚未被系統辨識輸入的生僻字圖片,支付寶工程師確認後,將會對字庫進行補錄入。本站注意到,使用者也可以在小程式體驗最新的拆字輸入法,這項輸入法針對讀音不明確的生僻字設計。用戶拆

谷歌瀏覽器怎麼玩小遊戲?谷歌瀏覽器之中是有著非常多充滿人文關懷的功能設計的,各位可以在其中獲得非常多樣化的樂趣。在Google瀏覽器之中,有這一個非常好玩的彩蛋小遊戲,即小恐龍遊戲,很多小伙伴都非常喜歡這個遊戲,但卻不清楚該怎麼觸發進行遊玩,下面就由小編為大家帶來恐龍小遊戲進入教程。谷歌瀏覽器怎麼玩小遊戲方法一:【電腦斷網】如果你的電腦使用有線網絡,請拔掉網線;如果你的電腦使用無線網絡,請在電腦右下角點擊無線網絡連接斷開。 ②在你電腦斷網的前提下,打開Google瀏覽器(GoogleChrome)即可出現Google瀏覽

win10系統的小遊戲掃雷在哪裡?很多用戶在使用Win7系統的時候最喜歡玩的就是Win7自備的掃雷了,甚至有些小夥伴會為了比拼掃雷的速度一直在玩。但不少用戶在升級了Windows10系統後發現電腦的掃雷不見了,很多小伙伴不知道怎麼詳細操作,小編下面整理了Win10掃雷小遊戲的位置分享,如果你有興趣的話,跟著小編一起往下看看吧! Win10掃雷小遊戲的位置分享 1,先開啟win10開始選單,點選【應用程式商店】。然後搜尋【microsoftminesweeper】,點選搜尋。 2,點選排

uniapp如何實現小程式和H5的快速轉換,需要具體程式碼範例近年來,隨著行動網路的發展和智慧型手機的普及,小程式和H5成為了不可或缺的應用形式。而uniapp作為一個跨平台的開發框架,可以在一套程式碼的基礎上,快速實現小程式和H5的轉換,大大提高了開發效率。本文將介紹uniapp如何實現小程式和H5的快速轉換,並給出具體的程式碼範例。一、uniapp簡介unia
