HTML5 Canvas消除遊戲
玩過微信“天天愛消除”遊戲的人都應該瞭解這類遊戲,尤其這類遊戲常常受到許多妹子的喜歡,所以我還是花了週末一天的時間做做這個遊戲。
我的這個遊戲當然沒有微信裡的效果那麼炫酷,只是完成了消除遊戲一些核心的邏輯,包括消失、補全、交換這些。
仔細算下來,這好像已經是我的第7款小遊戲了,這又讓我開始憧憬大遊戲的到來。
算了,反正小時候玩過那麼多小遊戲,先把那些記憶中的遊戲寫完再說。
這款遊戲還是延續canvas的方案,主要的邏輯還是在判斷消失和補全的部分,
核心程式碼如下:
[code] /** * 檢查下落補缺的方塊 */ checkDropBlock: function() { var len = 0, hasFade = false; for(var i = 0; i < span.x; i++) { hasFade = false; for(var j = span.y - 1; j >= 0; j--) { var m = matrix[j][i]; if(!hasFade && m.opacity <= 0) { //垂直方向從下往上找,當找到第一個消失的方塊時記錄位置, //後面就不用再記錄了 hasFade = true; len = j; } else if(hasFade && m.opacity > 0) { //遇到有效的方塊則往下移動 matrix[len][i] = this.clone(m); matrix[j][i].opacity = 0; len--; } //當到達最頂部時,不夠的選擇隨機的方塊補充上,以此填滿 if(j === 0 && m.opacity <= 0) { while(len >= 0) { matrix[len][i] = this.getRandomBlock(); len--; } } } } } /** * 檢查需要消失漸變的方塊 * @param x 結束的x座標 * @param y 結束的y座標 * @param len 消失方塊連續長度 * @param direct 方向 * @returns {boolean} true-有消失的,false-無消失的 */ checkFadeBlock: function(x, y, len, direct) { if(len >= 3) { //長度大於等於3才會消失 while(len > 0) { var m = direct === 'x' ? matrix[y][x-len] : matrix[y-len][x]; //依次往前排,打上tag m.fade = 1; len--; } return true; } return false; }, /** * 檢測兩個方塊是否相鄰 * @param x1 方塊1x座標 * @param y1 方塊1y座標 * @param x2 方塊2x座標 * @param y2 方塊2y座標 * @returns {boolean} true-相鄰,false-不相鄰 */ checkNearBlock: function(x1, y1 ,x2 ,y2) { return (x1 - x2 === 1 && y1 - y2 === 0) || (x1 - x2 === -1 && y1 - y2 === 0) || (x1 - x2 === 0 && y1 - y2 === 1) || (x1 - x2 === 0 && y1 - y2 === -1); }, /** * 全域性檢查是否有3個及3個以上連續相同的方塊 * @returns {boolean} true-有,false-沒有 */ checkSameBlock: function() { var len = 0, color, opacity, ret = false; for(var i = 0; i < span.y; i++) { len = 0; //從左邊第一個開始標記 color = matrix[i][0].color; opacity = matrix[i][0].opacity; for(var j = 0; j < span.x; j++) { var m = matrix[i][j]; if(m.opacity > 0 && opacity > 0 && m.color === color) { //如果方塊有效,並且顏色等於上個方塊的顏色,則len加1 len++; if(j === span.x-1 && this.checkFadeBlock(j+1, i, len, 'x')) { //最右邊時直接檢查 ret = true; } } else { //如果滿足消失的要求在打上tag if(this.checkFadeBlock(j, i, len, 'x')) { ret = true; } //如果一旦出現無效或者顏色不等於上個方塊的顏色,則充值len和顏色 len = 1; color = m.color; opacity = m.opacity; } } } //同上 for(i = 0; i < span.x; i++) { len = 0; color = matrix[0][i].color; opacity = matrix[0][i].opacity; for(j = 0; j < span.y; j++) { var mm = matrix[j][i]; if(mm.opacity > 0 && opacity > 0 && mm.color === color) { len++; if(j === span.y-1 && this.checkFadeBlock(i, j+1, len, 'y')) { ret = true; } } else { if(this.checkFadeBlock(i, j, len, 'y')) { ret = true; } len = 1; color = mm.color; opacity = mm.opacity; } } } if(ret && !animating) { //如果滿足條件並且不處於動畫中,則開啟漸變消失動畫 animating = true; this.createFadeBlock(); } return ret; } /** * 建立漸變消失動畫 */ createFadeBlock: function() { fadeTimer && clearTimeout(fadeTimer); var flag = false; for(var i = 0; i < span.y; i++) { for(var j = 0; j < span.x; j++) { var m = matrix[i][j]; if(m.fade === 1) { //標記消失的才執行動畫 flag = true; m.opacity -= 0.1; if(m.opacity <= 0) { //完全透明瞭了則可以結束動畫了 m.fade = 0; m.opacity = 0; m.color = Color.bg; flag = false; } } } } if(flag) { fadeTimer = setTimeout(function() { elimination.createFadeBlock(); }, 10); } else { fadeTimer && clearTimeout(fadeTimer); animating = false; //隨時都要檢查是否要補齊空缺的方塊 this.checkDropBlock(); //檢查相同的方塊 this.checkSameBlock(); } } /** * 開始後的點選事件回撥 * @param e */ startedClickHandler: function(e) { var x = e.offsetX, y = e.offsetY, size = Config.size; x = Math.floor(x / size); y = Math.floor(y / size); var m = matrix[y][x]; if(m.selected === 0) { //未有選中狀態 for(var i = 0; i < span.y; i++) { for (var j = 0; j < span.x; j++) { var mm = matrix[i][j]; if(mm.selected === 1 && this.checkNearBlock(x, y, j, i)) { //如果兩個方塊都被選中並且相鄰才交換眼色 var color = mm.color; mm.color = m.color; m.color = color; if(!this.checkSameBlock()) { //如果交換沒有消失的方塊,則不能交換,直接還原 var tColor = mm.color; mm.color = m.color; m.color = tColor; } } mm.selected = +(i === y && j === x); } } } else { //已選中的話則去掉選中狀態 m.selected = 0; } } [/code]
相關推薦
HTML5 Canvas消除遊戲
玩過微信“天天愛消除”遊戲的人都應該瞭解這類遊戲,尤其這類遊戲常常受到許多妹子的喜歡,所以我還是花了週末一天的時間做做這個遊戲。 我的這個遊戲當然沒有微信裡的效果那麼炫酷,只是完成了消除遊戲一些核心的邏輯,包括消失、補全、交換這些。 仔細算下來,這好像已經是我的第7款
如何開發一個簡單的HTML5 Canvas 小遊戲
想要快速上手HTML5 Canvas小遊戲開發?下面通過一個例子來進行手把手教學。(如果你懷疑我的資歷, A Wizard's Lizard這個遊戲的半數以上開發是由我完成的) 我們直接來看原始碼裡的game.js,當然你也可以線上體驗一下游戲先。 遊戲截圖 建立畫布 // Create the can
html5 canvas 掃雷遊戲
最近由於工作一直比較忙,所以沒什麼閒暇時間來打理部落格,趁著中秋放假的時間,宅在家裡實在不知道幹啥, 於是還是幹起了自己的老本行,寫寫小遊戲,進了新公司,發現自己寫的這些小遊戲在別人大牛面前確實不值一提, 反正慢慢來嘛,總有一天我相信自己會寫出一款非常有深度、高達上的
運用html5 canvas做飛機大戰遊戲(1)
1、首先,寫出canvas前提,定義所需要的變數,如寬高、分數、生命值等。 <div style="text-align: center;"> <canvas id="canvas" width="480px" height="640px"&g
【原創】使用HTML5+canvas+JavaScript開發的原生中國象棋遊戲及原始碼分享
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style>
Phaser HTML5 canvas 遊戲引擎 牛刀小試
首先是素材 demo地址: http://jsfiddle.net/DUN2Y/ 首先Phaser 是一個基於canvas的 javascript遊戲引擎,說白了就是一個框架,讓你不用自己寫 canvas的方法來實現動畫效果。 官網地址:www.phaser.i
心中的利劍:HTML5 Canvas遊戲動畫(JavaScript)
某股盤子八千萬,掛單一般以幾手和幾十手居多。某日掛單正常,第一買賣價位在13.30元和13.31元。這時突然出現一筆開價13.35元的900手大買單,在合計成交200餘手後還有600餘手大接單掛在13.35元上面,而第
HTML5+JS遊戲開發模組----canvas打字遊戲
原本要繼續研究塔防遊戲,但發現尋路演算法搞不定,其實演算法壓根看不懂,看的頭暈,炮塔自動追蹤移動物體也搞不定,塔防專案得延遲了。所以,就搞了另外一個遊戲,鍵盤打字母遊戲,老樣子,因為初學javascript,程式碼比較亂,見諒。 遊戲難點: 1.字母初始化 2.一個字母消失
HTML5 canvas 捕魚達人遊戲
html5利用canvas寫的一個js版本的捕魚,有積分統計,魚可以全方位移動,炮會跟著滑鼠移動,第一次開啟需要滑鼠移出背景圖,再移入的時候就可以控制炮的轉動,因為是用的mouseover觸發的。效果圖:原始碼下載:http://hovertree.com/h/bjaf/buyuyuanma.htm
html5+canvas+純原生javascript+audio開發仙劍記憶力翻牌遊戲
感覺又是在發小白文,沒辦法,我還在不斷學習中。前端進階計劃再一次因為學習難度,專案經驗而告吹。 好在,我在緩慢進步~ 文章內容來源我網路上看到別人用js和css3寫的仙劍記憶力翻牌遊戲,感覺自己可以學到些什麼。所以就有了一天一夜的奮鬥成果,寫的過程,感覺好坎坷,又是檢視ca
HTML5 canvas遊戲開發實戰 5 : 石頭剪刀布
5.1 遊戲分析 遊戲畫面 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" sr
怎樣用HTML5 Canvas製作一個簡單的遊戲
原文連線:How To Make A Simple HTML5 Canvas Game 自從我製作了一些HTML5遊戲(例如Crypt Run)後,我收到了很多建議,要求我寫一篇關於怎樣利用HTML5 Canvas製作遊戲的入門教程。花了一點時間考慮怎麼著手寫這篇文章後,我決定先實現一個我覺得最最簡單的遊戲
HTML5 Canvas 射擊類小遊戲 平滑的移動 思路
這篇部落格主要講了如何處理HTML5 Canvas 遊戲中的角色移動問題。 筆者這幾天做了一個 HTML5 Canvas 的射擊類小遊戲,嗯,名字叫做《DroppingBalls》,大概就是自己控制一個坦克在介面的最下面左右移動,然後上面會有怪向下移動,我們必須
使用Selenium和openCV對HTML5 canvas遊戲進行自動化功能測試(一)
ring cti art 兩種 調用 試用 ray 容易 dib 上一篇講了HTML5 canvas遊戲的基本工作原理,接下來講如何進行自動化功能測試。 Selenium是一個跨平臺的跨瀏覽器的對網頁進行自動化測試的工具。從Selenium 2.0開始Selenium就和
HTML5 Canvas 獲取網頁的像素值。
off 說過 漸變 color 相加 end get 代碼 mod 我之前在網上看過一個插件叫做出JScolor 顏色拾取器 說白了就是通過1*1PX的DOM設置顏色值通過JS來獲取當前鼠標點擊位置DOM的顏色值。 自從HTML5 畫布出來之後。就有更好的方法來獲
html5 canvas 繪制五角星
create 瀏覽器 function con 圖像 sep fun context lin html5 中的 canvas 元素使用 javascript 在網頁上繪制圖像,今天就寫一下如何使用 canvas 繪制一個五角星。 代碼如下: html 代碼 <c
HTML5 Canvas絢麗的小球詳解
.com demo ack doc scrip 情況 技術 顏色 htm 實例說明: 實例使用HTML5+CSS+JavaScript實現小球的運動效果 掌握Canvas的基本用法 技術要點: 從需求出發 分析Demo要實現的功能 擅於使用HTML5 Canvas 參
HTML5 | Canvas中變量作用域與setInterval()方法的影響
通過 value utf 出現 close span arc shadow cli Demo - 隨機繪制圓環 實現思路: 將一個圓環的繪制分成100份,setInterval()方法定義每隔時間n繪制一段新的,每份的開始路徑都是上一次的結束路徑,實現步進繪制。 通
轉載《學習HTML5 canvas遇到的問題》
script 解決問題 con ear baseline blog border gin color 學習HTML5 canvas遇到的問題 1. 非零環繞原則(nonzZero rule) 非零環繞原則是canvas在進行填充的時候是否要進行填充的判斷依據。
HTML5+Canvas+jQuery調用手機拍照功能實現圖片上傳(二)
customer mkdir 狀態保存 ont false lan else if 項目 action 上一篇僅僅講到前臺操作,這篇專門涉及到Java後臺處理。前臺通過Ajax提交將Base64編碼過的圖片數據信息傳到Java後臺,然後Java這邊進行接收處理。通過