當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!
生活随笔
收集整理的這篇文章主要介紹了
《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
導讀:小時候我們經常打游戲玩俄羅斯方塊,用的是游戲機。
現在我們學會了敲代碼,簡單用JS實現一下這個游戲把。
目錄
先看效果?
操作說明
代碼實現
完整代碼
先看效果?
操作說明
打開編譯器,講代碼復制進去,在瀏覽器打開即可,通過鍵盤上下左右控制,一個人就可以玩耍。
↑控制方塊的形態(可以使方塊旋轉),←向左平移,→向右平移,↓加速下落。方塊鋪滿可以消失,方塊排列到頂部游戲gameover.
代碼實現
CSS
<style type="text/css">.c{margin:1px; width:19px; height:19px; background:red; position:absolute;}.d{margin:1px; width:19px; height:19px; background:gray; position:absolute;}.f{top:0px; left:0px; background:black; position:absolute;}.e{top:0px; background:#151515; position:absolute;}.g{width:100px; height:20px; color:white; position:absolute;} </style>?JS
<script type="text/javascript"> var row = 18; var col = 10; var announcement = 6; var size = 20; var isOver = false; var shapes = ("0,1,1,1,2,1,3,1;1,0,1,1,1,2,2,2;2,0,2,1,2,2,1,2;0,1,1,1,1,2,2,2;1,2,2,2,2,1,3,1;1,1,2,1,1,2,2,2;0,2,1,2,1,1,2,2").split(";"); var tetris; var container; function createElm(tag,css) {var elm = document.createElement(tag);elm.className = css;document.body.appendChild(elm);return elm; } function Tetris(css,x,y,shape) {// 創建4個div用來組合出各種方塊var myCss = css?css:"c";this.divs = [createElm("div",myCss),createElm("div",myCss),createElm("div",myCss),createElm("div",myCss)];if(!shape){this.divs2 = [createElm("div",myCss),createElm("div",myCss),createElm("div",myCss),createElm("div",myCss)];this.score = createElm("div","g");this.score.style.top = 10*size+"px";this.score.style.left = (col- -1)*size+"px";this.score.innerHTML = "score:0";}this.container = null;this.refresh = function(){this.x = (typeof(x)!='undefined')?x:3;this.y = (typeof(y)!='undefined')?y:0;// 如果有傳參,優先使用參數的,如果有預告,優先使用預告,都沒有就自己生成if(shape)this.shape = shape;else if(this.shape2)this.shape = this.shape2;elsethis.shape = shape?shape:shapes[Math.floor((Math.random()*shapes.length-0.000000001))].split(",");this.shape2 = shapes[Math.floor((Math.random()*shapes.length-0.000000001))].split(",");if(this.container && !this.container.check(this.x,this.y,this.shape)){isOver = true;alert("游戲結束");}else{this.show();this.showScore();this.showAnnouncement();}}// 顯示方塊this.show = function(){for(var i in this.divs){this.divs[i].style.top = (this.shape[i*2+1]- -this.y)*size+"px";this.divs[i].style.left = (this.shape[i*2]- -this.x)*size+"px";}}// 顯示預告this.showAnnouncement = function(){for(var i in this.divs2){this.divs2[i].style.top = (this.shape2[i*2+1]- -1)*size+"px";this.divs2[i].style.left = (this.shape2[i*2]- -1- -col)*size+"px";}}// 顯示分數this.showScore = function(){if(this.container && this.score){this.score.innerHTML = "score:" + this.container.score;}}// 水平移動方塊的位置this.hMove = function(step){if(this.container.check(this.x- -step,this.y,this.shape)){this.x += step;this.show();}}// 垂直移動方塊位置this.vMove = function(step){if(this.container.check(this.x,this.y- -step,this.shape)){this.y += step;this.show();}else{this.container.fixShape(this.x,this.y,this.shape);this.container.findFull();this.refresh();}}// 旋轉方塊this.rotate = function(){var newShape = [this.shape[1],3-this.shape[0],this.shape[3],3-this.shape[2],this.shape[5],3-this.shape[4],this.shape[7],3-this.shape[6]];if(this.container.check(this.x,this.y,newShape)){this.shape = newShape;this.show();}}this.refresh(); } function Container() {this.init = function(){// 繪制方塊所在區域var bgDiv = createElm("div","f");bgDiv.style.width = size*col+"px";bgDiv.style.height = size*row+"px";// 繪制預告所在區域var bgDiv = createElm("div","e");bgDiv.style.left = size*col+"px";bgDiv.style.width = size*announcement+"px";bgDiv.style.height = size*row+"px";// 清空積分this.score = 0;}this.check = function(x,y,shape){// 檢查邊界越界var flag = false;var leftmost=col;var rightmost=0;var undermost=0;for(var i=0;i<8;i+=2){// 記錄最左邊水平坐標if(shape[i]<leftmost)leftmost = shape[i];// 記錄最右邊水平坐標if(shape[i]>rightmost)rightmost = shape[i];// 記錄最下邊垂直坐標if(shape[i+1]>undermost)undermost = shape[i+1];// 判斷是否碰撞if(this[(shape[i+1]- -y)*100- -(shape[i]- -x)])flag = true;}// 判斷是否到達極限高度for(var m=0;m<3;m++)for(var n=0;n<col;n++)if(this[m*100+n])flag = true;if((rightmost- -x+1)>col || (leftmost- -x)<0 || (undermost- -y+1)>row || flag)return false;return true;}// 用灰色方塊替換紅色方塊,并在容器中記錄灰色方塊的位置this.fixShape = function(x,y,shape){var t = new Tetris("d",x,y,shape);for(var i=0;i<8;i+=2)this[(shape[i+1]- -y)*100- -(shape[i]- -x)] = t.divs[i/2];}// 遍歷整個容器,判斷是否可以消除this.findFull = function(){var s = 0;for(var m=0;m<row;m++){var count = 0;for(var n=0;n<col;n++)if(this[m*100+n])count++;if(count==col){s++;this.removeLine(m);}}this.score -= -this.calScore(s);}this.calScore = function(s){if(s!=0)return s- -this.calScore(s-1)elsereturn 0;}// 消除指定一行方塊this.removeLine = function(row){// 移除一行方塊for(var n=0;n<col;n++)document.body.removeChild(this[row*100+n]);// 把所消除行上面所有的方塊下移一行for(var i=row;i>0;i--){for(var j=0;j<col;j++){this[i*100- -j] = this[(i-1)*100- -j]if(this[i*100- -j])this[i*100- -j].style.top = i*size + "px";}}} } function init() {container = new Container();container.init();tetris = new Tetris();tetris.container = container;document.onkeydown = function(e){if(isOver) return;var e = window.event?window.event:e;switch(e.keyCode){case 38: //uptetris.rotate();break;case 40: //downtetris.vMove(1);break;case 37: //lefttetris.hMove(-1);break;case 39: //righttetris.hMove(1);break;}}setInterval("if(!isOver) tetris.vMove(1)",500); } </script>?這樣就把項目搞完了,一個簡單的俄羅斯方塊就完成了,女朋友玩的很快樂!
完整代碼
《JavaScript100例|01》之javaScript實現俄羅斯方塊源代碼
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文教你学会需求分析与管理
- 下一篇: JavaScript数组常用的方法总结