微信小程序?qū)崿F(xiàn)2048小游戲的詳細(xì)過程
效果圖

實(shí)例代碼
今天我們要用微信小程序?qū)崿F(xiàn)2048小游戲,效果圖如上面所示。游戲的規(guī)則很簡單,你需要控制所有方塊向同一個(gè)方向運(yùn)動(dòng),兩個(gè)相同數(shù)字方塊撞在一起之后合并成為他們的和,每次操作之后會(huì)隨機(jī)生成一個(gè)2或者4,最終得到一個(gè)“2048”的方塊就算勝利了。
// 構(gòu)造一個(gè)空的矩陣[[null,..,size.length],[]]
empty: function() {
var cells = [];
for (var x = 0; x < this.size; x++) {
var row = cells[x] = [];
for (var y = 0; y < this.size; y++) {
row.push(null);
}
}
// [[{x:0,y:0},{x:0,y:1}],[]]
return cells;
},
首先我們需要做的是把游戲主體分成16個(gè)格子。用Grid代表這些格子,然后這些格子還有一下這些操作:
// 在空格子中隨機(jī)挑選出一個(gè)格子
randomAvailableCell: function() {
// 獲取可填充的格子坐標(biāo)
availableCells: function() {
// 是否存在空單元格
cellsAvailable: function()
/*
* 獲取單元格內(nèi)容
* @param {object} cell {x:0,y:0} 單元格坐標(biāo)
*/
cellContent: function(cell) {
上面的函數(shù)都是為了使接下來開發(fā)更加簡便,這樣子就可以直接操作了。
// 初始化數(shù)據(jù)
addStartTiles: function() {
for (var x = 0; x < this.startTiles; x++) {
this.addRandomTiles();
}
},
// 在一個(gè)隨機(jī)單元格中隨機(jī)填充2或4
addRandomTiles: function() {
if (this.grid.cellsAvailable()) {
var value = Math.random() < 0.9 ? 2 : 4;
var cell = this.grid.randomAvailableCell();
var tile = new Tile(cell, value);
this.grid.insertTile(tile); // 插入一個(gè)單元格
}
},
一開始進(jìn)行初始化數(shù)據(jù),以90%機(jī)率產(chǎn)生2,以10%機(jī)率產(chǎn)生4。
touchStart: function(events) {
// 多指操作
this.isMultiple = events.touches.length > 1;
if (this.isMultiple) {
return;
}
var touch = events.touches[0];
this.touchStartClientX = touch.clientX;
this.touchStartClientY = touch.clientY;
},
touchMove: function(events) {
var touch = events.touches[0];
this.touchEndClientX = touch.clientX;
this.touchEndClientY = touch.clientY;
},
touchEnd: function(events) {
if (this.isMultiple) {
return;
}
var dx = this.touchEndClientX - this.touchStartClientX;
var absDx = Math.abs(dx);
var dy = this.touchEndClientY - this.touchStartClientY;
var absDy = Math.abs(dy);
if (Math.max(absDx, absDy) > 10) {
var direction = absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0);
var data = this.GameManager.move(direction) || {
grids: this.data.grids,
over: this.data.over,
won: this.data.won,
score: this.data.score
};
}
進(jìn)行游戲手勢開始移動(dòng)和移動(dòng)結(jié)束的操作,上面這一段主要是進(jìn)行了手指移動(dòng)方向的判斷,最后是判斷出了direction,傳入this.GameManager.move(direction)進(jìn)行移動(dòng)操作。
這里面的難點(diǎn)在于數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,只要把格子弄明白就比較好辦。然后就是手指滑動(dòng)的判斷了,上面代碼也比較清楚地展現(xiàn)了。
總結(jié)
到此這篇關(guān)于微信小程序?qū)崿F(xiàn)2048小游戲的文章就介紹到這了,更多相關(guān)微信小程序2048小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)搜索功能并跳轉(zhuǎn)搜索結(jié)果頁面
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)搜索功能并跳轉(zhuǎn)搜索結(jié)果頁面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
如何進(jìn)行微信公眾號(hào)開發(fā)的本地調(diào)試的方法
這篇文章主要介紹了如何進(jìn)行微信公眾號(hào)開發(fā)的本地調(diào)試的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06
JavaScript封裝axios的實(shí)現(xiàn)詳解
這篇文章主要介紹了JavaScript封裝axios的實(shí)現(xiàn),Axios是一個(gè)開放源代碼庫,使我們可以輕松地發(fā)出HTTP請(qǐng)求。 實(shí)際上,它是通過額外的超能力來fetch2022-09-09
Cropper.js 實(shí)現(xiàn)裁剪圖片并上傳(PC端)
本案例是參考cropper站點(diǎn)實(shí)例,進(jìn)行修改簡化。接下來通過本文給大家分享Cropper.js 實(shí)現(xiàn)裁剪圖片并上傳(PC端) 功能,需要的朋友參考下吧2017-08-08
JavaScript中英文字符長度統(tǒng)計(jì)方法示例【按照中文占2個(gè)字符】
這篇文章主要介紹了JavaScript中英文字符長度統(tǒng)計(jì)方法,涉及javascript針對(duì)中英文字符的匹配與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-01-01

