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,還
用原生js寫2048小遊戲
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.實現一