JavaScript 實作俄羅斯方塊
[html]
;
>
身體{寬度:530px;背景:#F7F7F7;邊距:20px 自動} # :崩潰;浮動:左;}
table#gameBoard td{ 寬度:30px;高度:30px;邊框:1px 點線#0cc;}
div#gameControl{ widows:160; 浮動:右; -height: 200px;}
.font{ font-family:'微軟雅黑';字體大小:18px; text-align:center;}
div{ width: 60px; >
var T = 俄羅斯方塊= {
[0xCC00],
[0x8888, 0xF, 00], [0x8888, 0xF, 00], 0x6C00],
[0x4C80, 0xC600],
[0x44C0, 0x8E00 , 0xC880, 0xE200],
[0x88C0, 0xE800, 0xC440, 0x2E00],
[0x4E00, 0x8C80, 0xE400, 0x4C40]
], // 代表所有塊的形狀數
init : function(){
this. oDomBoard = document.getElementBy this. oDomBo omScore = document.getElementById("score");
this.aBoardGrids = new Array(18);
for (var rows = 0 ; rows this.aBoardGrids[rows] = new Array10) this.aBoardGrids[rows] = new Array0 = this.oDomBoard.insertRow(-1);
for (var cols = 0 ; cols this.aBoardGrids[rows][cols] = 0; this.aBoardGrids[rows][cols] = 0; this.aBoardGrids[rows][cols] = 0; DomTr.insertCell(cols);
}
tion(keyEvent){
keyEvent = keyEvent ||窗口.事件;
var ikeyNum = keyEvent.which || keyEvent.keyCode;
個案37://←
T.oBlock.move("左");
休息中;
T.oBlock.rotate((function (){
= T.aShapes[T.iShapeIdx][ (++T.index)%T.aShapes[T.iShapeIdx ].length ];
var sShape
+ sShape;
T. }
)()); //變形
中斷;
案例 39://→
休息;
T.oBlock.move("down");
休息;
}
}
},
下一個:函數 (){
this.iShapeIdx = parseInt(Math.random() * this.aShapes.length);
this.index = 0;
var vShape = this.aShapes[this.iShapeIdx][this.index];
var sShape = vShape.toString(2); //將16轉換轉換為二進位
sShape = new Array(17 - sShape.length).join(0) + sShape; //不夠16位,前面用0補全
this.matrix = sShape.match(/d{4}/g); this.oBlock = new TETRIS.Block(this.matrix);
//註冊定時器
T.timer = setInterval(function (){
}, 1000);
alert("Game Over~");
clearInterval(T.timer);
}
},
updateBoard : function (){ //更新面板
for(var i = 0 ; i this.aBoardGrids[T.oBlock.shape[i].y][T.oBlock.shape[i].x] },
eraseLines : function (){
var iLines = 0; var iLines = 0;
for(var j = 17 ; j >= 0 ; j--){
var num = 0;
if(this.aBoardGrids[j][i] }== 1)
num++;
if(num == 10){
; m for(var n = j ; n > 0 ; n--){
T.oDomBoard.rows[n].cells[m].style.background = T .oDomBoard.rows[n-1].cells[m].style.background;
this.aBoardGrids[0][m] = 0;
} j++;
}
, },
setScore : 函數 (iLines){
var i分數 = parseInt(this.oDomScore.in var i分數 = parseInt(this.oDomScore.ininnerHTML).
if(iLines == 1){
且為 iScore += 100;
} else if(iLines == 2){
} else if(iLines == 3){
} else if(iLines == 4){
}
this.oDomScore.innerHTML = iScore;
}
}
TETRIS.Block = 函數(矩陣
var aShape = [];
{
var sValue = 矩陣[i];
if(sValue.charAt(j) == "1"){
}: j+3 , y : i });
} 🎠 } 🎠 }
this.draw();
}
TETRIS.Block.prototype.move = 函數(方向){//行動
this.draw("clear");
for(var i = 0 ; i case "left"://←
此.shape[i ].x--;
休息;
this.shape[i].x++;
休息;
大小寫“向下”:
this.shape[i].y++;
休息;
}
}
this.draw();
} else {
if (方向==「向下」){
this.draw();
var iLines = T.eraseLines();
.setScore(iLines);
}
T.next(); //重新生成一個新的塊
}
}
}
TETRIS.Block.prototype.rotate = function (matrix){//變形
this.shape = (function( oBlock){
for(var i = 0 ; i aX.push(oBlock.shape[ i].x);
aY.push(oBlock.shape[ i].y);
MinX = aX.getMin();
var iMinY = aY.getMin();
var aShape = [ ];
for(var i = 0 ; i var sValue = 矩陣[i];
if(sValue.charAt(j) == "1" ){
aShape.push({ x : j+iMinX , y : i+iMinY });
}
}
}
if( !( oBlock.checkBlock(aShape)) )
return o塊.形狀;
oBlock.draw( "clear");
返回aShape;
this.draw();
}
TETRIS.Block.prototype.draw = function (opt){//繪圖
= 0 ; i var oShape = this.shape[i] ;
= (opt ==undefined?"#09F":"");
}
}
TETRIS.Block.proto形狀;
for(var i = 0 ; i if(shape[i].x == 0 || T.aBoardGrids[shape[i] . y][形狀[i].x - 1] == 1){
}
} else if(方向== "右"){
T.aBoardGrids[shape[i].y][shape[i].x + 1] == 1){
}
} else if(方向== "下"){
shape[i].y == 17 || T.aBoardGrids[shape[i].y + 1][shape[i].x] ==1){
}
}
i].x 9 || shape[i].y 17)
s[shape[ i].y][shape[i].x] == 1){
返回false;
回傳true;
}
Array.prototype.getMin = function (this 0];
for(var i = 0 ; i if(this[i] iMin = this[i];
}
回 iMin;
}
window.onload = function(){
T.init();
var oBtnPlay = document.getElementById("btnPlay");
oBtnPlay.onclick = function(){
if(this.value ==
this.value = "over";
} else {
this.value = "begin";
alert("遊戲結束~");
clearInterval(T.timer);
}
");
oBtnPause.onclick = function (){
if(this.value == "pause"){ N mer);
this.value = "恢復";
} else {
) T.oBlock.move("插入");
}, 1000);
this.value = "暫停";
}
}
}
;
頭>
//>>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
