一個javascript指令碼寫的俄羅斯方塊 (轉)
Russia.htm
得分:
| <!-- 遊戲主區域 --> | <!-- 遊戲預報區域 -->
|
Russia.js
var Cols = 10, Rows = 20, en = 16;
var Color = new Array(8);
var delLine = new Array();
var CLoc = new Array();
var RLoc = new Array();
var CurSq,NextSq;
var type=-1,oldtype;
var delay = new Array(600,500,400,300,200,100,90,80,70);
var TimerID;
var p= 0,end,level=0,score=0,lines=0;
var isOver=false,isPause=false;
Color[0] = "#d0d0d0";
Color[1] = "red";
Color[2] = "green"
Color[3] = "cyan";
Color[4] = "yellow";
Color[5] = "orange";
Color[6] = "pink";
Color[7] = "blue";
function GameArea(row,col,name){
var s = "
" |
return s;
}
function Init(){
GameBody.innerHTML = GameArea(Rows,Cols,'Main');
GameForecast.innerHTML = GameArea(4,4,'Forecast');
}
function Square(cols,rows,color){
this.rows = rows;
this.cols = cols;
this.color = color;
}
function chooseSquare(type,x,y){
var sq = new Array(4);
switch(type){
case 0:
sq[0] = new Square(x-1,y,1);
sq[1] = new Square(x,y,1);
sq[2] = new Square(x+1,y,1);
sq[3] = new Square(x+2,y,1);
break;
case 1:
sq[0] = new Square(x,y,5);
sq[1] = new Square(x,y+1,5);
sq[2] = new Square(x+1,y+1,5);
sq[3] = new Square(x,y+2,5);
break;
case 2:
sq[0] = new Square(x,y,2);
sq[1] = new Square(x,y+1,2);
sq[2] = new Square(x+1,y+1,2);
sq[3] = new Square(x+1,y+2,2);
break;
case 3:
sq[0] = new Square(x+1,y,7);
sq[1] = new Square(x+1,y+1,7);
sq[2] = new Square(x,y+1,7);
sq[3] = new Square(x,y+2,7);
break;
case 4:
sq[0] = new Square(x,y,3);
sq[1] = new Square(x+1,y,3);
sq[2] = new Square(x,y+1,3);
sq[3] = new Square(x+1,y+1,3);
break;
case 5:
sq[0] = new Square(x,y,6);
sq[1] = new Square(x+1,y,6);
sq[2] = new Square(x+1,y+1,6);
sq[3] = new Square(x+1,y+2,6);
break;
case 6:
sq[0] = new Square(x+1,y,4);
sq[1] = new Square(x,y,4);
sq[2] = new Square(x,y+1,4);
sq[3] = new Square(x,y+2,4);
break;
}
return sq;
}
function reDraw(name,sq){
var obj;
for(var i=0; i
obj.style.background = Color[sq[i].color];
}
}
function clearDraw(name,sq){
var obj;
for(var i=0; i
obj.style.background = Color[0];
}
}
function isBounds(sq){
for(var i=0; i
return false;
}
return true;
}
function SortSquare(sq,name,isMax){
if(isMax){
var Max = 0;
if(name=="Rows"){
for(var i=0; i
}
}
else{
for(var i=0; i
}
}
return Max;
}
else{
var Min = 20;
if(name=="Rows"){
for(var i=0; i
}
else{
for(var i=0; i
}
return Min;
}
}
function StartGame(){
start.disabled = true;
pause.focus();
type = parseInt(Math.ran()*7);
oldtype = type;
type = parseInt(Math.random()*7);
var m = 4/2 -1;
NewSq = chooseSquare(type,m,0);
reDraw('Forecast',NewSq);
Start();
}
function Start(){
if(isOver){
var s = "本次遊戲結束! ";
OverGame(s);
}
gScore.innerText = score;
gLine.innerText = lines;
gLevel.innerText = level;
oldtype = type;
clearDraw('Forecast',NewSq);
type = parseInt(Math.random()*7);
var m = 4/2 -1;
NewSq = chooseSquare(type,m,0);
reDraw('Forecast',NewSq);
var mm = Cols/2 -1;
CurSq = chooseSquare(oldtype,mm,0);
reDraw('Main',CurSq);
window.clearInterval(TimerID);
TimerID = window.setInterval("Run()",delay[level]);
}
function Run(){
if(isPause) return;
if(MoveCurSq(0,1,false) == false){
window.clearInterval(TimerID);
if(RemoveLines()==true) {
DelLines();
lines = lines + delLine.length;
switch(delLine.length){
case 1:
score = score + 100;
break;
case 2:
score = score + 300;
break;
case 3:
score = score + 700;
break;
case 4:
score = score + 1000;
break;
}
level = parseInt(score/10000);
}
Start();
}
}
function RemoveLines(){
var obj,m=0;
var isRemove = true;
var searchPos = true;
var del = new Array();
for(var i=19; i>=0; i--){
for(var j=0; j<10; j++){
obj = document.all("Main" + i + "#" + j);
if(obj.style.background == Color[0]){
isRemove = false;
}
else{
searchPos = false;
}
}
if(searchPos) {
end = i;
if(del.length>0){delLine=del;return true;}
else{return false;}
}
if(isRemove) {del[m] = i; m++;}
searchPos = true;
isRemove = true;
}
}
function DelLines(){
var deleted = 0;
var obj;
for(var i=0; i
obj = document.all("Main" + delLine[i] + "#" + j);
obj.style.background = Color[0];
}
deleted = deleted + 1;
if(delLine.length>deleted)
{
if(delLine[i]-delLine[i+1]>1) ReDrawLine(delLine[i+1],delLine[i],deleted);
}
}
ReDrawLine(end,delLine[delLine.length - 1],deleted);
}
function ReDrawLine(endline,startline,moveline){
var obj;
for(var i= startline - 1; i>endline; i--){
for(var j=0; j<10; j++){
obj = document.all("Main" + i + "#" + j);
var oldcolor = obj.style.background;
obj.style.background = Color[0];
var rowid = i + moveline;
obj = document.all("Main" + rowid + "#" + j);
obj.style.background = oldcolor;
}
}
}
function MoveSquare(from,to){
if(isBounds(to) == false) return false;
var obj;
l:
for(var i=0; i
if(obj.style.background != Color[0]){
for(var j=0; j
continue loop;
return false
}
}
return true;
}
function MoveCurSq(x,y,isRotate){
NextSq = new Array(CurSq.length);
for(var i=0; i
var dx = CurSq[i].cols - CurSq[0].cols;
var dy = CurSq[i].rows - CurSq[0].rows;
NextSq[i] = new Square(CurSq[0].cols-dy,CurSq[0].rows+dx,CurSq[i].color);
}
else
NextSq[i] = new Square(CurSq[i].cols+x,CurSq[i].rows+y,CurSq[i].color);
}
if(isRotate) reNextSq();
if(MoveSquare(CurSq,NextSq) == false){
for(var i=0; i
isOver = true;
}
return false;
}
clearDraw('Main',CurSq);
CurSq = NextSq;
reDraw('Main',CurSq);
return true;
}
function reNextSq(){
var minCols = SortSquare(NextSq,'Cols',false);
var minRows = SortSquare(NextSq,'Rows',false);
var maxCols = SortSquare(NextSq,'Cols',true);
var maxRows = SortSquare(NextSq,'Rows',true);
if(minCols<0) changeNextSq('Cols',-minCols);
if(minRows<0) changeNextSq('Rows',-minRows);
if(maxCols>9) changeNextSq('Cols',9-maxCols);
if(maxRows>19) changeNextSq('Rows',19-maxRows);
}
function changeNextSq(name,pos){
for(var i=0; i
NextSq[i].rows = NextSq[i].rows + pos;
else
NextSq[i].cols = NextSq[i].cols + pos;
}
}
function keyDown(){
switch(event.keyCode){
case 40:
MoveCurSq(0,1,false);
break;
case 37:
MoveCurSq(-1,0,false);
break;
case 38:
MoveCurSq(0,0,true);
break;
case 39:
MoveCurSq(1,0,false);
break;
}
}
function PauseGame(){
if(pause.innerText == "暫停遊戲"){
isPause = true;
pause.innerText = "繼續遊戲";
pause.focus();
}
else{
isPause = false;
pause.innerText = "暫停遊戲";
pause.focus();
Run();
}
}
function OverGame(str){
if(typeof(str)=="undefined") str = "你的得分:" + score +"。是否重玩遊戲? ";
else str = str + "你的得分:" + score +"。是否重玩遊戲? ";
var isOK = window.confirm(str);
if(!isOK) {
document.location.reload();
window.close();
}
else{
document.location.reload();
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990966/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用JavaScript實現一個俄羅斯方塊JavaScript
- 俄羅斯方塊練習
- canvas實現俄羅斯方塊Canvas
- 俄羅斯方塊(JS+CSS)JSCSS
- Tetris 俄羅斯方塊遊戲遊戲
- 【Java遊戲】java俄羅斯方塊!Java遊戲
- Flutter Web 實戰 - 俄羅斯方塊FlutterWeb
- 用 SQL 寫的俄羅斯方塊遊戲「GitHub 熱點速覽」SQL遊戲Github
- [分享]純python3手寫Tetris(俄羅斯方塊)遊戲Python遊戲
- 超越《俄羅斯方塊》後,《我的世界》想打造一個更具野心的世界
- 基於Flutter的俄羅斯方塊小遊戲Flutter遊戲
- c#實現簡單的俄羅斯方塊C#
- 300行Python程式碼實現俄羅斯方塊,致敬逝去的童年Python
- 俄羅斯方塊聯機小遊戲的實現遊戲
- Python:遊戲:300行程式碼實現俄羅斯方塊Python遊戲行程
- python開發俄羅斯方塊小遊戲程式碼例項Python遊戲
- 最新《 java實戰開發俄羅斯方塊教程》Java
- Python 實戰開發俄羅斯方塊遊戲Python遊戲
- 如何讓 Emacs 俄羅斯方塊變得更難Mac
- wxpython入門第十一步(俄羅斯方塊)Python
- 基於MonoGame重製《俄羅斯方塊》遊戲MonoGAM遊戲
- “漢字俄羅斯方塊”《一字不落》今日上架Steam
- pyqt5製作俄羅斯方塊小遊戲-----原始碼解析QT遊戲原始碼
- 回顧「俄羅斯方塊」曾經的一段蒸汽波時代
- 如何讓AI教機器自己玩俄羅斯方塊?AI
- Python3+pygame實現的俄羅斯方塊 程式碼完整 有演示效果PythonGAM
- 用React、Redux、Immutable做俄羅斯方塊 | 掘金技術徵文ReactRedux
- 從俄羅斯方塊,邁向強化學習大門強化學習
- 俄羅斯方塊歷史發展與變革創新
- 初學者——Java之實現簡易俄羅斯方塊Java
- 使用C#和MonoGame開發俄羅斯方塊遊戲C#MonoGAM遊戲
- 函數語言程式設計嘗試之俄羅斯方塊函數程式設計
- 為了上班摸魚我用Python製作了俄羅斯方塊?Python
- 《俄羅斯方塊》系列 35 週年 一窺遊戲歷年玩法演變遊戲
- 恰逢35歲生日 俄羅斯方塊的一切都變得井井有條
- 俄羅斯玩偶
- 俄羅斯:‘區塊鏈屬於我們’區塊鏈
- 用 SAP ABAP 編寫的俄羅斯遊戲遊戲
- 前端筆記之JavaScript物件導向(四)元件化開發&輪播圖|俄羅斯方塊實戰前端筆記JavaScript物件元件化