欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java编写俄罗斯方块,java俄罗斯方块,Game_Box.jav

来源: javaer 分享于  点击 28015 次 点评:18

java编写俄罗斯方块,java俄罗斯方块,Game_Box.jav


Game_Box.java//方块类public class Game_Box{static int[][] pattern = {{ 0x0f00, 0x4444, 0x0f00, 0x4444 },// 长条形{ 0x04e0, 0x0464, 0x00e4, 0x04c4 },//T型{ 0x4620, 0x6c00, 0x4620, 0x6c00 },//右Z型{ 0x2640, 0xc600, 0x2640, 0xc600 },//Z型{ 0x6220, 0x1700, 0x2230, 0x0740 },//L型{ 0x6440, 0x0e20, 0x44c0, 0x8e00 },//左L型{ 0x0660, 0x0660, 0x0660, 0x0660 }  //田字形};int blockType; // 块的模式号(0-6)int turnState; // 块的翻转状态(0-3)int blockState; // 块的下落状态int row;//行int col;//列Game_Draw scr; //声明类型// 块类的构造方法Game_Box(Game_Draw game_scr) {this.scr = game_scr;blockType =(int)(Math.random()*7);//turnState = (int) Math.random()*3 ;blockState = 1;row = game_scr.getInitRow();col = game_scr.getInitCol();}// 重新初始化块,并显示新块public void reset() {blockType = (int)(Math.random()*7) ;//随机从7中生成一中方块//turnState = (int) (Math.random()*3) ;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();dispBlock(1);}// 实现“块”翻转的方法public void leftTurn() {if (assertValid(blockType, (turnState + 1) % 4, row, col)) {dispBlock(0);turnState = (turnState + 1) % 4;dispBlock(1);}}// 实现“块”的左移的方法public void leftMove() {if (assertValid(blockType, turnState, row, col - 1)) {dispBlock(0);col--;dispBlock(1);}}// 实现块的右移public void rightMove() {if (assertValid(blockType, turnState, row, col + 1)) {dispBlock(0);col++;dispBlock(1);}}// 实现块落下的操作的方法public boolean fallDown() {if (blockState == 2)return false;if (assertValid(blockType, turnState, row - 1, col)) {dispBlock(0);row--;dispBlock(1);return (true);} else {blockState = 2;dispBlock(2);return false;}}// 判断是否正确的方法boolean assertValid(int t, int s, int row, int col) {int k =0x8000;for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if ((int) (pattern[t][s] &amp; k) != 0) {int temp = scr.getScrArrXY(row - i, col + j);if (temp < 0 || temp == 2)return false;}k = k/2;}}return true;}// 同步显示的方法public synchronized void dispBlock(int s) {int k =0x8000;System.out.println((int) pattern[blockType][turnState]);for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if (((int) pattern[blockType][turnState] &amp; k) != 0) {scr.drawUnit(row - i, col + j, s);}k = k /2;}}}}Game_Command.javaimport java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Game_Command implements ActionListener {static final int button_play = 1; // 给按钮分配编号static final int button_levelup = 2;static final int button_leveldown = 3;static final int button_quit = 4;static final int button_pause = 5;static boolean pause_resume = true;int curButton; // 当前按钮Game_Draw scr;// 控制按钮类的构造方法Game_Command(int button, Game_Draw scr) {curButton = button;this.scr = scr;}// 按钮执行方法public void actionPerformed(ActionEvent e) {switch (curButton) {case 1:if (!Game_Layout.isPlay) {scr.initScr();Game_Layout.isPlay = true;Game_Layout.score = 0;Game_Layout.scoreField.setText("0");Game_Layout.timer.resume();}scr.requestFocus();break;case 2:if (Game_Layout.level < 10) {Game_Layout.level++;Game_Layout.levelField.setText("" + Game_Layout.level);Game_Layout.score = 0;Game_Layout.scoreField.setText("" + Game_Layout.score);}scr.requestFocus();break;case 3:if (Game_Layout.level > 1) {Game_Layout.level--;Game_Layout.levelField.setText("" + Game_Layout.level);Game_Layout.score = 0;Game_Layout.scoreField.setText("" + Game_Layout.score);}scr.requestFocus();break;case 4:System.exit(0);}}}Game_Draw.javaimport java.awt.Canvas;import java.awt.Color;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;public class Game_Draw extends Canvas implements KeyListener{final int unitSize = 30; // 小方块边长int rowNum; // 正方格的行数int columnNum; // 正方格的列数int maxAllowRowNum; // 允许有多少行未削int blockInitRow; // 新出现块的起始行坐标int blockInitCol; // 新出现块的起始列坐标int[][] scrArr; // 屏幕数组Game_Box b=new Game_Box(this); // 对方快的引用Game_MyTimer time;// 画布类的构造方法Game_Draw() {rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum - 2;blockInitRow = rowNum ;blockInitCol = columnNum -7;scrArr = new int[32][32];}// 初始化屏幕,并将屏幕数组清零的方法public void initScr() {for (int i = 0; i < rowNum; i++)for (int j = 0; j < columnNum; j++)scrArr[i][j] = 0;b.reset();repaint();}// 重新刷新画布方法public void paint(Graphics g) {for (int i = 0; i < rowNum; i++)for (int j = 0; j < columnNum; j++)drawUnit(i, j, scrArr[i][j]);}// 画方块的方法public void drawUnit(int row, int col, int type) {     System.out.println(getSize().height);scrArr[row][col] = type;Graphics g = getGraphics();switch (type) { // 表示画方快的方法case 0:g.setColor(Color.BLACK);break; // 以背景为颜色画case 1:g.setColor(Color.blue);break; // 画正在下落的方块case 2:g.setColor(Color.GRAY);break; // 画已经落下的方法}g.fill3DRect(col * unitSize, getSize().height - (row + 1) * unitSize,unitSize, unitSize, true);g.dispose();}public Game_Box getBlock() {return b; // 返回block实例的引用}// 返回屏幕数组中(row,col)位置的属性值public int getScrArrXY(int row, int col) {if (row < 0 || row >= rowNum || col < 0 || col >= columnNum)return (-1);elsereturn (scrArr[row][col]);}// 返回新块的初始行坐标方法public int getInitRow() {return (blockInitRow); // 返回新块的初始行坐标}// 返回新块的初始列坐标方法public int getInitCol() {return (blockInitCol); // 返回新块的初始列坐标}// 满行删除方法void deleteFullLine() {int full_line_num = 0;int k = 0;for (int i = 0; i < rowNum; i++) {boolean isfull = true;for (int j = 0; j < columnNum; j++)if (scrArr[i][j] == 0) {k++;isfull = false;break ;}if (isfull)full_line_num+=100;if (k != 0 &amp;&amp; k - 1 != i &amp;&amp; !isfull)for (int j = 0; j < columnNum; j++) {if (scrArr[i][j] == 0)drawUnit(k - 1, j, 0);elsedrawUnit(k - 1, j, 2);scrArr[k - 1][j] = scrArr[i][j];}}for (int i = k - 1; i < rowNum; i++) {for (int j = 0; j < columnNum; j++) {drawUnit(i, j, 0);scrArr[i][j] = 0;}}Game_Layout.score += full_line_num;Game_Layout.scoreField.setText("" + Game_Layout.score);}// 判断游戏是否结束方法boolean isGameEnd() {for (int col = 0; col < columnNum; col++) {if (scrArr[maxAllowRowNum][col] != 0)return true;}return false;}public void keyTyped(KeyEvent e) {}public void keyReleased(KeyEvent e) {}// 处理键盘输入的方法public void keyPressed(KeyEvent e) {//boolean T=true;if (!Game_Layout.isPlay)return;switch (e.getKeyCode()) {case KeyEvent.VK_DOWN:b.fallDown();break;case KeyEvent.VK_LEFT:b.leftMove();break;case KeyEvent.VK_RIGHT:b.rightMove();break;case KeyEvent.VK_SPACE:b.leftTurn();break;}}}Game_Layout.javaimport java.awt.Button;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.event.WindowListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;public class Game_Layout extends JFrame {public static int level = 1;public static int score = 0;public static TextField scoreField;public static TextField levelField;public static boolean isPlay = false;public static Game_MyTimer timer;Game_Draw gameScr=new Game_Draw();//实例主屏// 俄罗斯方块类的构造方法Game_Layout() {setTitle("俄罗斯方块");setSize(620, 480);setLayout(new GridLayout(1, 2));//整体分为两个部分gameScr.addKeyListener(gameScr);//就收键盘监听,监听的内容是游戏主界面timer = new Game_MyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);JPanel rightScr = new JPanel();rightScr.setLayout(new GridLayout(2, 1, 0,0));//rightScr.setSize(120, 480);//LeftScr.setSize(1000, 40);add(rightScr);//add(LeftScr);// 右边信息窗体的布局Game_MyPanel infoScr = new Game_MyPanel();infoScr.setLayout(new GridLayout(4, 1, 0, 0));//4行一列 水平0 垂直5//infoScr.setSize(120, 300);rightScr.add(infoScr);// 定义标签和初始值JLabel scorep = new JLabel("分数:");JLabel levelp = new JLabel("级数:");scoreField = new TextField(8);//定义文本长度levelField = new TextField(8);scoreField.setEditable(false);//文本不可以编辑levelField.setEditable(false);infoScr.add(scorep);infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);//scorep.setSize(10,10);//scoreField.setSize(new Dimension(20, 60));//levelp.setSize(new Dimension(20, 60));//levelField.setSize(new Dimension(20, 60));scoreField.setText("0");levelField.setText("1");// 右边控制按钮窗体的布局Game_MyPanel controlScr = new Game_MyPanel(); //控制面板controlScr.setLayout(new GridLayout(4, 1, 0, 10));//5行 1列 水平间隔为0 垂直为 5rightScr.add(controlScr);// 定义按钮playJButton play_b = new JButton("开始游戏");//play_b.setSize(new Dimension(50, 20));play_b.addActionListener(new Game_Command(1, gameScr));// 定义按钮Level UPJButton level_up_b = new JButton("提高级数");level_up_b.addActionListener(new Game_Command(2,gameScr));// 定义按钮Level DownJButton level_down_b = new JButton("降低级数");level_down_b.addActionListener(new Game_Command(3,gameScr));// 定义按钮QuitJButton quit_b = new JButton("退出游戏");quit_b.addActionListener(new Game_Command(4, gameScr));controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);//controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();}}Game_MyPanel.javaimport java.awt.Insets;import java.awt.Panel;class Game_MyPanel extends Panel {public Insets getInsets() {return new Insets(30, 60, 30, 60);//顶 左 底 右}}Game_MyTime.javapublic class Game_MyTimer extends Thread{Game_Draw scr;public Game_MyTimer(Game_Draw scr) {this.scr = scr;}public void run() {while (true) {try {sleep((10 - Game_Layout.level + 1) * 100);} catch (InterruptedException e) {}if (!scr.getBlock().fallDown()) {scr.deleteFullLine();if (scr.isGameEnd()) {Game_Layout.isPlay = false;stop();} elsescr.getBlock().reset();}}}}Game_Main.javapublic class Game_Main {public static void main(String args[]){Game_Layout ers = new Game_Layout();}}
相关栏目:

用户点评