`
zpsailor
  • 浏览: 43732 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JS版俄罗斯方块(带程序说明文档)

阅读更多

这几天用js写了个俄罗斯方块游戏,贴出来给大家分享下,由于在测试中为了方便,有些功能是没有添加上去的,这些在程序说明文档中都有记载,如果你对这个程序感兴趣,可以加载了自己将其完善下,相当于对程序的一个升级版本吧,呵呵~

由于没有过多时间来测试,所以程序中应该还存在不够严谨的地方,相信广大程序爱好者可以将其升级成为更完美的版本。我衷心的希望你能将完善后的版本通过邮件分享给我。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>俄罗斯方块游戏</title>
<script type="text/javascript" src="tetris.js"></script>
<style type="text/css">
.gridStyle{
border-left: solid;#ffffff 1px;
border-top: solid;#ffffff 1px;
border-right: solid;#969696 1px;
border-bottom: solid;#969696 1px;
font-size: 10pt;
}
tr {
	font-family:"楷体";
	font-size: 10pt; 
}
</style>
</head>
<body onload="InitGame();" onkeydown="keyDown();">
<table border="1" cellpadding="1" cellspacing="1" align="center">
 <tr>
  <td><span id="GameBody"></span></td>
  <td>
    <table align="center" border="0" cellpadding="0" cellspacing="0">
     <tr>
     <td><span id="ForeBody"></span></td>
     </tr>
     <tr>
     <td><br><input type="button" value="开始游戏" onclick="startGame();"></td>
     </tr>
     <tr>
     <td><br><input type="button" value="暂停游戏" onclick="pause();"></td>
     </tr>
     <tr>
     <td><br><input type="button" value="结束游戏" onclick="stopGame();"></td>
     </tr>
     <tr>
     <td><br>当前积分:<span id="curScore">0</td>
     </tr>
     <tr>
     <td><br>当前级别:<span id="curLevel">1</td>
     </tr>
     <tr>
     <td><br>已消行数:<span id="curDelRows">0</td>
     </tr>
    </table>
  </td>
 </tr>
</table>
</body>
</html>

 

/***********************************************************************************
 * @author: sailor   
 * 
 * @version: Tetris1.0
 * 
 * date : 2010-04-05
 * 
 * E-Mail:zpsailor@yahoo.com.cn
 * 
 * QQ:251396377
 ***********************************************************************************/
var cols=12,rows=20,grid=20;
var type=-1,nextType;
var curSqure,nextSqure;//当前图形块和下一个图形块
var Score=0,dels=0,level=1;//记录积分,消除行数,当前游戏级别
var MyTimer;
var speed = new Array(500,450,400,350,300,250,200,150,100);
var myColor=new Array("gray","cyan","cyan","cyan","cyan","cyan","cyan","cyan");

function $(id){return document.getElementById(id);}

function CreateArea(rows,cols,name){
	var str="<table align='center' border='1' style=\"background: "+myColor[0]+"\">";
	for(var i=0;i<rows;i++){
    str+="<tr height="+grid+">";
      for(var j=0;j<cols;j++){
      	var id=name+i+"#"+j;
      	str+="<td id="+id+" width="+grid+" class='gridStyle' style=\"background: "+myColor[0]+"\"></td>"
      }
      str+="</tr>";
	}
	str+="</table>";
    return str;
}

/**
 * 初始化游戏
 */
function InitGame(){
 $("GameBody").innerHTML=CreateArea(rows,cols,"gameGrid");
 $("ForeBody").innerHTML=CreateArea(4,4,"foreGrid");
 	type=parseInt((Math.random()*7))+1;
 	var mainSqure=chooseSqure(type,cols/2,1);
 	nextType=parseInt((Math.random()*7))+1;
 	var foreSqure=chooseSqure(nextType,4/2-1,1);
 	reDraw(mainSqure,"gameGrid");
 	reDraw(foreSqure,"foreGrid");
 	curSqure=mainSqure;
 	nextSqure=foreSqure;
}

/**
 * 随即产生图形
 */
function chooseSqure(type,x,y){
var mySqure=new Array(4);
switch(type){
	 case 1: 
	 case 15:
	         mySqure[0]=new Squre(x-1,y,1);
	         mySqure[1]=new Squre(x,y,1);
	         mySqure[2]=new Squre(x+1,y,1);
	         mySqure[3]=new Squre(x+2,y,1);
	         break;
	         
	 case 2: 
	 case 9:
	 case 16:
	 case 23:
	         mySqure[0]=new Squre(x,y-1,2);
	         mySqure[1]=new Squre(x,y,2);
	         mySqure[2]=new Squre(x+1,y-1,2);
	         mySqure[3]=new Squre(x+1,y,2);
	         break;
	      
	 case 3: 
	         mySqure[0]=new Squre(x,y-1,3);
	         mySqure[1]=new Squre(x,y,3);
	         mySqure[2]=new Squre(x,y+1,3);
	         mySqure[3]=new Squre(x+1,y,3);
	         break;
	      
	 case 4: 
	 case 18:
	         mySqure[0]=new Squre(x,y-1,4);
	         mySqure[1]=new Squre(x,y,4);
	         mySqure[2]=new Squre(x+1,y,4);
	         mySqure[3]=new Squre(x+1,y+1,4);
	         break;
	        
	 case 5: 
	 case 19:
	         mySqure[0]=new Squre(x+1,y-1,5);
	         mySqure[1]=new Squre(x,y,5);
	         mySqure[2]=new Squre(x+1,y,5);
	         mySqure[3]=new Squre(x,y+1,5);
	         break;
	         
	 case 6: 
	         mySqure[0]=new Squre(x+1,y-1,6);
	         mySqure[1]=new Squre(x,y,6);
	         mySqure[2]=new Squre(x,y-1,6);
	         mySqure[3]=new Squre(x,y+1,6);
	         break;
	         
	 case 7: 
	         mySqure[0]=new Squre(x-1,y-1,7);
	         mySqure[1]=new Squre(x,y,7);
	         mySqure[2]=new Squre(x,y-1,7);
	         mySqure[3]=new Squre(x,y+1,7);
	         break;
	 
	 case 8:
	 case 22:
	         mySqure[0]=new Squre(x,y-1,1);
	         mySqure[1]=new Squre(x,y,1);
	         mySqure[2]=new Squre(x,y+1,1);
	         mySqure[3]=new Squre(x,y+2,1);
	         break;
	         
	 case 10: 
	         mySqure[0]=new Squre(x-1,y,3);
	         mySqure[1]=new Squre(x,y,3);
	         mySqure[2]=new Squre(x+1,y,3);
	         mySqure[3]=new Squre(x,y+1,3);
	         break;
	         
	 case 11: 
	 case 25:
	         mySqure[0]=new Squre(x-1,y+1,4);
	         mySqure[1]=new Squre(x,y,4);
	         mySqure[2]=new Squre(x,y+1,4);
	         mySqure[3]=new Squre(x+1,y,4);
	         break;
	         
	 case 12:
	 case 26: 
	         mySqure[0]=new Squre(x-1,y,5);
	         mySqure[1]=new Squre(x,y,5);
	         mySqure[2]=new Squre(x,y+1,5);
	         mySqure[3]=new Squre(x+1,y+1,5);
	         break;
	         
	 case 13: 
	         mySqure[0]=new Squre(x-1,y,6);
	         mySqure[1]=new Squre(x,y,6);
	         mySqure[2]=new Squre(x+1,y,6);
	         mySqure[3]=new Squre(x+1,y+1,6);
	         break;
	         
	 case 14: 
	         mySqure[0]=new Squre(x+1,y-1,7);
	         mySqure[1]=new Squre(x,y,7);
	         mySqure[2]=new Squre(x+1,y,7);
	         mySqure[3]=new Squre(x-1,y,7);
	         break;
	         
	 case 17: 
	         mySqure[0]=new Squre(x-1,y,3);
	         mySqure[1]=new Squre(x,y,3);
	         mySqure[2]=new Squre(x,y-1,3);
	         mySqure[3]=new Squre(x,y+1,3);
	         break;
	         
	 case 20: 
	         mySqure[0]=new Squre(x-1,y,6);
	         mySqure[1]=new Squre(x,y,6);
	         mySqure[2]=new Squre(x,y-1,6);
	         mySqure[3]=new Squre(x,y-2,6);
	         break;
	         
	 case 21: 
	         mySqure[0]=new Squre(x,y-1,7);
	         mySqure[1]=new Squre(x,y,7);
	         mySqure[2]=new Squre(x,y-2,7);
	         mySqure[3]=new Squre(x+1,y,7);
	         break;
	         
	 case 24: 
	         mySqure[0]=new Squre(x-1,y,3);
	         mySqure[1]=new Squre(x,y,3);
	         mySqure[2]=new Squre(x+1,y,3);
	         mySqure[3]=new Squre(x,y-1,3);
	         break;
	      
	 case 27: 
	         mySqure[0]=new Squre(x,y-1,6);
	         mySqure[1]=new Squre(x,y,6);
	         mySqure[2]=new Squre(x+1,y,6);
	         mySqure[3]=new Squre(x+2,y,6);
	         break;
	         
	 case 28: 
	         mySqure[0]=new Squre(x,y-1,7);
	         mySqure[1]=new Squre(x,y,7);
	         mySqure[2]=new Squre(x+1,y-1,7);
	         mySqure[3]=new Squre(x+2,y-1,7);
	         break;
	 
  }	
  return mySqure;
}

function Squre(col,row,color){
	this.col=col;
	this.row=row;
	this.color=color;
}

/**
 * 重画
 */
function reDraw(squre,name){
	var area=$(name);
	for(var i=0;i<squre.length;i++){
       var id=name+squre[i].row+"#"+squre[i].col;
      // alert(id);
       $(id).style.background=myColor[squre[i].color];		
	}
}

function clearDraw(squre,name){
	var area=$(name);
	for(var i=0;i<squre.length;i++){
       var id=name+squre[i].row+"#"+squre[i].col;
      // alert(id);
       $(id).style.background=myColor[0];		
	}
}

function keyDown(){
	switch(event.keyCode){
		case 38: overTurn();break;
		case 40: moveCurSqure(0,1,"down");break;
		case 37: moveCurSqure(-1,0,"left");break;
		case 39: moveCurSqure(1,0,"right");;break;
	}
}

/**
 * 移动当前图块
 */
function moveCurSqure(x,y,kind){
  var nextChange=new Array(4);
  for(var i=0;i<curSqure.length;i++){
  nextChange[i]=new Squre(curSqure[i].col+x,curSqure[i].row+y,curSqure[i].color);
  }
  
  if(isBound(kind,nextChange)&&kind=="down"){
  	if(isGameOver()){
  		window.clearInterval(MyTimer);
  		alert("游戏结束!");
  		return ;
  	}
  	deleteRows();//执行消除行
  	doSwitch();
  }
  
  if(isBound(kind,nextChange)){
  	return ;
  }
  
  clearDraw(curSqure,"gameGrid");
  
  //如果是想要移动的下一个位置已经有了阻碍物,障碍物在左右两侧,则拒绝移动,在底端,则当前图块落定,切换下一图块
  for(var i=0;i<nextChange.length;i++){
  	var id="gameGrid"+nextChange[i].row+"#"+nextChange[i].col;
       if($(id).style.background!=myColor[0]){
       	if(kind=="down"){
       		reDraw(curSqure,"gameGrid");
       		if(isGameOver()){
       		 window.clearInterval(MyTimer);
  		     alert("游戏结束!");
  		     return ;
  	        }
  	        deleteRows();//执行消除行
       		doSwitch();
       	}
       	reDraw(curSqure,"gameGrid");
       	return;
       }		
  }
  
  reDraw(nextChange,"gameGrid");
  curSqure=nextChange;
}

/**
 * 判断图块是否到了边界了
 */
function isBound(kind,squre){
	var theSqure=squre;
	var downMax=Math.max(Math.max(theSqure[0].row,theSqure[1].row),Math.max(theSqure[2].row,theSqure[3].row));
	var rightMax=Math.max(Math.max(theSqure[0].col,theSqure[1].col),Math.max(theSqure[2].col,theSqure[3].col));
	var leftMax=Math.min(Math.min(theSqure[0].col,theSqure[1].col),Math.min(theSqure[2].col,theSqure[3].col));
	var upMax=Math.min(Math.min(theSqure[0].row,theSqure[1].row),Math.min(theSqure[2].row,theSqure[3].row));
	
	if(downMax>rows-1&&kind=="down"){
	  	return true;
	}
	if(rightMax>cols-1&&kind=="right"){
		return true;
	}
	if(leftMax<0&&kind=="left"){
		return true;
	}
	if(upMax<0&&kind=="up"){
		return true;
	}
	return false;
}

/**
 * 判断图块显示区域是否有障碍物
 */
function haveObstacle(kind,squre){
	var theSqure=squre;
	var downMax=Math.max(Math.max(theSqure[0].row,theSqure[1].row),Math.max(theSqure[2].row,theSqure[3].row));
	var rightMax=Math.max(Math.max(theSqure[0].col,theSqure[1].col),Math.max(theSqure[2].col,theSqure[3].col));
	var leftMax=Math.min(Math.min(theSqure[0].col,theSqure[1].col),Math.min(theSqure[2].col,theSqure[3].col));
	var upMax=Math.min(Math.min(theSqure[0].row,theSqure[1].row),Math.min(theSqure[2].row,theSqure[3].row));
	clearDraw(curSqure,"gameGrid");
	for(var i=0;i<theSqure.length;i++){
		var id="gameGrid"+theSqure[i].row+"#"+theSqure[i].col;
		//alert(id);
		if($(id).style.background!=myColor[0]){
			if(kind=="left"&&theSqure[i].col<rightMax){
				reDraw(curSqure,"gameGrid");
				return true;
			}
			if(kind=="right"&&theSqure[i].col>leftMax){
				reDraw(curSqure,"gameGrid");
				return true;
			}
			if(kind=="down"&&theSqure[i].col<downMax){
				reDraw(curSqure,"gameGrid");
				return true;
			}
	}		
	}
	return false;
} 


/**
 * 一个图块已落定,切换到下一个图块
 */
function doSwitch(){
	type=nextType;
	nextType=parseInt((Math.random()*7))+1;
	var mainSqure=chooseSqure(type,cols/2,1);
	var foreSqure=chooseSqure(nextType,4/2-1,1);
 	reDraw(mainSqure,"gameGrid");
 	clearDraw(nextSqure,"foreGrid");
 	reDraw(foreSqure,"foreGrid");
 	curSqure=mainSqure;
 	nextSqure=foreSqure;
 	window.clearInterval(MyTimer);
	startGame();
}

/**
 * 实现当前图形的翻转
 */
function overTurn(){
	 var nextChange;
	 var oldType=type;
     type+=7;
	 if(type>28){
	 	type-=28;
	 }
	 var nextChange=chooseSqure(type,curSqure[1].col,curSqure[1].row);
	 
	 //判断边界处的旋转
	 while(isBound("left",nextChange)){
	 	var x=1,y=0;
	 	
	 	for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	}
	 }
	 
	while(isBound("right",nextChange)){
	 	var x=-1,y=0;
	 	for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	}
	 }
	
	while(isBound("up",nextChange)){
	 	var x=0,y=1;
	 	for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	}
	 } 
	 
	while(isBound("down",nextChange)){
	 	var x=0,y=-1;
	 	for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	}
	 } 
	 
	 //处理有障碍物处的旋转
	 if(haveObstacle("left",nextChange)&&haveObstacle("right",nextChange)){
	 	type=oldType;
	 	return ;
	 }
	 if(haveObstacle("left",nextChange)){
	 	while(haveObstacle("left",nextChange)){
	 	  var x=1,y=0;
	 	  for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	 }
	 	  if(isBound("right",nextChange)){
	 	  	type=oldType;
	 	  	return ;
	 	  }else{
	 	  if(haveObstacle("right",nextChange)){
	 	  	type=oldType;
	 	  	return ;
	 	  }
	 	  }
	 	}
	 }
	 
	 if(haveObstacle("right",nextChange)){
	 	while(haveObstacle("right",nextChange)){
	 	  var x=-1,y=0;
	 	  for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	 }
	 	  if(isBound("left",nextChange)){
	 	  	type=oldType;
	 	  	return ;
	 	  }else {
	 	  if(haveObstacle("left",nextChange)){
	 	  	type=oldType;
	 	  	return ;
	 	  }
	 	  }
	 	}
	 }
	 
	 if(haveObstacle("down",nextChange)){
	 	while(haveObstacle("down",nextChange)){
	 		var x=0,y=-1;
	 		for(var i=0;i<nextChange.length;i++){
	 		nextChange[i].col+=x;
	 		nextChange[i].row+=y;
	 	 }
	 	 if(isBound("up",nextChange)){
	 	 	type=oldType;
	 	 	return ;
	 	 }
	 	}
	 }
	 clearDraw(curSqure,"gameGrid");
	 curSqure=nextChange;
	 reDraw(curSqure,"gameGrid");
}

/**
 * 消去一行或多行
 */
function deleteRows(){
	var delRows=new Array();//记录需要删除的行
	var downMax=Math.max(Math.max(curSqure[0].row,curSqure[1].row),Math.max(curSqure[2].row,curSqure[3].row));
	var upMax=Math.min(Math.min(curSqure[0].row,curSqure[1].row),Math.min(curSqure[2].row,curSqure[3].row));
	for(var i=upMax;i<=downMax;i++){
		var mark=true;
		for(var j=0;j<cols;j++){
			var id="gameGrid"+i+"#"+j;
			if($(id).style.background==myColor[0]){
				mark=false;
			}
		}
		if(mark)
		{
			delRows.push(i);
		}
	}

  //执行删除
  for(var i=0;i<delRows.length;i++){
  	for(var j=0;j<cols;j++){
			var id="gameGrid"+delRows[i]+"#"+j;
			$(id).style.background=myColor[0];
		}
  }
  if(delRows.length>0)
   moveRows(delRows);
}

/**
 * 移动一行或多行
 */
function moveRows(moveR){
var mRows=moveR.length;

Score+=mRows*100+parseInt(mRows/2)*100;
dels+=mRows;
level=parseInt(Score/2000)+1;
if(level>8){
	level-=8;
}
$("curLevel").innerText=level;
$("curScore").innerText=Score;
$("curDelRows").innerText=dels;
window.clearInterval(MyTimer);
startGame();
//将消除的行的上面部分移动下来
for(var n=0;n<mRows;n++){
var upRows=moveR[n]-1;
for(var i=upRows;i>0;i--)
  for(var j=0;j<cols;j++){
     var id="gameGrid"+i+"#"+j;
     var moveID="gameGrid"+(1+i)+"#"+j;
     $(moveID).style.background=$(id).style.background;
     $(id).style.background=myColor[0]; 	
	 }
 }
}

/**
 * 开始游戏
 */
function startGame(){
 MyTimer=window.setInterval("moveCurSqure(0,1,'down')",speed[level-1]);	
}

/**
 * 游戏暂停
 */
function pause(){
	window.clearInterval(MyTimer);
}

function stopGame(){
	if(window.confirm("确定结束游戏?")){
		window.close();
	}
}

/**
 * 判断游戏是否结束
 */
function isGameOver(){
 var downMin=Math.min(Math.min(curSqure[0].row,curSqure[1].row),Math.min(curSqure[2].row,curSqure[3].row));
 if(downMin<=0){
 	return true;
 }
 else
 { 
 	return false;
 }
}

 

分享到:
评论
23 楼 zpsailor 2011-01-14  
superobin 写道
贴个早些年写的,带AI的。。。。那时候还不太懂闭包。。。。
http://superobin.iteye.com/blog/867892

好啊 ,我也看看
22 楼 zpsailor 2011-01-14  
kingdom031 写道
楼主写的不错,我大致看了一下,你那个bug。
1、可以加一个全局变量 比如:isgo=true;
在你点击暂停按钮的时候,置换状态和文字。
if(isgo){
      window.clearInterval(MyTimer);
  $("stop").value="继续游戏";
  isgo=false;
}else{
startGame();
$("stop").value="暂停游戏";
isgo=true;
}
2、借助上面的变量
function keyDown(){
if(isgo){
    switch(event.keyCode){ 
        case 38: overTurn();break; 
        case 40: moveCurSqure(0,1,"down");break; 
        case 37: moveCurSqure(-1,0,"left");break; 
        case 39: moveCurSqure(1,0,"right");;break; 
    }
}

这样,应该就可以了吧,希望指正!

谢谢,哎 这段时间用Flex,好久没做js的东西了 ,好多都忘了,我等段时间试试看哈。
21 楼 kingdom031 2011-01-14  
楼主写的不错,我大致看了一下,你那个bug。
1、可以加一个全局变量 比如:isgo=true;
在你点击暂停按钮的时候,置换状态和文字。
if(isgo){
      window.clearInterval(MyTimer);
  $("stop").value="继续游戏";
  isgo=false;
}else{
startGame();
$("stop").value="暂停游戏";
isgo=true;
}
2、借助上面的变量
function keyDown(){
if(isgo){
    switch(event.keyCode){ 
        case 38: overTurn();break; 
        case 40: moveCurSqure(0,1,"down");break; 
        case 37: moveCurSqure(-1,0,"left");break; 
        case 39: moveCurSqure(1,0,"right");;break; 
    }
}

这样,应该就可以了吧,希望指正!
20 楼 superobin 2011-01-11  
贴个早些年写的,带AI的。。。。那时候还不太懂闭包。。。。
http://superobin.iteye.com/blog/867892
19 楼 MR.THOR 2011-01-10  
不管楼上是什么时候有的,我相信楼主是原创的,不错,谢谢分享
18 楼 小犇犇 2011-01-10  
自己的javascript功底还是太浅啊~看来要努力学习了!
17 楼 warrior701 2010-06-27  
学习了。。。
16 楼 yy11ll12 2010-04-14  
第一次看到这样的代码,我来试试
15 楼 zpsailor 2010-04-13  
keepSmile 写道
JS高手啊。

学习了一段时间,入门没多久哈 ,不敢称高手
14 楼 keepSmile 2010-04-13  
JS高手啊。
13 楼 wudasheng 2010-04-13  
我js不是很好,下来学习下!!!
12 楼 zpsailor 2010-04-13  
那个图形旋转我采用了常用的事先将各种不同旋转的图形都定义出来,谁能分享一种算法只用定义几种基本图形,旋转的时候根据当前图形调整就可以了,网上看了很多,但好像不怎么实用。
11 楼 huanglei7211 2010-04-12  
谢谢了,多向你学习学习
10 楼 zpsailor 2010-04-12  
小刘而已 写道
不是吧,我很早就有这个代码了呀。。。。。不过不知道是谁写的。

  类似的多了,不过这个是原创哈
9 楼 小刘而已 2010-04-12  
不是吧,我很早就有这个代码了呀。。。。。不过不知道是谁写的。
8 楼 zpsailor 2010-04-12  
tntxia 写道
根本就不能用,我用的是IE6,是不是要在IE7上才可以用。

呃 ··  这个我是在IE7上测试的,应该能在IE6下兼容啊,显示什么错误呀?
7 楼 tntxia 2010-04-12  
根本就不能用,我用的是IE6,是不是要在IE7上才可以用。
6 楼 eason26_li 2010-04-11  
非常不错,楼主厉害~~~
5 楼 zpsailor 2010-04-11  
gaozi131 写道
楼主 厉害 

下载学习了 也感谢分享

客气了,相互学习哈
4 楼 wgoku 2010-04-11  
谢谢分享,下载研究下

相关推荐

    毕业设计-基于HTML+JS实现的俄罗斯方块(源代码+说明)

    使用HTML+JS实现的一个俄罗斯方块小游戏,该项目有很高的自由性,你可以修改其中的许多内容。 系统在生活中的应用十分广泛,无论是个人还是企业,在日常生活中都需要系统,不仅可以提高工作效率和质量,也可以提高...

    自己写的js 版 俄罗斯方块 html div js dom

    【标题】"自己写的js 版 俄罗斯方块 html div js dom" 揭示了这个项目的核心技术点:使用JavaScript编程语言实现了一个基于HTML和CSS的俄罗斯方块游戏。在这个游戏中,HTML元素(尤其是div)被用作游戏的图形表示,...

    自己写的小程序俄罗斯方块

    【标题】:“自己写的小程序俄罗斯方块” 这个标题揭示了一个个人编程项目,开发者编写了一个小型的俄罗斯方块游戏。俄罗斯方块是一款经典的电子游戏,玩家需要操控各种形状的方块下落,通过合理布局使它们在底部...

    eluosi.rar_html俄罗斯方块

    【描述】中提到,这是一个使用HTML5编写的俄罗斯方块程序。HTML5是超文本标记语言(HTML)的第五个版本,它在传统HTML的基础上添加了许多新特性,如离线存储、媒体元素、 canvas画布、svg矢量图以及geolocation定位...

    js实现的俄罗斯方块

    8. **文档说明**:压缩包中可能包含的程序说明文档,会详细解释代码结构、关键函数的用途,帮助初学者理解项目的实现细节。 这个项目不仅展示了JavaScript的基本语法和面向对象编程,还涉及到动画制作、游戏设计、...

    在线俄罗斯方块网页游戏程序 -源码.zip

    在线俄罗斯方块网页游戏程序的源码是一份用于学习编程和游戏开发的宝贵资源,它提供了实现经典游戏“俄罗斯方块”的完整代码。通过研究这份源码,开发者可以深入理解如何利用HTML、CSS和JavaScript等前端技术来创建...

    用Java编写的俄罗斯方块.zip

    HTML文件“俄罗斯方块.html”可能是游戏的说明文档或在线版本的代码预览。如果是文档,它可能包含了游戏的玩法说明、开发过程的记录或者源代码的解释。如果是在线版本的代码预览,那么可能利用了HTML5的Canvas或者...

    俄罗斯方块游戏开发教程实例代码

    在【TetrisGame-master】这个压缩包中,你可能会找到包含源代码、资源文件(如图像和音频)、文档说明甚至示例运行程序。通过阅读和分析这些文件,你可以逐步学习并掌握以上提到的知识点,从而自己动手制作一个功能...

    c语言Turbo C下写的俄罗斯方块.rar

    标题 "c语言Turbo C下写的俄罗斯方块.rar" 暗示了这是一个使用C语言在 Turbo C 编译器环境下实现的俄罗斯方块游戏项目。这个项目可能包含了一个完整的C语言源代码文件,用于展示如何用低级别的编程语言创建一个经典...

    c语言俄罗斯方块.rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程设计,基于SpringBoot+Vue开发的,含有代码注释,新手也可看懂。ssm整合开发,...

    俄罗斯方块游戏论文等资料.rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程设计,基于SpringBoot+Vue开发的,含有代码注释,新手也可看懂。ssm整合开发,...

    VB俄罗斯方块游戏课程设计(源代码+论文).rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程设计,基于SpringBoot+Vue开发的,含有代码注释,新手也可看懂。ssm整合开发,...

    VB俄罗斯方块系统设计与实现(源代码+论文).rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程设计,基于SpringBoot+Vue开发的,含有代码注释,新手也可看懂。ssm整合开发,...

    js方块躲避游戏代码

    文中提到的“js方块躲避游戏”就是一个使用JavaScript实现的简单交互游戏。 2. 鼠标事件处理:游戏通过鼠标事件控制方块移动。事件包括`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标释放)。...

    基于Java ME无线网络移动端的俄罗斯方块游戏的实现(论文,源代码).rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程设计,基于SpringBoot+Vue开发的,含有代码注释,新手也可看懂。ssm整合开发,...

    javascript实例

    1. **小游戏**:JavaScript可以用于创建各种类型的小游戏,如经典的贪吃蛇、打地鼠、俄罗斯方块等。这些游戏通常涉及定时器(setInterval或setTimeout)来控制游戏循环,事件监听(如键盘和鼠标事件)来响应用户操作...

    java源码包---java 源码 大量 实例

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  ...

    java源码包2

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 ...

    java源码包3

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 ...

Global site tag (gtag.js) - Google Analytics