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

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

?? shape.java

?? java 俄羅斯方塊游戲
?? JAVA
字號:
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ù)一個圖形, 一個圖形可以有一種或多種狀態(tài)<BR>
 * <BR>
 * 可以通過 setColor() 方法改變圖形的顏色<BR>
 * <BR>
 * 可以通過覆蓋 drawUnit(Graphics, int, int, int, int) 方法改變圖形的顯示<BR>
 * <BR>
 * 用內(nèi)部類 ShapeDriver 驅(qū)動圖形定時向下移動<BR>
 * <BR>
 * 使用時一定要給實(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>
	 * 將會調(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)(或叫做變形, 顯示下一個狀態(tài))
	 */
	public void rotate() {
		status = (status + 1) % body.length;
	}

	public void moveUp() {
		top--;
	}

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

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

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

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

		/**
		 * 驅(qū)動圖形定時下落
		 */
		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é)束時的最后一個圖形
		 */
		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);
	}

	/**
	 * 
	 * 畫具體的每一個方塊的方法, 可以覆蓋這個方法改變圖形的顯示
	 * 
	 * @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>
	 * 將會啟動驅(qū)動圖形下落的線程
	 * 
	 * @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é)束圖形定時下落的線程
	 */
	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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情国产一区二区| 韩国精品在线观看| 精品国内二区三区| 91成人免费在线视频| 精品一区二区三区在线播放视频| 亚洲视频 欧洲视频| 亚洲精品一区二区在线观看| 欧洲一区在线电影| 成年人网站91| 国产伦精品一区二区三区免费迷| 亚洲视频你懂的| 久久久精品2019中文字幕之3| 91精品国产综合久久香蕉麻豆| 91麻豆swag| 国产精品亚洲一区二区三区在线| 日本亚洲免费观看| 亚洲成年人影院| 国产精品免费视频一区| 欧美成人一区二区三区片免费| 欧美日韩一区不卡| 91碰在线视频| eeuss鲁片一区二区三区在线观看| 久久精品免费看| 青椒成人免费视频| 婷婷亚洲久悠悠色悠在线播放| 一区二区三区日韩精品视频| 综合激情成人伊人| 中文字幕视频一区二区三区久| 国产清纯白嫩初高生在线观看91 | 欧美日韩另类一区| 成人午夜视频网站| 国产**成人网毛片九色 | 91精品一区二区三区久久久久久| 成人天堂资源www在线| 国产欧美一区在线| 久久综合资源网| 91啪亚洲精品| 国产不卡视频一区| 日本不卡一二三区黄网| 亚洲6080在线| 日韩高清不卡一区二区三区| 夜夜精品视频一区二区 | 国产日韩亚洲欧美综合| 精品久久久久久久人人人人传媒 | 国产不卡在线一区| 国产乱码精品一区二区三区忘忧草 | 久久成人av少妇免费| 看电影不卡的网站| 国产精品伊人色| 国产成人精品1024| 成人性生交大片免费| 99国产精品久久久久| 日本精品一区二区三区高清 | 欧美三级电影网站| 欧美一区二区三区影视| 欧美一二三在线| 久久免费美女视频| 欧美国产日本韩| 亚洲三级在线看| 亚洲bt欧美bt精品| 国内精品国产成人国产三级粉色| 国内精品久久久久影院一蜜桃| 国产成人亚洲综合色影视| 99久久精品国产一区二区三区 | 国产精品一区二区不卡| 波波电影院一区二区三区| 欧美在线免费播放| 日韩一区二区三区电影| 日本一区二区三区四区| 亚洲国产成人91porn| 韩国欧美国产一区| 99麻豆久久久国产精品免费优播| 欧美性生活一区| 日韩欧美一区中文| 国产精品美女一区二区在线观看| 亚洲伊人色欲综合网| 狠狠色丁香久久婷婷综合丁香| 成人app下载| 3d动漫精品啪啪| 国产精品久久久久aaaa| 亚洲18女电影在线观看| 欧美人牲a欧美精品| 精品国产乱码久久| 1区2区3区精品视频| 日本不卡一二三区黄网| 91视频一区二区三区| 欧美一区二区三区成人| 中文字幕一区二区三区四区不卡 | 亚洲午夜电影在线| 国产精品伊人色| 欧美精品1区2区3区| 国产精品久久看| 麻豆一区二区三区| 91片在线免费观看| 国产亚洲欧美日韩在线一区| 亚洲一区av在线| 成人午夜短视频| 精品欧美一区二区在线观看| 亚洲自拍另类综合| 成人午夜视频网站| 欧美成人官网二区| 亚洲成a天堂v人片| 91麻豆.com| 中文字幕欧美三区| 九九视频精品免费| 欧美日本在线播放| 一区二区三区蜜桃网| 国产福利91精品一区二区三区| 日韩一区二区免费视频| 亚洲一区二区三区四区在线观看| 国产成人在线视频免费播放| 日韩美女视频在线| 天堂蜜桃91精品| 欧美在线观看一区| 日韩美女视频19| 成人av网站免费| 亚洲精品在线观看网站| 日本不卡在线视频| 欧美日韩性生活| 亚洲一区二区在线免费看| 91蜜桃在线免费视频| 国产性做久久久久久| 韩国欧美国产一区| 日韩一区二区三区视频在线| 爽好久久久欧美精品| 欧美在线视频你懂得| 一区二区三区四区激情| 91免费版pro下载短视频| 亚洲欧洲精品一区二区三区 | 麻豆传媒一区二区三区| 欧美精品第1页| 日本大胆欧美人术艺术动态 | 欧美电影在线免费观看| 国产精品羞羞答答xxdd| 精品美女被调教视频大全网站| 美女网站在线免费欧美精品| 日韩一级完整毛片| 日本vs亚洲vs韩国一区三区二区| 日韩情涩欧美日韩视频| 久久精品国内一区二区三区| 精品久久人人做人人爱| 韩国成人福利片在线播放| 精品国产髙清在线看国产毛片 | 色妹子一区二区| 亚洲一区二区在线播放相泽 | 中文字幕欧美一| 91麻豆国产福利在线观看| 一区二区欧美国产| 欧美精品v国产精品v日韩精品| 麻豆国产欧美一区二区三区| 精品国产一区二区三区忘忧草| 国产一区二区按摩在线观看| 国产欧美久久久精品影院| 91免费视频网| 天堂午夜影视日韩欧美一区二区| 欧美成人猛片aaaaaaa| 国产精品性做久久久久久| 成人欧美一区二区三区白人| 欧美亚洲综合久久| 免费成人美女在线观看.| 2020国产精品自拍| 色综合一区二区三区| 午夜精品免费在线| 精品久久久网站| 91免费看片在线观看| 日韩高清不卡一区二区三区| 精品第一国产综合精品aⅴ| 成人性生交大片免费看视频在线| 一区二区三区小说| 日韩一级大片在线观看| 国产成人精品1024| 亚洲成人1区2区| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美日韩精品专区| 国产一区美女在线| 亚洲欧美偷拍三级| 日韩欧美高清一区| aaa欧美大片| 免费欧美高清视频| 国产精品久久午夜夜伦鲁鲁| 欧美欧美欧美欧美| 成人黄色av网站在线| 日本美女一区二区三区| 亚洲欧洲另类国产综合| 日韩精品资源二区在线| 91老司机福利 在线| 国内精品久久久久影院色 | 蜜桃一区二区三区在线观看| 国产精品久久久久影院老司| 欧美精品久久久久久久多人混战 | 波多野洁衣一区| 精品一区二区三区在线播放| 一区二区三区影院| 久久精品人人做人人综合| 欧美高清dvd| 色婷婷激情一区二区三区| 国产美女久久久久| 免费在线看成人av| 亚洲二区在线观看| 亚洲另类春色校园小说|