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

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

?? tetris.java

?? 俄羅斯方塊java源代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/**
 * <p>Title: 俄羅斯方塊</p>
 *
 * <p>Description: Just have for fun</p> 
 *
 * @author: argentmoon
 * @version 1.1
 */
package game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*; 
import java.lang.*;
import javax.swing.event.*;

public class Tetris extends JFrame implements KeyListener, Runnable{	
	//Menu and Item
	private JMenuBar bar;
	private JMenu fileMenu, speedMenu, directionMenu, helpMenu;
	private JMenuItem newGame, pause, exit, about;
	private JRadioButtonMenuItem speedButton[], clockwise, anticlockwise;
	private ButtonGroup speedGroup, directionGroup;
	
	//game status
	private final int PLAY = 1, PAUSE = 2, STOP = 3, TOBEGIN = 4, OVER = 5;
	private int speed, gameStatus, score, beginSpeed;
	private JLabel statusLabel;	
	
	//information of block and grid
	private final int gridSize = 18;
	private final int horizontalGameBlocks = 10, horizontalStauesBlocks = 5,
					verticalBlocks = 20;
	private final int TOP = 52, LEFT = 3;	
	
	//the game tabel
	private boolean table[][];
	private Point blockPos[][];
	
	//game information
	private int direction;
	private final int XMAX = horizontalGameBlocks - 1, YMAX = verticalBlocks - 1;
	private int currentShape[][][], nextShape[][][];
	private int currentStatus, nextStatus, tmpStatus;
	private int currentX, currentY, nextX, nextY, points;
	private boolean canMoveDown;
					
	//about information
	final String aboutString = 
		"Developed by argentmoon\nEmail to: argentmoon@gmail.com\nVersion 1.1";
	
	public Tetris(){
		super("Tetris");
		
		bar = new JMenuBar();
		setJMenuBar(bar);
		fileMenu = new JMenu("File");
		fileMenu.setMnemonic('F');
		bar.add(fileMenu);		
		speedMenu = new JMenu("Speed");
		speedMenu.setMnemonic('S');	
		directionMenu = new JMenu("Direction");
		directionMenu.setMnemonic('D');	
		bar.add(directionMenu);
		bar.add(speedMenu);
		helpMenu = new JMenu("Help");
		helpMenu.setMnemonic('H');
		bar.add(helpMenu);
		
		newGame = new JMenuItem("New Game");
		newGame.setMnemonic('N');
		fileMenu.add(newGame);
		newGame.addActionListener(
			new ActionListener(){			
				public void actionPerformed(ActionEvent event){
					gameStatus = TOBEGIN;
					changeStatus();	
					init();
					repaint();
				}
			}
		);
		
		pause = new JMenuItem("Pause");
		pause.setMnemonic('P');
		fileMenu.add(pause);
		pause.addActionListener(
			new ActionListener(){			
				public void actionPerformed(ActionEvent event){				
					if(PLAY == gameStatus)
						gameStatus = PAUSE;
					else if(PAUSE == gameStatus || TOBEGIN == gameStatus)
						gameStatus = PLAY;					
					changeStatus();		
					repaint();			
				}
			}
		);
		
		
		exit = new JMenuItem("Exit");
		exit.setMnemonic('x');
		fileMenu.add(exit);
		exit.addActionListener(
			new ActionListener(){			
				public void actionPerformed(ActionEvent event){
					System.exit(0);
				}
			}
		);
		
				
		speedButton = new JRadioButtonMenuItem[9];
		speedGroup = new ButtonGroup();
		for(int i = 0; i < speedButton.length; i++){
			speedButton[i] = new JRadioButtonMenuItem("speed " + (i + 1));		
			speedMenu.add(speedButton[i]);
			speedGroup.add(speedButton[i]);
			speedButton[i].addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent event){
						for(int j = 0; j < speedButton.length; j++){
							if(speedButton[j].isSelected())
								beginSpeed = speed = j + 1;
						}
						repaint();
					}
				}
			);
		}
		
		directionGroup = new ButtonGroup();
		
		clockwise = new JRadioButtonMenuItem("Clockwise");
		clockwise.setMnemonic('C');
		directionMenu.add(clockwise);
		directionGroup.add(clockwise);
		clockwise.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					if(clockwise.isSelected())
						direction = 1;
					repaint();
				}
			}
		);
		
		anticlockwise = new JRadioButtonMenuItem("Anticlockwise");
		anticlockwise.setMnemonic('A');
		directionMenu.add(anticlockwise);
		directionGroup.add(anticlockwise);
		anticlockwise.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					if(anticlockwise.isSelected())
						direction = -1;
					repaint();
				}
			}
		);
		
		about = new JMenuItem("About");
		about.setMnemonic('A');
		helpMenu.add(about);
		about.addActionListener(
			new ActionListener(){					
				public void actionPerformed(ActionEvent event){
					repaint();						
					JOptionPane.showMessageDialog(null, aboutString, "About", 
						JOptionPane.INFORMATION_MESSAGE);						
				}				
			}			
		);	
		
		//the postion of every block in the table;
		blockPos = new Point[verticalBlocks][horizontalGameBlocks];
		for(int i = 0; i < horizontalGameBlocks; i++)
			blockPos[verticalBlocks - 1][i] = new Point(LEFT + i * gridSize, TOP);			
		for(int i = verticalBlocks - 2; i >= 0; i--){
			for(int j = 0; j < horizontalGameBlocks; j++){
				blockPos[i][j] = new Point();
				blockPos[i][j].x = blockPos[i + 1][j].x;
				blockPos[i][j].y = blockPos[i + 1][j].y + gridSize;			
			}
		}
			
		//init			
		beginSpeed = speed = 1;
		gameStatus = STOP;
		direction = 1;		
		
		getContentPane().setBackground(Color.gray);
		
		statusLabel = new JLabel();
		getContentPane().add(statusLabel, BorderLayout.SOUTH);
		statusLabel.setText("Get ready to begin!");
		statusLabel.setBackground(Color.white);
		statusLabel.setOpaque(true);
		
		addKeyListener(this);
		setSize(gridSize * (horizontalGameBlocks + horizontalStauesBlocks) + 4, 
					gridSize * (verticalBlocks) + 72);					
		setResizable(false);
		setVisible(true);		
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
		setLocation((int)(screenSize.getWidth()/3),
				(int)(screenSize.getHeight()/4));	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//let the thread begin
		Thread game = new Thread(this);
		game.start();
	
	}
	
	public void init(){
		gameStatus = TOBEGIN;
		score = 0; 
		canMoveDown = true;
		//at first,there are none of the blocks filled
		table = new boolean[verticalBlocks][horizontalGameBlocks];		
		for(int i = verticalBlocks - 1; i >= 0; i--)
			for(int j = 0; j < horizontalGameBlocks; j++)
				table[i][j] = false;		
		
		getPreBlock();
		getNextBlock();			
		
	}
			
	
	public boolean getNextBlock(){
		//copy preBlock to currentBlock
		currentX = nextX;
		currentY = nextY;
		currentShape = nextShape;		
		currentStatus = nextStatus;
		
		//get a new PreBlock and repaint it	
		getPreBlock(); 	
		repaint(gridSize * horizontalGameBlocks + 5, 
					gridSize * (verticalBlocks - 20) + 72,					
					gridSize * 5, gridSize * 5);
		for(int i = 0; i < currentShape.length; i++){
			if(table[getY(i)][getX(i)])
				return false;
		}
		return true;
	}
	
	public void getPreBlock(){	
		int i;
		nextStatus = (int) (Math.random() * BlockShape.blockShape.length);
		nextShape = new int [BlockShape.blockShape[nextStatus].length][4][2];
		System.arraycopy(BlockShape.blockShape[nextStatus], 0, nextShape, 0, 
				BlockShape.blockShape[nextStatus].length);	
				
		nextStatus = (int) (Math.random() * nextShape.length);
		
		//set the new block top
		int top = 0;	
		for(i = 0; i < nextShape[nextStatus].length; i++)
			if(nextShape[nextStatus][i][1] > top)
				top = nextShape[nextStatus][i][1];
		nextY = YMAX - top;
		nextX = 3;		
		for(i = 0; i < nextShape[nextStatus].length; i++)
			if(nextShape[nextStatus][i][1] + nextY + 1 > YMAX)
				break;
		if(i >= nextShape[nextStatus].length) nextY++;
	}
	
	public void moveRight(){
		int i;
		for(i = 0; i < currentShape[currentStatus].length; i++)
			if(getX(i) + 1 > XMAX ||
				table[getY(i)][getX(i) + 1]
			)
				break;
		if(i >= currentShape[currentStatus].length){		
			currentX++;
			for(i = 0; i < currentShape[currentStatus].length; i++){
				repaint(blockPos[getY(i)][getX(i)].x, blockPos[getY(i)][getX(i)].y,
							gridSize, gridSize);
				repaint(blockPos[getY(i)][getX(i) - 1].x, blockPos[getY(i)][getX(i) - 1].y,
						gridSize, gridSize);
			}
		}else
			canMoveDown = true;
	}
	
	public void moveLeft(){
		int i;
		for(i = 0; i < currentShape[currentStatus].length; i++)
			if(getX(i) - 1 < 0 ||
				table[getY(i)][getX(i) - 1]
			)
				break;
		if(i >= currentShape[currentStatus].length){		
			currentX--;
			for(i = 0; i < currentShape[currentStatus].length; i++){
				repaint(blockPos[getY(i)][getX(i)].x, blockPos[getY(i)][getX(i)].y,
							gridSize, gridSize);
				repaint(blockPos[getY(i)][getX(i) + 1].x, blockPos[getY(i)][getX(i) + 1].y,
						gridSize, gridSize);
			}
		}else
			canMoveDown = true;
	}
	
	public boolean moveDown(){
		int i;
		for(i = 0; i < currentShape[currentStatus].length; i++)
			if(getY(i) - 1 < 0 ||
				table[getY(i) - 1][getX(i)]
			)
				return false;
		currentY--;
		for(i = 0; i < currentShape[currentStatus].length; i++){
			repaint(blockPos[getY(i) + 1][getX(i)].x, blockPos[getY(i) + 1][getX(i)].y,
						gridSize, gridSize);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久夜甘婷婷 | 欧美不卡123| 欧美日韩免费电影| 91麻豆精品91久久久久同性| 6080午夜不卡| 欧美成人精品福利| 久久精品日产第一区二区三区高清版 | 亚洲男同1069视频| 亚洲精品视频自拍| 亚洲一二三专区| 亚洲成人777| 日本伊人色综合网| 国产一区二区看久久| 成人综合婷婷国产精品久久蜜臀| 国产999精品久久久久久| 91视频免费看| 日韩一区二区影院| 欧美日韩国产在线播放网站| 26uuu另类欧美亚洲曰本| 亚洲人成网站影音先锋播放| 久久成人免费网站| 欧美日韩亚洲另类| 中文成人av在线| 毛片av一区二区三区| 在线国产电影不卡| 亚洲色图视频网站| 国产激情一区二区三区| 日韩一区二区在线看| 亚洲成人一区在线| 91香蕉视频mp4| 国产精品国产三级国产三级人妇 | 欧美精品久久久久久久多人混战 | 国产亚洲精品久| 另类小说图片综合网| 欧美日韩成人综合天天影院 | 色中色一区二区| 亚洲天堂久久久久久久| www.亚洲激情.com| 国产精品的网站| 91视频com| 欧美亚洲综合在线| 亚洲电影第三页| 日韩一区二区在线观看视频播放 | 99视频精品在线| 亚洲一区二区三区在线播放| 日韩极品在线观看| 99综合电影在线视频| 91在线观看成人| 日韩伦理电影网| 欧美三级电影精品| 狠狠色丁香九九婷婷综合五月| 91网站最新网址| 国产精品无人区| 中文字幕av资源一区| 久久久久综合网| 国产精品免费视频网站| 国产精品国产三级国产aⅴ中文| 国产日产精品一区| 欧美激情一区二区三区全黄| 在线成人小视频| 风间由美一区二区av101| 一区在线播放视频| 精品欧美乱码久久久久久| 成人免费视频视频在线观看免费 | 777亚洲妇女| 午夜精品一区二区三区免费视频| 久久女同性恋中文字幕| 粉嫩在线一区二区三区视频| 国产精品一区二区视频| 国产日韩欧美一区二区三区乱码| 国产精品人妖ts系列视频| 九色|91porny| 欧美精品成人一区二区三区四区| 亚洲成av人片一区二区三区| 日韩三级视频在线看| 日本特黄久久久高潮| 中文字幕 久热精品 视频在线| 在线播放视频一区| 不卡视频在线观看| 国模少妇一区二区三区| 日韩中文字幕不卡| 亚洲男人都懂的| 国产精品久久久久久久久免费樱桃| 日韩一区在线看| 中文字幕永久在线不卡| 精品嫩草影院久久| 日韩女优毛片在线| 精品三级av在线| 欧美夫妻性生活| 日韩欧美在线网站| 日韩午夜av电影| 在线不卡一区二区| 欧美疯狂做受xxxx富婆| 欧美福利电影网| 欧美精品18+| 欧美酷刑日本凌虐凌虐| 欧美无砖砖区免费| 欧美高清视频www夜色资源网| 欧美日韩在线电影| 日韩精品综合一本久道在线视频| 日韩女优毛片在线| 国产精品青草综合久久久久99| 欧美国产日产图区| 亚洲精选免费视频| 亚洲成人在线免费| 蜜臀a∨国产成人精品| 狠狠狠色丁香婷婷综合激情| 国产精华液一区二区三区| 国产精品亚洲人在线观看| 成年人网站91| 337p亚洲精品色噜噜狠狠| 精品国产三级a在线观看| 亚洲欧洲精品一区二区精品久久久| 亚洲色图在线视频| 日本不卡123| 国产精品99久久久久久有的能看| 一本久道久久综合中文字幕| 欧美伊人精品成人久久综合97 | 91视频免费观看| 777色狠狠一区二区三区| 国产精品久久一级| 午夜精品福利一区二区三区蜜桃| 国产乱码精品一区二区三区av | 久久精品这里都是精品| 亚洲成人免费看| 在线一区二区视频| 日本一区二区三级电影在线观看 | 成人99免费视频| 久久久影视传媒| 久久国产精品无码网站| 欧美肥妇free| 亚洲一区二区黄色| 日本道免费精品一区二区三区| 亚洲欧美一区二区三区孕妇| 成人禁用看黄a在线| 一色屋精品亚洲香蕉网站| 国产成人h网站| 国产精品久久久久久久久免费丝袜| 精品一区二区三区在线播放视频 | 亚洲一区欧美一区| 不卡的av中国片| 亚洲日本护士毛茸茸| 97se亚洲国产综合自在线| 一区二区三区电影在线播| 欧美视频在线播放| 日韩制服丝袜av| 久久久久久久久久久久久女国产乱 | 亚洲欧美另类综合偷拍| 99久久国产综合精品色伊| 亚洲欧美日韩中文播放 | 亚洲精品久久久蜜桃| 日本二三区不卡| 首页综合国产亚洲丝袜| 精品少妇一区二区三区免费观看 | 久久综合色婷婷| 在线免费观看不卡av| 狠狠色丁香婷综合久久| 国产精品国产三级国产普通话99 | 日韩精品一二区| 国产三级精品三级在线专区| 色呦呦日韩精品| 成人免费看的视频| 亚洲电影一级片| 国产精品免费aⅴ片在线观看| 欧美日韩免费视频| 成人激情免费网站| 久久99久久99| 日本成人中文字幕在线视频| 中文字幕日本不卡| 国产日韩一级二级三级| 制服丝袜中文字幕亚洲| 在线国产电影不卡| k8久久久一区二区三区| 欧美色图免费看| 欧美午夜精品电影| 717成人午夜免费福利电影| 欧美性猛交xxxxxx富婆| 丁香啪啪综合成人亚洲小说 | 日本电影亚洲天堂一区| 成人av在线网站| 高清不卡在线观看av| 国产福利电影一区二区三区| 韩国女主播成人在线观看| 卡一卡二国产精品 | 91精品国产综合久久婷婷香蕉 | 日本一区二区三区久久久久久久久不 | 国产成人免费网站| 成人动漫中文字幕| 色综合久久中文字幕| 欧美一级欧美一级在线播放| 亚洲精品一区二区三区四区高清| 国产拍欧美日韩视频二区| 亚洲色图欧洲色图| 国产一区二区三区四 | 亚洲欧美日韩系列| 久久精品国产一区二区| 色婷婷一区二区三区四区| 欧美变态tickle挠乳网站| 亚洲精品视频在线| 国产乱国产乱300精品|