ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:69.14KB ,
资源ID:9997683      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9997683.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA俄罗斯方块实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA俄罗斯方块实验报告.docx

1、JAVA 俄罗斯方块实验报告一需求分析 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。二系统运行环境 操作系统选择Windows XP 版本,运行环境选择MyEclipse三系统功能需求描述俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件要实现的功能如下:1.游戏区:玩家可以在游戏区中堆

2、积方块,并能够在游戏过程中随时了解得分情况。2.游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。3.级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。四总体设计游戏中玩家可以做的操作有: 1.以90度为单位旋转方每一格块。2.以格子为单位左右移动方块,让方块加速落下。3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。同时删除的列数越多,得分指数上升。5.当固定的方块堆到区域最上方,则游戏结束。五

3、系统结构图俄罗斯方块游戏六程序模块设计6.1用户界面设计6.2 程序代码设计package russia;import java.awt.*;import java.awt.event.*;/俄罗斯方块类class ERS_Block extends Frame/* * */private static final long serialVersionUID = 1L;public static boolean isPlay=false;public static int level=1,score=0;public static TextField scoreField,levelField

4、;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);/俄罗斯方块类的构造方法SuppressWarnings(deprecation)ERS_Block(String title)super(ti

5、tle);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,5

6、00);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);

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

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

9、eScr);/定义按钮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

10、 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.addActionListene

11、r(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/* * */private static final long serialV

12、ersionUID = 1L;public Insets getInsets()return new Insets(30,50,30,50);/游戏画布类class GameCanvas extends Canvas implements KeyListener/* * */private static final long serialVersionUID = 1L;final int unitSize = 30; /小方块边长int rowNum; /正方格的行数int columnNum; /正方格的列数int maxAllowRowNum; /允许有多少行未削int blockInit

13、Row; /新出现块的起始行坐标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 int 3232;/初始化屏幕,并将屏幕数组清零的方法void initScr()for(int i=0;iro

14、wNum;i+)for (int j=0; jcolumnNum;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

15、) /表示画方快的方法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实例的引用/返回

16、屏幕数组中(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

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

18、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 fal

19、se;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 KeyEven

20、t.VK_SPACE:b.leftTurn();break;/处理控制类class Command implements ActionListenerstatic 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 cur

21、Button; /当前按钮GameCanvas scr;/控制按钮类的构造方法Command(int button,GameCanvas 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

22、_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(pau

23、se_resume)ERS_Block.timer.suspend();pause_resume = false;elseERS_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,0x6c

24、00,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.rando

25、m() * 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();dispBl

26、ock(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(assertVali

27、d(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);elseblockState = 2;dispBlock(2);return(false);/判断是否正确的方法boolean assertValid(int

28、 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)(patternts&k) != 0)int temp = scr.getScrArrXY(row-i,col+j);if (temp 1;return true;/同步显示的方法public synchronized void dispBlock(int s)int k = 0x8000;for (int i = 0; i 4; i+)for(int j = 0; j 1;/定时线程class MyTimer extends ThreadGameCanvas scr;public MyTimer(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1