JAVA俄罗斯方块实验报告_第1页
JAVA俄罗斯方块实验报告_第2页
JAVA俄罗斯方块实验报告_第3页
JAVA俄罗斯方块实验报告_第4页
JAVA俄罗斯方块实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、目录一需求分析错误!未定义书签二系统运行环境 2系统功能需求描述: 2四总体设计 2五系统结构图 3六程序模块设计 3七、实验总结体会 15需求分析在个人电脑日益普及的今天, 一些有趣的桌面游戏已经成为人们在使用计算机进行工作 或学习之余休闲娱乐的首选, 而俄罗斯方块游戏是人们最熟悉的小游戏之一, 它以其趣味性 强,易上手等诸多特点得到了大众的认可, 因此开发此游戏软件可满足人们的一些娱乐的需 求。此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的, 界面美观的, 易于控 制的俄罗斯方块游戏。二系统运行环境操作系统选择 Windows XP 版本,运行环境选择 MyEclipse三系统

2、功能需求描述俄罗斯方块游戏是一款适合大众的游戏软件, 它适合不同年龄的人玩。 本软件要实现的 功能如下:1. 游戏区:玩家可以在游戏区中堆积方块, 并能够在游戏过程中随时了解得分情 况。2. 游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏, 暂停或退出 游戏。3. 级别设置:玩家可以根据自己的需要自行设定游戏的开始级别, 级别越高,游 戏速度越快,难度越大。四总体设计游戏中玩家可以做的操作有:1. 以 90 度为单位旋转方每一格块。2. 以格子为单位左右移动方块,让方块加速落下。3. 方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处, 而新的随机图形会出现在区域上方开

3、始落下。4. 当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的 得分。同时删除的列数越多,得分指数上升。5. 当固定的方块堆到区域最上方,则游戏结束五系统结构图六程序模块设计6.1用户界面设计开始游戏6.2程序代码设计package russia;import java.awt.*;import java.awt.eve nt.*;/俄罗斯方块类class ERS_Block exte nds Frame/*/private static fin al l ong serialVersi onUID = 1L;public static boolea n isPlay=fal

4、se;public static int level=1,score=0;public static TextField scoreField,levelField;public static MyTimer timer;GameCa nvas gameScr;public static void main( Stri ng argus)ERS_Block ers = new ERS_Block(俄罗斯方块游戏 V1.0 Author:Vi nee nt);Win dowListe ner winiste ner = new Win Liste ner();ers.addWi ndowList

5、e ner(winiste ner);/俄罗斯方块类的构造方法SuppressWar nin gs(deprecati on)ERS_Block(Stri ng 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(gam

6、eScr);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(分数 :,Labe

7、l.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);

8、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

9、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);

10、 / 定义按钮 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 Co

11、mmand(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); control

12、Scr.add(quit_b);setVisible(true); gameScr.requestFocus();/ 重写 MyPanel 类,使 Panel 的四周留空间 class MyPanel extends Panel/*/private static final long serialVersionUID = 1L; public Insets getInsets() return new Insets(30,50,30,50);/ 游戏画布类class GameCanvas extends Canvas implements KeyListener /*/private stat

13、ic final long serialVersionUID = 1L; final int unitSize = 30; /小方块边长int rowNum; / 正方格的行数 int columnNum; /正方格的列数int maxAllowRowNum; / 允许有多少行未削int blockInitRow; /新出现块的起始行坐标int blockInitCol; / 新出现块的起始列坐标 int scrArr; /屏幕数组Block b; / 对方快的引用/ 画布类的构造方法GameCanvas() rowNum = 15; columnNum = 10;maxAllowRowNum

14、 = rowNum - 2;b = new Block(this); blockInitRow = rowNum - 1; blockInitCol = columnNum/2 - 2; scrArr = new int 3232;/ 初始化屏幕,并将屏幕数组清零的方法 void initScr() for(int i=0;irowNum;i+) for (int j=0; jcolumnNum;j+) scrArrij=0; b.reset();repaint();/ 重新刷新画布方法public void paint(Graphics g) for(int i = 0; i rowNum;

15、 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

16、.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);else re

17、turn(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;irowNum;i+) boolean isfull = true;L1:for(int j=0;jcolumnNu

18、m;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);else drawUnit(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);

19、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)/ 处理键盘输入

20、的方法 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 ActionList

21、enerstatic 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,GameCa

22、nvas scr) curButton = button;this.scr=scr;/ 按钮执行方法 SuppressWarnings(deprecation) 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.r

23、equestFocus();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;el

24、seERS_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,0x07

25、40,0x6440,0x0e20,0x44c0,0x8e00,0x0660,0x0660,0x0660,0x0660 ;int blockType; / int turnState; / int blockState; /块的模式号( 0-6 ) 块的翻转状态( 0-3 )快的下落状态int row,col; / 块在画布上的坐标GameCanvas scr; / 块类的构造方法Block(GameCanvas scr)this.scr = scr;blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random(

26、) * 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

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

评论

0/150

提交评论