📄 colorlinez.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 + -