连连看的制作

连连看是一个大家都很熟悉的一款游戏,它主要是对于眼力以及脑力的考验。

连连看作为一款游戏,其核心代码并不难,首先我们需要画出一个能够放置连连看的图片:

public void Frame() {
		JFrame jf = new JFrame();
		jf.add(this, BorderLayout.CENTER);
		jf.setSize(new Dimension(1000, 800));
		this.setBackground(Color.GRAY);
		ranValue();
		jt.jianTing(ti,this);
		jf.addMouseListener(jt);
		this.repaint();
		
		

		jf.setVisible(true);
	}

  然后我们需要画出方格,然后再往方格里放入一些随机的图片

public void paint(Graphics g) {
		super.paint(g);

		for (lk = 0; lk <= 10; lk++) {
			g.setColor(Color.RED);
			g.drawLine(x1, y1 + line * lk, x1 + line * 10, y1 + line * lk);
			g.drawLine(x1 + line * lk, y1, x1 + line * lk, y1 + line * 10);
		}
		for(x=0;x<10;x++){
			for(y=0;y<10;y++){
		if(ti[x][y]==1){
//			g.drawString("1", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==2){
//			g.drawString("2", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im1.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==3){
//			g.drawString("3", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im2.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==4){
//			g.drawString("4", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im3.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==5){
//			g.drawString("5", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im4.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==6){
//			g.drawString("6", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im5.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==7){
//			g.drawString("7", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im6.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==8){
//			g.drawString("8", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im7.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		if(ti[x][y]==9){
//			g.drawString("9", x1+x*line+line/2, y1+y*line+line/2);
			g.drawImage(im8.getImage(), x1+x*line, y1+y*line, 50, 50, null);
		}
		}
		
	}

  注意由于我们在进行绘图以及消除的时候我们需要进行那个重绘,这样才能保证那个游戏正常的进行下去。

接下来就是加入监听器,我们需要进行监听在,这样的话,我们才能进行消除以及判断等行为。

public class jianTing extends MouseAdapter{
	private int[][] ti;
	private int[][] newArray;
	private int x1,y1,x2,y2;
	private int count=1;
	private int x = 100,y = 100,line = 50;
	private JPanel jp = new JPanel();
	private int f=0;
	private int v=0;
	private int b=0;
	private int c=0;
	private int a=0;
	private int d=0;
	
	public void jianTing(int[][] ti,JPanel jp){
		this.ti = ti;
		this.jp = jp;
		newArray = new int[ti.length+2][ti.length+2];
		for(int i=0;i<ti.length;i++){
			for(int j=0;j<ti[i].length;j++){
				newArray[i+1][j+1] = ti[i][j];
			}
		}
		for(int j=0;j<=ti.length+1;j++){
			newArray[0][j]=0;
		}
		for(int j=0;j<=ti.length+1;j++){
			newArray[j][0]=0;
		}
		for(int j=0;j<=ti.length+1;j++){
			newArray[ti.length+1][j]=0;
		}
		for(int j=0;j<=ti.length+1;j++){
			newArray[j][ti.length+1]=0;
		}
		
	}
	
	public void mouseClicked(MouseEvent e){
		x1 = (e.getX()-x)/line;
		y1 = ((e.getY()-y)/line)-1;
		System.out.println("x1:"+x1+" y1:"+y1);
		if(x1 <0 || x1>9 || y1<0 || y1>9){
			count = 1;
		}else if(count==1){
			x2=x1;y2=y1;
			System.out.println("x2:"+x2+" y2:"+y2);
			count++;
		}else if(count==2&&(x1!=x2||y1!=y2)){
			if(Zero2(x1,y1,x2,y2)){
				if(ti[x1][y1]==ti[x2][y2]){
					ti[x1][y1]=0;
					ti[x2][y2]=0;
					System.out.println("ti[x1][y1]:"+ti[x1][y1]+"ti[x2][y2]:"+ti[x2][y2]);
					count = 1;
				}
				else x2=x1;y2=y1;
			}
			else if(Zero1(x1,y1,x2,y2)){
			if(ti[x1][y1]==ti[x2][y2]){
				ti[x1][y1]=0;
				ti[x2][y2]=0;
				System.out.println("ti[x1][y1]:"+ti[x1][y1]+"ti[x2][y2]:"+ti[x2][y2]);
				count = 1;
			}
			else x2=x1;y2=y1;
		}
			else if(One1(x1,y1,x2,y2)){
				if(ti[x1][y1]==ti[x2][y2]){
					ti[x1][y1]=0;
					ti[x2][y2]=0;
					System.out.println("ti[x1][y1]:"+ti[x1][y1]+"ti[x2][y2]:"+ti[x2][y2]);
					count = 1;
				}
				else x2=x1;y2=y1;
			}
			else if(one2(x1,y1,x2,y2)){
				if(ti[x1][y1]==ti[x2][y2]){
					ti[x1][y1]=0;
					ti[x2][y2]=0;
					System.out.println("ti[x1][y1]:"+ti[x1][y1]+"ti[x2][y2]:"+ti[x2][y2]);
					count = 1;
				}
				else x2=x1;y2=y1;
			}
			else if(two1(x1,y1,x2,y2)){
				if(ti[x1][y1]==ti[x2][y2]){
					ti[x1][y1]=0;
					ti[x2][y2]=0;
					System.out.println("ti[x1][y1]:"+ti[x1][y1]+"ti[x2][y2]:"+ti[x2][y2]);
					count = 1;
				}
				else x2=x1;y2=y1;
			}
			else if(two2(x1,y1,x2,y2)){
				if(ti[x1][y1]==ti[x2][y2]){
					ti[x1][y1]=0;
					ti[x2][y2]=0;
					System.out.println("ti[x1][y1]:"+ti[x1][y1]+"ti[x2][y2]:"+ti[x2][y2]);
					count = 1;
				}
				else x2=x1;y2=y1;
			}
			else count=1;
		}
		jp.repaint();
	}
	public boolean Zero1(int x1,int y1,int x2,int y2){
		if(y1==y2){
			int maxX = Math.max(x1,x2);
			int minX = Math.min(x1, x2);
			for(int t=minX+1;t<maxX;t++){
				if(ti[t][y1]==0){
					return true;
				}
				else return false;
			}
		}
		if(x1==x2){
			int maxY = Math.max(y1, y2);
			int minY = Math.min(y1, y2);
			for(int k=minY+1;k<maxY;k++){
				if(ti[x1][k]==0){
					return true;
				}
				else return false;
			}
		}
		return false;
	}
	public boolean Zero2(int x1,int y1,int x2,int y2){
		if(x1==x2){
			int maxY = Math.max(y1, y2);
			int minY = Math.min(y1, y2);
			if(maxY==minY+1){
				return true;
			}
			else return false;
		}
		if(y1==y2){
			int maxX = Math.max(x1,x2);
			int minX = Math.min(x1, x2);
			if(maxX==minX+1){
				return true;
			}
			else return false;
		}
		return false;
	}
	public boolean One1(int x1,int y1,int x2,int y2){
		if(x1!=x2&&y1!=y2){
			int maxX = Math.max(x1, x2);
			int minX = Math.min(x1, x2);
			int maxY = Math.max(y1, y2);
			int minY = Math.min(y1, y2);
			for(int f=minX+1;f<=maxX;f++){
				if(ti[f][minY]==0){
					for(int g=minY+1;g<maxY;g++){
						if(ti[maxX][g]==0){
							return true;
						}
						else return false;
					}
				
				}
				else return false;
			}
			for(int q=minY+1;q<=maxY;q++){
				if(ti[minX][q]==0){
					for(int r=minX+1;r<maxX;r++){
						if(ti[r][maxY]==0){
							return true;
						}
						else return false;
					}
				}
				else return false;
			}
			for(int q=minY+1;q<=maxY;q++){
				if(ti[maxX][q]==0){
					for(int r=minX+1;r<maxX;r++){
						if(ti[r][minY]==0){
							return true;
						}
						else return false;
					}
				}
				else return false;
			}
			for(int q=minY+1;q<=maxY;q++){
				if(ti[maxX][q]==0){
					for(int r=minX+1;r<maxX;r++){
						if(ti[r][maxY]==0){
							return true;
						}
						else return false;
					}
				}
				else return false;
			}
			for(int q=minY+1;q<=maxY;q++){
				if(ti[minX][q]==0){
					for(int r=minX+1;r<maxX;r++){
						if(ti[r][minY]==0){
							return true;
						}
						else return false;
					}
				}
				else return false;
			}
			for(int q=minX+1;q<=maxX;q++){
				if(ti[q][maxY]==0){
					for(int r=minY+1;r<maxY;r++){
						if(ti[minX][r]==0){
							return true;
						}
						else return false;
					}
				}
				else return false;
			}
			for(int f=minX+1;f<=maxX;f++){
				if(ti[f][minY]==0){
					for(int g=minY+1;g<maxY;g++){
						if(ti[minX][g]==0){
							return true;
						}
						else return false;
					}
				
				}
				else return false;
			}
			for(int f=minX+1;f<=maxX;f++){
				if(ti[f][maxY]==0){
					for(int g=minY+1;g<maxY;g++){
						if(ti[maxX][g]==0){
							return true;
						}
						else return false;
					}
				
				}
				else return false;
			}
		}
		return false;
	}
	public boolean one2(int x1,int y1,int x2,int y2){
		if(x1!=x2&&y1!=y2){
			int maxX = Math.max(x1, x2);
			int minX = Math.min(x1, x2);
			int maxY = Math.max(y1, y2);
			int minY = Math.min(y1, y2);
			if(ti[minX][maxY]==0){
				return true;
			}
			else if(ti[maxX][minY]==0){
				return true;
			}
			else if(ti[minX][minY]==0){
				return true;
			}
			else if(ti[maxX][maxY]==0){
				return true;
			}
			else return false;
		}
		return false;
	}
	public boolean two1(int x1,int y1,int x2,int y2){
		if(x1!=x2&&y1!=y2){
			int maxX = Math.max(x1, x2)+1;
			int minX = Math.min(x1, x2)+1;
			int maxY = Math.max(y1, y2)+1;
			int minY = Math.min(y1, y2)+1;
			for(int g=minX+1;g<maxX;g++){
				if(ti[g][minY]==0){
					f++;
					for(int t=minY;t<=maxY;t++){
						if(ti[minX+f][t]==0){
							for(int k=minX+f;k<=maxX;k++){
								if(ti[k][maxY]==0){
									f=0;
									return true;
								}
								else {f=0;
									return false;}
								}
							}
				
				else{
					for(int l=minY;l<=maxY;l++){
						if(ti[minX+f][l]==0){
							for(int k=minX+f;k<=maxX;k++){
								if(ti[k][maxY]==0){
									f=0;return true;
								}
								else {f=0;
									return false;}
								}
							}else{f=0;return false;}
						
						}
				    
					}
				}
			}
			for(int q=minY;q<maxY;q++){
				if(ti[minX][q]==0){
					f++;
				}
				else{
					for(int t=minX;t<=maxX;t++){
						if(ti[minY+f][t]==0){
							for(int k=minY+1;k<maxY;k++){
								if(ti[maxX][k]==0){
									f=0;
									return true;
								}
								else f=0;return false;
							}
						
						}
						else f=0;return false;
					}
				}
			}
			for(int l=minY;l<maxY;l++){
				if(ti[minX][l]==0){
					f++;
				}
				else{
					for(int t=minY+f;t<maxY;t++){
						if(ti[minX][t]==0){
							for(int k=minX+1;k<=maxX;k++){
								if(ti[k][maxY]==0){
									f=0;return true;
								}
								else f=0;return false;
							}
						
						}
						else f=0;return false;
					}
				}
			}
			for(int o=minX;o<maxX;o++){
				if(ti[o][maxY]==0){
					f++;
					for(int t=maxY;t>=minY;t--){
						if(ti[minX+f][t]==0){
							for(int k=minX+f;k<=maxX;k++){
								if(ti[k][minY]==0){
									f=0;return true;
								}
								else f=0;return false;
							}
						
						}
						else f=0;return false;
				}
				}else{
					for(int t=maxY;t>=minY;t--){
						if(ti[minX+f][t]==0){
							for(int k=minX+f;k<=maxX;k++){
								if(ti[k][minY]==0){
									f=0;return true;
								}
								else f=0;return false;
							}
						
						}
						else f=0;return false;
					}
				}
			}
			for(int p=maxY;p>minX;p--){
				if(ti[minX][p]==0){
					c++;
					for(int t=minX;t<=maxX;t++){
						if(ti[t][maxY-f]==0){
							for(int k=maxY-f;k>minY;k--){
								if(ti[maxX][k]==0){
									c=0;return true;
								}
								else c=0;return false;
							}
						
						}
						else c=0;return false;
				}
				}else{
					for(int t=minX;t<=maxX;t++){
						if(ti[t][maxY-f]==0){
							for(int k=maxY-f;k>minY;k--){
								if(ti[maxX][k]==0){
									c=0;return true;
								}
								else c=0;return false;
							}
						
						}
						else return false;
					}
				}
			}
			
		}
		}
		return  false;
			
	}
	public boolean two2(int x1,int y1,int x2,int y2){
		if(x1!=x2&&y1!=y2){
			int maxX = Math.max(x1, x2)+1;
			int minX = Math.min(x1, x2)+1;
			int maxY = Math.max(y1, y2)+1;
			int minY = Math.min(y1, y2)+1;
			for(int g=minX+1;g<=newArray.length;g++){
				if(newArray[g][minY+1]==0){
					for(int t=minY+1;t<=maxY;t++){
						if(newArray[newArray.length][t]==0){
							for(int k=newArray.length;k>maxX;k--){
								if(newArray[k][maxY]==0){
									return true;
								}
							}
						}
					}
				}
			}
			for(int g=minY+1;g<newArray.length;g++){
				if(newArray[minX][g]==0){
					for(int t=minX+1;t<maxX;t++){
						if(newArray[t][newArray.length]==0){
							for(int k=newArray.length;k>maxY;k--){
								if(newArray[maxX][k]==0){
									return true;
								}
							}
						}
					}
				}
			}
			for(int g=minX+1;g>0;g--){
				if(newArray[g][minY]==0){
					for(int t=minY+1;t<maxY;t++){
						if(newArray[0][t]==0){
							for(int k=0;k<maxX;k++){
								if(newArray[k][maxY]==0){
									return true;
								}
							}
						}
					}
				}
			}
			for(int g=minY+1;g>0;g--){
				if(newArray[minX][g]==0){
					for(int t=minX;t<maxX;t++){
						if(newArray[t][0]==0){
							for(int k=0;k<maxY;k++){
								if(newArray[maxX][k]==0){
									return true;
								}
							}
						}
					}
				}
			} 
			for(int g=maxX;g>0;g--){
				if(newArray[g][minY]==0){
					for(int t=minY+1;t<maxY;t++){
						if(newArray[0][t]==0){
							for(int k=0;k<minX;k++){
								if(newArray[k][maxY]==0){
									return true;
								}
							}
						}
					}
				}
			}
			for(int g=minY+1;g>0;g--){
				if(newArray[maxX][g]==0){
					for(int t=maxX;t>minX;t--){
						if(newArray[t][0]==0){
							for(int k=0;k<maxY;k++){
								if(newArray[minX][k]==0){
									return true;
								}
							}
						}
					}
				}
			}
			for(int g=maxX;g<newArray.length;g++){
				if(newArray[minY][g]==0){
					for(int t=minY;t<maxY;t++){
						if(newArray[newArray.length][t]==0){
							for(int k=newArray.length;k>minX;k--){
								if(newArray[k][maxY]==0){
									return true;
								}
							}
						}
					}
				}
			}
			for(int g=minY;g<newArray.length;g++){
				if(newArray[maxX][g]==0){
					for(int t=maxX;t>minX;t--){
						if(newArray[t][newArray.length]==0){
							for(int k=newArray.length;k>maxY;k--){
								if(newArray[minX][k]==0){
									return true;
								}
							}
						}
					}
				}
			}
		}
		else if(x1==x2&&x1!=1&&x1!=(newArray[y1].length-1)){
			int maxX = Math.max(x1, x2)+1;
			int minX = Math.min(x1, x2)+1;
			int maxY = Math.max(y1, y2)+1;
			int minY = Math.min(y1, y2)+1;
			for(int g=minX+1;g<newArray.length;g++){
				if(newArray[g][minY]==0){
					v++;
					for(int t=minY;t<maxY;t++){
						if(newArray[minX+v][t]==0){
							for(int k=minX+v;k>minX;k--){
								if(newArray[k][maxY]==0){
									v=0;return true;
								}
							}
						}else v=0;
				}
				}else{
					for(int t=minY;t<maxY;t++){
						if(newArray[minX+v][t]==0){
							for(int k=minX+v;k>minX;k--){
								if(newArray[k][maxY]==0){
									v=0;return true;
								}
							}
						}else v=0;
					}
				}
			}
			for(int g=minX-1;g>0;g--){
				if(newArray[g][minY]==0){
					a++;
					
				}else{
					for(int t=minY;t<maxY;t++){
						if(newArray[minX-v][t]==0){
							for(int k=minX-v;k<maxX;k++){
								if(newArray[k][maxY]==0){
									a=0;return true;
								}
							}
						}else a=0;
					}
				}for(int t=minY;t<maxY;t++){
					if(newArray[minX-v][t]==0){
						for(int k=minX-v;k<maxX;k++){
							if(newArray[k][maxY]==0){
								a=0;return true;
							}
						}
					}else a=0;
			}
			}
		}
		else if(y1==y2&&y1!=1&&y1!=(newArray[x1].length-1)){
			int maxX = Math.max(x1, x2)+1;
			int minX = Math.min(x1, x2)+1;
			int maxY = Math.max(y1, y2)+1;
			int minY = Math.min(y1, y2)+1;
			for(int g=minY-1;g>0;g--){
				if(newArray[minX][g]==0){
					c++;
					
				}else{
					for(int t=minX;t<maxX;t++){
						if(newArray[t][minY-c]==0){
							for(int k=minY-c;k<minY;k++){
								if(newArray[maxX][k]==0){
									c=0;return true;
								}
							}
						}else c=0;
					}
				}
			}for(int t=minX;t<maxX;t++){
				if(newArray[t][minY-c]==0){
					for(int k=minY-c;k<minY;k++){
						if(newArray[maxX][k]==0){
							c=0;return true;
						}
					}
				}else c=0;
		}
			for(int g=minY+1;g<newArray[minX].length;g++){
				if(newArray[minX][g]==0){
					d++;
				}else{
					for(int t=minX+1;t<maxX;t++){
						if(newArray[t][minY+d]==0){
							for(int k=minY+d;k>minY;k--){
								if(newArray[maxX][k]==0){
									d=0;
									return true;
								}
							}
						}else d=0;
					}
				}
			}for(int t=minX+1;t<maxX;t++){
				if(newArray[t][minY+d]==0){
					for(int k=minY+d;k>minY;k--){
						if(newArray[maxX][k]==0){
							d=0;return true;
						}
					}
				}else d=0;
			}
		}
		else if(x1==x2&&x1==(newArray[y1].length-1)){
			return true;
		}
		else if(x1==x2&&newArray[x1-1][0]==0){
			return true;
		}else if(y1==y2&&y1==(newArray[x1].length-1)){
			return true;
		}
		else if(y1==y2&&newArray[0][y1-1]==0){
			return true;
		}
		
			return false;
	}
}

  这里我们先进行了两个数组的创作,因为我们在判断时需要确定那个点的位置,以及点是否符合被消除,所以呢,我们需要将整个连连看的那个已视的那个方格周围再加一个边框。故需要进行两次数组的建造。

然后便是拐点的判断,因为我们在进行连连看的游戏时,我们会发现,连连看的拐点数,只有在其拐点数小于两个的时候,才可以消除,所以,我们需要拐点的判断,计算拐点数,那么我们是如何进行拐点数的计算呢,主要是进行对于其与其要进行连接的点之间的连接的路径上是否有方块,这样的话便能进行计算了。

原文地址:https://www.cnblogs.com/chang1203/p/5689593.html