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

📄 block.java

📁 SWT编写的俄罗期方块
💻 JAVA
字号:
/* 
 * $Id: Block.java, 2007-10-11, 下午02:12:09, Eric. Exp$
 *
 * Copyright (c) 2006-2007 Wipro Technologies. All Rights Reserved.
 * This software program and documentation are copyrighted by Wipro 
 * Technologies.
 */
package eric.block;

import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;


/**
 * Class/Interface description
 * 
 * @author Eric
 * @see Another Class
 * @since 0.1
 */
public class Block implements Cloneable
{
	// L type bolck's tag value
	final static int L_Block_1 = 0;

	final static int L_Block_2 = 1;

	final static int L_Block_3 = 2;

	final static int L_Block_4 = 3;

	// J Type block's tag value
	final static int J_BLOCK_1 = 10;

	final static int J_BLOCK_2 = 11;

	final static int J_BLOCK_3 = 12;

	final static int J_BLOCK_4 = 13;

	// four block's tag value
	final static int I_BLOCK_1 = 20;

	final static int I_BLOCK_2 = 21;

	// Z type block's tag value
	final static int Z_BLOCK_1 = 30;

	final static int Z_BLOCK_2 = 31;

	// 
	final static int S_BLOCK_1 = 40;

	final static int S_BLOCK_2 = 41;

	final static int diamonds_BLOCK_1 = 50;

	// T type blocks tag value
	final static int T_BLOCK_1 = 60;

	final static int T_BLOCK_2 = 61;

	final static int T_BLOCK_3 = 62;

	final static int T_BLOCK_4 = 63;

	private int blockType;

	private int[] blockX = new int[4];

	private int[] blockY = new int[4];

	private int x;

	private int y;

	private Display display;

	/**
	 * @param x
	 * @param y
	 * @param blockType
	 * @param display
	 */
	public Block(int x, int y, int blockType, Display display)
	{
		this.x = x;
		this.y = y;
		this.blockType = blockType;
		this.display = display;

		init();
	}

	private void init()
	{
		switch (blockType)
		{

		//		L_BLOCK 4 types
		case L_Block_1:

			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 1;
			blockX[3] = 1;
			blockY[3] = 1;
			break;

		case L_Block_2:

			blockX[0] = -1;
			blockY[0] = 1;
			blockX[1] = -1;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 1;
			blockY[3] = 0;
			break;

		case L_Block_3:

			blockX[0] = -1;
			blockY[0] = 0;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 1;
			blockX[3] = 0;
			blockY[3] = 2;
			break;

		case L_Block_4:

			blockX[0] = -1;
			blockY[0] = 0;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 1;
			blockY[2] = 0;
			blockX[3] = 1;
			blockY[3] = -1;
			break;

		//			J_BLOCK 4 types
		case J_BLOCK_1:

			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 1;
			blockX[3] = -1;
			blockY[3] = 1;
			break;

		case J_BLOCK_2:

			blockX[0] = -1;
			blockY[0] = -1;
			blockX[1] = -1;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 1;
			blockY[3] = 0;
			break;

		case J_BLOCK_3:

			blockX[0] = 1;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = -1;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 0;
			blockY[3] = 1;
			break;

		case J_BLOCK_4:

			blockX[0] = -1;
			blockY[0] = 0;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 1;
			blockY[2] = 0;
			blockX[3] = 1;
			blockY[3] = 1;
			break;

		//			I_BLOCK 2 types
		case I_BLOCK_1:

			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 1;
			blockX[3] = 0;
			blockY[3] = 2;
			break;

		case I_BLOCK_2:

			blockX[0] = -1;
			blockY[0] = 0;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 1;
			blockY[2] = 0;
			blockX[3] = 2;
			blockY[3] = 0;
			break;
			
			//	Z_BLOCK 2 types
		case Z_BLOCK_1:
			
			blockX[0] = -1;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = -1;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 1;
			blockY[3] = 0;
			break;	
			
		case Z_BLOCK_2:
			
			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = -1;
			blockY[2] = 0;
			blockX[3] = -1;
			blockY[3] = 1;
			break;
			
			//	T_BLOCK 4 types
		case T_BLOCK_1:
			
			blockX[0] = -1;
			blockY[0] = 0;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 1;
			blockY[2] = 0;
			blockX[3] = 0;
			blockY[3] = 1;
			break;	
			
		case T_BLOCK_2:
			
			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = -1;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 0;
			blockY[3] = 1;
			break;
			
		case T_BLOCK_3:
			
			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = -1;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 1;
			blockY[3] = 0;
			break;
			
		case T_BLOCK_4:
			
			blockX[0] = 0;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 1;
			blockX[3] = 1;
			blockY[3] = 0;
			break;
			
		//cute block
		case diamonds_BLOCK_1:
			
			blockX[0] = -1;
			blockY[0] = -1;
			blockX[1] = 0;
			blockY[1] = -1;
			blockX[2] = -1;
			blockY[2] = 0;
			blockX[3] = 0;
			blockY[3] = 0;
			break;	
			
			//Z block
		case S_BLOCK_1:
			
			blockX[0] = -1;
			blockY[0] = 0;
			blockX[1] = 0;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = -1;
			blockX[3] = 1;
			blockY[3] = -1;
			break;	
		
		case S_BLOCK_2:
			
			blockX[0] = -1;
			blockY[0] = -1;
			blockX[1] = -1;
			blockY[1] = 0;
			blockX[2] = 0;
			blockY[2] = 0;
			blockX[3] = 0;
			blockY[3] = 1;
			break;
		}
	}

	/**
	 * @return int[]
	 */
	public int[] getBlockX(){
		return blockX;
	}
	/**
	 * @return int[]
	 */
	public int[] getBlockY(){
		return blockY;
	}
	
	/**
	 * Draw block
	 */
	public void draw(){
		
		int factX = 0;
		int factY = 0;
		for(int i = 0; i < 4; i++){
			factX = blockX[i] * 30 + x;
			factY = blockY[i] * 30 + y;
			new Square(factX, factY, blockType, display).draw();
		}
	}
	
	
	/**
	 * erasure current block
	 */
	public void clear(){
		int factX = 0;
		int factY = 0;
		for(int i = 0; i < 4; i++){
			factX = blockX[i] * 30 + x;
			factY = blockY[i] * 30 + y;
			Square square = new Square(factX, factY, 100, display);
			square.setBorderColor(new Color(display, 0, 0, 0));
			square.draw();
		}
	}
	
	/**
	 * @return int
	 */
	public int getBlockType(){
		return blockType;
	}

	/**
	 * @return the x
	 */
	public int getX()
	{
		return x;
	}

	/**
	 * @param x the x to set
	 */
	public void setX(int x)
	{
		this.x = x;
	}

	/**
	 * @return the y
	 */
	public int getY()
	{
		return y;
	}

	/**
	 * @param y the y to set
	 */
	public void setY(int y)
	{
		this.y = y;
	}

	/**
	 * Prepare for move block state
	 */
	public Block clone(){
		Block block = null;
		try {
			block = (Block)super.clone();
			block.blockX = (int[])blockX.clone();
			block.blockY = (int[])blockY.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return block;
	}
	
	/**
	 * Move block down to one level
	 */
	public void moveDown(){

		clear();
		y += 30;
		draw();
	}
	
	/**
	 *  Move block down to right row
	 */
	public void moveRight()
	{
		clear();
		x += 30;
		draw();
	}
	
	/**
	 *  Move block down to left row
	 */
	public void moveLeft()
	{
		clear();
		x -= 30;
		draw();
	}
	
	
	/**
	 *  Move block up to one
	 */
	public void moveUp()
	{
		clear();
		y -=30;
		draw();
	}
	
	/**
	 * Deasil draw block
	 * @param x int
	 * @param y int
	 * @param display Display 
	 * @return  Block
	 */
	public static Block getRandomBlock(int x, int y,Display display)
	{
		int[] blockTypes = {
				0, 1, 2, 3,
				10, 11, 12, 13,
				20, 21, 30, 31,
				40, 41,50, 60, 
				61, 62, 63
			};
			int num = (int) (Math.random() * 19);
			
			return new Block(x, y, blockTypes[num], display);
	}
	
	/**
	 * @return Block
	 */
	public Block deasilBlock()
	{
		clear();
		if(blockType >= L_Block_1 && blockType <= L_Block_4){
			if(blockType == L_Block_4){
				blockType = L_Block_1;
				return new Block(x, y, blockType, display);
			}
			else
				return new Block(x, y, ++blockType, display);
		}
		
		else if(blockType >= J_BLOCK_1 && blockType <= J_BLOCK_4){
			
			if(blockType == J_BLOCK_4){
				blockType = J_BLOCK_1;
				
				return new Block(x, y, blockType, display);
			}
			else
				return new Block(x, y, ++blockType, display);
			
				
		}
		
		else if(blockType == I_BLOCK_1 || blockType == I_BLOCK_2){
			if(blockType == I_BLOCK_2){
				blockType = I_BLOCK_1;
				return new Block(x, y, blockType, display);
			}
			else
				return new Block(x, y, ++blockType, display);
		}
		
		else if(blockType == Z_BLOCK_1 || blockType == Z_BLOCK_2){
			if(blockType == Z_BLOCK_2){
				blockType = Z_BLOCK_1;
				return new Block(x, y, blockType, display);
			}
			else
				return new Block(x, y, ++blockType, display);
		}
		
		else if(blockType == S_BLOCK_1 || blockType == S_BLOCK_2){
			if(blockType == S_BLOCK_2){
				blockType = S_BLOCK_1;
				return new Block(x, y, blockType, display);
			}
			else
				return new Block(x, y, ++blockType, display);
		}

		else if(blockType >= T_BLOCK_1 && blockType <= T_BLOCK_4){
			if(blockType == T_BLOCK_4){
				blockType = T_BLOCK_1;
				return new Block(x, y, blockType, display);
			}
			else
				return new Block(x, y, ++blockType, display);
		}
		
		else if(blockType == diamonds_BLOCK_1){
			return this;
		}
		else
			return null;
	}
}

⌨️ 快捷键说明

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