`

制作简单的连连看

阅读更多

 

 面向对象练习游戏。

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>
 <style type="text/css">

	.container{
		border:1px solid #000000;
		width:70%;
		height:600px;
		clear:both;
		float:left;
	}

	table{
		border:1px solid #000000;
		width:100%;
		height:100%;
		text-align:center;
		font-size:25px;
		border-collapse:collapse;
		empty-cells:show;
	}

	.border{
		border:1px solid red;
	}

 </style>

 <BODY>

 
行数<INPUT id="setrow" type="text" value="16" size="2">&nbsp;
列数<INPUT id="setcol" type="text" value="9" size="2">&nbsp;
图片数<INPUT id="setpic" type="text" value="12" size="2">&nbsp;
时间<INPUT id="settime" type="text" value="60" size="3">秒&nbsp;
<BUTTON onclick="init();">重置</BUTTON>&nbsp;
<DIV id="timeleft" style="float:left;"></DIV>
<DIV id="timebar" style="height:5;width:600;background-color:white;"></DIV>
<DIV id="container" class="container"> </DIV>
 </BODY>
  <script src="jquery-1.7.2.js"></script>
<SCRIPT LANGUAGE="JavaScript">
	 

	 
	// alert( parseInt(Math.random()*12 )   ); 
	//保存第一次 点击的对象  pic 与 td 
	var pic_first_click =  null ;
	var td_first_click =  null ;
	var bgPicArray = null;
	var background = null;
	
	//最大的列数
	var maxRow = 0; 
	//最大的行数 
	var maxCol =  0;
		
	function init(){
		 var contents = [ 'a','b','c' ,'d','e','f' ,'g' ,'h','i','g', 'k' , 'l' ];
		
		 var setrow = $('#setrow').val();
		 var setcol = $('#setcol').val();
		 
		 maxRow =  parseInt(setrow)+2 ;
		 maxCol =  parseInt(setcol)+2;
		 background = new Background(maxRow , maxCol );
		 background.initbg( contents );
	     var table = background.genBGTable(); 
		 //alert(table );
		 $('#container').html( table );
	}

	//消除 表格中元素 
	function removeEle( obj ){
	 	 
		var l = $(obj).attr('l');
		var h =  $(obj).attr('h');
		var pic_current_click = background.datas[h][l];


		  
		if(td_first_click == null){
			//alert(pic_current_click +"  "+ pic_current_click.point.x   );
			 if(   pic_current_click.getIsRemove()  ){
				   return ;
			}
			td_first_click = obj ;
			pic_first_click = pic_current_click;
			$(td_first_click).addClass('border');
			 
		}else{

			  //alert( background.linkXY(pic_first_click ,pic_current_click) );
			  //alert( pic_first_click.getIsRemove() +"  "+ pic_current_click.getIsRemove() );
			  //判断对象是否被移除 
			  if(   pic_current_click.getIsRemove()  ){
				   //alert(" 对象 remove ");	
				   return ;
			  }
 
			  if(background.linkXY(pic_first_click ,pic_current_click)
					  && pic_current_click.judgeSame( pic_first_click ) ){
				
				 $( obj).html('');
				 $( td_first_click ).html('');
				 //$( obj).removeAttr('content');
				 //删除 pic 
				 pic_current_click.setIsRemove(true);
				 pic_first_click.setIsRemove(true);
	 
			  }
 
			 //remove first click trace 
			 $(td_first_click).removeClass( ); 
			 td_first_click = null;
  			 pic_first_click = null;
		}

	}

	 //构造背景对象  
	 function Background( setrow , setcol ){
		 //行
		 this.row =  setrow ;
		 //列
		 this.col = setcol ;
		 //场景 数组  内部存放 picture 对象
		 this.datas = getDatas( setrow , setcol );

		 function getDatas(setrow,setcol ){
			 
			 if(setrow==null || setrow==0  ){
					alert( "行不能为空");
					return null;
			 }
			 if(setcol == null || setcol==0 ){
				alert('列不能为空');
				return null;
			 }
			 //   x坐标是行       y坐标是列
			 var datas = new Array(setrow );
			 for( var i=0;i < setrow;i++   ){
			    var column = parseInt(setcol) ;
				datas[i] = new Array( column );
				var point = null ;
				var pic = null ;
				for(var j=0;j< column ;j++ ){

					 point = new Point( j , i );
					 pic = new Picture('',point);
			 
					 if(i==0 || j==0 || i== (setrow-1) || j==(setcol-1)   ){
						 //边框处 状态为移除 
						 pic.setIsRemove(true);
					 }
					 //pic.setBackGround( this );
					 datas[i][j] = pic;
					 //alert( $(pic.getTdObj()));
				}
			 }
			 return datas;
		 }
	 }

	 //背景  数据 填出 内容 
     Background.prototype.initbg = function(contents  ){
		 
		 if( this.datas == null || this.datas.length ==0 ){
				alert("请初始化背景数组");
				return  ;
		 }
		 
		 if(!contents){
			  alert("没有设置背景内容");
		 }

		 var witchChar = 0 ;
		 //可能会出现 单个的内容       注意         x坐标是行       y坐标是列
 		 for( var i=1;i< this.row -1  ;i++ ){
 			for(var col_temp=1;col_temp< this.col-1; col_temp++  ){
				witchChar = randomInt( contents.length );
				
				this.datas[i][col_temp].content = contents[witchChar];
			}

		 }  
	 }

	// 生成背景 html  ,注意         x坐标是行       y坐标是列
     Background.prototype.genBGTable = function( ){
		 
		 if( this.datas == null || this.datas.length ==0 ){
				alert("请初始化背景数组");
				return ;
		 }
		 
		 var htmlStr = "<table border='1'>";
		
		 for(var i=0 ;i<this.row;i++   ){
			 var point = null ;
			 var pic = null ; 
			 htmlStr = htmlStr + "<tr>";
			 for(var j=0 ;j< this.col;j++   ){
				 point = new Point(j , i);
				 pic = new Picture(this.datas[i][j] , point )
				 
				 if(this.datas[i][j].content==null || this.datas[i][j].content==''){
					 htmlStr = htmlStr+"<td  h='"+i+"' l='"+j+"' content='' id='"+i+j+"'>&nbsp;</td>";
				 }else{
					htmlStr = htmlStr+"<td  id='"+i+j+"' onclick='removeEle(this)' h='"+i+"' l='"+j+"' content='"+this.datas[i][j].content+"'>"+ this.datas[i][j].content +"</td>";
				 }
				 
			 }
			htmlStr= htmlStr+ "</tr>";
		 }
		htmlStr= htmlStr+ "</table>";
		return htmlStr;
	 }

	 //判断x 方向连接 
	 Background.prototype.linkX = function( picture1 ,picture2 ){
		   var x1  = picture1.point.x;
		   var y1  = picture1.point.y;
		   var x2  = picture2.point.x;
			
		   
		   for(var i=x1; i!=x2; (x1<x2)?i++:i-- ){
			    if( i==x1 ) continue;
				if( !this.datas[y1][i].getIsRemove()    ){
					return false;
				}
		   }
		   return true;
	 }

	 //判断Y 方向连接 
	 Background.prototype.linkY = function( picture1 ,picture2 ){

		   var x1  = picture1.point.x;
		   var y1  = picture1.point.y;
		   var y2  = picture2.point.y;
			
		   
		   for(var i=y1; i!=y2; (y1<y2)?i++:i-- ){
			   //alert(this.datas[y1][i].getTdObj() );
			    if( i==y1 ) continue;
				if( !this.datas[i][x1].getIsRemove() ){
					return false;
				}
		   }
		   return true;
	 }

	
	 // 三条线连接 
	 Background.prototype.linkXY = function( pic1 ,pic2 ){
			
			var picture1 = pic1 ;
			var picture2 = pic2 ;
			
			var x1  = picture1.point.x;
			var y1  = picture1.point.y;
			var x2  = picture2.point.x;
			var y2  = picture2.point.y;
			  
			//if( this.linkY(picture1,picture2 )) return true;	
			//if( this.linkX(picture1,picture2 )) return true;	
		   
		   if(  this.linkX(picture1,picture2) && this.linkY( picture2 , picture1 ) ) return true;  
	       if( picture1.isHigher(picture2) ){
				var p =picture1;
				picture1 = picture2;
				picture2 = p;
		   }
	       
			//  y -
		   for(var i=x1-1;i>=0;i-- ){
				if( !this.datas[y1][i].getIsRemove() ) break;
				if( this.linkY(this.datas[y1+1][i] ,pic2 ) 
						&& this.linkX(pic2 ,this.datas[y1][i]  ) ){
					return true;
				}
		   }
			// y + 
		   for(var j=x1+1 ;j< maxCol  ;j++ ){
				if( !this.datas[y1][j].getIsRemove() ) break ;
				if(  this.linkY(this.datas[y1+1][j] ,pic2 ) 
						&& this.linkX(pic2 , this.datas[y1][j] ) ){
					return true;
				}
		   }
 

		   if(!picture1.isLeft(picture2)){
				var p =picture1;
				picture1 = picture2;
				picture2 = p;
		   }

			// x - 
		   for(var m=y1-1 ;m > 0 ;m-- ){
				if(  !this.datas[m][x1].getIsRemove() ) break;
				if(  this.linkX( this.datas[m][x1+1],pic2 )  
						&& this.linkY(pic2 ,this.datas[m][x1+1] )   ){
					return true;
				}	
		   }
		   
			// x + 
		   for( var m=y1+1 ;m < maxRow  ;m++ ){
				if(  !this.datas[m][x1].getIsRemove() )  break;
				if( this.linkX( this.datas[m][x1+1],pic2 )  
						&& this.linkY(pic2 ,this.datas[m][x1+1] )   ){
					return true;
				}
		   }

			return false;
		      

		    /*

		   if(!picture1.isLeft(picture2)){
				var p =picture1;
				picture1 = picture2;
				picture2 = p;
		   }
			
		   if( this.linkX(picture1,picture2 )) return true;

		   for(var i=0;i<(picture1.point.x-1) ; i++   ){
				 
				 var point_temp = new Point(  i , picture1.point.y );
				 var pic_temp = new Picture('','' );
				 
				if(this.linkX(picture1,picture2 ) ){
					
				}
		   }


		   */
	 }


	 //随机 产生 一定范围内的数字
	 var randomInt = function(limit ){
		if(isNaN(limit)){
			alert("请输入合法数字");
			return null;
		}
		return parseInt(Math.random()*limit);
	 }
	



	 //点
	 function  Point(x , y ){
		this.x = x ;
		this.y  = y ;
		this.getX = function (){
			return this.x ;
		}
		this.getY = function (){
			return y;
		}
	 }
	 // judge  same point 
	Point.prototype.judgeSamePosition= function(point ){
			 
			if( this.x ==point.x && this.y == point.y ){
				return true;
			}else{
				return false;
			}
	}
 


	 //图片
	 function Picture(content , point ){
		 
		  this.tdObj = null;//  pic 对象与表格的那个td 对象对应 
		  this.backGround = null;  //pic 在那个背景中
		  this.point = point;
		  this.content = content ;
		  this.isRemove = false;
		  this.getPoint = function(){
			return this.point;
		  }
		  this.getContent = function(){
			return this.content ;
		  }
	 }

	 //设置  对象是否被移除 	
	 Picture.prototype.setIsRemove=function(isRemove){
		this.isRemove = isRemove;
	 }
	 // 取得 是否移除 对象 
	 Picture.prototype.getIsRemove = function(){
		return this.isRemove ;
	 }	 
	 //pic 与背景 的关系
	 Picture.prototype.setBackground = function(backGround){
		 this.backGround = backGround ; 
	 }
	 //pic 与背景 的关系
	 Picture.prototype.getBackground = function(backGround){
		return  this.backGround  ; 
	 }
	  
	 
	   //judge same  Picture 
	  Picture.prototype.judgeSame = function(picture){
		  //alert( this.point +"  "+this.point.getX() +"  "+this.point.getY()   );
		  if(this.getIsRemove()){
			return false;
		  }
		  if( this.point.judgeSamePosition( picture.point)){
				return false;
		  } 

		  if(this.content == picture.content ){
			  return true;
		  }else{
 			  return false;
		  }
		}

	    // 判断是否在上面 
		Picture.prototype.isHigher = function(picture){
			 if( picture.point==null || picture.point.y==null 
					|| this.point==null  ||  this.point.y==null ){
					alert("参数不正确");
					return false;
			 }

			 if( this.point.y >picture.point.y  ){
					return true;
			 }else{
				return false;
			 }
		}

	    // 判断 是否 在左边 
		Picture.prototype.isLeft = function(picture){
	      
			if( this.point ==null || this.point.x==null 
					|| picture.point == null || picture.point.y==null ){
				alert("参数不正确");
				return false;
			}

			if( this.point.x <picture.point.x ){
				return true;
			}else{
				return false ;
			}
		}


		


	var point1  =  new Point(1 ,2 );
	var point2 =  new Point(1 ,23 );
 
	var picture1 = new Picture( 'y' ,point1 );
	var picture2 = new Picture('b' ,  point2 );
	 //测试picture类
	//alert(picture1.judgeSame( picture2) ); 
 
   

</SCRIPT>
</HTML>


 

 

 我是做java的,做这个东西是为了练习一下javascript ,不知道我写的js是否符合js 代码规范,如果有做js的请留下一点宝贵建议,谢谢

分享到:
评论

相关推荐

    Delphi制作字母连连看小游戏

    Delphi是一款强大的面向对象的编程工具,它基于Pascal语言,提供了直观的集成开发环境(IDE)和丰富的组件库,使得游戏开发变得相对简单。 首先,我们需要理解连连看游戏的基本规则。这种游戏通常包含两个主要部分...

    WPF制作的连连看界面

    本项目是一个利用WPF技术制作的“连连看”游戏界面,旨在展示如何在WPF环境中构建一个简单的游戏应用。 “连连看”是一款广受欢迎的休闲游戏,其核心玩法是找到并消除两个相同的图案,直到所有图案都被消除。在WPF...

    windows 简易连连看游戏

    【标题】:“Windows简易连连看游戏” 这是一款专为初学者设计的Windows平台下的连连看游戏,旨在帮助学习者理解基础的编程概念和Windows应用程序开发技术。作为一个初级开发者或者编程爱好者,通过这款游戏,你...

    cocos creator实例--使用creator简单实现连连看游戏 | 附代码LLK.zip

    在本实例中,我们将探讨如何使用Cocos Creator构建一个简单的连连看游戏。 连连看游戏的基本玩法是找到并消除一对相同的图案,当所有图案配对成功后,游戏胜利。以下是实现这个游戏的关键步骤和涉及的技术点: 1. ...

    期末大作业基于VUE的连连看小游戏源码.zip

    期末大作业基于VUE的连连看小游戏源码,内附安装教程。 期末大作业基于VUE的连连看小游戏源码,内附安装教程。期末大作业基于VUE的连连看小游戏源码,内附安装教程。期末大作业基于VUE的连连看小游戏源码,内附安装...

    连连看-连连看.rar

    这款游戏简单易上手,但却具有一定的挑战性和趣味性,适合各个年龄段的玩家。 在压缩包"连连看-连连看.rar"中包含的文件"连连看.fla"是Flash动画文件,它是Adobe Flash Professional用于创建、编辑和发布交互式矢量...

    连连看素材.rar

    连连看是一款广受欢迎的休闲消除类游戏,它的玩法简单,却又具有一定的挑战性。这个名为“连连看素材.rar”的压缩包文件显然包含了制作连连看游戏所需的图像资源。下面将详细探讨连连看游戏的设计元素以及这些素材在...

    as3.0做的连连看

    在IT领域,游戏开发一直是热门话题,尤其是对于初学者来说,通过创建简单的游戏可以更好地理解和掌握编程语言。本篇将深入探讨一款使用AS3.0(ActionScript 3.0)开发的连连看小游戏,通过源代码分析,帮助读者了解...

    用Qt制作的RPG形式的连连看.rar

    【标题】"用Qt制作的RPG形式的连连看"是一个使用Qt框架开发的桌面游戏项目,它将经典的连连看游戏与角色扮演游戏(RPG)的元素相结合,为玩家带来新颖的游戏体验。Qt是一个跨平台的C++图形用户界面应用程序开发框架,...

    甘蔗连连看V1.2官方安装版连连看单机小游戏

    甘蔗连连看是甘蔗小游戏推出的一款连连看单机小游戏,这是非常风靡的办公室小游戏,甘蔗连连看游戏具有下面的特点: 1、由低到高的难度,让你循序渐进的成为连连看高手; 2、可以保存游戏进度,每日只需轻松的玩上一...

    连连看HTML5游戏源码

    连连看HTML5游戏源码是一种基于HTML5技术开发的在线休闲益智游戏,它允许玩家在网页上进行游戏,...无论是对前端开发还是对游戏制作有兴趣的个人,都可以通过研究这个源码提升自己的技能,并在此基础上进行创新和改造。

    易语言制作连连看小游戏的代码

    易语言是一种专为初学者设计的编程语言,其语法简洁明了,适合用来制作各种简单的小游戏,如连连看。连连看游戏的核心在于图像匹配,玩家...通过理解这些代码,初学者可以学习到易语言的基本语法和制作简单游戏的方法。

    vb 小游戏连连看(vb )

    VB(Visual Basic)是微软公司推出的一种基于事件驱动的编程语言,它简单易学,适合初学者入门。本项目“VB 小游戏连连看”就是一个利用VB开发的休闲益智游戏,深受玩家喜爱。在这款游戏中,玩家需要通过消除相同...

    HTML5连连看游戏

    一款非常不错但能让人瞬间凌乱的三国杀版连连看游戏,设置了提示和排名、计时等功能,代码简单易懂,是一个很不错的游戏开发学习案例。  感兴趣的开发者可以下载源码,解压后导入MM开发环境进行修改优化,可跨平台...

    gdh.rar_FlashMX 游戏_flash连连看制作教程_游戏 flash_连连看源码

    本教程将深入探讨如何使用Flash MX工具来制作一款类似“宠物连连看”的游戏,帮助开发者更好地理解和掌握游戏开发技巧。 一、Flash MX简介 Flash MX是Adobe公司推出的多媒体创作工具,主要用于创建交互式网页动画、...

    ios 基于cocos2d开发的连连看源码

    3. **物理引擎(Physics Engine)**:虽然连连看游戏的物理效果相对简单,但源码可能包含简单的碰撞检测,以识别两个相邻的相同棋子。Cocos2D内置的Box2D或Chipmunk物理引擎可以帮助实现这一点。 4. **动画...

    连连看素材(水果连连看).zip

    《水果连连看》是一款深受大众喜爱的经典休闲游戏,它的素材制作是通过编程工具Scratch实现的。Scratch是由麻省理工学院(MIT)媒体实验室终身幼儿园团队开发的一款面向儿童的图形化编程工具,旨在帮助孩子们学习...

    C#编写的连连看游戏完整程序

    在IT领域,游戏开发是一项充满挑战和趣味性的任务,尤其对于初学者来说,通过制作简单的游戏能够快速掌握编程基础和逻辑思维。本项目是一个用C#语言编写的连连看游戏,它不仅为玩家提供了娱乐,同时也是学习C#编程和...

    连连看源程序——java

    连连看是一款广受欢迎的休闲益智游戏,它以其简单的操作和富有挑战性的玩法吸引了大量玩家。本篇将深入探讨如何使用Java编程语言实现连连看源程序,让我们一起走进Java编程的世界,揭秘连连看游戏背后的逻辑。 一、...

    C语言连连看游戏

    本项目是一个基于C语言实现的简单连连看游戏,它展示了C语言在游戏开发中的应用潜力。下面我们将深入探讨这个项目的实现原理、核心功能和涉及的关键技术。 ### 1. 游戏逻辑设计 连连看游戏的基本规则是找到并消除...

Global site tag (gtag.js) - Google Analytics