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

下载本文档

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

文档简介

河南城建学院《JAVA基础》课程设计设计说明书课程名称:《JAVA基础》课程设计设计题目:俄罗斯方块指导教师:班级:学号:学生姓名:同组人员:计算机科学与工程学院2014年1月9日目录目录TOC\o"1-5"\h\z\o"CurrentDocument"第1章选题 2..\o"CurrentDocument"1.1题目背景 2..\o"CurrentDocument"1.2系统实现的具体分工 2.选题 2...团队分工 3..\o"CurrentDocument"1.3开发环境 3..\o"CurrentDocument"第2章设计内容 .3...\o"CurrentDocument"2.1实现功能 3..2.2概要设计 4..\o"CurrentDocument"2.3界面设计 6..第3章系统实现 .6...\o"CurrentDocument"3.1涉及知识点 6..3.2系统运行 6..3.3源程序清单 .1Q\o"CurrentDocument"第4章测试与实验结果 21.\o"CurrentDocument"第5章结束语 21.\o"CurrentDocument"参考文献 22.第1章选题1.1题目背景在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块( Tetris,俄文:Tempuc)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢•帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。为此,我们设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣并且也让我们学到编程技术与团队意识。1.2系统实现的具体分工选题运行程序开始游戏(俄罗斯方块)之旅!进入程序界面,你会看到游戏区和游戏控制区(为了营造设计效果和视觉效果以两个区的颜色不同作为区别) 。点击开始游戏,28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便以玩家所需要的形态和位置落下。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,若由存在空格的方块填满整个窗口, 则游戏失败。(下落过程方块和已落下的方块颜色也不同,同样也是为了营造设计及视觉效果)下落, 每消除一行将会增加一分,这个游戏也可以提高级数来提高难度,级数越高方块下落的速度就越快,这个游戏也有暂停功能,可以使游戏者因有事而中断一下,不影响游戏的继续进行。游戏功能需求如下:游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性, 游戏的背景色是灰色,方块用蓝色颜色,在一定的区域内运动和变形,落下后的障碍物用水红色显示,这样看起来会有一定的美感。游戏形状需求:用数组作为存储方块 28种状态的数据结构,即长条形、 Z字形、反Z形、田字形、7字形、反7形、T字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。团队分工表1.1项目分工一览表角色姓名承担的具体任务组长游戏区操作的实现,显示操作结果以及部分游戏算法的编写组员游戏结束的结果,方块构造与变形,以及部分算法的编写。组员游戏界面设计,游戏控制按钮功能实现,文档编写等。1.3开发环境编程工具:JDK+ECLIPSE(+MySQL计算机:PC操作系统:MicrosoftWindows7.0第2章设计内容2.1实现功能(1) 显示游戏的方块形状游戏玩家打开游戏界面,点击开始游戏,便会在游戏整个界面的左面依次显示不同形状的方块。(2) 分数显示根据游戏玩家在游戏当中的操作显示增加对应分数。(3) 级数显示根据游戏玩家所选择的不同等级显示不同的等级数,级数越高,俄罗斯方块下落的速度越快,反之则越慢。(4) 开始游戏功能键游戏玩家进入游戏界面之后点击该功能键就能开始俄罗斯方块游戏。(5) 提高级数功能键该功能键实现俄罗斯方块游戏的级数的增加,点击此功能键的同时级数显示功能模块的数字发生相应的变大,在游戏显示区显示的效果为方块下落的速度加快,使游戏的难度增加。(6) 降低级数功能键该功能键实现俄罗斯方块游戏的级数的降低,点击此功能键的同时级数功能模块显示的数字发生相应的减小,在游戏显示区显示的效果为方块下落的速度减慢,使游戏的难度降低。

暂停游戏功能键在游戏玩家进行游戏的过程中,只要在任何时候单击该功能键就能实现俄罗斯方块游戏的暂停。退出游戏功能键游戏玩家在游戏的过程中,可以在任何时刻点击该功能键按钮,就可以实现该游戏的退出。2.2概要设计(涉及类的框图)匚omniandoIxHcnph屯丨◦bLttcnI匡welijp:irt0bUtonbvddsv戸iiintQbittenWint0biJHon°-口£程:intQ口~35曾i^ss曾ibo讨启古仃ocurBitteniintQ$匚rf• awvij鬥dinbutton!irtjnstrsGaiyitCain^s)On匚tiortFerfaninetfine;Actit?n£vent);void

GjiiieC^nv^CouritSia;irrt□rouJ'lurn!ivAo^oJumctkiin;irkoiimxAIId'aRo^lun:iriOblocHnitRovtiniqblotklritCdiiri0scrftr:讯qbiBlock0 GameCarwa就)■./initSci(J:mid0pjint(inqiGraphic^;vdd0drawU-iil(inrem:Irijntnl:inbint沪e:int):vmdQ^stBlod<):Bieck■号e占crAri址T(inix?w:lnlrlncd!int)!int0暫我DltEowO;irtQ^etlntCol(J:niQdeleteFiilLineOivoid吕i5GameEnc|):booleaH.kyT弁疏inciK*yEv»nt)ivoid色懈电应显贞inmibe^veri)!voidQMyPrv計*efin«:K«y£vint);void匚Kane1%二匸gstlr-isst5O*fTrnset5© MtTinierQscri4«rritQnY4$0峠吨口wKeaaM^Timfir'inscr: i)■■-1ini'Jivoid❻ WinListener'■wndowdcEingjInI:Windc^Ewnl):\>cid

2.3界面设计是是3.1涉及知识点AWT多媒体编程,Swing图形界面开发,Java基础算法,GUI编程算法,java异常处理,类与继承和多态等。3.2系统运行(主要运行界面抓图)

提示消息框(操作指南)初始界面图:圉磐厮方決游我V1.0AuthorVincent 〔=I回分皴;退出游戏

提高级数图:退出游戏功能图

运行游戏图:结束游戏图:packageimportimportimportpublicclassERSBlockextends Frame{publicstaticboolean isPlay=false;publicstaticintpackageimportimportimportpublicclassERSBlockextends Frame{publicstaticboolean isPlay=false;publicstaticintlevel=1,score=0;publicstaticTextField scoreField ,levelField ;//文本框publicstaticMyTimer timer;//timer 具有延缓时间的作用GameCanvasgameScrJpublicstaticvoidmain(String[]argus){ERS_Blockers:二newERS_Block("俄罗斯方块游戏V1.0Author:Vineent"WindowListenerwinlistener=//俄罗斯方块类);ers.addWindowListener(win」istener);JOptionPane."\n1:newWinListener();//窗口监听器(ers,"操作指南:"+"\n2:left"\n3:"\n4:"\n5:"\n6:showMessageDialog方向键控制俄罗斯方块移动的方向为向左移动,right 为向右移动,down为加速向下,up为翻转变化."+'开始游戏’游戏开始."+游戏暂停’暂停游戏,再次单击该键则继续游戏 ."+提高等级或降低等级’可以设置难度等级."+退岀游戏’则游戏结束.");单击单击单击单击3.3源程序清单(关键代码)javax.swing.*;//俄罗斯方块类的构造方法ERS_Block(Stringtitle){super(title); //super 关键词是用来引用当前对象的父类setSize(619,490);setLayout( newGridLayout(1,2)); //设置面板的布局gameScr=newGameCanvas();gameScr.addKeyListener( gameScr); //键盘监听器timer=newMyTimer(gameScr);//timer 具有延缓时间的作用timer.setDaemon(true);//定时器timer.start();timer.suspend();//挂起疋种主动兀成的仃为add(gameScr); //调用当前类PanelrightScr=newPanel();//面板对象rightScr.setLayout(rightScr.setSize(120,500);add(rightScr);rightScr.setBackground(Color.newGridLayout(2,1,0,1));pink);//行列水平间距行间距//右边信息窗体的布局MyPanelinfoScr=infoScr.setLayout(infoScr.setSize(120,300);rightScr.add(infoScr);newMyPanel();//infoScr添加newGridLayout(4,1,0,5));//调用infoScr 面板到rightScr//定义标签和初始值Labelscorep=newLabel("分数:",Label. LEFT);//lable 是用来显示组件(分数,级数)的;left左对齐Labellevelp=newLabel("级数:"^Label. LEFT);scoreField=newTextField(8);//数字代表文本框的字符长度levelField=newTextField(8);scoreField.setEditable( false);//文本框内容不可编辑levelField.setEditable( false);infoScr.add(scorep);infoScr.add(scoreField );infoScr.add(levelp);infoScr.add(levelField );scoreField.setText( "0");levelField.setText( "1");//右边控制按钮窗体的布局newMyPanel();newGridLayout(5,1,0,5));newMyPanel();newGridLayout(5,1,0,5));controlScr.setLayout(rightScr.add(controlScr);newButton( "开始游戏")newButton( "开始游戏");Buttonplay_b=play_b.setSize(newDimension(50,200));//dimension对单个对象的组件的宽度、play_b.setSize(newDimension(50,200));//dimension对单个对象的组件的宽度、高度封装在一个类中play_b.addActionListener(newCommand(Command. button_play ,gameScr));高度封装在一个类中play_b.addActionListener(newCommand(Command. button_play ,gameScr));//定义按钮LevelUP//定义按钮LevelUPButtonlevel_up_b=level_up_b.setSize(level_up_b.addActionListener(newButton( "提高级数");newDimension(50,200));newCommand(Command.button_levelup ,gameScr));//定义按钮//定义按钮LevelDownButtonlevel_down_b=

level_down_b.setSize(newButton("降低级数");newDimension(50,200));level_down_b.addActionListener( newCommand(Command.button_leveldown ,gameScr));//定义按钮LevelPauseButtonpause_b= newButton( "游戏暂停");pause_b.setSize( newDimension(50,200));pause_b.addActionListener( newCommand(Command. button_pause ,gameScr));//定义按钮QuitButtonquit_b= newButton( "退岀游戏");quit_b.setSize( newDimension(50,200));quit_b.addActionListener( newCommand(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的四周留空间classMyPanelextends Panel{//Insets 对象用作所添加组件的外部填塞//Insets 对象用作所添加组件的外部填塞//lefttoprightbottomreturnnewInsets(30,50,30,50);}}//第一块//游戏画布类classGameCanvasextends Canvas implements KeyListener{finalintunitSize =30;//小方块边长introwNum;//正方格的行数intcolumnNum;//正方格的列数intmaxAllowRowNum;//允许有多少行未消intblockInitRow ;//新岀现块的起始行坐标intblockInitCol ;//新岀现块的起始列坐标int[][] scrArr;//屏幕数组Block b; //对方块的引用//画布类的构造方法GameCanvas(){rowNum=15;columnNum=10;rowNum-rowNum-2;b=newBlock(this);blockInitRow=rowNum-1;blockInitCol =columnNum/2-2;scrArr=newint[32][32];}//初始化屏幕,并将屏幕数组清零的方法voidinitScr(){ //initScr 开始for(inti=0;i<rowNum;i++)for(intj=0;j<columnNum;j++)scrArr[i][j]=0;b.reset(); //重置repaint();}//重新刷新画布方法publicvoid paint(Graphicsg){//画布填充的方块for(inti=0;i<for(intj=0;j<drawUnit(i,j,}rowNum;i++)columnNum;j++)scrArr[i][j]);//画方块的方法publicvoiddrawUnit(introw,intcol,inttype){scrArr[row][col]=type;Graphicsg=getGraphics();

switch(type){//获得Graphicscase0:g.setColor(Color.lightGray);break;: //背景颜色case1:g.setColor(Color.blue);break;//正在下落的方块 的颜色case2:g.setColor(Color.magenta);break;//已经落下的方块的颜色对象来绘制后备屏幕缓冲//表示画方块的方法g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);}publicBlockgetBlock(){//返回//返回block实例的引用}//返回屏幕数组中(row,col)位置的属性值publicintgetScrArrXY(introw,intcol){publicintgetScrArrXY(introw,intcol){rowNum||col<0||col>=columnNum) //控rowNum||col<0||col>=columnNum) //控制在所设置面板上return(-1);//返回新块的初始行坐标////返回新块的初始行坐标//返回新块的初始列坐标score);elsereturn(scrArr[row][col]);}//返回新块的初始行坐标方法publicintgetInitRow(){return (blockInitRow );}//返回新块的初始列坐标方法publicintgetInitCol(){return (blockInitCol );}//满行删除方法voiddeleteFullLine(){int full」ine_num=0;intk=0; //此for循环是为了判断kfor(inti=0;i<rowNum;i++){boolean isfull= true;for(intj=O;j<columnNum;j++)if(scrArr[i][j]==0){k++;isfull= false;break;}if(isfull)full_line_num++;if(k!=0&&k-1!=i&&!isfull)for(intj=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(inti=k-1;i< rowNum;i++){for(intj=0;j< columnNum;j++){drawUnit(i,j,0);scrArr[i][j]=0;}}ERS_Block. score +=full_line_num;ERS_Block. scoreField.setText(""+ERS_Block.//判断游戏是否结束方法boolean isGameEnd(){for(intcol=0;col< columnNum;col++){if(scrArr[maxAllowRowNum][col]!=0)returntruereturnfalsepublic voidkeyTyped(KeyEvente){} //实现KeyListenerde 方法public voidkeyReleased(KeyEvente){}//处理键盘输入的方法publicvoidkeyPressed(KeyEvente){switch(e.getKeyCode()){caseKeyEvent.VK_DOWNb.fallDown();break;caseKeyEvent.VK_LEFT:b.leftMove();break;caseKeyEvent.VK_RIGHT:b.rightMove();breakcaseKeyEvent.VK_UP:b.leftTurn();break;}}}//处理控制类class Commandimplements ActionListener{staticfinalintbutton_play =1;//给按钮分配编号staticfinalintbutton_levelup =2;staticfinalintbutton_leveldown =〔3;staticfinalintbutton_quit =4;staticfinalintbutton_pause =5;staticbooleanpause_resume =true;//resum 继续intcurButtonJ//当前按钮GameCanvas scr//控制按钮类的构造方法Command(intbutton,GameCanvasscr){Command(curButton =button;this.scr=scr;//按钮执行方法publicvoidactionPerformed(ActionEvente){switch(curButton){casebutton_playscr.initScr();ERSBlock.:if(!ERS_Block.isPlaytrueERSBlock.ERSBlock.ERSBlock.score=0;switch(curButton){casebutton_playscr.initScr();ERSBlock.:if(!ERS_Block.isPlaytrueERSBlock.ERSBlock.ERSBlock.score=0;scoreField.setText(timer.resume。;isPlay){"0");scr.requestFocus();break;casebutton_levelup :if(ERS_Block.level<10){ERS__Block.level++;ERS__Block.levelField.setText(""+ERS._Block.ERS__Block.score=0;ERS__Block.scoreField.setText(""+ERS._Block.level);score);}scr.requestFocus();breakcasebutton_leveldown:if(ERS_Block.level>1){ERS__Block.level--;ERS__Block.levelField.setText( ""+ERS__Block.levelERS__Block.score=0;ERS__Block.scoreField.setText( ""+ERS__Block.scorescr.requestFocus();break;casebutton_pause:if(pause_resume){ERS_Block. timer .suspend();pause_resume=false;} else{ERS_Block. timer .resume();pause_resume=true;}scr.requestFocus();break;button_quit :Object[]possibilities1={null;caseIconicon=intQuit?","Information"n=JOptionPane.,JOptionPane.break;button_quit :Object[]possibilities1={null;caseIconicon=intQuit?","Information"n=JOptionPane.,JOptionPane."YES","NO"};showOptionDialog (null,"RellyYES_NO_CANCEL_OPTION,JOptionPane.QUESTIONMESSAGE,icon,possibilities1,possibilities1[0]);if(n==JOptionPane.YES_OPTION){System.exit(0);elseif(n==JOptionPane. NO_OPTION){}if(n==JOptionPane. CANCEL_OPTION){};}}}//第二块//方块类classBlock{

staticint[][]pattern={//方块类classBlock{

staticint[][]pattern={{0x0f00,0x4444,0x0f00,0x4444},{0x04e0,0x0464,0x00e4,0x04c4},//{0x0f00,0x4444,0x0f00,0x4444},{0x04e0,0x0464,0x00e4,0x04c4},//用十六进制表示长条型的四种状态

型的四种状态//'T'{0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},Block(GameCanvasscr){this.scr=scr;intblockType =({0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},Block(GameCanvasscr){this.scr=scr;intblockType =(范围的一切整数turnState =(blockState = 1;row=scr.getlnitRow();col=scr.getInitCol();}int//重新初始化块,并显示新块)(Math. random()*1000)%7;)(Math. random()*1000)%4;//初始化为1//获取方块的横坐标//获取方块的纵坐标//random() 指可随机产生一定//状态{0x6440,0x0e20,0x44c0,0x8e00},//反'7'型的四种状态{0x0660,0x0660,0x0660,0x0660},//方块的四种状态intblockType;//块的模式号(0-6)intturnState ;//块的翻转状态(0-3)intblockState ;//块的下落状态introw,col;//块在画布上的坐标//'7'};//反'Z'型的四种状态//'Z' 型的四种状态型的四种状态GameCanvas scr//块类的构造方法public voidreset(){//实现块翻转的操作blockType=(int)(Math.random()*1000)%7;//对产生的随机数进行求余操作turnState=(int)(Math.random()*1000)%4;blockState=1;row=scr.getlnitRow();col=scr.getlnitCol();dispBlock(1);}//显示方块//实现方块翻转的方法publicvoid leftTurn(){publicvoid leftTurn(){if(assertValid(blockType,(turnState +1)%4,row,col)){整形变量turnState=(turnStatedispBlock(1);}publicif+1)%4;//实现块的左移的方法voidleftMove(){(assertValid(dispBlock(0);col--;dispBlock(1);}publicifblockType////实现块的右移的方法voidrightMove(){(assertValid(blockTypedispBlock(0);

col++;

dispBlock(1);publicifif,turnState,turnState//实现块落下的操作的方法booleanfallDown(){==2)1);(blockStatereturn(false(assertValid(dispBlock(0);row--;dispBlock(1);return(true,row,rowelse{blockStatedispBlock(2);booleanintfor=2;return(falseblockType,turnState,row//行坐标自减返回//显示下落状态););//判断是否正确的方法assertValid(intk=0x8000;(inti=0;i<4;i++){for(intj=0;j<4;j++){t,if((int)(pattern//,col-1)){,col+1)){-1,col)

温馨提示

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

评论

0/150

提交评论