亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? shape.java

?? 一個(gè)復(fù)雜的俄羅斯方塊程序
?? JAVA
字號(hào):
package cn.itcast.tetris.entities;

import java.awt.Color;
import java.awt.Graphics;
import java.util.TooManyListenersException;

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


/**
 * 
 * 維護(hù)一個(gè)圖形, 一個(gè)圖形可以有一種或多種狀態(tài)<BR>
 * <BR>
 * 可以通過(guò) setColor() 方法改變圖形的顏色<BR>
 * <BR>
 * 可以通過(guò)覆蓋 drawUnit(Graphics, int, int, int, int) 方法改變圖形的顯示<BR>
 * <BR>
 * 用內(nèi)部類 ShapeDriver 驅(qū)動(dòng)圖形定時(shí)向下移動(dòng)<BR>
 * <BR>
 * 使用時(shí)一定要給實(shí)例注冊(cè)監(jiān)聽(tīng)器, 否則不能正常運(yùn)行 <BR>
 * 
 * @version 1.0, 01/01/08
 * 
 * @author 湯陽(yáng)光
 * 
 */
public class Shape {

	/**
	 * 變形(旋轉(zhuǎn))
	 */
	public static final int ROTATE = 5;
	/**
	 * 上移
	 */
	public static final int UP = 1;
	/**
	 * 下落
	 */
	public static final int DOWN = 2;
	/**
	 * 左移
	 */
	public static final int LEFT = 3;
	/**
	 * 右移
	 */
	public static final int RIGHT = 4;

	/**
	 * 監(jiān)聽(tīng)器組
	 */
	protected ShapeListener listener;

	/**
	 * 
	 */
	protected int[][] body;

	/**
	 * 當(dāng)前顯示的狀態(tài)
	 */
	protected int status;

	/**
	 * 圖形的真實(shí)高度
	 */
	protected int height;

	/**
	 * 左上角的位置
	 */
	protected int left;

	/**
	 * 左上角的位置
	 */
	protected int top;

	/**
	 * 下落的速度
	 */
	protected int speed;

	/**
	 * 生命
	 */
	protected boolean life;

	/**
	 * 暫停狀態(tài)
	 */
	protected boolean pause;

	protected boolean swift;

	protected int swiftSpeed = Global.SWIFT_SPEED;

	protected Thread shapeThread, swiftThread;

	/**
	 * 顏色
	 */
	protected Color color = Color.BLUE;

	/**
	 * 指定類型, 指定狀態(tài)的構(gòu)造方法<BR>
	 * 將會(huì)調(diào)用 init() 方法
	 * 
	 * @param body
	 * @param status
	 */
	public Shape(int[][] body, int status) {
		super();
		this.body = body;
		this.status = status;
		for (int y = 0; y < 4; y++)
			for (int x = 0; x < 4; x++)
				if (isMember(x, y, false))
					height = y + 1;
		init();
	}

	/**
	 * 初始化位置,速度等
	 */
	public void init() {
		life = true;
		pause = false;
		swift = false;
		left = Global.WIDTH / 2 - 2;
		top = 0 - height;
		speed = Global.CURRENT_SPEED;
	}

	/**
	 * 旋轉(zhuǎn)(或叫做變形, 顯示下一個(gè)狀態(tài))
	 */
	public void rotate() {
		status = (status + 1) % body.length;
	}

	public void moveUp() {
		top--;
	}

	/**
	 * 向下移動(dòng)
	 */
	public void moveDown() {
		top++;
	}

	/**
	 * 向左移動(dòng)
	 */
	public void moveLeft() {
		left--;
	}

	/**
	 * 向右移動(dòng)
	 */
	public void moveRight() {
		left++;
	}

	/**
	 * 驅(qū)動(dòng)圖形定時(shí)下落的內(nèi)部類
	 * 
	 * @version 1.0, 01/01/08
	 * 
	 * @author 湯陽(yáng)光
	 */
	protected class ShapeDriver implements Runnable {

		/**
		 * 驅(qū)動(dòng)圖形定時(shí)下落
		 */
		public void run() {
			if (listener == null)
				throw new RuntimeException("請(qǐng)先注冊(cè) ShapeListener");

			while (life && listener.isShapeMoveDownable(Shape.this)) {
				if (!swift) {
					if (!pause) {
						moveDown();
						/**
						 * 觸發(fā)下落事件
						 */
						listener.shapeMovedDown(Shape.this);
					}
				}
				try {
					Thread.sleep(speed);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			life = false;
		}

	}

	/**
	 * 顯示, 將調(diào)用drawUnit(Graphics, int, int, int, int)方法
	 * 
	 * @param g
	 */
	public void drawMe(Graphics g) {
		/**
		 * 死了就不畫了,針對(duì)游戲結(jié)束時(shí)的最后一個(gè)圖形
		 */
		if (!life)
			return;
		g.setColor(color);
		for (int x = 0; x < 4; x++)
			for (int y = 0; y < 4; y++)
				if (getFlagByPoint(status, x, y))
					drawUnit(g, (left + x) * Global.CELL_WIDTH, (top + y)
							* Global.CELL_HEIGHT, Global.CELL_WIDTH,
							Global.CELL_HEIGHT);
	}

	/**
	 * 
	 * 畫具體的每一個(gè)方塊的方法, 可以覆蓋這個(gè)方法改變圖形的顯示
	 * 
	 * @param g
	 * @param x
	 *            像素坐標(biāo) x
	 * @param y
	 *            像素坐標(biāo) y
	 * @param width
	 *            寬度(單位:像素)
	 * @param height
	 *            高度(單位:像素)
	 */
	public void drawUnit(Graphics g, int x, int y, int width, int height) {
		g.fill3DRect(x, y, width, height, true);
	}

	/**
	 * 相對(duì)坐標(biāo)(x,y)是否是圖形中的點(diǎn)
	 * 
	 * @param x
	 *            相對(duì)坐標(biāo)x
	 * @param y
	 *            相對(duì)坐標(biāo)y
	 * @return
	 */
	protected boolean getFlagByPoint(int status, int x, int y) {
		return body[status][y * 4 + x] == 1;
	}

	/**
	 * 
	 * 指定的位置是否是圖形的一部分
	 * 
	 * @param x
	 *            x(格子)(相對(duì))坐標(biāo)
	 * @param y
	 *            y(格子)(相對(duì))坐標(biāo)
	 * @param isRotate
	 *            是否旋轉(zhuǎn)了
	 * @return
	 */
	public boolean isMember(int x, int y, boolean isRotate) {
		return getFlagByPoint(isRotate ? (status + 1) % body.length : status,
				x, y);
	}

	/**
	 * 加速
	 */
	public void speedUp() {
		if (speed > Global.SPEED_STEP)
			speed -= Global.SPEED_STEP;
		Global.CURRENT_SPEED = speed;
	}

	/**
	 * 減速
	 */
	public void speedDown() {
		speed += Global.SPEED_STEP;
		Global.CURRENT_SPEED = speed;
	}

	/**
	 * 得到圖形的下落速度
	 * 
	 * @return
	 */
	public int getSpeed() {
		return speed;
	}

	/**
	 * 設(shè)置圖形的下落速度
	 * 
	 * @param speed
	 */
	public void setSpeed(int speed) {
		this.speed = speed;
	}

	/**
	 * 得到圖形的暫停狀態(tài)
	 * 
	 * @return
	 */
	public boolean isPause() {
		return pause;
	}

	/**
	 * 設(shè)置圖形的暫停狀態(tài)
	 * 
	 * @param pause
	 */
	public void setPause(boolean pause) {
		this.pause = pause;
	}

	/**
	 * 更改暫停狀態(tài)<BR>
	 * 若是暫停狀態(tài), 則繼續(xù)下落<BR>
	 * 若正在下落, 則暫停
	 */
	public void changePause() {
		this.pause = !this.pause;
	}

	/**
	 * 得到圖形的當(dāng)前是第幾種狀態(tài)
	 * 
	 * @return
	 */
	public int getStatus() {
		return status;
	}

	/**
	 * 設(shè)置圖形的當(dāng)前是第幾種狀態(tài)
	 * 
	 * @param status
	 */
	public void setStatus(int status) {
		this.status = status;
	}

	/**
	 * 得到圖形的位置
	 * 
	 * @return
	 */
	public int getLeft() {
		return left;
	}

	/**
	 * 設(shè)置圖形的位置
	 * 
	 * @param left
	 */
	public void setLeft(int left) {
		this.left = left;
	}

	/**
	 * 得到圖形的位置
	 * 
	 * @return
	 */
	public int getTop() {
		return top;
	}

	/**
	 * 設(shè)置圖形的位置
	 * 
	 * @param top
	 */
	public void setTop(int top) {
		this.top = top;
	}

	/**
	 * 得到圖形的顏色
	 * 
	 * @return
	 */
	public Color getColor() {
		return color;
	}

	/**
	 * 設(shè)置圖形的顏色
	 * 
	 * @param color
	 */
	public void setColor(Color color) {
		this.color = color;
	}

	/**
	 * 設(shè)置圖形的類型(多種狀態(tài))
	 * 
	 * @param body
	 */
	public void setBody(int[][] body) {
		this.body = body;
	}

	/**
	 * 添加監(jiān)聽(tīng)器<BR>
	 * 將會(huì)啟動(dòng)驅(qū)動(dòng)圖形下落的線程
	 * 
	 * @param l
	 */
	public void addShapeListener(ShapeListener l) {
		if (l == null || this.listener == l)
			return;
		if (this.listener != null)
			throw new RuntimeException(new TooManyListenersException());
		this.listener = l;

		start();
	}

	protected void start() {
		shapeThread = new Thread(new ShapeDriver());
		shapeThread.start();
	}

	public boolean isLife() {
		return life;
	}

	/**
	 * 結(jié)束圖形定時(shí)下落的線程
	 */
	public synchronized void die() {
		this.life = false;
	}

	public boolean isSwift() {
		return swift;
	}

	/**
	 * 一落到底
	 * 
	 * @param swift
	 */
	public void setSwift(boolean swift) {

		if (this.swift == swift)
			return;

		this.swift = swift;
		if (this.swift) {
			swiftThread = new Thread(new ShapeSwiftDriver());
			swiftThread.start();
		}
	}

	protected class ShapeSwiftDriver implements Runnable {

		public void run() {
			// TODO Auto-generated method stub
			while (swift && life) {
				if (listener == null)
					throw new RuntimeException("請(qǐng)先注冊(cè) ShapeListener");
				if (listener.isShapeMoveDownable(Shape.this)) {
					if (!pause) {
						moveDown();
						/**
						 * 觸發(fā)下落事件
						 */
						listener.shapeMovedDown(Shape.this);
					}
					try {
						Thread.sleep(swiftSpeed);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} else {
					life = false;
				}
			}
		}

	}

	public int getSwiftSpeed() {
		return swiftSpeed;
	}

	public void setSwiftSpeed(int swiftSpeed) {
		this.swiftSpeed = swiftSpeed;
	}

	public int getHeight() {
		return height;
	}

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产网红主播福利一区二区| 国产在线观看一区二区| 亚洲视频一区二区在线观看| 日本一区二区三区四区| 久久久久久影视| 国产欧美一区二区精品性色| 久久久久88色偷偷免费| 国产喷白浆一区二区三区| 国产午夜精品福利| 国产精品你懂的在线| 国产精品久久久久久久久免费桃花| 中文在线一区二区| 日韩伦理av电影| 亚洲精品国久久99热| 亚洲aⅴ怡春院| 麻豆中文一区二区| 久久 天天综合| 国产91精品免费| av一区二区不卡| 在线免费不卡电影| 欧美高清你懂得| 久久综合久久综合久久| 欧美国产亚洲另类动漫| 亚洲欧美另类图片小说| 性欧美疯狂xxxxbbbb| 麻豆成人久久精品二区三区红| 激情偷乱视频一区二区三区| 国产不卡在线播放| 91国偷自产一区二区开放时间| 欧美制服丝袜第一页| 日韩欧美一级片| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品日韩成人| 亚洲一区自拍偷拍| 精品综合久久久久久8888| 懂色av一区二区三区蜜臀| 色综合夜色一区| 欧美一区二区在线免费观看| 久久精品欧美日韩| 亚洲综合色在线| 久久精品国产一区二区三 | 蜜桃传媒麻豆第一区在线观看| 久久精品久久综合| 91啪亚洲精品| 欧美一区二区久久| 亚洲日本护士毛茸茸| 日本视频一区二区| 成人三级在线视频| 91精品国产免费| 亚洲国产精品传媒在线观看| 日韩综合小视频| 成人免费观看av| 3751色影院一区二区三区| 国产精品网站在线| 午夜免费久久看| 成人黄色综合网站| 日韩一级片网站| 一区二区三区欧美在线观看| 国产专区欧美精品| 欧美日韩亚洲丝袜制服| 国产欧美视频一区二区| 日韩精品欧美精品| 一本色道久久综合亚洲精品按摩| 日韩女优视频免费观看| 亚洲最大色网站| 国产成人h网站| 日韩精品一区在线| 亚洲大片精品永久免费| 成人av网站在线| 26uuu国产在线精品一区二区| 一区二区三区成人在线视频| 成人精品一区二区三区四区| 91精品国产欧美一区二区18| 麻豆精品新av中文字幕| 91碰在线视频| 国产精品三级av| 国产精品91一区二区| 日韩视频一区二区三区在线播放 | 一片黄亚洲嫩模| 成人激情免费网站| 精品国产免费一区二区三区四区 | 日本高清不卡在线观看| 中文字幕成人在线观看| 经典三级在线一区| 91麻豆精品国产91久久久更新时间| 亚洲啪啪综合av一区二区三区| 懂色av一区二区夜夜嗨| 久久婷婷成人综合色| 久久精品噜噜噜成人av农村| 欧美一区二区日韩| 日本一道高清亚洲日美韩| 欧美三级电影一区| 亚洲自拍偷拍图区| 日本国产一区二区| 一区二区不卡在线播放 | 欧美日韩和欧美的一区二区| 欧美日韩中字一区| 有码一区二区三区| 91在线精品秘密一区二区| 久久精品欧美一区二区三区不卡 | 国产91丝袜在线观看| 久久久精品黄色| 国产乱一区二区| 久久综合色婷婷| 国产精品亚洲成人| 久久久电影一区二区三区| 国产精品资源站在线| 国产视频视频一区| 成人一级视频在线观看| 欧美激情一区二区三区全黄| 国产成人亚洲综合a∨猫咪| 国产亚洲欧美在线| 成人美女在线观看| 成人免费在线视频| 在线一区二区三区四区五区| 一区二区三区中文字幕| 欧美日韩美少妇| 蜜臀av一级做a爰片久久| 欧美一级精品在线| 国产一区二区三区免费观看 | 国产成人综合视频| 中文字幕日韩av资源站| 91福利在线播放| 日韩av电影一区| 久久久久久黄色| 99九九99九九九视频精品| 亚洲国产毛片aaaaa无费看| 在线播放视频一区| 国精产品一区一区三区mba视频| 久久久久88色偷偷免费| 91日韩在线专区| av在线播放一区二区三区| 亚洲制服欧美中文字幕中文字幕| 欧美三级在线播放| 国产在线精品一区二区三区不卡 | 国产精品一区在线观看你懂的| 国产日韩精品一区二区三区| 99久久er热在这里只有精品66| 亚洲一区二区中文在线| 欧美成人video| www.亚洲在线| 天天综合色天天综合色h| 精品女同一区二区| 99久久精品国产观看| 亚洲第一福利一区| 久久久国产精华| 欧美亚洲免费在线一区| 精东粉嫩av免费一区二区三区| 国产精品久久久久久久久免费相片 | 99久久免费视频.com| 日韩影视精彩在线| 国产精品网友自拍| 欧美三区在线视频| 丰满少妇久久久久久久| 亚洲一区在线观看免费 | 精品99一区二区| 91蜜桃传媒精品久久久一区二区| 日韩高清不卡一区二区| 国产精品久久三区| 日韩欧美资源站| 色激情天天射综合网| 激情亚洲综合在线| 一区二区三区四区中文字幕| 精品国产一区二区三区四区四 | av电影天堂一区二区在线| 日本欧美加勒比视频| 亚洲欧美自拍偷拍色图| 日韩欧美色综合| 欧美午夜片在线观看| 成人a区在线观看| 久久精品国产精品亚洲精品| 亚洲理论在线观看| 国产清纯在线一区二区www| 欧美一区二区观看视频| 91免费观看在线| 国产一区二区三区视频在线播放| 亚洲成a人片综合在线| 国产情人综合久久777777| 日韩欧美中文字幕制服| 欧美另类久久久品| 91视频观看视频| 成人黄色在线网站| 国产精品羞羞答答xxdd| 黄一区二区三区| 日本午夜一区二区| 亚洲国产精品久久艾草纯爱| 国产精品久久久久久久久果冻传媒 | 欧美午夜一区二区三区免费大片| 粉嫩一区二区三区性色av| 久久精品国产99久久6| 午夜欧美一区二区三区在线播放| 国产精品久久午夜| 欧美国产精品中文字幕| 2024国产精品视频| 日韩欧美一级精品久久| 欧美中文一区二区三区| 在线观看av不卡| 91国产视频在线观看| 91精品办公室少妇高潮对白| 99久久精品国产麻豆演员表|