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

下载本文档

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

文档简介

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

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

3、列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。同时删除的列数越多,得分指数上升。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 serialVers ionUID = 1L;public static boolea n isPlay=false;public static i

4、nt 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 ndowListe ner(winiste ner

5、);/俄罗斯方块类的构造方法SuppressWar nin gs(deprecati on)ERS_Block(Stri ng title)super(title);setSize(600,480);setLayout (new GridLayout(1,2);gameScr = new GameCa nvas();gameScr.addKeyListe ner(gameScr);timer = new MyTimer(gameScr);timer.setDaem on (true);timer.start();timer.suspe nd();add(gameScr);Panel right

6、Scr = new Pan el();rightScr.setLayout(new GridLayout(2,1,0,30);rightScr.setSize(120,500);add(rightScr);/右边信息窗体的布局MyPa nel in foScr = new MyPa nel();infoScr.setLayout(new GridLayout(4,1,0,5);in foScr.setSize(120,300);rightScr.add(i nfoScr);/定义标签和初始值Label scorep = new Label( 分数Label.LEFT);Label levelp

7、 = new Label( 级数:Label.LEFT);scoreField = new TextField(8);levelField = new TextField(8);scoreField.setEditable(false);levelField.setEditable(false);in foScr.add(scorep);in foScr.add(scoreField);in foScr.add(levelp);in foScr.add(levelField);scorep.setSize( new Dime nsio n(20,60);scoreField.setSize(n

8、ew Dimension(20,60);levelp.setSize( new Dime nsion(20,60);levelField.setSize(new Dimension(20,60);scoreField.setText(0);levelField.setText(1);/右边控制按钮窗体的布局MyPa nel co ntrolScr = new MyPa nel();con trolScr.setLayout (new GridLayout(5,1,0,5);rightScr.add(c on trolScr);/定义按钮playButton play_b = new Butto

9、n(”开始游戏);play_b.setSize( new Dime nsio n(50,200);play_b.addActi on Liste ner(new Comma nd(Comma nd.button _play,gameScr); /定义按钮Level UPButton level_up_b = new Butt on (”提高级数);level_up_b.setSize( new Dime nsion(50,200);level_up_b.addActio nListe ner(new Comma nd(Comma nd.button _levelup,gameScr);/定义按

10、钮Level DownButton level_down_b =n ew Butt on (降低级数);level_dow n_b.setSize( new Dime nsion(50,200);level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr);/定义按钮Level PauseButton pause_b =n ew Butt on (”游戏暂停);pause_b.setSize (new Dime nsion(50,200);pause_b.addActi on Liste ner(new

11、 Comma nd(Comma nd.button _pause,gameScr);/定义按钮QuitButton quit_b = new Button(” 退岀游戏);quit_b.setSize(new Dimension(50,200);quit_b.addActi on Liste ner(new Comma nd(Comma nd.butt on _quit,gameScr);con trolScr.add(play_b);con trolScr.add(level_up_b);con trolScr.add(level_dow n_b);con trolScr.add(pause

12、_b);con trolScr.add(quit_b);setVisible(true);gameScr.requestFocus();/重写MyPanel类,使Panel的四周留空间class MyPa nel exte nds Pan el/*/private static fin al l ong serialVers ionUID = 1L;public In sets get In sets()return new In sets(30,50,30,50);/游戏画布类class GameCa nvas exte nds Can vas impleme nts KeyListe ne

13、r/*/private static fin al l ong serialVers ionUID = 1L;final int uni tSize = 30; /小方块边长in t rowNum; /正方格的行数in t colum nNum; / 正方格的列数int maxAllowRowNum; / 允许有多少行未削int block In itRow; /新岀现块的起始行坐标int blockl ni tCol; /新岀现块的起始列坐标int scrArr; /屏幕数组Block b; / 对方快的引用/画布类的构造方法GameCa nvas()rowNum = 15;colu mn

14、Num = 10;maxAllowRowNum = rowNum - 2;b = new Block(this);block In itRow = rowNum - 1;blockI ni tCol = colu mn Num/2 - 2;scrArr = new in t 3232;/初始化屏幕,并将屏幕数组清零的方法void in itScr()for(i nt i=O;irowNum;i+)for (i nt j=0; jvcolu mn Num;j+) scrArrij=0; b.reset();repa in t();/重新刷新画布方法public void pain t(Graph

15、ics g)for(i nt i = 0; i rowNum; i+)for(i nt j = 0; j colu mn Num; j+)draw Un it(i,j,scrArrij);/画方块的方法public void draw Un it(i nt row,i nt col,i nt type) scrArrrowcol = type;以背景为颜色画画正在下落的方块画已经落下的方法Graphics g = getGraphics(); switch(type) /表示画方快的方法case 0: g.setColor(Color.black);break; / case 1: g.set

16、Color(Color.blue);break; / case 2: g.setColor(Color.mage nta);break; / g.fill3DRect(col*u nitSize,getSize().height-(row+1)*u nitSize,u nitSize,u nitSize,true);g.dispose(); public Block getBlock()return b; / 返回block实例的引用/返回屏幕数组中(row,col)位置的属性值public int getScrArrXY(i nt row,i nt col) if (row = rowNum

17、 | col = colu mn Num) return(-1);elsereturn(scrArrrowcol);/返回新块的初始行坐标方法public int get In itRow()return(blockl ni tRow); /返回新块的初始行坐标/返回新块的初始列坐标方法public int getI nitCol()return(blockI ni tCol); /返回新块的初始列坐标/满行删除方法void deleteFullLi ne()int full_li ne_num = 0;int k = 0;for (i nt i=0;irowNum;i+)boolea n i

18、sfull = true;L1:for(i nt j=0;jcolu mn Num;j+)if(scrArrij = 0)k+;isfull = false;break L1;if(isfull) full_li ne_n um+;if(k!=0 & k-1!=i & !isfull)for(int j = 0; j columnNum; j+)if (scrArrij = 0)drawU ni t(k-1,j,0);elsedrawU ni t(k-1,j,2);scrArrk-1j = scrArrij;for(int i = k-1 ;i rowNum; i+)for(int j = 0

19、; j columnNum; j+)drawU ni t(i,j,0);scrArrij=0;ERS_Block.score += fulline_n um;ERS_Block.scoreField.setText(+ERS_Block.score);/判断游戏是否结束方法boolea n isGameE nd()for (i nt col = 0 ; col colu mnN um; col +) if(scrArrmaxAllowRowNumcol !=0) return true;return false;public void keyTyped(KeyEve nt e)public v

20、oid keyReleased(KeyEve nt e)/处理键盘输入的方法public void keyPressed(KeyEve nt e)if(!ERS_Block.isPlay)return;switch(e.getKeyCode()case KeyEve nt.VK_DOWN:b.fallDow n( );break;case KeyEve nt.VK_LEFT:b.leftMove();break;case KeyEve nt.VK_RIGHT:b.rightMove();break;case KeyEve nt.VK_SPACE:b.leftTurn();break;/处理控制

21、类class Comma nd impleme nts Actio nListe nerstatic final int button_play = 1; /给按钮分配编号static final int butt on _levelup = 2;static final int butt on _leveldow n = 3;static final int butt on _quit = 4;static final int butt on _pause = 5;static boolea n pause_resume = true;in t curButto n; /当前按钮GameCa

22、 nvas scr;/控制按钮类的构造方法Comma nd(i nt butt on ,GameCa nvas scr)curButt on = butt on;this.scr=scr;/按钮执行方法SuppressWar nin gs(deprecati on)public void actio nPerformed (Acti on Eve nt e) switch(curButto n)case button_play:if(!ERS_Block.isPlay)scr. in itScr();ERS_Block.isPlay = true;ERS_Block.score = 0;ERS

23、_Block.scoreField.setText(0);ERS_Block.timer.resume();scr.requestFocus();break;case button _l evelup: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 butt on _pause:if

24、(pause_resume)ERS_Block.timer.suspe nd(); pause_resume = false;elseERS_Block.timer.resume();pause_resume = true;scr.requestFocus();break;case butt on _quit:System.exit(0);/方块类class Block static int pattern = 0x0f00,0x4444,0x0f00,0x4444,用十六进至表示,本行表示长条四种状态0x04e0,0x0464,0x00e4,0x04c4,0x4620,0x6c00,0x46

25、20,0x6c00,0x2640,0xc600,0x2640,0xc600,0x6220,0x1700,0x2230,0x0740,0x6440,0x0e20,0x44c0,0x8e00,0x0660,0x0660,0x0660,0x0660块的模式号(0-6 )块的翻转状态(0-3 )快的下落状态块在画布上的坐标;int blockType; / int tur nState; / int blockState; / int row,col; / GameCa nvas scr;/块类的构造方法Block(GameCa nvas scr) this.scr = scr;blockType =

26、 (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1;row = scr.get In itRow();col = scr.get In itCol();/重新初始化块,并显示新块public void reset()blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1;row = scr.get In itRow();co

27、l = scr.get In itCol();dispBlock(l);/实现“块”翻转的方法public void leftTur n() if(assertValid(blockType,(turnState + 1)%4,row,col) dispBlock(0);turnState = (turn State + 1)%4;dispBlock(l);/实现“块”的左移的方法 public void leftMove() if(assertValid(blockType,tur nState,row,col-1) dispBlock(0);col-;dispBlock(l);/实现块的右移public void rightMove()if(assertValid(blockType,tur nState,row,col+1) dispBlock(O);col+;dispBlock(1);/实现块落下的操作的方法public boolea n fallDow n() if(blockState = 2) return(false);if(assertValid(blockType,tur nState,row-1,col)

温馨提示

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

评论

0/150

提交评论