JAVA程序设计课程设计之俄罗斯方块年级:13级班级:T412网络工程指导老师:朱林小组成员:20138346021许浩洋IIII时间:2015年11月11日目录摘要.................................................................第一章课程设计要求..................................................第二章设计概要......................................................2.1功能设计......................................................2.2功能分析......................................................2.2.1系统操作界面...............................................2.2.2程序主要功能说明...........................................第三章调试分析与测试结果............................................3.1游戏运行界面..................................................3.2测试项目......................................................3.2.1功能区按键测试............................................3.2.2键盘功能测试..............................................3.2.3游戏结束测试..............................................第四章设计总结......................................................4.1改进意见......................................................4.2《Java课程设计》心得体会......................................11摘要在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块(Tetris,俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。为此,我们设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我们学到编程技术与团队意识。关键字:俄罗斯方块、JAVA游戏、编程第一章课程设计要求题目名称:俄罗斯方块题目类型:设计型课程设计目的:1)了解Java的基本使用方法。222)熟悉eclipse的运行环境。3)用JAVA来设计一个俄罗斯方块的小游戏。4)基本实现俄罗斯方块的应用功能。实验原理:JAVA程序分析与设计、类的灵活运用、多态技术、模板技术、异常处理等。实验内容:本俄罗斯方块游戏是对于随机给出不同的形状(长条形、Z字形、反Z形、田字形、L字形、反L形、T字型)下落填充给定的区域,若填满一条便消掉,记分。若在游戏中各形状填满了给定区域,为输者。第二章设计概要2.1功能设计本项目是为了实现俄罗斯方块的基本功能而设计的,基本能够达到俄罗斯方块的各种游戏性。项目需求分析如下:1)由方块组成的不同的随机图形会从区域上方开始缓慢落下。2)玩家可以做的操作有:以90度为单位旋转方每一格块。以格子为单位左右移动方块,让方块加速落下。3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。4)当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。335)一次性销毁不同行数方块得分不同,一行1分,两行2分,三行5分,四行10分。6)当固定的方块堆到区域最上方,则游戏结束。2.2功能分析2.2.1系统操作界面2.2.2程序主要功能说明1.面板画笔类代码:packageTetris;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.util.Arrays;处理玩家操作44importjava.util.Timer;importjava.util.TimerTask;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassTetrisPanelextendsJPanel{//游戏主面板20行10列privatestaticfinalintROWS=20;privatestaticfinalintCOLS=10;//代表方块着陆的墙privateCell[][]wall=newCell[ROWS][COLS];//定义每一小块的大小privatestaticfinalintCELL_SIZE=25;//游戏得分privateintscore;//游戏销毁行数privateintlines;//一次性销毁行数的计分标准(0行=0分,1行=1分,2行=4分,3行=10分,4行=20分)privatestaticfinalint[]SCORE_LEVEL={0,1,4,10,20};//游戏结束标记privatebooleangameOver=false;//游戏暂停标记privatebooleanpause=false;//正在下落的四格方块privateTetrominocurrentTetro;//下一个下落的四格方块privateTetrominonextTetro;//定义游戏定时器privateTimertimer;publicstaticvoidmain(String[]args){JFrameframe=newJFrame(俄罗斯方块);intwidth=(COLS+8)*CELL_SIZE+100;intheight=ROWS*CELL_SIZE+100;frame.setSize(width,height);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//取消系统默认布局frame.setLayout(null);TetrisPanelpanel=newTetrisPanel();panel.setLocation(45,35);panel.setSize((COLS+8)*CELL_SIZE,ROWS*CELL_SIZE+1);frame.add(panel);frame.setVisible(true);panel.action();}publicvoidpaint(Graphicsg){super.paint(g);55//填充背景颜色this.paintBackground(g);//绘制游戏墙paintWall(g);//绘制分数墙paintScore(g);//绘制面板边框paintTetrisBorder(g);//绘制当前四格方块paintCurrentTetro(g);//绘制下个四格方块paintNextTetro(g);}//privatestaticfinalintBG_COLOR=0xC3D5EA;//privatestaticfinalintBORDER_COLOR=0x667799;//privatestaticfinalintFONT_COLOR=0x000000;//绘制背景的方法publicvoidpaintBackground(Graphicsg){g.setColor(newColor(BG_COLOR));//this.setBackground(newColor(BG_COLOR));g.fillRect(0,0,this.getWidth(),this.getHeight());}//绘制游戏墙的方法publicvoidpaintWall(Graphicsg){for(introw=0;rowROWS;row++){for(intcol=0;colCOLS;col++){Cellcell=wall[row][col];intx=col*CELL_SIZE;inty=row*CELL_SIZE;if(cell==null){g.setColor(newColor(BORDER_COLOR));g.drawRect(x,y,CELL_SIZE,CELL_SIZE);}else{g.setColor(newColor(cell.getColor()));g.fillRect(x,y,CELL_SIZE,CELL_SIZE);g.setColor(newColor(BORDER_COLOR));g.drawRect(x,y,CELL_SIZE,CELL_SIZE);}}}}//绘制分数墙的方法publicvoidpaintScore(Graphicsg){intx=12*CELL_SIZE;inty=6*CELL_SIZE;Fontfont=newFont(楷体,Font.BOLD,23);Stringmsg=分数:+score;g.setColor(newColor(FONT_COLOR));g.setFont(font);g.drawString(msg,x,y);y+=2*CELL_SIZE;msg=行数:+lines;66g.drawString(msg,x,y);if(gameOver){msg=(T_T)【S】再来;y+=2*CELL_SIZE;x-=CELL_SIZE;g.drawString(msg,x,y);}elseif(pause){msg=【C】继续;y+=2*CELL_SIZE;g.drawString(msg,x,y);}else{msg=【P】暂停;y+=2*CELL_SIZE;g.drawString(msg,x,y);}}//绘制面板边框的方法publicvoidpaintTetrisBorder(Graphicsg){g.setColor(newColor(BORDER_COLOR));g.drawRect(0,0,CELL_SIZE*(COLS+8)-1,CELL_SIZE*ROWS);}//绘制当前四格方块的方法publicvoidpaintCurrentTetro(Graphicsg){if(currentTetro==null){//如果没有四格方块,则返回不绘画return;}for(Cellcell:currentTetro.cells){introw=cell.getRow();intcol=cell.getCol();intx=col*CELL_SIZE;inty=row*CELL_SIZE;g.setColor(newColor(cell.getColor()));g.fillRect(x,y,CELL_SIZE,CELL_SIZE);g.setColor(newColor(BORDER_COLOR));g.drawRect(