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

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

?? block.java

?? 用java代碼實現的俄羅斯方塊,所有功能均已實現.您不妨下載試試看啊.相信會對你有幫助的!
?? JAVA
字號:
/**
  * @(#)data.Block.java  2008-8-11  
  * Copy Right Information	: Tarena
  * Project					: Tetris
  * JDK version used		: jdk1.6.4
  * Comments				: 方塊類。
  * Version					: 1.0
  * Sr	Date		Modified By		Why & What is modified
  * 1.	2008-8-11 	小豬     		新建
  **/
package data;

import java.awt.Color;
import java.awt.Graphics2D;

 /**
 * 方塊類。<br>
 * 理解面向對象的思想。<br>
 * 2008-8-11
 * @author		達內科技[Tarena Training Group]
 * @version	1.0
 * @since		JDK1.6(建議) 
 */
public class Block {

	/** 七種圖形,包括變換的圖形 */
	public static int[][][][] allshape = {
		//z型
		{
			{{1,1,0,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,0,1,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
			{{1,1,0,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,0,1,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}}
		},
		//反z型
		{
			{{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,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}}
		},
		//1型
		{
			{{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},
			{{1,1,1,1},{0,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}},
			{{1,1,1,1},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
		},
		//田型
		{
			{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
		},
		//K型
		{
			{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
			{{1,1,1,0},{0,1,0,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}},
		},
		//L型
		{
			{{1,1,1,0},{1,0,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,1,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,1,0,0},{0,1,0,0},{0,1,1,0},{0,0,0,0}},
		},
		//倒L型
		{
			{{1,1,1,0},{0,0,1,0},{0,0,0,0},{0,0,0,0}},
			{{0,0,1,0},{0,0,1,0},{0,1,1,0},{0,0,0,0}},
			{{1,0,0,0},{1,1,1,0},{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-allshape.length */
	private int type = 0;
	/** 方塊的方向,范圍:0-4 */
	private int dir = 0;
	/** 方塊的顏色 */
	private Color color = Color.PINK;
	/** 方塊的x坐標 */
	private int gridx = 0;
	/** 方塊的y坐標 */
	private int gridy = 0;
	/** 一個方框的占用的寬度和高度(缺省:是一個(n*n)4*4正方形) */
	private int num = 4;
	
	/** 一個格子的占有的像素寬度和高度(缺省:一個(n*n)20*20的正方形) */
	private int pixelWidth = 20;
	
	/**  */
	
	
	
	public Block(int type,int dir,Color color,int gridx,int gridy,int pixelWidth) {
		this.type = type;
		this.dir = dir;
		this.color = color;
		this.gridx = gridx;
		this.gridy = gridy;
		this.pixelWidth = pixelWidth;
		num = allshape[0].length;
	}
	
	/**
	 * 返回檢測方塊和格子的碰撞后的結果。<br>
	 * 碰撞有2個思路:<br>
	 * 1.分別檢測左側、右側、下部的碰撞,底下注釋的部分已實現。<br>
	 * 2.直接檢測和方塊交集的格子。<br>
	 * @param grids 方框的各個格子的顏色。
	 * @return 返回是否可以移動。ture:可以。false:不可以。
	 */
	public boolean collide(Color[][] grids){
		/** 方框的高度 */
		int height = grids.length;
		/** 方框的寬度 */
		int width = grids[0].length;
		if(gridx<=-1*num || gridx>=width || gridy>=height)
			return false;
		/** 碰撞方塊的水平位置x的起始下標 */
		int posx1 = 0;
		/** 碰撞方塊的水平位置x的結束下標 */
		int posx2 = num;
		/** 碰撞方塊的垂直位置y的起始下標 */
		int posy1 = 0;
		/** 碰撞方塊的垂直位置y的結束下標 */
		int posy2 = num;
		
		if(gridx<=0){
			posx1 = gridx*-1;
			//檢測方塊左側移出去的部分是否有非0的格子
			for(int i=0;i<posx1;i++)
				for(int j=0;j<num;j++)
				if(allshape[type][dir][j][i]==1)
					return false;
		}
		if(gridx>=width-num){
			posx2 = width - gridx;
			//檢測方塊右側移出去的部分是否有非0的格子
			for(int i=posx2;i<num;i++)
				for(int j=0;j<num;j++)
					if(allshape[type][dir][j][i]==1)
						return false;
		}
		if(gridy>=height-num){
			posy2 = height - gridy;
			//檢測方塊下側移出去的部分是否有非0的格子
			for(int i=posy2;i<num;i++)
				for(int j=0;j<num;j++)
					if(allshape[type][dir][i][j]==1)
						return false;
		}
		
		//System.out.println("posx1:"+posx1+"\nposx2:"+posx2);
		//System.out.println("posy1:"+posy1+"\nposy2:"+posy2);
		
		//檢測交集的部分,方塊為1的地方,是否格子顏色為空		
		//此處的邏輯比較復雜,考慮清楚再寫!
		for(int i=posy1;i<posy2;i++)
			for(int j=posx1;j<posx2;j++)
				if(allshape[type][dir][i][j]==1 && grids[gridy+i][gridx+j]!=null)
					return false;
		return true;
	}
	
	/**
	 * 方塊的左移。
	 * @param grids 方框的各個格子的顏色。
	 * @return 返回是否左移成功。ture:成功。false:不成功。
	 */
	public boolean moveLeft(Color[][] grids){
		
		gridx--;
		boolean b = collide(grids);
		if(!b)
			gridx++;
		return b;
	}
	
	/**
	 * 方塊的右移。
	 * @param grids 方框的各個格子的顏色。
	 * @return 返回是否右移成功。ture:成功。false:不成功。
	 */
	public boolean moveRight(Color[][] grids){
		gridx++;
		boolean b = collide(grids);
		if(!b)
			gridx--;
		return b;
	}
	
	/**
	 * 方塊的下移。
	 * @param grids 方框的各個格子的顏色。
	 * @return 返回是否下移成功。ture:成功。false:不成功。
	 */
	public boolean moveDown(Color[][] grids){
		gridy++;
		boolean b = collide(grids);
		if(!b)
			gridy--;
		return b;
	}
	
	/**
	 * 變換方塊。
	 * @param dir 變換的方向。
	 * @param grids 方框的各個格子的顏色。
	 * @return 返回變換成功否。true:成功。false:不成功。
	 */
	public boolean changeDir(int dir,Color[][] grids){
		int xdir = this.dir;
		this.dir = dir;
		boolean b = collide(grids);
		if(!b)
			this.dir = xdir;
		return b;
	}
	
	/**
	 * 方塊的繪制。
	 * @param g 畫筆。
	 */
	public void panit(Graphics2D g){
		//System.out.println("type:"+type+"\ndir:"+dir);
		Color c = g.getColor();
		g.setColor(color);
		//g.drawRect(gridx*pixelWidth, gridy*pixelWidth, pixelWidth*4, pixelWidth*4);
		for(int i=0;i<num;i++)
			for(int j=0;j<num;j++)
				if(allshape[type][dir][i][j]!=0)
					g.fill3DRect((gridx+j)*pixelWidth, (gridy+i)*pixelWidth, pixelWidth, pixelWidth, true);
		g.setColor(c);
	}
	
	/**
	 * 小方塊的繪制。
	 * @param g 畫筆。
	 * @param n 縮小的倍數。
	 */
	public void panitSmall(Graphics2D g,int n,int x,int y){
		Color c = g.getColor();
		//System.out.println("x:"+x);
		g.setColor(color);
		for(int i=0;i<num;i++)
			for(int j=0;j<num;j++)
				if(allshape[type][dir][i][j]!=0)
					g.fill3DRect((x+j)*pixelWidth*n, (y+i)*pixelWidth*n, pixelWidth*n, pixelWidth*n, true);
		g.setColor(c);
	}

	public Color getColor() {
		return color;
	}

	public int getDir() {
		return dir;
	}

	public int getGridx() {
		return gridx;
	}

	public int getGridy() {
		return gridy;
	}

	public int getNum() {
		return num;
	}

	public int getType() {
		return type;
	}
	
	
	
//	/**
//	 * 判斷和左邊是否發生碰撞。簡單地說即是否允許左移。
//	 * @param grids 方框顏色。
//	 * @return 返回是否可以左移。ture:可以。false:不可以。
//	 */
//	public boolean collideWithLeft(Color[][] grids){
//		/** 格子的寬度 */
//		int width = grids.length;
//		/** 格子的高度 */
//		int height = grids[0].length;
//		/** 要比較方塊列的位置 */
//		int pos1 = 0;
//		/** 要比較格子列的位置 */
//		int pos2 = 0;
//		if(gridx > 0){
//			pos1 = 0;
//			pos2 = gridx - 1;
//		}else if(gridx + 2 >= 0){
//			pos1 = 1 - gridx;
//			pos2 = 0;
//		}else
//			return false;
//		//方塊的某一列與其旁邊即將發生碰撞。
//		for(int i=0;i<num;i++){
//			if(allshape[type][dir][i][pos1]==1 && grids[gridy+i][pos2]!=null)
//				return false;
//		}
//		return true;
//	}
//	
//	/**
//	 * 判斷和右邊是否發生碰撞。簡單地說即是否允許右移。
//	 * @param grids 方框顏色。
//	 * @return 返回是否可以右移。ture:可以。false:不可以。
//	 */
//	public boolean collideWithRight(Color[][] grids){
//		/** 格子的寬度 */
//		int width = grids.length;
//		/** 格子的高度 */
//		int height = grids[0].length;
//		/** 要比較方塊列的位置 */
//		int pos1 = 0;
//		/** 要比較格子列的位置 */
//		int pos2 = 0;
//		if(gridx + num < width){
//			pos1 = num - 1;
//			pos2 = gridx + num;
//		}else if(width - gridx - 2 >= 0){
//			pos1 = width - gridx -2;
//			pos2 = width - 1;
//		}else
//			return false;
//		//方塊的某一列與其旁邊即將發生碰撞。
//		for(int i=0;i<num;i++){
//			if(allshape[type][dir][i][pos1]==1 && grids[gridy+i][pos2]!=null)
//				return false;
//		}
//		return true;
//	}
//	
//	/**
//	 * 判斷和下邊是否發生碰撞。簡單地說即是否允許下移。
//	 * @param grids 方框顏色。
//	 * @return 返回是否可以下移。ture:可以。false:不可以。
//	 */
//	public boolean collideWithBottom(Color[][] grids){
//		/** 格子的寬度 */
//		int width = grids.length;
//		/** 格子的高度 */
//		int height = grids[0].length;
//		/** 要比較方塊行的位置 */
//		int pos1 = 0;
//		/** 要比較格子行的位置 */
//		int pos2 = 0;
//		if(gridy + num < height){
//			pos1 = num - 1;
//			pos2 = gridy + num;
//		}else if(height - gridy - 2 >= 0){
//			pos1 = width - gridy -2;
//			pos2 = height - 1;
//		}else
//			return false;
//		//方塊的某一列與其旁邊即將發生碰撞。
//		for(int i=0;i<num;i++){
//			if(allshape[type][dir][pos1][i]==1 && grids[pos2][gridx+i]!=null)
//				return false;
//		}
//		return true;
//	}
	
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美成人一区| 国产午夜精品美女毛片视频| 欧美一区二区三区播放老司机 | 蜜桃91丨九色丨蝌蚪91桃色| 国产精品一二三区| 欧美人牲a欧美精品| 中文字幕不卡在线播放| 日韩av午夜在线观看| 91美女片黄在线| 久久亚区不卡日本| 天天色图综合网| 91国偷自产一区二区开放时间 | 亚洲国产视频直播| 国产99久久久精品| 日韩美女在线视频| 亚洲成人在线免费| 99久久综合色| 国产日韩精品久久久| 日本午夜精品一区二区三区电影| 91麻豆国产在线观看| 国产欧美精品一区二区色综合| 日韩va亚洲va欧美va久久| 91福利小视频| 亚洲毛片av在线| av在线这里只有精品| 久久久久久99久久久精品网站| 青青草97国产精品免费观看| 欧洲视频一区二区| 亚洲精品videosex极品| 色悠悠亚洲一区二区| 中文字幕一区二区三区不卡| 国产精品夜夜爽| 久久精品亚洲国产奇米99| 激情五月激情综合网| 精品国产乱码91久久久久久网站| 日本午夜精品一区二区三区电影 | 亚洲精品免费电影| 日本高清无吗v一区| 亚洲女子a中天字幕| 色又黄又爽网站www久久| 亚洲免费在线看| 欧洲精品一区二区| 亚洲成人激情社区| 3d动漫精品啪啪一区二区竹菊| 亚洲成av人片| 日韩亚洲电影在线| 国产精品自拍一区| 久久久不卡影院| 亚洲愉拍自拍另类高清精品| 麻豆一区二区三区| 欧美性大战久久久久久久蜜臀| 日韩一区二区三区四区| 国产午夜精品一区二区三区嫩草| 日本一区二区视频在线观看| 国产精品一卡二卡| 国产精品卡一卡二| 色狠狠桃花综合| 婷婷丁香激情综合| 精品国产乱码久久久久久久久| 高清免费成人av| 亚洲视频一区二区免费在线观看| 91国偷自产一区二区开放时间 | 欧美一级一区二区| 国产成人免费网站| 中文在线免费一区三区高中清不卡| 成人av资源下载| 亚洲国产精品久久久久秋霞影院| 日韩欧美中文一区| 国产宾馆实践打屁股91| 有码一区二区三区| 欧美一级片在线观看| 成人性色生活片| 亚洲午夜久久久久久久久电影网 | 91精品国产综合久久久久久 | 精品成人免费观看| 色综合天天综合色综合av| 日韩黄色小视频| 国产视频在线观看一区二区三区| 日本久久电影网| 国内偷窥港台综合视频在线播放| 亚洲天堂精品视频| 精品国产髙清在线看国产毛片| www.欧美日韩| 久久精品国产澳门| 亚洲一区二区三区影院| 国产日韩欧美麻豆| 欧美二区乱c少妇| 99精品国产视频| 激情五月婷婷综合| 午夜成人免费电影| 亚洲日本护士毛茸茸| 日韩视频一区二区三区在线播放 | 国产精选一区二区三区| 亚洲图片欧美视频| 亚洲欧洲日产国产综合网| 日韩欧美123| 欧美妇女性影城| 91国产丝袜在线播放| 国产成人激情av| 免费精品视频在线| 天天综合日日夜夜精品| 亚洲女厕所小便bbb| 国产精品国产三级国产aⅴ原创| 欧美成人精品1314www| 亚洲国产成人午夜在线一区| 欧美久久久久久蜜桃| 欧美在线免费播放| 在线一区二区三区四区| caoporen国产精品视频| 成人av在线影院| 成人精品一区二区三区中文字幕| 国产精品一区在线观看乱码| 久久99精品网久久| 国产自产视频一区二区三区| 久草这里只有精品视频| 黄色资源网久久资源365| 久久不见久久见免费视频1| 日韩电影免费在线| 美日韩黄色大片| 激情五月激情综合网| 国产真实乱对白精彩久久| 日本免费在线视频不卡一不卡二 | 欧美无人高清视频在线观看| 北条麻妃一区二区三区| 国产九九视频一区二区三区| 日日摸夜夜添夜夜添精品视频 | 亚洲精品在线网站| 欧美日韩在线综合| 色狠狠色噜噜噜综合网| 欧美日本高清视频在线观看| 色婷婷av一区二区三区软件| 成人黄色网址在线观看| 成人小视频在线| 不卡一区二区三区四区| 成人一区二区视频| 99re亚洲国产精品| 色屁屁一区二区| 色婷婷综合久色| 欧美伊人久久久久久久久影院 | 日韩激情视频网站| 日本中文一区二区三区| 国产69精品一区二区亚洲孕妇| 国产精品亚洲午夜一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 成人a级免费电影| 91丨九色丨国产丨porny| k8久久久一区二区三区| 色婷婷国产精品综合在线观看| 在线亚洲一区二区| 欧美一区二区在线观看| 精品999在线播放| 国产精品美女久久久久aⅴ| 亚洲老司机在线| 午夜精品久久久久影视| 久久国产精品99精品国产| 国产在线不卡视频| 国产欧美精品一区二区三区四区 | 日韩免费一区二区| 欧美大黄免费观看| 国产无人区一区二区三区| 日本一区二区三区在线不卡| 中文字幕亚洲精品在线观看| 夜夜操天天操亚洲| 免费成人深夜小野草| 国产成人啪免费观看软件| 91看片淫黄大片一级| 欧美一级夜夜爽| 亚洲综合久久久| 久久精品理论片| 色综合视频在线观看| 51午夜精品国产| 亚洲欧美日韩久久精品| 捆绑调教一区二区三区| 99久久国产综合精品女不卡| 欧美一级爆毛片| 国产精品亲子乱子伦xxxx裸| 美女视频黄久久| 色哟哟一区二区三区| 26uuu国产在线精品一区二区| 中文字幕视频一区二区三区久| 精品一区二区三区在线观看国产 | 日韩经典一区二区| 国产夫妻精品视频| 欧美色电影在线| 国产精品午夜电影| 午夜久久福利影院| av亚洲产国偷v产偷v自拍| 日韩欧美中文字幕精品| 亚洲一区二区视频在线| 国产乱子伦视频一区二区三区| 777亚洲妇女| 亚洲精品视频在线| 懂色av一区二区夜夜嗨| 91精品国产手机| 日韩理论在线观看| 91影视在线播放| 中文字幕不卡的av| 国产在线一区观看| 色屁屁一区二区| 亚洲一级不卡视频|