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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? terisview.java

?? android 下的一個小游戲
?? JAVA
字號:
package bianp.teris;

import java.util.Random;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;

class BrickShape {
	short[] groupx = new short[4];
	short[] groupy = new short[4];

	static BrickShape[] _shapes;

	public static final int SHAPE_COUNT = 6;

	static {
		// 都以左下角為坐標點
		short[] shapes = {
		//
				// ##
				// ##
				0, 0, 0, -1, 1, 0, 1, -1,
				//
				0, 0, 0, -1, 1, 0, 1, -1,
				//
				0, 0, 0, -1, 1, 0, 1, -1,
				//
				0, 0, 0, -1, 1, 0, 1, -1,
				// _#__#_______#
				// ###_##_###_##
				// ____#___#___#
				0, 0, -1, 0, 1, 0, 0, -1,
				//
				0, 0, 0, 1, 0, -1, 1, 0,
				//
				0, 0, -1, 0, 1, 0, 0, 1,
				//
				0, 0, 0, -1, 0, 1, -1, 0,
				// ## # #
				// _# ### # ###
				// _# ## #
				//
				0, 0, 0, -1, 0, -2, 1, 0,
				//
				0, 0, 1, 0, 2, 0, 0, 1,
				//
				0, 0, 0, 1, 0, 2, -1, 0,
				//
				0, 0, -1, 0, -2, 0, 0, -1,
				// # ##
				// # # # ###
				// ## ### # #
				//
				0, 0, 0, -1, 0, -2, -1, 0,
				//
				0, 0, 1, 0, 2, 0, 0, -1,
				//
				0, 0, 0, 1, 0, 2, 1, 0,
				// 
				0, 0, -1, 0, -2, 0, 0, 1,
				// ####
				0, 0, -1, 0, 1, 0, 2, 0,
				//
				0, 0, 0, -1, 0, 1, 0, 2,
				//
				0, 0, -1, 0, -2, 0, 1, 0,
				//
				0, 0, 0, -1, 0, -2, 0, 1,
				// ## #
				// ## ##
				// #
				0, 0, 0, -1, -1, -1, 1, 0,
				//
				0, 0, 1, 0, 1, -1, 0, 1,
				//
				0, 0, 0, -1, -1, -1, 1, 0,
				//
				0, 0, 1, 0, 1, -1, 0, 1,

		//
		};

		_shapes = new BrickShape[4 * SHAPE_COUNT];

		for (int i = 0; i < SHAPE_COUNT; ++i) {
			for (int j = 0; j < 4; ++j) {
				BrickShape bs = new BrickShape();
				_shapes[i * 4 + j] = bs;
				for (int k = 0; k < 4; ++k) {
					int l = (i * 4 + j) * 8 + 2 * k;
					bs.groupx[k] = shapes[l];
					bs.groupy[k] = shapes[l + 1];
				}
			}
		}
	}

	static BrickShape getShape(int shapeID, int angleID) {
		return _shapes[shapeID * 4 + angleID];
	}
}

public class TerisView extends View {
	private Paint _paint;
	private TerisConfig _config;

	private Rect _terisRect = new Rect();
	private Rect _clientRect = new Rect();

	private IntQueue _keyQueue = new IntQueue(2);

	private boolean[] _bricks;
	private Drawable _brickImg;

	private BrickShape _curShape = BrickShape.getShape(0, 0);
	private int _curX;
	private int _curY;
	private int _curAngleID;
	private int _curShapeID;

	public TerisView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(context);
	}

	public TerisView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public TerisView(Context context) {
		super(context);
		init(context);
	}

	protected void init(Context context) {
		_paint = new Paint();
		_config = new TerisConfig();

		_bricks = new boolean[_config.rows * _config.cols];

		// Load Drawable
		_brickImg = context.getResources().getDrawable(R.drawable.brick_blue);

		Log.d("bianp", "initialized...");
	}

	private boolean getXY(int x, int y) {
		if (x >= 0 && x < _config.cols && y >= 0 && y < _config.rows)
			return _bricks[y * _config.cols + x];
		else
			return true;
	}

	private void setXY(int x, int y, boolean b) {
		if (x >= 0 && x < _config.cols && y >= 0 && y < _config.rows) {
			// Log.d("bianp", "set(" + x +","+y+")" + b);
			_bricks[y * _config.cols + x] = b;
		}
	}

	@Override
	protected void onLayout(boolean changed, int left, int top, int right,
			int bottom) {
		super.onLayout(changed, left, top, right, bottom);
		this.setFocusable(true);

		// 計算一些東東。。。
		_clientRect.set(left, top, right, bottom);

		Rect r = _terisRect;
		TerisConfig c = _config;

		r.right = c.cols * c.cellSize;
		r.bottom = c.rows * c.cellSize;
		r.offset((_clientRect.width() - r.width()) / 2,
				(_clientRect.height() - r.height()) / 2);
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent msg) {
		_keyQueue.push(keyCode);
		return super.onKeyDown(keyCode, msg);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		final Paint paint = _paint;

		paint.setColor(0xff993300);
		paint.setStyle(Style.FILL);
		canvas.drawRect(_clientRect, paint);

		paint.setColor(0xff000000);
		canvas.drawRect(_terisRect, paint);

		drawBricks(canvas, paint);
		// Log.d("bianp", "draw");

	}

	private void drawBricks(Canvas canvas, Paint paint) {
		int w = _config.cols;
		int h = _config.rows;
		for (int x = 0; x < w; ++x) {
			for (int y = 0; y < h; ++y) {
				if (getXY(x, y))
					drawBrick(canvas, x, y, paint);
			}
		}
	}

	private void drawBrick(Canvas canvas, int x, int y, Paint paint) {
		int w = _config.cellSize;
		int mx = _terisRect.left + x * w;
		int my = _terisRect.top + y * w;

		_brickImg.setBounds(mx, my, mx + w, my + w);
		_brickImg.draw(canvas);
	}

	private Random rnd = new Random();
	private boolean _missionFailed;

	/**
	 * 處理鍵盤事件
	 */
	public void falldown() {
		if (_missionFailed)
			return;

		// 先擦除
		for (int i = 0; i < 4; ++i) {
			int x = _curX + _curShape.groupx[i];
			int y = _curY + _curShape.groupy[i];
			setXY(x, y, false);
		}

		boolean stoped = false;

		// 判斷是否停止
		int nY = _curY + 1;
		for (int i = 0; i < 4; ++i) {
			int x = _curX + _curShape.groupx[i];
			int y = nY + _curShape.groupy[i];
			if ((y >= _config.rows)
					|| (x >= 0 && x < _config.cols && y >= 0
							&& y < _config.rows && getXY(x, y))) {
				stoped = true;
				break;
			}
		}

		if (!stoped)
			++_curY;

		for (int i = 0; i < 4; ++i) {
			int x = _curX + _curShape.groupx[i];
			int y = _curY + _curShape.groupy[i];
			setXY(x, y, true);
		}

		if (stoped) {
			removeCompleteRow();

			_curShapeID = rnd.nextInt(BrickShape.SHAPE_COUNT);

			_curAngleID = 0;
			_curShape = BrickShape.getShape(_curShapeID, _curAngleID);
			_curX = _config.cols / 2;
			_curY = 0;

			for (int i = 0; i < 4; ++i) {
				int x = _curX + _curShape.groupx[i];
				int y = _curY + _curShape.groupy[i];
				if (x >= 0 && x < _config.cols && y >= 0 && y < _config.rows
						&& getXY(x, y)) {
					Log.d("bianp", "Mission Failed!");
					_missionFailed = true;
				}
				setXY(x, y, true);
			}
		}
	}

	private void removeCompleteRow() {
		for (int y = _config.rows - 1; y >= 0;) {
			int count = 0;
			for (int x = 0; x < _config.cols; ++x) {
				if (getXY(x, y))
					++count;
			}

			if (count == 0)
				break;

			if (count == _config.cols) {
				// 需要剔除
				for (int i = y; i >= 1; --i) {
					for (int j = 0; j < _config.cols; ++j) {
						setXY(j, i, getXY(j, i - 1));
					}
				}
				for (int j = 0; j < _config.cols; ++j) {
					setXY(j, 0, false);
				}
			} else {
				--y;
			}
		}
	}

	public void processkey() {
		// 處理鍵盤事件
		if (_keyQueue.empty())
			return;

		// 先擦除
		for (int i = 0; i < 4; ++i) {
			int x = _curX + _curShape.groupx[i];
			int y = _curY + _curShape.groupy[i];
			setXY(x, y, false);
		}

		int k = _keyQueue.shift();

		int nx = _curX;
		int ny = _curY;
		BrickShape nshape = _curShape;
		int newangle = _curAngleID;

		switch (k) {
		case KeyEvent.KEYCODE_DPAD_LEFT:
			nx -= 1;
			break;
		case KeyEvent.KEYCODE_DPAD_RIGHT:
			nx += 1;
			break;
		case KeyEvent.KEYCODE_DPAD_DOWN:
			ny += 3;
			break;
		case KeyEvent.KEYCODE_DPAD_UP:
		case KeyEvent.KEYCODE_DPAD_CENTER:
			// transform...
			newangle = (newangle + 1) % 4;
			nshape = BrickShape.getShape(_curShapeID, newangle);
			break;
		default:
			return;
		}

		for (int i = 0; i < 4; ++i) {
			int x = nx + nshape.groupx[i];
			int y = ny + nshape.groupy[i];
			if (getXY(x, y)) {
				nshape = null;
				break;
			}
		}

		if (nshape != null) {
			_curX = nx;
			_curY = ny;
			_curAngleID = newangle;
			_curShape = nshape;
		}

		for (int i = 0; i < 4; ++i) {
			int x = _curX + _curShape.groupx[i];
			int y = _curY + _curShape.groupy[i];
			setXY(x, y, true);
		}

	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色欲色欲www| 日本一二三不卡| 不卡的av网站| 国产一区二区不卡老阿姨| 精品一区二区三区免费视频| 亚洲成人自拍偷拍| 亚洲 欧美综合在线网络| 亚洲小说春色综合另类电影| 一区二区三区在线观看视频| 亚洲午夜久久久久久久久久久 | 欧美日韩大陆一区二区| 91国产成人在线| 欧美三级电影在线观看| 欧美日韩一区小说| 欧美日韩成人综合| 日韩欧美一区二区视频| 精品动漫一区二区三区在线观看| 久久网站最新地址| 中文字幕人成不卡一区| 亚洲综合精品久久| 免费日本视频一区| 国产呦精品一区二区三区网站| 国产不卡免费视频| 欧美专区亚洲专区| 精品日产卡一卡二卡麻豆| 国产欧美日本一区视频| 亚洲女人小视频在线观看| 亚洲不卡一区二区三区| 久久99久久99| 99国产精品久久| 51精品秘密在线观看| 国产午夜精品理论片a级大结局| 国产精品久久国产精麻豆99网站| 亚洲二区在线观看| 高清不卡一区二区| 欧美麻豆精品久久久久久| 欧美精品一区二区三区四区| 中文字幕一区二区三区在线观看| 日日摸夜夜添夜夜添亚洲女人| 国产福利一区在线| 777色狠狠一区二区三区| 久久久久久亚洲综合影院红桃| 亚洲精品乱码久久久久久| 国产在线麻豆精品观看| 在线观看亚洲精品视频| 国产亚洲精品中文字幕| 亚洲成人免费av| 99riav久久精品riav| 欧美精品一区在线观看| 亚洲成a人片在线观看中文| 国产99一区视频免费| 日韩精品在线看片z| 一区二区三区欧美日韩| 高清不卡在线观看av| 日韩女优毛片在线| 午夜电影久久久| 在线免费不卡视频| 国产精品久久久久久久久晋中| 亚洲第一福利视频在线| 91麻豆视频网站| 国产免费久久精品| 激情文学综合网| 日韩欧美电影一区| 免费高清视频精品| 91精品国产综合久久婷婷香蕉 | 久久精品夜夜夜夜久久| 亚洲成年人影院| 色综合久久天天综合网| 国产精品美女久久久久高潮| 国产美女在线观看一区| 亚洲精品在线免费观看视频| 奇米777欧美一区二区| 91麻豆精品国产自产在线 | 综合久久综合久久| 国产激情一区二区三区桃花岛亚洲| 51久久夜色精品国产麻豆| 五月综合激情网| 欧美日韩免费一区二区三区| 亚洲国产一区二区三区青草影视| 91免费国产在线| 一区二区在线观看免费| 欧美亚洲日本国产| 亚洲高清免费视频| 日韩一区二区三区视频在线观看| 男男视频亚洲欧美| 久久男人中文字幕资源站| 国产乱人伦偷精品视频免下载| 久久色中文字幕| 99视频有精品| 一级日本不卡的影视| 欧美日韩成人综合在线一区二区| 日韩av中文在线观看| 日韩色视频在线观看| 国产精一区二区三区| 国产精品国产三级国产有无不卡| proumb性欧美在线观看| 亚洲午夜久久久久久久久电影网 | 91社区在线播放| www..com久久爱| 韩国一区二区视频| 久久亚洲欧美国产精品乐播 | 亚洲国产高清aⅴ视频| 99精品视频在线观看| 亚洲va国产va欧美va观看| 欧美一二三区在线观看| 国产成人精品亚洲日本在线桃色| 亚洲丝袜美腿综合| 宅男在线国产精品| av成人免费在线| 天天色综合天天| 国产精品乱子久久久久| 在线综合+亚洲+欧美中文字幕| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲色图制服丝袜| 欧美大片一区二区| 色综合天天综合色综合av| 国产一区日韩二区欧美三区| 中文成人综合网| 91精品午夜视频| 色网站国产精品| 欧美日韩国产bt| 国产精品资源网| 偷拍自拍另类欧美| 国产精品精品国产色婷婷| 日韩一区二区三区电影在线观看 | 91久久精品一区二区三| 激情深爱一区二区| 五月天国产精品| 亚洲精品成人天堂一二三| 久久精品免费在线观看| 制服丝袜av成人在线看| 一本一道久久a久久精品| 国产剧情在线观看一区二区| 天天综合色天天综合| 日韩美女精品在线| 国产欧美日韩在线| 欧美精品一区二区精品网| 欧洲另类一二三四区| 99久久婷婷国产综合精品电影| 精品在线播放午夜| 日本亚洲最大的色成网站www| 亚洲午夜精品在线| 一区二区三区在线播放| 中文字幕制服丝袜成人av| 久久久777精品电影网影网 | 久久久久久久久久久久电影| 欧美美女黄视频| 欧美精品视频www在线观看| 在线一区二区视频| 色老综合老女人久久久| 91欧美一区二区| 91免费观看国产| 91免费在线看| 色婷婷精品大视频在线蜜桃视频| 成人国产精品免费网站| www.欧美精品一二区| 91麻豆成人久久精品二区三区| 成人国产亚洲欧美成人综合网 | 亚洲一区二区在线播放相泽| 亚洲视频 欧洲视频| 亚洲欧美另类久久久精品2019| 中文字幕日韩精品一区| 亚洲欧美在线另类| 亚洲国产综合91精品麻豆| 午夜免费久久看| 卡一卡二国产精品| 国产成人综合视频| 色婷婷综合久久久中文字幕| 91成人在线观看喷潮| 在线不卡a资源高清| 精品国产免费一区二区三区四区| 久久精品亚洲乱码伦伦中文| 亚洲国产精品成人综合色在线婷婷| 亚洲欧洲美洲综合色网| 一区二区三区在线视频免费| 丝袜美腿一区二区三区| 久久精品国产第一区二区三区| 国产一区高清在线| 91色婷婷久久久久合中文| 在线电影欧美成精品| 精品久久久久99| 亚洲人成伊人成综合网小说| 丝袜美腿一区二区三区| 国产成人av电影免费在线观看| 99精品久久99久久久久| 日韩一级欧美一级| 亚洲欧美在线高清| 男人的j进女人的j一区| 99久久99精品久久久久久| 欧美一区二区美女| 最新久久zyz资源站| 蜜桃av一区二区在线观看| 欧美一区二区三区婷婷月色| 久久久www成人免费无遮挡大片| 亚洲视频香蕉人妖| 国产一区二区三区av电影| 欧美午夜精品电影| 日本一区二区三区国色天香| 青草av.久久免费一区| 91亚洲国产成人精品一区二区三|