java课程设计实验报告俄罗斯方块.docx
- 文档编号:6085342
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:24
- 大小:163.57KB
java课程设计实验报告俄罗斯方块.docx
《java课程设计实验报告俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《java课程设计实验报告俄罗斯方块.docx(24页珍藏版)》请在冰豆网上搜索。
java课程设计实验报告俄罗斯方块
成绩评定表
学生姓名
班级学号
专业
电子信息工程
课程设计题目
俄罗斯方块游戏设计
评
语
组长签字:
成绩
日期
2013年月日
课程设计任务书
学院
信息学院
专业
电子信息工程
学生姓名
班级学号
课程设计题目
俄罗斯方块游戏设计
实践教学要求与任务:
俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件实现的基本功能如下:
●游戏区:
玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况和下一个将要出现方块的提示。
●游戏控制:
玩家可以通过游戏控制功能来控制游戏开始,暂停,结束游戏,游戏难度的设置以及音效控制。
●玩家游戏信息存储及删除:
玩家的得分在前五名时,将会记录在排行榜上,同时可为玩家清空排行榜。
游戏软件随即不断的下落其中方块中的一种,玩家在方块落到底部之前将方块尽量整齐的摆放好,以便能够对满一行进行消除,玩家可以旋转,左右移动方块,以选择最佳的摆放位置和方式,也可以加快下落的速度,甚至可以直接落到底部,以便节省游戏的时间。
当方块落到底部的时候,就不能进行操作的,此时会在顶部出现另一个方块。
在堆放方块的时候,如果一行堆满的话,则进行消行,上面的方块自动的向下移动一行。
消除一行可以得到100分,
工作计划与进度安排:
第18周:
布置课程设计任务,查阅资料,分组设计,程序调试。
第19周:
程序调试,编写课程设计报告,验收,答辩。
指导教师:
2013年6月20日
专业负责人:
2013年6月20日
学院教学副院长:
2013年6月20日
目录
1.课设软件主要功能…………………………………………1
2.类总体设…………………………………………..1
2.1类组合关系图………………………………….………1
2.2主类……………………………….…………2
2.3其它类…………………….……………………..2
3.类详细设计…………………………………………2
3.1ERS_Block主类……..…………………………….……..2
3.2Command处理控制类…….……………………….….…4
3.3GameCanvas游戏画布类………….………………………4
3.4Block方块类............……………….…….………………….6
4.关键类成员函数流程图及代码………………………..….…..7
5.软件运行结果………………………………………………...17
结论……………………...…………………………….………20
参考文献……………….……………………………………...20
1.课设软件主要功能
本系统是一个俄罗斯方块游戏的系统设计[1],实现的基本功能就是能实现经典俄罗斯方块游戏的基本功能。
如用键盘上的空格下左右键来控制方块的变形,移动等功能。
点击控制面板上的开始游戏,游戏暂停,提高级数,降低级数退出游戏等按钮来实现游戏的开始,暂停,停止游戏,增加难度,降低难度等功能。
图1.1功能图
2.类总体设计
2.1类组合关系图
Mypanel
Command
MyTimer
ERS-Block
图2.1.类组合关系图
2.2主类
ERS_Block继承Frame类负责游戏全局的控制[2]。
对开始游戏、暂停/继续游戏、结束游戏、等级设置。
玩家可自行设定游戏等级,主要提供10种级别,级别越高,游戏速度越快,难度越大
2.3其他类
1.Mypanel继承Panel类。
2.Block是方块类控制块的移动,下落变形功能。
七种类型方块的父类,定义了所有类型方块的共同特征和行为。
3.GameCanvas是游戏画布类,继承Canvas类,界面设计应遵循简介美观方便易用的基本原则在游戏区显示方块。
4.Command类是控制按钮类。
5.MyTimer类继承自线程类Thead。
包含run()方法,sleep()方法,控制游戏的速度。
6.WinListener类继承WindowAdapter类。
3.类详细设计
3.1ERS_Block主类
图3.1主类数据透视图
定义成员变量[3]
1右边信息窗体的布局
MyPanelinfoScr=newMyPanel();
infoScr.setLayout(newGridLayout(4,1,0,5));
infoScr.setSize(120,300);
2定义标签和初始值
Labelscorep=newLabel("分数:
",Label.LEFT);
Labellevelp=newLabel("级数:
",Label.LEFT);
3右边控制按钮窗体的布局
MyPanelcontrolScr=newMyPanel();
controlScr.setLayout(newGridLayout(5,1,0,5));
rightScr.add(controlScr);
4定义按钮play
Buttonplay_b=newButton("开始游戏");
play_b.setSize(newDimension(50,200));
定义按钮LevelUP
Buttonlevel_up_b=newButton("提高级数");
level_up_b.setSize(newDimension(50,200));
5定义按钮LevelDown
Buttonlevel_down_b=newButton("降低级数");
level_down_b.setSize(newDimension(50,200));
6定义按钮LevelPause
Buttonpause_b=newButton("游戏暂停");
pause_b.setSize(newDimension(50,200));
7定义按钮Quit
Buttonquit_b=newButton("退出游戏");
quit_b.setSize(newDimension(50,200));;
成员方法
1俄罗斯方块类的构造方法
方法定义:
ERS_Block(Stringtitle)
2isGameOver方法
方法定义:
privatebooleanisGameOver()
功能描述:
该方法是判断游戏是否该结束了,只需要判断窗口中的最顶端那一行中是否有方块,同时也要判断最底端的是否也有,如果都有即结束。
3.2Command处理控制类
图3.2Command类数据透视图
成员变量[4]:
给按钮编号
intbutton_play
intbutton_levelup
intbutton_leveldown
intbutton_quit;
intbutton_pause
intcurButton;
GameCanvasscr;
成员方法:
1控制按钮类的构造方法
方法定义:
Command(intbutton,GameCanvasscr)
2按钮执行方法
方法定义:
publicvoidactionPerformed(ActionEvente)
功能:
点击按钮实现游戏的开始,结束,升级,降级,暂停[5]。
3.3GameCanvas游戏画布类
图3.3GameCanvas类数据透视图
成员变量:
小方块边长:
finalint0unitSize=30
正方格的行数:
introwNum
方格的列数:
intcolumnNum
允许有多少行未削:
intmaxAllowRowNum
新出现块的起始行坐标:
intblockInitRow
出现块的起始列坐标:
intblockInitCol
屏幕数组:
int[][]scrArr
对方快的引用:
Blockb
2.画布类的构造方法
成员方法[5]:
1初始化屏幕,并将屏幕数组清零的方法
方法定义:
voidinitScr()
2重新刷新画布方法
方法定义:
publicvoidpaint(Graphicsg)
3画方块的方法
方法定义:
publicvoiddrawUnit(introw,intcol,inttype)
功能:
以背景为颜色画,画正在下落的方块,画已经落下的方块。
4块的初始v行坐标方法
方法定义:
publicintgetInitRow()
返回新块的初始行坐标:
return(blockInitRow)
5返回新块的初始列坐标方法
方法定义:
publicintgetInitCol()
返回新块的初始列坐标:
return(blockInitCol)
6满行删除方法
方法定义:
voiddeleteFullLine()
功能:
这个就是实现如何将行消除的,其实就是在判断了该行该消除时候将上面的方块都向下平移一格,这样在实现程序界面也就给玩家是消一行的视觉效果[6]。
3.3Block方块类
图3.3Block类数据透视图
成员变量:
块的模式编号:
intblockType;
块的翻转状态:
intturnState;
块的下落状态:
intblockState;
块在画布上的坐标:
introw,col;
GameCanvasscr;
成员方法:
1)fallDown方法
方法定义:
publicvoidfallDown()
功能描述:
实现方块的运行,下落。
2)leftMove()
方法方法定义:
publicsynchronizedbooleanleftMove()
功能描述:
将当前画移动到所左面的位置。
3)rightMove()方法
方法定义:
privatebooleanrightMove()
功能描述:
将方块想右边移动。
4)方法
方法定义:
publicvoidturnNext()
功能描述:
实现方块的旋转。
5)leftturn方法
方法定义:
privatesynchronizedbooleanleftturn()
功能描述:
将当前块实现翻转。
6)deleteFullLine方法
方法定义:
privatebooleandeleteFullLine()
功能描述:
实现满行删除的方法。
7)erase方法
方法定义:
privatevoiderase()
功能描述:
将当前块从画布的对应位置移除。
8)display方法
方法定义:
privatevoiddisplay()
功能描述:
实现重画画布的时候显示当前块
4.关键类成员函数流程图及代码
4.1系统流程图
图4.1系统流程图[7]
4.2源代码[7]
importjava.awt.*;
importjava.awt.event.*;//俄罗斯方块类
classERS_BlockextendsFrame{
publicstaticbooleanisPlay=false;
publicstaticintlevel=1,score=0;
publicstaticTextFieldscoreField,levelField;
publicstaticMyTimertimer;
GameCanvasgameScr;
publicstaticvoidmain(String[]argus){
ERS_Blockers=newERS_Block("俄罗斯方块游戏");
WindowListenerwin_listener=newWinListener();
ers.addWindowListener(win_listener);
}
//俄罗斯方块类的构造方法
ERS_Block(Stringtitle){
super(title);
setSize(600,480);
setLayout(newGridLayout(1,2));
gameScr=newGameCanvas();
gameScr.addKeyListener(gameScr);
timer=newMyTimer(gameScr);
timer.setDaemon(true);
timer.start();
timer.suspend();
add(gameScr);
PanelrightScr=newPanel();
rightScr.setLayout(newGridLayout(2,1,0,30));
rightScr.setSize(120,500);
add(rightScr);//右边信息窗体的布局
MyPanelinfoScr=newMyPanel();
infoScr.setLayout(newGridLayout(4,1,0,5));
infoScr.setSize(120,300);
rightScr.add(infoScr);//定义标签和初始值
Labelscorep=newLabel("分数:
",Label.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);
scorep.setSize(newDimension(20,60));
scoreField.setSize(newDimension(20,60));
levelp.setSize(newDimension(20,60));
levelField.setSize(newDimension(20,60));
scoreField.setText("0");
levelField.setText("1");//右边控制按钮窗体的布局
MyPanelcontrolScr=newMyPanel();
controlScr.setLayout(newGridLayout(5,1,0,5));
rightScr.add(controlScr);//定义按钮play
Buttonplay_b=newButton("开始游戏");
play_b.setSize(newDimension(50,200));
play_b.addActionListener(newCommand(Command.button_play,gameScr));//定义按钮LevelUP
Buttonlevel_up_b=newButton("提高级数");
level_up_b.setSize(newDimension(50,200));
level_up_b.addActionListener(newCommand(Command.button_levelup,gameScr));
Buttonlevel_down_b=newButton("降低级数");
level_down_b.setSize(newDimension(50,200));
level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr));
Buttonpause_b=newButton("游戏暂停");
pause_b.setSize(newDimension(50,200));
pause_b.addActionListener(newCommand(Command.button_pause,gameScr));
Buttonquit_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();
}
//游戏画布类
classGameCanvasextendsCanvasimplementsKeyListener{
finalintunitSize=30;//小方块边长
introwNum;//正方格的行数
intcolumnNum;//正方格的列数
intmaxAllowRowNum;//允许有多少行未削
intblockInitRow;//新出现块的起始行坐标
intblockInitCol;//新出现块的起始列坐标
int[][]scrArr;//屏幕数组
Blockb;//对方快的引用//画布类的构造方法
GameCanvas(){
rowNum=15;
columnNum=10;
maxAllowRowNum=rowNum-2;
b=newBlock(this);
blockInitRow=rowNum-1;
blockInitCol=columnNum/2-2;
scrArr=newint[32][32];
}
}
//画方块的方法
publicvoiddrawUnit(introw,intcol,inttype){
scrArr[row][col]=type;
Graphicsg=getGraphics();
switch(type){//表示画方快的方法
case0:
g.setColor(Color.black);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);
g.dispose();
}
publicBlockgetBlock(){
returnb;//返回block实例的引用
}
}
//满行删除方法
voiddeleteFullLine(){
intfull_line_num=0;
intk=0;
for(inti=0;i booleanisfull=true; L1: for(intj=0;j if(scrArr[i][j]==0){ k++; isfull=false; breakL1; } if(isfull)full_line_num++; if(k! =0&&k-1! =i&&! isfull) for(intj=0;j if(scrArr[i][j]==0) drawUnit(k-1,j,0); else drawUnit(k-1,j,2); scrArr[k-1][j]=scrArr[i][j]; } } for(inti=k-1;i for(intj=0;j drawUnit(i,j,0); scrArr[i][j]=0; } } ERS_Block.score+=full_line_num; ERS_Block.scoreField.setText(""+ERS_Block.score); } //处理键盘输入的方法 publicvoidkeyPressed(KeyEvente){ if(! ERS_Block.isPlay) return; switch(e.getKeyCode()){ caseKeyEvent.VK_DOWN: b.fallDown();break; caseKeyEvent.VK_LEFT: b.leftMove();break; caseKeyEvent.VK_RIGHT: b.rightMove();break; caseKeyEvent.VK_SPACE: b.leftTurn();break; } } } //处理控制类 classCommandimplementsActionListener{ staticfinalintbutton_play=1;//给按钮分配编号 staticfinalintbutton_levelup=2; staticfinalintbutton_leveldown=3; staticfinalintbutton_quit=4; staticfinalintbutton_pause=5; staticbooleanpause_resume=true; intcurButton;//当前按钮 GameCanvasscr;//控制按钮类的构造方法 Command(intbutton,GameCanvasscr){ curButton=button; this.scr=scr; } //按钮执行方法 publicvoidactionPerformed(ActionEvente){ switch(curButton){ casebutton_play: if(! ERS_Block.isPlay){ scr.initScr(); ERS_Block.isPlay=true;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 实验 报告 俄罗斯方块
![提示](https://static.bdocx.com/images/bang_tan.gif)