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

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

?? shape.java

?? 俄羅斯方塊游戲java開發(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>
 * 可以通過 setColor() 方法改變圖形的顏色<BR>
 * <BR>
 * 可以通過覆蓋 drawUnit(Graphics, int, int, int, int) 方法改變圖形的顯示<BR>
 * <BR>
 * 用內(nèi)部類 ShapeDriver 驅(qū)動(dòng)圖形定時(shí)向下移動(dòng)<BR>
 * <BR>
 * 使用時(shí)一定要給實(shí)例注冊監(jiān)聽器, 否則不能正常運(yùn)行 <BR>
 * 
 * @version 1.0, 01/01/08
 * 
 * @author 湯陽光
 * 
 */
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)聽器組
	 */
	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 湯陽光
	 */
	protected class ShapeDriver implements Runnable {

		/**
		 * 驅(qū)動(dòng)圖形定時(shí)下落
		 */
		public void run() {
			if (listener == null)
				throw new RuntimeException("請先注冊 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) {
		/**
		 * 死了就不畫了,針對游戲結(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);
	}

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

	/**
	 * 
	 * 指定的位置是否是圖形的一部分
	 * 
	 * @param x
	 *            x(格子)(相對)坐標(biāo)
	 * @param y
	 *            y(格子)(相對)坐標(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)聽器<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("請先注冊 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;
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成伊人成综合网小说| 亚洲精品水蜜桃| 色综合中文字幕国产 | 国产精品久久久久影院色老大 | 国产宾馆实践打屁股91| 亚洲国产wwwccc36天堂| 国产日韩视频一区二区三区| 欧美剧情片在线观看| 成人蜜臀av电影| 蜜臀av亚洲一区中文字幕| 亚洲毛片av在线| 国产人伦精品一区二区| 在线播放日韩导航| 色屁屁一区二区| 国产成人高清视频| 免费成人美女在线观看.| 亚洲综合精品久久| 日韩一区日韩二区| 亚洲国产成人自拍| 久久午夜国产精品| 91精品久久久久久久99蜜桃| 日本电影欧美片| 91视视频在线直接观看在线看网页在线看| 免费黄网站欧美| 日韩va欧美va亚洲va久久| 一区二区三区在线不卡| √…a在线天堂一区| 久久精品夜色噜噜亚洲aⅴ| 精品少妇一区二区三区视频免付费| 欧美午夜一区二区三区免费大片| 色综合久久六月婷婷中文字幕| 国产精品资源网| 韩国三级电影一区二区| 久久精品免费观看| 奇米色777欧美一区二区| 亚洲第一福利视频在线| 一区二区三区在线播| 一区二区三区影院| 亚洲在线观看免费视频| 一区二区激情视频| 一区二区三区四区精品在线视频 | 91国偷自产一区二区开放时间| 成人av高清在线| 成人黄色国产精品网站大全在线免费观看| 久久99热这里只有精品| 美女高潮久久久| 久久99精品国产| 国产河南妇女毛片精品久久久 | 精品1区2区3区| 欧美日韩不卡在线| 91麻豆精品国产无毒不卡在线观看 | 国产精品久久久久影视| 国产精品青草综合久久久久99| 亚洲国产高清aⅴ视频| 国产精品久久久久久久久搜平片| 亚洲色欲色欲www| 亚洲一区二区三区爽爽爽爽爽| 香蕉加勒比综合久久| 奇米精品一区二区三区在线观看 | 亚洲激情自拍偷拍| 一级中文字幕一区二区| 视频在线在亚洲| 国产一区二区影院| 99久久国产综合色|国产精品| 色呦呦国产精品| 欧美一区二视频| 久久色视频免费观看| 亚洲婷婷综合色高清在线| 亚洲综合久久久久| 精品一区二区三区在线观看| 成人精品国产一区二区4080| 91久久精品一区二区| 日韩精品中文字幕一区二区三区 | 国产欧美一区视频| 自拍偷在线精品自拍偷无码专区| 亚洲.国产.中文慕字在线| 久久99九九99精品| 色悠悠亚洲一区二区| 日韩女优视频免费观看| 欧美韩国日本一区| 午夜一区二区三区在线观看| 国产一区二区h| 欧美日韩一卡二卡三卡 | 欧美午夜视频网站| 欧美精品一区二区蜜臀亚洲| 自拍av一区二区三区| 蜜桃视频第一区免费观看| 97久久超碰国产精品电影| 欧美一卡在线观看| 亚洲美女电影在线| 国产一区二区美女诱惑| 欧美性三三影院| 国产无人区一区二区三区| 亚洲国产一区二区三区青草影视| 精品一区二区三区免费播放| 91福利视频久久久久| 久久久www成人免费无遮挡大片| 亚洲六月丁香色婷婷综合久久| 麻豆91在线播放免费| 蜜臀久久99精品久久久久宅男| 五月天激情综合| 成人综合婷婷国产精品久久| 欧美日韩国产精品成人| 国产精品久久二区二区| 狂野欧美性猛交blacked| 欧美午夜一区二区三区| 国产精品伦理一区二区| 极品尤物av久久免费看| 欧美喷水一区二区| 亚洲精品中文在线影院| 成人免费av资源| 久久综合资源网| 日本中文一区二区三区| 色婷婷亚洲婷婷| 国产精品伦理一区二区| 国产一区二区三区免费| 日韩精品一区二区三区中文精品| 亚洲一区二区欧美| 91国产精品成人| 亚洲美女淫视频| 99在线精品观看| 国产精品欧美精品| 国产91精品一区二区麻豆亚洲| 精品国产一区久久| 狂野欧美性猛交blacked| 91精品麻豆日日躁夜夜躁| 亚洲与欧洲av电影| 91久久精品网| 一区二区免费视频| 欧美伊人久久大香线蕉综合69| 亚洲人午夜精品天堂一二香蕉| 懂色一区二区三区免费观看| 国产亚洲精品免费| 国产成人免费在线观看| 国产欧美日韩视频在线观看| 国产精品乡下勾搭老头1| 国产亚洲欧美激情| 成人在线综合网站| 国产精品视频一二三| 粉嫩aⅴ一区二区三区四区| 中文字幕精品三区| 91麻豆免费视频| 夜夜爽夜夜爽精品视频| 欧美色网站导航| 天堂精品中文字幕在线| 日韩欧美一卡二卡| 国产在线一区观看| 国产欧美日韩另类一区| 成人h动漫精品一区二| 中文字幕制服丝袜成人av| 91蜜桃网址入口| 亚洲国产欧美另类丝袜| 欧美理论电影在线| 美国精品在线观看| 久久久久久一二三区| 成人av在线资源网| 亚洲黄网站在线观看| 欧美日韩精品二区第二页| 免费精品视频在线| 中文字幕免费一区| 色一情一乱一乱一91av| 午夜精品一区二区三区三上悠亚| 欧美一区二区三区视频在线| 国产一二三精品| 亚洲色图制服诱惑| 欧美一区欧美二区| 成人污污视频在线观看| 一级日本不卡的影视| 欧美成人一级视频| 91亚洲精品乱码久久久久久蜜桃 | 中文字幕欧美日韩一区| 欧美最猛性xxxxx直播| 久热成人在线视频| 日韩理论片一区二区| 欧美一区二区三级| 97久久人人超碰| 日本午夜一本久久久综合| 欧美激情一区三区| 欧美日韩亚洲国产综合| 国产成人99久久亚洲综合精品| 一区二区理论电影在线观看| 精品国产一区久久| 日本道精品一区二区三区| 激情久久久久久久久久久久久久久久| 国产精品你懂的在线欣赏| 欧美浪妇xxxx高跟鞋交| 成人av网站在线| 麻豆91免费看| 一区二区欧美精品| 中文字幕乱码久久午夜不卡| 欧美日韩午夜在线| 成人a免费在线看| 久久不见久久见免费视频7| 亚洲免费在线视频一区 二区| 精品免费视频.| 欧美日韩精品三区| 91女厕偷拍女厕偷拍高清| 黄色日韩网站视频| 亚洲777理论| 一区二区三区日韩精品视频|