亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript實現俄羅斯方塊游戲的思路和方法

2019-11-20 12:36:04
字體:
來源:轉載
供稿:網友

觀摩一下《編程之美》:“程序雖然很難寫,卻很美妙。要想把程序寫好,需要寫好一定的基礎知識,包括編程語言、數據結構與算法。程序寫得好,需要縝密的邏輯思維能力和良好的梳理基礎,而且熟悉編程環境和編程工具?!?/p>

學了幾年的計算機,你有沒有愛上編程。話說,沒有嘗試自己寫過一個游戲,算不上熱愛編程。

俄羅斯方塊曾經造成的轟動與造成的經濟價值可以說是游戲史上的一件大事,它看似簡單但卻變化無窮,令人上癮。相信大多數同學,曾經為它癡迷得茶不思飯不想。

游戲規則

1、一個用于擺放小型正方形的平面虛擬場地,其標準大?。盒袑挒?0,列高為20,以每個小正方形為單位。

2、一組由4個小型正方形組成的規則圖形,英文稱為Tetromino,中文通稱為方塊共有7種,分別以S、Z、L、J、I、O、T這7個字母的形狀來命名。

I:一次最多消除四層

J(左右):最多消除三層,或消除二層

L:最多消除三層,或消除二層

O:消除一至二層

S(左右):最多二層,容易造成孔洞

Z (左右):最多二層,容易造成孔洞

T:最多二層

方塊會從區域上方開始緩慢繼續落下。玩家可以以90度為單位旋轉方塊,以格子為單位左右移動方塊,讓方塊加速落下。方塊移到區域最下方或是著地到其他方塊上無法移動時,就會固定在該處,而新的方塊出現在區域上方開始落下。當區域中某一列橫向格子全部由方塊填滿,則該列會消失并成為玩家的得分。同時刪除的列數越多,得分指數上升。

分析與解法

每塊方塊落下的過程中,我們可以做:

1)旋轉到合適的方向

2)水平移動到某一列

3)垂直下落到底部

首先,需要用一個二維數組,area[18][10]表示18*10的游戲區域。其中,數組中值為0表示空,1表示有方塊。

方塊一共7種,每種有4種方向。定義activeBlock[4],在編譯之前這個數組的值預定算好,在程序中直接使用。

難點

1)邊界檢查。

//檢查左邊界,嘗試著朝左邊移動一個,看是否合法。function checkLeftBorder(){   for(var i=0; i<activeBlock.length; i++){     if(activeBlock[i].y==0){       return false;     }     if(!isCellValid(activeBlock[i].x, activeBlock[i].y-1)){       return false;     }   }   return true; } //同理,需要檢測右邊界和底邊界

2)旋轉, 需要數理邏輯, 一個點相對另外一個點旋轉90度的問題。
3)定時和監聽鍵盤事件機制讓游戲自動運行下去。

//開始 function begin(e){   e.disabled = true;   status = 1;   tbl = document.getElementById("area");   if(!generateBlock()){     alert("Game over!");     status = 2;     return;   }   paint();   timer = setInterval(moveDown,1000); } document.onkeydown=keyControl;

程序過程

1)用戶點開始->構造一個活動圖形, 設置定時器。

//當前活動的方塊, 它可以左右下移動, 變型。當它觸底后, 將會更新area; var activeBlock; //生產方塊形狀, 有7種基本形狀。 function generateBlock(){   activeBlock = null;   activeBlock = new Array(4);   //隨機產生0-6數組,代表7種形態。  var t = (Math.floor(Math.random()*20)+1)%7;   switch(t){     case 0:{       activeBlock[0] = {x:0, y:4};       activeBlock[1] = {x:1, y:4};       activeBlock[2] = {x:0, y:5};       activeBlock[3] = {x:1, y:5};       break;     }     //省略部分代碼..............................    case 6:{       activeBlock[0] = {x:0, y:5};       activeBlock[1] = {x:1, y:4};       activeBlock[2] = {x:1, y:5};       activeBlock[3] = {x:1, y:6};       break;     }   }   //檢查剛生產的四個小方格是否可以放在初始化的位置.   for(var i=0; i<4; i++){     if(!isCellValid(activeBlock[i].x, activeBlock[i].y)){         return false;       }     }   return true; }

2)每次向下移動后, 都檢查是否觸底, 如果觸底了, 則嘗試消行。

//消行 function deleteLine(){   var lines = 0;   for(var i=0; i<18; i++){     var j=0;     for(; j<10; j++){       if(area[i][j]==0){         break;     }   }   if(j==10){     lines++;     if(i!=0){       for(var k=i-1; k>=0; k--){         area[k+1] = area[k];       }     }     area[0] = generateBlankLine();     }   }   return lines; }

3)完了之后再構造一個活動圖形, 再設置定時器。

效果圖

有待優化

1)設置不同形狀方塊的顏色。

  思路:在創建方塊函數內,設定activeBlockColor顏色,七種不同形態方塊顏色各異(除了修改generateBlock方法之外,還需要修改paintarea方法。因為一開始考慮不周全,消除一行后,重繪方塊的同時將顏色統一,因此可以考慮移除表格n行,然后在頂部增添n行,以保證沒消除方塊的完整性)。

2)當當前方塊下落時,可以提前查看下一個方塊。

  思路:將generateBlock方法拆分成兩部分,一部分用于隨機嘗試下一個方塊,一部分用于緩存當前所要描繪的方塊。當當前方塊碰到底部被固定后,下一方塊開始描繪,同時又再次隨機產生新方塊。如此反復。

以上所述就是本文給大家分享的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久电影| 日韩av三级在线观看| 2019国产精品自在线拍国产不卡| 亚洲天堂视频在线观看| 国产91精品青草社区| 欧美—级a级欧美特级ar全黄| 亚洲人成电影在线播放| 日韩电影中文字幕在线观看| 欧美俄罗斯乱妇| 美女视频黄免费的亚洲男人天堂| 欧美电影在线观看网站| 亚洲精品一区二区网址| 欧美日韩另类视频| 久久人91精品久久久久久不卡| 色综合久久88色综合天天看泰| 欧美大片免费看| 中文字幕免费国产精品| 国产精品1234| 中文字幕久精品免费视频| 亚洲天堂影视av| 久久这里有精品视频| 国产精品久久久久久久久久东京| 一本一本久久a久久精品综合小说| 色偷偷888欧美精品久久久| 欧美国产激情18| 亚洲丁香久久久| 国产脚交av在线一区二区| 欧美黑人巨大精品一区二区| 成人免费观看49www在线观看| 国产ts一区二区| 中文字幕久精品免费视频| 国产精品欧美久久久| 国产精品国内视频| 欧美日韩午夜激情| 亚洲一区二区在线播放| 国产精品三级在线| 久久久久久国产三级电影| 性欧美暴力猛交69hd| 亚洲精品国产美女| 日本韩国欧美精品大片卡二| 亚洲人成免费电影| 久久精品99无色码中文字幕| 中文字幕亚洲综合久久| 欧美劲爆第一页| 欧美一区二区色| 疯狂蹂躏欧美一区二区精品| 91免费版网站入口| 最近的2019中文字幕免费一页| 日韩最新在线视频| 日本一欧美一欧美一亚洲视频| 久久天天躁夜夜躁狠狠躁2022| 亚洲a成v人在线观看| 成人福利免费观看| 欧洲美女7788成人免费视频| 国产精品6699| 91免费在线视频网站| 国产日产欧美精品| 精品视频久久久久久| 1769国产精品| 久久久久日韩精品久久久男男| 国产va免费精品高清在线观看| 亚洲欧美国产一区二区三区| 国产精品视频导航| 国产成人一区三区| 精品亚洲男同gayvideo网站| 欧美在线视频在线播放完整版免费观看| 2018国产精品视频| 亚洲xxx自由成熟| 日韩小视频在线观看| 亚洲精品国产欧美| 日韩在线高清视频| xvideos成人免费中文版| 91精品国产自产在线| 最近2019中文字幕第三页视频| 国产精品久久97| 日韩av在线网站| 欧美午夜丰满在线18影院| 国产视频久久网| 成人精品在线观看| 日韩中文字幕在线免费观看| 一本色道久久88亚洲综合88| 亚洲午夜av久久乱码| 美日韩精品视频免费看| 8x拔播拔播x8国产精品| 91网在线免费观看| 国产日韩综合一区二区性色av| 色偷偷av一区二区三区| 亚洲精品免费在线视频| 亚洲人成电影网站| 国产精品视频网| 亚洲午夜色婷婷在线| 欧美制服第一页| 国产亚洲综合久久| 成人春色激情网| 国产日韩在线看| 91丨九色丨国产在线| 26uuu另类亚洲欧美日本老年| 92国产精品久久久久首页| 久久99热精品这里久久精品| 久久精品国产综合| 成人h视频在线观看播放| 中文字幕精品在线视频| 3344国产精品免费看| 亚洲精品电影久久久| 国产成人精品视频在线| 中文字幕在线观看日韩| 亚洲精品国产精品乱码不99按摩| 欧洲亚洲在线视频| 日韩精品欧美国产精品忘忧草| 欧美成人国产va精品日本一级| 欧美视频一二三| 精品福利一区二区| 国产精品亚洲自拍| 亚洲日本中文字幕免费在线不卡| 91在线精品视频| 亚洲成人黄色网址| 日韩av色在线| 92裸体在线视频网站| 国产成人精品一区二区在线| 韩国19禁主播vip福利视频| 亚洲第一av在线| 国产日韩欧美视频| 久久精品国产成人| 欧洲亚洲在线视频| 欧美小视频在线| 亚洲精品动漫久久久久| 亚洲国产成人精品女人久久久| 久久这里只有精品99| 九九热这里只有精品免费看| 色琪琪综合男人的天堂aⅴ视频| 日韩大片免费观看视频播放| 9.1国产丝袜在线观看| 免费成人高清视频| 国产一区二区三区在线视频| 国产在线精品成人一区二区三区| 亚洲人成电影在线播放| 国产精品海角社区在线观看| 精品视频在线观看日韩| 国产视频精品自拍| 国产在线久久久| 色综合天天综合网国产成人网| 91沈先生作品| 国产精品揄拍500视频| 亚洲精品成a人在线观看| 这里精品视频免费| 91九色国产社区在线观看| 久久久久久久久久久人体| 亚洲成人激情在线观看| 欧美黑人性生活视频| 亚洲电影免费观看高清完整版| 亚洲国产精品小视频| 亚州成人av在线| 国产免费一区二区三区在线观看| 国产亚洲精品久久久久久牛牛| 欧美亚洲另类在线| 日韩天堂在线视频| 97免费视频在线| 国产精品电影在线观看| 日韩精品中文字幕久久臀| 欧美日韩在线观看视频小说| 亚洲无限乱码一二三四麻| 欧美日韩亚洲系列| 91国内在线视频| 亚洲国产精品99|