中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript實現簡潔的俄羅斯方塊完整實例
來源:易賢網 閱讀:1219 次 日期:2016-08-04 15:20:39
溫馨提示:易賢網小編為您整理了“JavaScript實現簡潔的俄羅斯方塊完整實例”,方便廣大網友查閱!

本文實例講述了JavaScript實現簡潔的俄羅斯方塊。分享給大家供大家參考,具體如下:

完整實例代碼如下:

代碼如下:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>俄羅斯方塊</title>

<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>

<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;

  else

   this.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)

  else

   return 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: //up

    tetris.rotate();

    break;

   case 40: //down

    tetris.vMove(1);

    break;

   case 37: //left

    tetris.hMove(-1);

    break;

   case 39: //right

    tetris.hMove(1);

    break;

  }

 }

 setInterval("if(!isOver) tetris.vMove(1)",500);

}

</script>

</head>

<body onload="init()">

</body>

</html>

希望本文所述對大家JavaScript程序設計有所幫助。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久国产精品第一页| 国产欧美日本一区视频| 狠狠色综合色区| 欧美视频精品在线观看| 蜜臀av在线播放一区二区三区| 亚洲午夜激情在线| 99国产精品久久久久久久成人热| 红桃视频一区| 国产一区高清视频| 国产毛片精品视频| 国产日韩一区二区三区| 国产精品少妇自拍| 国产精品尤物| 国产欧美日韩视频| 国产午夜亚洲精品羞羞网站| 国产九九精品| 国产视频亚洲精品| 韩国v欧美v日本v亚洲v| 精品1区2区| 亚洲电影第三页| 亚洲激情一区| 99精品视频免费在线观看| 亚洲精品乱码久久久久久久久| 亚洲欧洲精品一区二区三区| 亚洲精品国产品国语在线app| 亚洲国产精品热久久| 亚洲国产日韩在线| 日韩视频免费观看高清在线视频 | 亚洲欧美国产日韩天堂区| 亚洲深夜福利| 欧美诱惑福利视频| 久久久久www| 欧美激情五月| 国产精品久久久久天堂| 国内精品国语自产拍在线观看| 精品不卡在线| 亚洲美女av在线播放| 一区二区三区国产| 久久精品亚洲| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲无亚洲人成网站77777| 在线亚洲欧美视频| 久久国产婷婷国产香蕉| 欧美激情亚洲| 国产精品久久久久久久久婷婷| 国产欧美91| 亚洲国产精品高清久久久| 日韩小视频在线观看| 欧美一二三区精品| 欧美freesex8一10精品| 国产精品入口夜色视频大尺度| 黄色日韩网站| 亚洲一区二区三区视频播放| 久久一区二区三区国产精品| 欧美亚州韩日在线看免费版国语版| 国产亚洲一区二区精品| 日韩一级片网址| 久久久国产视频91| 欧美三级午夜理伦三级中文幕 | 免费日韩视频| 国产精品乱人伦一区二区| 在线观看av一区| 性久久久久久久久| 欧美精品亚洲| 亚洲国产精品国自产拍av秋霞| 亚洲在线视频一区| 欧美日韩国产精品专区| 在线观看亚洲视频啊啊啊啊| 小处雏高清一区二区三区| 欧美日韩国产综合视频在线观看 | 亚洲第一天堂av| 午夜日韩视频| 国产精品久久久久婷婷| 日韩图片一区| 欧美精品videossex性护士| 黄色在线一区| 久久精品成人一区二区三区蜜臀| 国产精品欧美日韩一区二区| 99精品热6080yy久久| 欧美国产日韩在线观看| 亚洲第一久久影院| 久久青草欧美一区二区三区| 国产亚洲精品自拍| 欧美一级淫片aaaaaaa视频| 国产精品免费福利| 亚洲在线观看视频网站| 国产精品久久9| 亚洲综合精品一区二区| 国产精品国产三级国产普通话蜜臀 | 国产精品人人做人人爽人人添| 日韩视频在线一区二区| 欧美精品一区二区三| 亚洲精品小视频| 欧美激情精品久久久六区热门| 亚洲国产精品999| 免费成人网www| 亚洲国产天堂久久国产91| 老鸭窝91久久精品色噜噜导演| 韩国在线一区| 另类春色校园亚洲| 亚洲激情视频网| 欧美猛交免费看| 一区二区三区四区五区在线| 欧美日韩久久久久久| 亚洲人成在线播放| 欧美另类综合| 亚洲午夜女主播在线直播| 国产精品色在线| 久久精品毛片| 亚洲黑丝在线| 欧美体内谢she精2性欧美| 亚洲综合三区| 国产亚洲视频在线观看| 巨胸喷奶水www久久久免费动漫| 在线观看日韩一区| 欧美日韩免费在线视频| 亚洲中午字幕| 永久免费视频成人| 欧美美女福利视频| 性欧美1819性猛交| 亚洲国产精品一区| 国产精品国产馆在线真实露脸| 亚洲欧美中文另类| 亚洲福利久久| 国产精品激情电影| 久久久久久久久久久久久9999| 国内欧美视频一区二区| 欧美国产三区| 欧美一区二区大片| 激情久久久久久久| 欧美色精品在线视频| 久久九九免费| 亚洲九九精品| 国产综合18久久久久久| 久久资源在线| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 久久av一区二区三区亚洲| 亚洲国产精品久久久久秋霞不卡| 欧美午夜激情小视频| 欧美一区二区观看视频| 亚洲国产日日夜夜| 国产精品一区二区三区久久久| 蜜桃久久av| 亚洲欧美日韩精品久久久| 亚洲福利精品| 国产丝袜美腿一区二区三区| 欧美日韩1区| 另类图片国产| 久久久久.com| 亚洲一级片在线看| 日韩视频在线永久播放| 在线观看欧美精品| 国产区日韩欧美| 国产精品久久77777| 欧美精品系列| 蜜月aⅴ免费一区二区三区| 亚洲男人的天堂在线| 夜夜嗨av一区二区三区四季av| 亚洲大胆女人| 激情五月婷婷综合| 国产亚洲欧美一区在线观看| 国产精品久久久久久av福利软件| 欧美激情网友自拍| 欧美国产一区视频在线观看| 乱人伦精品视频在线观看| 欧美在线网站| 亚欧成人在线| 性欧美18~19sex高清播放| 亚洲专区国产精品| 亚洲一区欧美二区| 亚洲视频二区| 亚洲一区二区三区精品动漫| 99这里有精品| 一区二区欧美日韩| 亚洲美女一区| 一区二区三区色| 亚洲一区二区三区在线视频| 亚洲五月六月| 日韩午夜在线| 宅男精品导航| 亚洲性夜色噜噜噜7777| 一本色道久久加勒比88综合| 日韩视频一区| 一区电影在线观看| 日韩午夜精品视频| 亚洲黄色精品| 亚洲久久一区| 在线视频你懂得一区二区三区| 亚洲狼人综合| 9l视频自拍蝌蚪9l视频成人| 亚洲美女啪啪| 亚洲精品中文字幕女同| 日韩视频一区| 午夜精品美女自拍福到在线| 欧美亚洲一区二区在线| 欧美中文字幕| 欧美高清视频一二三区| 欧美精品激情| 国产精品色午夜在线观看| 国产精品毛片a∨一区二区三区|