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

📄 blockgroup.java

📁 进入cmd 执行java WindowGrid进入游戏界面
💻 JAVA
字号:
/******************************************************************
 *  超级俄罗斯方块-- 方格组控件(1.0版最多支持4个小方块)				
 *版本: 1.0
 *作者:金永哲
 *最后修改日期:2005-9-18
 *
 *说明:无界面,集中管理一组小方块(Block类), 
 *当方格组收到移动命令后,向组中小方块转发命令,使组内小
 *方块同时移动,或变形
 *
 ******************************************************************/
 
import java.awt.*;

public class BlockGroup implements Cloneable
{
	//方格组位置
	private int left;        
	private int top;         
	private int right;       
	private int bottom;
	

	
	private int type;    //方块组类型 1~4
	private int subType; //方块组子类型, 根据type决定
	private Block[] members = null; //方块成员
	
	//得到方格组最下边的y位置
	public int getBottom()
	{
		return bottom;
	}

	//构造函数,确定方格组位置=====================================
	public BlockGroup(int left, int top, Block[] bs, int type,
						int subType) throws BlockException
	{
		this.left = left;
		this.top = top;	
		allocMembers(bs, type, subType);
	}
	
	
	//为方格组分配成员,即4个小方块===============================
	//初始化各成员位置
	private void allocMembers(Block[] bs, int type, int subType)
									throws BlockException
	{
		//参数检查:方格组成员个数为 4--------------------------
		if(bs.length > 4 || bs.length < 0)
			throw new BlockException(BETable.getMessage(0) );
		
					
		/*方格组类型范围1~4,
		 * 
		 *方格组子类型:根据方格组类型判断
		 *	方格组0: 子类型范围 0~3
		 *	方格组1: 子类型范围 0~1
		 *	方格组2: 子类型范围 0~1
		 *	方格组3: 子类型范围 0
		 *  方格组4:  子类型范围 0~3
		 */
		
		members = bs;
		this.type = type;
		this.subType = subType;
		int mw = members[0].getWidth();  //成员方块宽度
		//int mh = members[0].getSize().height; //成员方块高度
		if(type == 0)  
		{
			if(subType == 0)  
			{
				members[0].setLocation(left, top + mw);
				members[1].setLocation(left + mw, top + mw);
				members[2].setLocation(left + 2 * mw, top + mw);
				members[3].setLocation(left + mw, top);	
				right  = left + 3 * mw;
				bottom = top  + 2 * mw;
			}
			else if(subType == 1)  
			{
				members[0].setLocation(left, top);
				members[1].setLocation(left, top + mw);
				members[2].setLocation(left, top + 2 * mw);
				members[3].setLocation(left + mw, top + mw);		
				right  = left + 2 * mw;
				bottom = top  + 3 * mw;
			}
			else if(subType == 2)  
			{
				members[0].setLocation(left + 2 * mw, top);
				members[1].setLocation(left + mw, top);
				members[2].setLocation(left, top);
				members[3].setLocation(left + mw, top + mw);		
				right  = left + 3 * mw;
				bottom = top  + 2 * mw; 
			}
			else if(subType == 3)  
			{
				members[0].setLocation(left + mw, top + 2 * mw);
				members[1].setLocation(left + mw, top + mw);
				members[2].setLocation(left + mw, top);
				members[3].setLocation(left, top + mw);	
				right  = left + 2 * mw;
				bottom = top  + 3 * mw; 
			}
			else    
				throw new BlockException(BETable.getMessage(2)); 
		}
		else if(type == 1)  
		{
			if(subType == 0)
			{
				members[0].setLocation(left, top + mw);
				members[1].setLocation(left + mw, top + mw);
				members[2].setLocation(left + mw, top);
				members[3].setLocation(left + 2 * mw, top);			
				right  = left + 3 * mw;
				bottom = top  + 2 * mw; 
			}
			else if(subType == 1)
			{
				members[0].setLocation(left, top);
				members[1].setLocation(left, top + mw);
				members[2].setLocation(left + mw, top + mw);
				members[3].setLocation(left + mw, top + 2 * mw);	
				right  = left + 2 * mw;
				bottom = top  + 3 * mw; 
			}
			else 
				throw new BlockException(BETable.getMessage(2));
		}
		else if(type == 2) 
		{
			if(subType == 0)	
			{
				members[0].setLocation(left, top);
				members[1].setLocation(left + mw, top);
				members[2].setLocation(left + 2 * mw, top);
				members[3].setLocation(left + 3 * mw, top);
				right  = left + 4 * mw;
				bottom = top  + mw; 
			}
			else if(subType == 1)
			{
				members[0].setLocation(left, top);
				members[1].setLocation(left, top + mw);
				members[2].setLocation(left, top + 2 * mw);
				members[3].setLocation(left, top + 3 * mw);
				right  = left + mw;
				bottom = top  + 4 * mw; 
			}
			else  
				throw new BlockException(BETable.getMessage(2));
		}
		else if(type == 3)  
		{
			if(subType == 0)
			{
				members[0].setLocation(left, top);
				members[1].setLocation(left + mw, top);
				members[2].setLocation(left, top + mw);
				members[3].setLocation(left + mw, top + mw);
				right  = left + 2 * mw;
				bottom = top  + 2 * mw; 
			}	
			else  
				throw new BlockException(BETable.getMessage(2));
		}
		else if(type == 4)
		{
			if(subType == 0)
			{
				members[0].setLocation(left, top);	
				members[1].setLocation(left, top + mw);	
				members[2].setLocation(left, top + 2*mw);	
				members[3].setLocation(left + mw, top + 2*mw);	
				right = left + 2 * mw;
				bottom = top + 3 * mw;
			}
			else if(subType == 1)
			{
				members[0].setLocation(left + 2 * mw, top);
				members[1].setLocation(left + mw, top);
				members[2].setLocation(left, top);
				members[3].setLocation(left, top + mw);
				right = left + 3 * mw;
				bottom = top + 2 * mw;					
			}
			else if(subType == 2)
			{
				members[0].setLocation(left + mw, top + 2 * mw);
				members[1].setLocation(left + mw, top + mw);
				members[2].setLocation(left + mw, top);
				members[3].setLocation(left, top);
				right = left + 2 * mw;
				bottom = 3 * mw;
			}
			else if(subType == 3)
			{
				members[0].setLocation(left, top + mw);
				members[1].setLocation(left + mw, top + mw);
				members[2].setLocation(left + 2 * mw, top + mw);
				members[3].setLocation(left + 2 * mw, top);
				right = left + 3 * mw;
				bottom = top + 2 * mw;
			}
			else  
				throw new BlockException(BETable.getMessage(2));
		}
		else   
			throw new BlockException(BETable.getMessage(1));
		
	}
	
	//方格组变形================================================
	public void translate() throws BlockException
	{
		//检查方格成员是否存在
		if(members == null)
			throw new BlockException(BETable.getMessage(3) );
		if(members.length <= 0)
			throw new BlockException(BETable.getMessage(3) );
		
		
		int mw = members[0].getSize().width;  //成员方块宽度
		if(type == 0)
		{
			if(subType == 0)
			{
				members[0].moveRUp(1);
				members[2].moveLDown(1);
				members[3].moveRDown(1);
				left   -= mw;
				bottom += mw;
				subType = 1;
			}
			else if(subType == 1)
			{
				members[0].moveRDown(1);
				members[2].moveLUp(1);
				members[3].moveLDown(1);
				left   += mw;
				top    -= mw;
				bottom += mw;
				subType = 2;
			}
			else if(subType == 2)
			{
				members[0].moveLDown(1);
				members[2].moveRUp(1);
				members[3].moveLUp(1);
				top   += mw;
				right -= mw;	
				subType = 3;
			}
			else if(subType == 3)
			{
				members[0].moveLUp(1);
				members[2].moveRDown(1);
				members[3].moveRUp(1);
				bottom -= mw;
				subType = 0;
			}
			else
				throw new BlockException(BETable.getMessage(1));
			
		}
		else if(type == 1)
		{
			if(subType == 0)
			{
				members[0].moveUp(2);
				members[1].moveLUp(1);
				members[3].moveLDown(1);
				top    += mw;
				right  -= mw;
				bottom += mw;
				subType = 1;
			}
			else if(subType == 1)
			{
				members[0].moveDown(2);
				members[1].moveRDown(1);
				members[3].moveRUp(1);
				top    -= mw;
				right  += mw;
				bottom -= mw;
				subType = 0;
			}
			else
				throw new BlockException(BETable.getMessage(1));
		}
		else if(type == 2)
		{
			if(subType == 0)
			{
				members[0].moveRUp(1);
				members[2].moveLDown(1);
				members[3].moveLDown(2);
				left   -= mw;
				top    += mw;
				right  -= mw * 2;
				bottom += mw * 2;
				subType = 1;
			}
			else if(subType == 1)
			{
				members[0].moveLDown(1);
				members[2].moveRUp(1);
				members[3].moveRUp(2);
				left   += mw;
				top    -= mw;
				right  += mw * 2;
				bottom -= mw * 2;
				subType = 0;
			}
			else
				throw new BlockException(BETable.getMessage(1));		
		}
		else if(type == 3)
		{
		}
		else if(type == 4)
		{
			if(subType == 0)
			{
				members[0].moveRDown(1);
				members[0].moveRight(1);
				members[1].moveRight(1);
				members[2].moveUp(1);
				members[3].moveLeft(1);
				top += mw;
				right += mw;
				subType = 1;				
			}
			else if(subType == 1)      
			{
				members[0].moveLDown(1);
				members[2].moveRUp(1);
				members[3].moveUp(2);
				top -= mw;
				right -= mw;
				subType = 2;				
			}
			else if(subType == 2)
			{
				members[0].moveLUp(1);
				members[2].moveRDown(1);
				members[3].moveRight(2);
				right += mw;
				bottom -= mw;
				subType = 3;
			}
			else if(subType == 3)
			{
				members[0].moveRUp(1);
				members[2].moveLDown(1);
				members[3].moveDown(2);
				left += mw;
				bottom += mw;				
				subType = 0;
			}
			else
				throw new BlockException(BETable.getMessage(1));
		}
		else
			throw new BlockException(BETable.getMessage(1));
	}
	
	//左移方块组=================================================
	public void moveLeft() throws BlockException
	{
		if(members == null)
			throw new BlockException(BETable.getMessage(3) );
		for(int i=0; i<members.length; i++)
		{
			members[i].moveLeft(1);
		}	
		left += members[0].getSize().width;	
	}
	
	//右移方块组=================================================
	public void moveRight() throws BlockException
	{
		if(members == null)
			throw new BlockException(BETable.getMessage(3) );
		for(int i=0; i<members.length; i++)
		{
			members[i].moveRight(1);
		}	
		right += members[0].getSize().width;		
	}
	
	//下移方块组=================================================
	public void moveDown(boolean fast) throws BlockException
	{
		if(members == null)
			throw new BlockException(BETable.getMessage(3) );
			
		for(int i=0; i<members.length; i++)
		{
			if(fast)
				members[i].moveDown(2);
			else
				members[i].moveDown(1);
		}		
		if(fast)
			bottom += 2 * members[0].getWidth();
		else
			bottom += members[0].getWidth();	
	}
 	
 	//得到方块组中的某个小方块===================================
 	public Block get(int i) throws BlockException
 	{
 		if(i < 0 || i>= members.length)
 			throw new BlockException(BETable.getMessage(5) );
 		return members[i];
 	}
 	
 	//得到方格组成员个数==========================================
 	public int getCount()
 	{
 		return members.length;
 	}
 	
 	public Object clone() throws CloneNotSupportedException
 	{
 		BlockGroup bg = (BlockGroup)super.clone();
 		
 		Block[] blocks = new Block[members.length];
 		for(int i=0; i<blocks.length; i++)
 		{
 			int w = members[i].getWidth();
 			int x = members[i].getLocation().x;
 			int y = members[i].getLocation().y;
 			Color clr = members[i].getColor();
 			blocks[i] = new Block(w, clr);		
 			blocks[i].setLocation(x, y); 			
 		}
 		bg.members = blocks;
 		return bg;
 	}
} 
 
	 
		
 
	
	
	

⌨️ 快捷键说明

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