溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微信小程序怎么實(shí)現(xiàn)2048小游戲

發(fā)布時(shí)間:2021-09-30 10:43:29 來源:億速云 閱讀:209 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“微信小程序怎么實(shí)現(xiàn)2048小游戲”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“微信小程序怎么實(shí)現(xiàn)2048小游戲”這篇文章吧。

效果圖

微信小程序怎么實(shí)現(xiàn)2048小游戲

實(shí)例代碼

今天我們要用微信小程序?qū)崿F(xiàn)2048小游戲,效果圖如上面所示。游戲的規(guī)則很簡(jiǎn)單,你需要控制所有方塊向同一個(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ā)更加簡(jiǎn)便,這樣子就可以直接操作了。

 // 初始化數(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)行游戲手勢(shì)開始移動(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)了。

以上是“微信小程序怎么實(shí)現(xiàn)2048小游戲”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI