java 小程序俄罗斯方块.docx_第1页
java 小程序俄罗斯方块.docx_第2页
java 小程序俄罗斯方块.docx_第3页
java 小程序俄罗斯方块.docx_第4页
java 小程序俄罗斯方块.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

package com.my.practice;import java.awt.Button;import java.awt.Canvas;import java.awt.Color;import java.awt.Dimension;import java.awt.Frame;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Insets;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;/俄罗斯块类 public class ERS_Block extends Frame public static boolean isPlay = false;public static int level = 1, score = 0;public static TextField scoreField, levelField;public static MyTimer timer;GameCanvas gameScr;public static void main(String argus) ERS_Block ers = new ERS_Block(俄罗斯块游戏 V1.0 Author:Vincent);WindowListener win_listener = new WinListener();ers.addWindowListener(win_listener);/ 俄罗斯块类构造ERS_Block(String title) super(title);setSize(600, 480);setLayout(new GridLayout(1, 2);gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);timer = new MyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);Panel rightScr = new Panel();rightScr.setLayout(new GridLayout(2, 1, 0, 30);rightScr.setSize(120, 500);add(rightScr);/ 右边信息窗体布局MyPanel infoScr = new MyPanel();infoScr.setLayout(new GridLayout(4, 1, 0, 5);infoScr.setSize(120, 300);rightScr.add(infoScr);/ 定义标签初始值Label scorep = new Label(数:, Label.LEFT);Label levelp = new Label(级数:, Label.LEFT);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(new Dimension(20, 60);scoreField.setSize(new Dimension(20, 60);levelp.setSize(new Dimension(20, 60);levelField.setSize(new Dimension(20, 60);scoreField.setText(0);levelField.setText(1);/ 右边控制按钮窗体布局MyPanel controlScr = new MyPanel();controlScr.setLayout(new GridLayout(5, 1, 0, 5);rightScr.add(controlScr);/ 定义按钮playButton play_b = new Button(开始游戏);play_b.setSize(new Dimension(50, 200);play_b.addActionListener(new Command(Command.button_play, gameScr);/ 定义按钮Level UPButton level_up_b = new Button(提高级数);level_up_b.setSize(new Dimension(50, 200);level_up_b.addActionListener(new Command(Command.button_levelup,gameScr);/ 定义按钮Level DownButton level_down_b = new Button(降低级数);level_down_b.setSize(new Dimension(50, 200);level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr);/ 定义按钮Level PauseButton pause_b = new Button(游戏暂停);pause_b.setSize(new Dimension(50, 200);pause_b.addActionListener(new Command(Command.button_pause, gameScr);/ 定义按钮QuitButton quit_b = new Button(退游戏);quit_b.setSize(new Dimension(50, 200);quit_b.addActionListener(new Command(Command.button_quit, 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();/ 重写MyPanel类使Panel四周留空间class MyPanel extends Panel public Insets getInsets() return new Insets(30, 50, 30, 50);/ 游戏画布类class GameCanvas extends Canvas implements KeyListener final int unitSize = 30; / 块边int rowNum; / 格行数int columnNum; / 格列数int maxAllowRowNum; / 允许少行未削int blockInitRow; / 新现块起始行坐标int blockInitCol; / 新现块起始列坐标int scrArr; / 屏幕数组Block b; / 快引用/ 画布类构造GameCanvas() rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum - 2;b = new Block(this);blockInitRow = rowNum - 1;blockInitCol = columnNum / 2 - 2;scrArr = new int3232;/ 初始化屏幕并屏幕数组清零void initScr() for (int i = 0; i rowNum; i+)for (int j = 0; j columnNum; j+)scrArrij = 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, scrArrij);/ 画块public void drawUnit(int row,int col,int type) scrArrrowcol = 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.magenta);break; /画已经落 ; g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true); g.dispose(); public Block getBlock() return b; / 返block实例引用/ 返屏幕数组(row,col)位置属性值public int getScrArrXY(int row, int col) if (row = rowNum | col = columnNum)return (-1);elsereturn (scrArrrowcol);/ 返新块初始行坐标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;L1: for (int j = 0; j columnNum; j+)if (scrArrij = 0) k+;isfull = false;break L1;if (isfull)full_line_num+;if (k != 0 & k - 1 != i & !isfull)for (int j = 0; j columnNum; j+) if (scrArrij = 0)drawUnit(k - 1, j, 0);elsedrawUnit(k - 1, j, 2);scrArrk - 1j = scrArrij;for (int i = k - 1; i rowNum; i+) for (int j = 0; j columnNum; j+) drawUnit(i, j, 0);scrArrij = 0;ERS_Block.score += full_line_num;ERS_Block.scoreField.setText( + ERS_Block.score);/ 判断游戏否结束boolean isGameEnd() for (int col = 0; col columnNum; col+) if (scrArrmaxAllowRowNumcol != 0)return true;return false;public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) / 处理键盘输入public void keyPressed(KeyEvent e) if(!ERS_Block.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; / 处理控制类class 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; / 前按钮GameCanvas scr;/ 控制按钮类构造Command(int button, GameCanvas scr) curButton = button;this.scr = scr;/ 按钮执行public void actionPerformed (ActionEvent e) switch(curButton) case button_play:if(!ERS_Block.isPlay) scr.initScr(); ERS_Block.isPlay = true; ERS_Block.score = 0; ERS_Block.scoreField.setText(0); ERS_Block.timer.resume(); scr.requestFocus(); break; case button_levelup:if(ERS_Block.level 1) ERS_Block.level-; ERS_Block.levelField.setText(+ERS_Block.level); ERS_Block.score = 0; ERS_Block.scoreField.setText(+ERS_Block.score); scr.requestFocus(); break; case button_pause:if(pause_resume) ERS_Block.timer.suspend(); pause_resume = false; else ERS_Block.timer.resume(); pause_resume = true; scr.requestFocus(); break; case button_quit:System.exit(0); / 块类class Block static int pattern = 0x0f00, 0x4444, 0x0f00, 0x4444 ,/ 用十六进至表示本行表示条四种状态 0x04e0, 0x0464, 0x00e4, 0x04c4 , 0x4620, 0x6c00, 0x4620, 0x6c00 , 0x2640, 0xc600, 0x2640, 0xc600 , 0x6220, 0x1700, 0x2230, 0x0740 , 0x6440, 0x0e20, 0x44c0, 0x8e00 , 0x0660, 0x0660, 0x0660, 0x0660 ;int blockType; / 块模式号(0-6)int turnState; / 块翻转状态(0-3)int blockState; / 快落状态int row, col; / 块画布坐标GameCanvas scr;/ 块类构造Block(GameCanvas scr) this.scr = scr;blockType = (int) (Math.random() * 1000) % 7;turnState = (int) (Math.random() * 1000) % 4;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();/ 重新初始化块并显示新块public void reset() blockType = (int) (Math.random() * 1000) % 7;turnState = (int) (Math.random() * 1000) % 4;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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论