首页>代码>java swing开发的俄罗斯方块游戏,包含完整代码+详细注释>/ItcastTetris1.02_final/src/cn/itcast/tetris/entities/ShapeFactory.java
package cn.itcast.tetris.entities;

import java.awt.Color;
import java.util.Random;

import cn.itcast.tetris.listener.ShapeListener;
import cn.itcast.tetris.util.Global;


/**
 * 图形工厂<BR>
 * 可以产生多种形状, 多种颜色的图形<BR>
 * <BR>
 * setDefaultShapeColor() 方法可以设置默认产生的图形的颜色<BR>
 * 也可以通过 setColorfulShape() 方法设置是否产生彩色图形<BR>
 * <BR>
 * 
 */
public class ShapeFactory {
	/**
	 * 可以生产出这些形状的图形
	 */
	protected static int shapes[][][] = new int[][][] {
	/* 第一种 */{ /** ***** */
	{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },

	/* 第二种 */
	{ /** ********* */
	{ 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },

	{ 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
	/* 第三种 */
	{ /** ******* */
	{ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },

	{ 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 } },
	/* 第四种 */
	{ /** ******** */
	{ 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, } },
	/* 第五种 */
	{ /** ******** */
	{ 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
	/* 第六种 */
	{ /** *********** */
	{ 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },

	/* 第七种 */
	{ /** ********** */
	{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

	{ 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } },

	};

	protected Random random = new Random();

	/**
	 * 图形的默认颜色
	 */
	public static final Color DEFAULT_SHAPE_COLOR = new Color(0x990066);
	/**
	 * 生产的图形的颜色
	 */
	protected Color defaultShapeColor = DEFAULT_SHAPE_COLOR;

	/**
	 * 是否产生彩色图形
	 */
	protected boolean colorfulShape;

	/**
	 * 生产出随机类型的图形,并且把传过来的监听器注册给它
	 * 
	 * @param shpaeListener
	 * @return
	 */
	public Shape getShape(ShapeListener shapeListener) {
		int type = random.nextInt(shapes.length);
		Shape shape = new Shape(shapes[type], random
				.nextInt(shapes[type].length));
		shape.setColor(colorfulShape ? Global.getRandomColor()
				: defaultShapeColor);
		shape.addShapeListener(shapeListener);
		return shape;
	}

	/**
	 * 得到默认产生的图形的颜色
	 * 
	 * @return
	 */
	public Color getDefaultShapeColor() {
		return defaultShapeColor;
	}

	/**
	 * 设置默认产生的图形的颜色
	 * 
	 * @param defaultShapeColor
	 */
	public void setDefaultShapeColor(Color defaultShapeColor) {
		this.defaultShapeColor = defaultShapeColor;
	}

	/**
	 * 是否产生彩色图形
	 * 
	 * @return 是否产生彩色图形
	 */
	public boolean isColorfulShape() {
		return colorfulShape;
	}

	/**
	 * 设置是否产生彩色图形
	 * 
	 * @param colorfulShape
	 */
	public void setColorfulShape(boolean colorfulShape) {
		this.colorfulShape = colorfulShape;
	}

}
最近下载更多
chy520  LV1 6月2日
ClydeSon  LV5 2023年12月18日
微信网友_6770780673069056  LV2 2023年12月9日
npc也有忧伤  LV3 2022年3月19日
guzhiguo0313  LV5 2022年2月12日
闫小玥  LV8 2021年12月22日
秒速一千米  LV2 2021年9月4日
jnagri  LV6 2021年7月6日
zhangjian800  LV1 2021年5月25日
ybc629  LV3 2020年12月23日
最近浏览更多
luoyanglin  LV2 9月14日
2824163870szy 7月1日
暂无贡献等级
zr20050503  LV2 6月27日
hainabian1977  LV2 6月24日
bill1234  LV1 6月23日
chy520  LV1 5月29日
douxing 3月5日
暂无贡献等级
crapcrap  LV2 2月1日
zhaoyunlong36987 1月23日
暂无贡献等级
yx666666  LV1 1月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友