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

📄 board.java

📁 是sun公司做的开源项目
💻 JAVA
字号:
package org.bubblebreaker.model;

import java.util.Random;
import java.util.Vector;

public class  Board{
	public Cell currentCell=new Cell(0,0);
	public Cell [] selectedCells=null;
	public Ball data[][]= null;
	public Score score=new Score();
	public Board(int rows, int cols)
	{
		data=new Ball[rows][];
		for(int i=0;i<rows;i++)
		{
			data[i]=new Ball[cols];
		}
	}
	public void copy( Board board)
	{
		if(null==board)
		{
			System.out.println("Null board to copy????");
			(new Exception()).printStackTrace();
			return;
		}
		for(int row=0;row<data.length;row++)
			for(int col=0;col<data[0].length;col++)
			{
				data[row][col]=board.data[row][col];
			}
		currentCell.copy(board.currentCell);
		if(null != board.selectedCells)
		{
			selectedCells=new Cell[board.selectedCells.length];
			for(int i=0;i<selectedCells.length;i++)
			{
				selectedCells[i]=new Cell(0,0);
				selectedCells[i].copy(board.selectedCells[i]);
			}
		}
		score.copy(board.score);
		System.out.println("copied board "+board+"->"+this);
	}
	public String toString()
	{
		return ""+data+","+selectedCells+","+currentCell;
	}
}

interface BoardBuilder{
	public void buildBoard(Board board);
	public void addNewColumn(int col, Board board);
	public int getAdverseSelection();
	public void setAdverseSelection(int adverseSelection);
}

class RandomBoardBuilder implements BoardBuilder{
	public static Random m_random =new Random();
	
	int adverseSelection=0;
	public int getAdverseSelection()
	{
		return adverseSelection;
	}
	public void setAdverseSelection(int adverseSelection)
	{
		this.adverseSelection=adverseSelection;
	}

	public void buildBoard(Board board)
	{
		System.out.println("build random board");
		for(int col=0;col<board.data[0].length;col++)
			addNewColumn(col,board);
	}
	public void addNewColumn(int col, Board board)
	{
		int nBalls=Ball.balls.length;
		for(int row=0;row<board.data.length;row++)
		{
			int ballIndex=Math.abs((Math.abs(m_random.nextInt())%nBalls)-1);
			System.out.println(""+row+","+col+","+nBalls+","+ballIndex);
			board.data[row][col]=Ball.balls[ballIndex];
		}

		//remove some colors to make it harder
		if(adverseSelection >0)
		{
			int col1=-1;
			if(col+1 < board.data[0].length)
			{
				col1=col + 1;
			}
			if(col1 == -1 && col-1 >=0)
			{
				col1=col-1;
			}
			Vector v=new Vector();
			for(int row=0;row<board.data.length;row++)
			{
				if(!v.contains(board.data[row][col1]))
				{
					v.addElement(board.data[row][col1]);
				}
			}
			while(v.size()>=adverseSelection){
				v.removeElement(v.firstElement());
			}
			for(int row=0;row<board.data.length;row++)
			{
				if(v.contains(board.data[row][col]))
				{
					System.out.println("replaced balls : "+row+","+col);
					for(int k=0;k<Ball.balls.length;k++)
					{
						if(!v.contains(Ball.balls[k]))
						{
							board.data[row][col]=Ball.balls[k];
							break;
						}
					}
				}
			}
		}
	}
}

class SquareBoardBuilder extends RandomBoardBuilder{

	public void buildBoard(Board board)
	{
		System.out.println("build square board");
		int squareSize=(Math.abs(m_random.nextInt())%7);
		int squareRowPosition=(Math.abs(m_random.nextInt())% (board.data.length-squareSize) );
		int squareColPosition=(Math.abs(m_random.nextInt())% (board.data[0].length-squareSize) );

		int nBalls=Ball.balls.length;
		int ballIndex=Math.abs((Math.abs(m_random.nextInt())%nBalls)-1);
		Ball ball=Ball.balls[ballIndex];
		System.out.println("Square board : "+squareSize+","+squareRowPosition+","+squareColPosition+","+ball.color.getCode());

		for(int i=0;i<squareSize;i++)
			for(int j=0;j<squareSize;j++)
			{
				board.data[squareRowPosition+i][squareColPosition+j]=ball;
			}



		for(int row=0;row<board.data.length;row++)
			for(int col=0;col<board.data[0].length;col++)
			{
				//don't do anything if this cell is filled
				if(null !=board.data[row][col] && Ball.WHITEBALL != board.data[row][col])
				{
					continue;
				}

				//chose a random color
				ballIndex=Math.abs((Math.abs(m_random.nextInt())%nBalls)-1);
				ball=Ball.balls[ballIndex];
				
				//set the cell
				board.data[row][col]=ball;

				//now try to insert another pair into
				boolean vertical=(Math.abs(m_random.nextInt())%4) == 1;

				if(vertical)
				{
				       if(makePlaceInColumn(row,col,board)){
						//set the cell
						board.data[row][col]=ball;
				       }
				       else if(makePlaceInRow(row,col,board)){
						//set the cell
						board.data[row][col]=ball;
				       }
				}
				else
				{
				       if(makePlaceInRow(row,col,board)){
						//set the cell
						board.data[row][col]=ball;
				       }
				       else if(makePlaceInColumn(row,col,board)){
						//set the cell
						board.data[row][col]=ball;
				       }
				}
			}
	}
	boolean makePlaceInColumn(int startRow, int startCol, Board board)
	{
		for(int row=0;row<board.data.length;row++)
			for(int col=0;col<board.data[0].length;col++)
			{
				int col1=(startCol+col)%board.data[0].length;
				if(board.data[row][col] == Ball.WHITEBALL)
				{
					//we got a place
					for(col1=col;col1>=0;col1--)
					{
						int col2=(startCol+col1)%board.data[0].length;
						int col3=(startCol+col1-1)%board.data[0].length;
						board.data[row][col2]=board.data[row][col3];
					}
					return true;
				}
			}
		return false;
	}
	boolean makePlaceInRow(int startRow, int startCol, Board board)
	{
		for(int row=0;row<board.data.length;row++)
			for(int col=0;col<board.data[0].length;col++)
			{
				int row1=(startRow+row)%board.data.length;
				if(board.data[row][col] == Ball.WHITEBALL)
				{
					//we got a place
					for(row1=row;row1>=0;row1--)
					{
						int row2=(startRow+row1)%board.data.length;
						int row3=(startRow+row1-1)%board.data.length;
						board.data[row2][col]=board.data[row3][col];
					}
					return true;
				}
			}
		return false;
	}
}

⌨️ 快捷键说明

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