⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorlinez.java

📁 JAVA的消球小游戏```````` 5子连一起消```不消多赠3子
💻 JAVA
字号:
import java.awt.*;
import java.applet.*;
import java.util.*;

public class Colorlinez extends Applet {
	public static int point=0;
	private int isum=0;                               //有颜色区域的个数
	private int initsum=5;                            //程序启动生成几个球
	public static Ball b[][]=new Ball[9][9];
	private static Color col[]=new Color[7];         //定义7种颜色
	private static Random
		rndColor=new Random(),                  //随机初始化颜色
		rndInit=new Random();
	public static Label lblPoint =new Label(""+point);
	private Label lbl1=new Label("分数:");          //所得分数的标签
	private void initColor()                          //初始化7种颜色
	{
		col[0]=Color.blue;
		col[1]=Color.green;
		col[2]=Color.yellow;
		col[3]=Color.red;
		col[4]=Color.cyan;
		col[5]=Color.pink;
		col[6]=Color.black;
	}
	private void initBall()                          //初始化画布
	{
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++)    //每个球都设为白色,对于白色的画布就相当于没球
			{
				b[i][j]=new Ball(Color.white,i,j);
				b[i][j].repaint();
			}
		int i,j;
		while (isum<initsum)
		{
			i=rndInit.nextInt(9);
			j=rndInit.nextInt(9);
			if(b[i][j].color==Color.white)
			{
				b[i][j]=new Ball(col[rndColor.nextInt(7)],i,j);
				isum++;
			}
		}
		
	}
	public static void new3ball()                 //没有消去小球生成3个
	{
		int i,j,k=0;
		while(k<3)
		{
			i=rndInit.nextInt(9);
			j=rndInit.nextInt(9);
			if(b[i][j].color==Color.white)
			{
				b[i][j].color=col[rndColor.nextInt(7)];
				b[i][j].repaint();
				erase(i,j);
				k++;
			}
		}
	}
	public static boolean erase(int i,int j)     //判断是否在一线
	{
		boolean flag=false;                        //是否进行过消去
		int x=i,y=j;
		int k=0;
		int 
			xx[]=new int[9],
			yy[]=new int[9];

		
		while (--x>=0 && b[x][y].color==b[i][j].color)
                //判断当前球竖直方向上面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		x=i;y=j;
		while (++x<9 && b[x][y].color==b[i][j].color)
                //判断竖直方向下面有几个颜色相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		if(k>=4)
		{
			for(int l=0;l<k;l++)
			{
				b[xx[l]][yy[l]].color=Color.white;
				b[xx[l]][yy[l]].repaint();
			}
			point+=(k+1);
			flag=true;
		}

		
		k=0;
		x=i;y=j;
		while (--y>=0 && b[x][y].color==b[i][j].color)
                //判断当前球水平方向下面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		x=i;y=j;
		while (++y<9 && b[x][y].color==b[i][j].color)
                //判断当前球竖直方向上面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		if(k>=4)   //如果有五个颜色一样的球就消去这五个球
		{
			for(int l=0;l<k;l++)
			{
				b[xx[l]][yy[l]].color=Color.white;
				b[xx[l]][yy[l]].repaint();
			}
			point+=(k+1);  //加分
			flag=true;
		}

		
		k=0;
		x=i;y=j;
		while (--y>=0 && --x>=0 && b[x][y].color==b[i][j].color)
                //判断当前球左对角线方向下面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		x=i;y=j;
		while (++y<9 && ++x<9 && b[x][y].color==b[i][j].color)
                //判断当前球左对角线方向上面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		if(k>=4)  //同上,一样的语句就不用说了吧
		{
			for(int l=0;l<k;l++)
			{
				b[xx[l]][yy[l]].color=Color.white;
				b[xx[l]][yy[l]].repaint();
			}
			point+=(k+1);
			flag=true;
		}

		
		k=0;
		x=i;y=j;
		while (++y<9 && --x>=0 && b[x][y].color==b[i][j].color)
                //判断当前球右对角线方向下面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		x=i;y=j;
		while (--y>=0 && ++x<9 && b[x][y].color==b[i][j].color)
                //判断当前球左对角线方向上面有几个相同的球
		{
			xx[k]=x;
			yy[k]=y;
			k++;
		}
		if(k>=4)   //同上
		{
			for(int l=0;l<k;l++)
			{
				b[xx[l]][yy[l]].color=Color.white;
				b[xx[l]][yy[l]].repaint();
			}
			point+=(k+1);
			flag=true;
		}
		if (flag)    //如果有标记的话就消掉球
		{
			b[i][j].color=Color.white;
			b[i][j].repaint();
		}
		return flag;
	}
	public void init()   //初始化画布
	{
		initColor();   //初始化颜色
		initBall();    //初始化球
		setLayout(new GridLayout(10,9));   //布局方式为10行9列
		for(int i=0;i<9;i++)   
			for(int j=0;j<9;j++)   //加入球
			{
				add(b[i][j]);
			}
		add(lbl1);   
		add(lblPoint);   //加入分数标签,记录所得分数
	}

	public static boolean moveBall(int startx, int starty, int endx, int endy)                   //判断通路
	{
		int ix=startx,iy=starty;
		if((ix>=0&&ix<9) && (iy>=0&&iy<9))   //在范围内的话
		{
			if((!b[ix][iy].flag && b[ix][iy].color==Color.white))                                        //那个位置没球且没标记
			{
				b[ix][iy].flag=true;  //那个位置标记
				if(ix==endx && iy==endy)
				{
					return true;
				}
				if(moveBall(ix,iy-1,endx,endy))//如果向左移的话
				{
					return true;
				}
				if(moveBall(ix+1,iy,endx,endy))//如果向下移
				{
					return true;
				}
				if(moveBall(ix,iy+1,endx,endy))//向右
				{
					return true;
				}
				if(moveBall(ix-1,iy,endx,endy))//向上
				{
					return true;
				}
			}
			return false;
		}
		else
			return false;	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -