1. 程式人生 > >js實現2048小遊戲

js實現2048小遊戲

最近同學參加宣講會,說有個公司要求是寫一個2048小遊戲,參考了一點網上的程式碼以後,自己寫了一個。

遊戲進行時遊戲結束

寫的思路如下:
1.設定好HTML佈局。大盒子巢狀小盒子,這塊沒什麼可說的。
2.實現遊戲初始化,生成一開始的兩個小塊。這裡就要實現生成隨機2或4,還要放入隨機位置。其實從佈局好了之後差不多就能想到用陣列來儲存數字了。這塊主要用了Math.random()來生成隨機數和隨機X,Y來插入到陣列中。然後寫一個更新頁面的函式,利用JS來更新小盒子的內容和CSS樣式。這裡把這一塊,初始化陣列和生成兩個隨機盒子的函式寫成了一個newGame()函式,這樣重新開始遊戲可以直接呼叫。
3.最重要的來了,移動。我自己寫的時候我是先按照先能然他們移動,在來考慮合併的思路來的。要留一個能記錄下來為0的位置的變數,比如向下移動的時候,程式碼如下。

for(var i = 0;i<4;i++){
    var n=3;
    for(var j = 3;j>=0;j--){
        if(board[j][i] == 0){
            continue;
        }else{
            if(board[n][i]==0){
                board[n][i] = board[j][i];
                board[j][i] = 0;
            }
            n--;
        }
    }
}

我是把繼續生成隨機盒子的函式放在了移動函式的結尾呼叫的,在這個時候就要考慮一個問題了,怎麼讓在其實沒有移動動作的時候不在繼續增加盒子。我還是用了一個迴圈遍歷來完成這個問題。遍歷迴圈陣列,如果在移動方向上不為0的前面存在0就可以繼續移動。比如判斷是否能夠下移:

function canMoveDown(){
    for(var i = 0;i<4;i++){
        for(var j = 3;j>=0;j--){
            if(board[j][i]!=0&&j!=3){
                if(board[j+1][i]==0){
                    return false;
                }
            }
        }
    }
    return true;
}

然後改寫了前面的移動函式,前面判斷了這個,如果返回為真直接return false,不執行之後的移動函式體。
4.當移動都完成好了之後,就要考慮合併的問題了。我的思路是這樣的,在移動之後,就移動後移動方向的前一個盒子(如果存在)和移動後的這個盒子來比較值,如果比較相等,就把前一個盒子置為本身2倍,移動後的盒子置為0。比如向下移動,修改程式碼如下:

for(var i = 0;i<4;i++){
    var n=3;
    for(var j = 3;j>=0;j--){
        if(board[j][i] == 0){
            continue;
        }else{
            if(board[n][i]==0){
                board[n][i] = board[j][i];
                board[j][i] = 0;
            }
            if(n<3){
                if(board[n][i] == board[n+1][i]){
                    board[n+1][i] = board[n][i]*2;
                    board[n][i] = 0;
                    continue;
                }
            }
            n--;
        }
    }
}

此處只有當n<3的時候才能進入,排除了他是最下面盒子的情況,因為他沒有盒子可以合併嘛。這裡要注意當合並之後,當前盒子變為0,前面說了n是為了幫助記錄為0盒子的位置的,那麼在這裡就要注意,n值不用改變,因為當前盒子為0,如果還有值要下移應該移動到這裡,否則你會發現上面的盒子會和下面的合併之後的盒子空一格,和想的不太一樣。這裡也要修改前面的canMoveDown()函式的判斷條件,如果可以合併也要判斷為能夠移動,修改if條件為:

if(board[j+1][i]==0||board[j+1][i]==board[j][i]){
        return false;
}

5.到這裡呢,基本上主要功能就結束啦。還有一點點就是關於結束的判斷。結束就是1沒有盒子是空的,2不能夠移動了。沒有盒子是空的就遍歷陣列看是不是全部都不是0了。不能移動就把前面寫的canMoveDown()函式和上移,左移,右移的函式用上,如果這5個都是真的,就彈出遊戲結束框,然後呼叫新的newGame()函式重新來。

第一次寫部落格,感覺好多東西都講的不太清楚,多多包涵。

相關推薦

js實現2048遊戲

最近同學參加宣講會,說有個公司要求是寫一個2048小遊戲,參考了一點網上的程式碼以後,自己寫了一個。 寫的思路如下: 1.設定好HTML佈局。大盒子巢狀小盒子,這塊沒什麼可說的。 2.實現遊戲初始化,生成一開始的兩個小塊。這裡就要實現生成隨機2或4,還

用原生js2048遊戲

gin 小遊戲 替換 上下 數位 免費學習 title index.php parseint <!DOCTYPE html> <html> <head> <title> 2048-game </title&g

js實現拼圖遊戲

用js實現拼圖小遊戲 將一張圖片切片成36塊 在通過滑鼠拖拽事件將打散順序後的小圖片拖拽到另一邊組成原圖 實現過程 1.基本樣式 <div id="div1"></div> <div id="div2"></div>  //在body中寫上一

C語言介面實現2048遊戲

這是我在大一第二學期(兩年前)為了參加比賽,自學後寫的一個Dome,拿出來和大家分享一下,程式碼為兩年前的程式碼,未改動,優化以及各式可能很一般,請見諒。 #include "stdio.h" #include "stdlib.h" #include "time.h" #d

JQuery初體驗-JavaScript實現2048遊戲PC端

目錄 效果圖 遊戲頁面 遊戲頁面樣式 遊戲基礎邏輯 遊戲動畫邏輯 遊戲主邏輯 遊戲互動邏輯 效果圖: 遊戲頁面: <!DOCTYPE html> <html lang="en"> <head> <

C++實現2048遊戲(控制檯版的)

無聊,在公司寫了個2048小遊戲的程式,聊以自娛。(事實是我手機壞了,沒得玩)。 很簡單,直接上程式碼了。 #include <iostream> #include <windows.h> #include <ctime> using

java實現2048遊戲

學習Java基礎有一段時間了,一直想做個小的桌面程式練下手,最近自己有點時間用Java寫了一個2048的桌面程式,和大家分享一下!!! 遊戲效果展示: 1、設計思想 AppFrame.java遊戲的啟動類,只調用了一個MainFrame的構造方法 MainFrame.ja

C語言在linux終端下實現2048遊戲:第二版

原來我轉載過一個機遇ncurses的2048,今天無聊自己手寫了一個,看下我的目錄結構: $ tree ../2048/ ../2048/ ├── 2048.c ├── 2048.h └── main.c 0 directories, 3 files 2048.h

學Android--實現2048遊戲

1、遊戲佈局(activity_main.xml) 首先在xml檔案中實現遊戲的整體佈局 (1)新增兩個TextView用來顯示分數 <LinearLayout android:layout_width="match_pare

C#實現2048遊戲

要實現這個簡單的小遊戲主要在於實現一個方向移動 數字的移動及合併該如何處理 然後其它方向的邏輯是相同的 我做的這個基本功能實現了 主要分為三個類 Box.cs格子類(一些格子裡儲存的資料,行下標,列下標,是否合併過的開關。。) Grid.cs網格類(主要演算法在裡

C++實現2048遊戲

程式碼如下: #define _CRT_SECURE_NO_WARNINGS//去掉編譯器內部擴增問題#include<stdio.h>#include<stdlib.h>#include<math.h>#include<graphics.h>//需要下載圖形庫

+js實現簡單的2048遊戲

學習前端半年,本著興趣用canvas結合了js寫了個2048小遊戲,有的地方沒有完善的歡迎各位大神指出。 在寫遊戲開始,首先要在html裡建立canvas標籤,併為canvas增添id,以便使用js呼叫。 <!DOCTYPE html> <html>

2048遊戲主要算法實現

mes 方向 時間限制 上下左右 print ron weight color ges http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4681 4681: 2

2048遊戲】——CSS/原生js爬坑之純CSS模態對話框&遊戲結束

函數 一半 窗口 內容 href 標準 tex true 存儲空間 引言:2048小遊戲的結束界面,使用純CSS制作模態對話框,一般做模態對話框都會使用BootStrap自帶的模態對話框組件方便使用,但在制作要運行在移動端的小項目時,就不能使用BootStrap,因為文件太

C語言實現簡易2048遊戲

blog 而在 而是 null 移動 是我 我們 空指針 主體 一直很喜歡玩這個小遊戲,簡單的遊戲中包含運氣與思考與策略,喜歡這種簡約又不失內涵的遊戲風格。於是萌生了用C語言實現一下的想法。 具體代碼是模仿這個:https://www.cnblogs.com/judgeyo

用C++、Qt實現遊戲2048

圖片 explicit AC 向上 類的構造函數 += cli 而後 遊戲 窗口布局與遊戲截圖: 實現思路: 1.使用二維數組模擬整個遊戲網格,並將二維數組中每個數的大小用作遊戲中每個網格中的數據。 2.將對遊戲的數據及數據的操作(即玩家的操

【總結篇】js編寫的2048遊戲開發(上:思路)

2048是大家都熟悉的一款魔性小遊戲,其操作簡單,卻極其有效地殺時間。本篇將詳細講解如何構建這款小遊戲的開發思路、如何根據玩法進一步分析設計程式設計結構,適合有一定html、css、js、jquery語言基礎的讀者閱讀。 一.遊戲試玩       遊戲玩法大家都很

C語言實現最簡單的2048遊戲

網上解釋很多了,直接上程式碼吧,這個功能很簡單,易於學習,後期有時間會完善功能 #include<stdio.h> #include<stdlib.h> #include<string.h> #define Key_Up 0x4800

[原始碼和文件分享]基於Python的PyGame庫實現2048遊戲

一、簡介 2048的遊戲規則很簡單,每次可以選擇上下左右其中一個方向去滑動,每滑動一次,所有的數字方塊都會往滑動的方向靠攏外,系統也會在空白的地方亂數出現一個數字方塊,相同數字的方塊在靠攏、相撞時會相加。系統給予的數字方塊不是2就是4,玩家要想辦法在這小小的16格範圍中湊出“2048”這個數字方

lua實現一個2048遊戲

用lua寫了個在consle上執行的2048,這裡簡單說下是如何實現的。(原始碼地址:http://download.csdn.net/detail/c_boy_lu/9393255) 1.實現一