注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

浩瀚星云

上善若水 厚德载物<学习版>

 
 
 

日志

 
 

俄罗斯方块游戏  

2008-05-03 10:22:14|  分类: ASP(过时) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>网页特效|Linkweb.cn/Js|---俄罗斯方块游戏</title>
<style>
TD{width: 20; height: 20}
</style>
</head>

<body bgcolor="#000000" text="#0099FF" link="#0099FF" vlink="#0099FF" alink="#0099FF" style="line-height: 150%">
<script>

 document.body.innerHTML += '<DIV id="stage" style="position: absolute; top: 0; left: 0;"></DIV>' //游戏场地
 document.body.innerHTML += '<div id="element_stage" style="position: absolute; top: 3; left: 500; width: 159; height: 152"></div>';//预显表
 document.body.innerHTML += '<div id="obj_stage" style="position: absolute; top: 0; left: 132; display: block; z-index: 100"></div>';//活动层
 
 
 var element_html = '<table id="element_table" border="1" width="100%" height="100%" bordercolor="#000000" cellspacing="0" cellpadding="0">';
 var obj_html     = '<table id="obj_table" border="1" bordercolor="#000000" cellspacing="0" cellpadding="0">';
 
 
 
 for(h=0;h<=4;h++)       //-------生成预显表 和 活动层-------//
 {
  element_html += "<tr>";
  obj_html     += "<tr>";
  
  
  for(w=0;w<=4;w++)
  {
   element_html += "<td  bgcolor=\"\" value=\"0\"></td>";
   obj_html += "<td bgcolor=\"\" value=\"0\"></td>";   
   
  }
  
  element_html += "</tr>";
  obj_html += "</tr>";
 }
 
 element_html += "</table>";
 obj_html += "</table>";
 
 
 element_stage.innerHTML = element_html;
 obj_stage.innerHTML     = obj_html;
 
 document.body.innerHTML +='<p align="right">第 <span id="game_number">1</span> 局</p><p align="right">消除行数<br><span id="game_line">0</span></p><p align="right">游戏得分<br><span id="game_score">0</span></p>p align="right"> </p><p align="right"><a href="javascript:;" value="0" onclick="If_play(this.value)">开&nbsp; 始</a> </p> '
 


 var map = new Array(       //地图

  "111000000000000111","111000000000000111","111000000000000111","111000000000000111","111000000000000111",
  "111000000000000111","111000000000000111","111000000000000111","111000000000000111","111000000000000111",
  "111000000000000111","111000000000000111","111000000000000111","111000000000000111","111000000000000111",
  "111000000000000111","111000000000000111","111000000000000111","111000000000000111","111000000000000111",
  "222222222222222222","222222222222222222"  
 );
 
//-------------L------------// //演员表
 var L1 = new Array("0000","1000","1000","1100");
 
 var L2 = new Array("0000","0000","0010","1110");
 
 var L3 = new Array("0000","0110","0010","0010");
  
 var L4 = new Array("0000","1110","1000","0000");
//-------------L-------------// 


//-------------J------------// 
 var J1 = new Array("0000","0010","0010","0110");
 
 var J2 = new Array("0000","0000","1110","0010");
 
 var J3 = new Array("0000","1100","1000","1000");
 
 var J4 = new Array("0000","0000","1000","1110");
//-------------J-------------// 
 
 
//-------------Z------------// 
 var Z1 = new Array("0000","0000","1100","0110");
 
 var Z2 = new Array("0000","0100","1100","1000");
 
 var Z3 = new Array("0000","0000","1100","0110");
  
 var Z4 = new Array("0000","0100","1100","1000");
//-------------Z-------------// 


 
//-------------S------------// 
 var S1 = new Array("0000","0000","0110","1100");
 
 var S2 = new Array("0000","0100","0110","0010");
 
 var S3 = new Array("0000","0000","0110","1100");
  
 var S4 = new Array("0000","0100","0110","0010");
//-------------S-------------// 


//-------------T------------// 
 var T1 = new Array("0000","0000","0100","1110");
 
 var T2 = new Array("0000","0010","0110","0010");
 
 var T3 = new Array("0000","1110","0100","0000");
  
 
 var T4 = new Array("0000","1000","1100","1000");
//-------------T-------------// 


//-------------M------------// 
 var M1 = new Array("0000","0000","1100","1100");
 
 var M2 = new Array("0000","0000","1100","1100");
 
 var M3 = new Array("0000","0000","1100","1100");
  
 var M4 = new Array("0000","0000","1100","1100");
//-------------M-------------// 


//-------------I------------// 
 var I1 = new Array("1000","1000","1000","1000");
 
 var I2 = new Array("0000","0000","0000","1111");
 
 var I3 = new Array("0010","0010","0010","0010");
  
 var I4 = new Array("0000","0000","0000","1111");
//-------------I-------------// 


//-------------演员位置表-------------//

 var players = new Array("I","J","T","L","Z","S","M");
 
 //----生成地图--------//
 
 
 function get_color(color_value)
 {
  if(color_value=="1"||color_value=="2")
   return "#000080";
  else
   return "#000000"; 
 }
 
 
 
 
 var map_html = '<table id="map_table" border="1" cellspacing="0" cellpadding="0" bgcolor="#000000" bordercolor="#000000">';
 
 for(h=0;h<map.length;h++)
 {
  map_html+="<tr>"
  
  for(w=0;w<map[0].length;w++)
  {
   map_html+="<td value=\""+map[h].charAt(w)+"\" bgcolor=\""+get_color(map[h].charAt(w))+"\">"
   

  }
  
  map_html +="</tr>"
 }
 
 map_html+="</table>"
 
 stage.innerHTML = map_html
 
 //----生成地图--------//
/****************************************** 上面是准备的代码****************************************************/

 
 function Y_X(y,x) //设置角的对象
 {
  this.x = x;
  this.y = y;
 } 
 
 var game_l_u_angle = new Y_X(0,6);      //方快初始 左上角 和  右上角 的 x y 坐标
 var game_r_d_angle = new Y_X(3,9);
 
 var left_up_angle = new Y_X(game_l_u_angle.y,game_l_u_angle.x); //现在的 左上角的 x y 坐标
 var right_down_angle = new Y_X(game_r_d_angle.y,game_r_d_angle.x); //现在的 右上角 的 x y 坐标
 
 var block_color_1 = "#0099FF"; //现在的方块的颜色
 var block_color_0 = "";        //背景颜色
 
 var map_color_1 = "#000080"; //map 背景颜色 1
 var map_color_0 = "#000000";        //背景颜色 0

 var block_width = "22"; //方块 的 边长
 var block_height = "20";
 
 var game_speed = 540 //游戏速度
 var game_max_speed = Math.floor(game_speed/20);
  
 var SHAPES = new Array("I","M","Z","J","T","S","L"); // 方块形状数组

 var shape_now = SHAPES[returnONE(6)];  //现在的方块形状
 var shape_will = SHAPES[returnONE(6)]; //将来的方块形状
 
 var shape_num = 1;
 
 var obj_start_left = 132;     //方块起始位置
 var obj_start_top  = 0;

 
 var can_move_block = false;  //设置用户是否可以移动方块
 var can_play       = false;  //游戏的开始
 
 var one_score  = 10;  //一个的得分
 var block_score = 4*one_score //一个方块的得分
 var line_score  =  12*one_score //一行的得分
 
/*******************************************上面是数据********************下面是具体运行 函数************************/

//------------返回任意数--------------------//

  function returnONE(JSnum){
  
   JSnum = Math.round(JSnum*Math.random()*100/100);
  
   return JSnum;
  }  

//--------------返回最高-----------------------//

 function return_TOP()
 {
  var block_value = "";
 
  for(h=0;h<4;h++)
  {
   for(w=0;w<4;w++)
   {
    block_value = obj_table.rows(h).cells(w).value;
    
    if(block_value=="1")
     return (h + left_up_angle.y)
   }
  }
 }

 

//---------设置 obj 显示 指定 的 type+num 方块 -----------//

 function set_block(obj,type,num)
 {
  var block = eval(type+num); //获得 指定 方块
  
  var block_value = "";
  var block_color = "";
  
  for(h=0;h<block.length;h++)
  {
   for(w=0;w<block[0].length;w++)
   {
    block_value = block[h].charAt(w);
    block_color = eval("block_color_" + block_value );
    
    with(obj.rows(h).cells(w))
    {
     bgColor = block_color;
     value   = block_value;
    }
   }
  }
  
 }


//-------------使 obj 相对移动--------------//

 function move_block_by(x,y)
 {
  left_up_angle.x += x;
  left_up_angle.y += y;
  
  right_down_angle.x += x;
  right_down_angle.y += y;
  
  obj_stage.style.pixelLeft = left_up_angle.x * block_width;
  obj_stage.style.pixelTop  = left_up_angle.y * block_height;
  
  
 }


//---------------判断 是否 可以 移动 或变形 -------------//

 function If_can_move(l_x,l_y,r_x,r_y) //用于常规判断
 {

  var obj_value = "";
  var map_value = "";

  var checker = 0;
  
 

  for(obj_h=0,h=l_y;h<=r_y;h++,obj_h++)
  {
   for(obj_w=0,w=l_x;w<=r_x;w++,obj_w++)
   {
    obj_value = obj_table.rows(obj_h).cells(obj_w).value;
    map_value = map_table.rows(h).cells(w).value
    
    checker = parseInt(obj_value)+parseInt(map_value);
    
    
    if(map_value=="2")
    {
     if(checker>2)
      return false;
    }
    else
    {
     
     if(checker>1)
      return false;    
    }  
   }
  }


  return true;
 } 
 

 function test_block(){} //用来生成载block value 的 测试对象
 
 var tester = null;
 
 function If_can_move_test(l_x,l_y,r_x,r_y) //用于变形判断
 {

  var obj_value = "";
  var map_value = "";

  var checker = 0;
  
 

  for(obj_h=0,h=l_y;h<=r_y;h++,obj_h++)
  {
   for(obj_w=0,w=l_x;w<=r_x;w++,obj_w++)
   {
    obj_value = eval("tester.value_"+obj_h+"_"+obj_w);
    map_value = map_table.rows(h).cells(w).value
    
   
    checker =  parseInt(obj_value) + parseInt(map_value); 
    
    if(map_value=="2")
    {
     if(checker>2)
      return false;
    }
    else
    {
     
     if(checker>1)
      return false;    
    }  
   }
  }


  return true;
 } 

 

//--------------设置背景颜色----------------------//

 function set_map_bgcolor(l_x,l_y,r_x,r_y)
 {
  
  var obj_value = "";


  for(obj_h=0,h=l_y;h<=r_y;h++,obj_h++)
  {
   for(obj_w=0,w=l_x;w<=r_x;w++,obj_w++)
   {
    obj_value = obj_table.rows(obj_h).cells(obj_w).value;
        
    if(obj_value=="1")
    {
      with(map_table.rows(h).cells(w))
      {
       value = obj_value;
       bgColor = eval("block_color_"+obj_value);
       
      }
    }
  
   }
  }
  

 }

//---------------消除 行 --------------------------------//

 function delete_line(l_y,r_y)
 {

  var value_1_num = 0; //为 1 的块数
  var can_delete_num = map[0].length;     //可以删除的 value = 1 的 block 的总数
  
  var can_delete = true;
  
  var the_block_value = "";    //现在的block的value
  
  for(h=l_y;h<=r_y;h++)
  {
   for(w=0;w<can_delete_num;w++)
   {
    the_block_value = map_table.rows(h).cells(w).value
    
    if(the_block_value=="0"||the_block_value=="2")
    {
     can_delete = false;
    }
   }
   
   if(can_delete) //如果全部为1的话
   {

    map_table.deleteRow(h);
    map_table.insertRow(0);
    
    for(w=0;w<map[0].length;w++)
    {
     map_table.rows(0).insertCell();
     map_table.rows(0).cells(w).value = map[0].charAt(w);
     map_table.rows(0).cells(w).bgColor = eval("map_color_"+map[0].charAt(w));
    }
    
    game_line.innerText =  ""+ (parseInt(game_line.innerText) + 1) + "";
    game_score.innerText = ""+ (parseInt(game_score.innerText) + line_score) + "";
    
   }
   
   can_delete = true;
  
  }  
  
 } 

//--------------方块 移动 主进程 down ----------------// 

 function down_block()
 {
  if(!can_play)
   return;
 
  var check_l_y = left_up_angle.y + 1;
  var check_r_y = right_down_angle.y + 1;
  
  var judger = If_can_move(left_up_angle.x,check_l_y,right_down_angle.x,check_r_y);
  

  if(judger)
  {
   move_block_by(0,1);  
   
      
   setTimeout("down_block()",game_speed)
  }
  else
  {
   can_move_block = false;
   
   var block_top = return_TOP();
   
   if(block_top<=(game_l_u_angle.y+2))
   {
    if(confirm("游戏结束,是否继续?"))
    {
     window.location.reload();
    }
    else
    {
     return;
    }
   }
   else
   {
  
    set_map_bgcolor(left_up_angle.x,left_up_angle.y,right_down_angle.x,right_down_angle.y) //设置背景颜色和value
    
    game_score.innerText = ""+ (parseInt(game_score.innerText) + block_score) + "";
    
     if(parseInt(game_score.innerText)>=(parseInt(game_number.innerText)*20000)) //如果达到过局的分数
     {
      game_number.innerText = ""+(parseInt(game_number.innerText)+1)+"";
      
      game_speed = game_speed - 60;
      
      if(game_speed <=0 )
      {
       game_speed = 540 - (parseInt(game_number.innerText)-1)*60;
       
       if(game_speed < 0)
       {
        alert("Win All");
        return;
       }
      }
      
      game_max_speed = Math.floor(game_speed/20);

     }   
     
     obj_stage.style.display = "none";
  
     delete_line(left_up_angle.y,right_down_angle.y);

     
     shape_now = shape_will;
     shape_will = SHAPES[returnONE(6)];
     shape_num =1;
     
     set_block(obj_table,shape_now,shape_num);
     set_block(element_table,shape_will,shape_num);
     
     left_up_angle.x = game_l_u_angle.x;
     left_up_angle.y = game_l_u_angle.y;
     right_down_angle.x = game_r_d_angle.x;
     right_down_angle.y = game_r_d_angle.y;
     
             obj_stage.style.pixelLeft = left_up_angle.x * block_width;
     obj_stage.style.pixelTop  = left_up_angle.y * block_height;
     
     obj_stage.style.display = "block";
     can_move_block = true;
     
     setTimeout("down_block()",game_speed);

     
   }
    
  }
 }

//-------------- 获取 用户输入 方向 -------------- //

 

 function document.onkeydown()
 {
 
  if(!can_play) //如果不能玩,退出
   return;
   
  if(!can_move_block) //如果不能移动。则退出
   return;
   
  var key_code = event.keyCode;
  
  if(key_code == 37)
  {
   var check_l_x = left_up_angle.x - 1;
   var check_r_x = right_down_angle.x - 1;
   
   var judger= If_can_move(check_l_x,left_up_angle.y,check_r_x,right_down_angle.y);
   
   if(judger)
    move_block_by(-1,0);
   else
    return;        
    
  }
  
  if(key_code == 39)
  {
   var check_l_x = left_up_angle.x + 1;
   var check_r_x = right_down_angle.x + 1;
   
   
   var judger= If_can_move(check_l_x,left_up_angle.y,check_r_x,right_down_angle.y);

   if(judger)
    move_block_by(1,0);
   else
    return;            
  }
  
  if(key_code == 38)
  {
   shape_num++;
   
   if(shape_num>4)
    shape_num = 1;
    
   tester = null 
   tester = new test_block();
   
   var test_shape = eval(shape_now + shape_num);
   
   
   
   for(h=0;h<test_shape.length;h++)
   {
    for(w=0;w<test_shape[0].length;w++)
    {
     eval("tester.value_"+h+"_"+w+"=test_shape["+h+"].charAt("+w+")");
     
    }
   }
   
   var judger = If_can_move_test(left_up_angle.x,left_up_angle.y,right_down_angle.x,right_down_angle.y)
   
   
   if(!judger)
   {
    shape_num--;
   }
   else
   {
    set_block(obj_table,shape_now,shape_num);
   }
   
 
   
  }
  
  if(key_code == 40)
  {
   game_speed = game_max_speed;
  } 
 }
 
 function document.onkeyup()
 {
  game_speed = 540 - (parseInt(game_number.innerText)-1)*60;

 }


//-----------------游戏控制-----------------------////

 
 function start_game(){   //游戏开始
  
  can_play = true;
  can_move_block =true;
  
  
  set_block(obj_table,shape_now,shape_num);
  set_block(element_table,shape_will,shape_num);
   down_block(); 
 }
 
 function pause_game() //暂停 游戏
 {
  can_play = false;
  can_move_block =false;  
 }
 
 function If_play(play_value)
 {
  if(play_value=="0")  //如果是刚开始
  {
   start_game();
   
   event.srcElement.value = "1";
   event.srcElement.innerText = "暂  停"
   
  }
  if(play_value=="1")
  {
   pause_game();
   
   event.srcElement.value = "2";
   event.srcElement.innerText = "开  始"
  }
  if(play_value == "2")
  {
   can_play = true;
   can_move_block =true;  
   
           down_block(); 
   
   event.srcElement.value = "1";
   event.srcElement.innerText = "暂  停";
  }
 }

</script>


</body>
</html>

  评论这张
 
阅读(46)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017