辽宁工程技术大学JAVA俄罗斯方块课程设计模板.docx
《辽宁工程技术大学JAVA俄罗斯方块课程设计模板.docx》由会员分享,可在线阅读,更多相关《辽宁工程技术大学JAVA俄罗斯方块课程设计模板.docx(17页珍藏版)》请在冰豆网上搜索。
辽宁工程技术大学JAVA俄罗斯方块课程设计模板
软件学院
课程设计报告书
课程名称面向对象程序设计
设计题目俄罗斯方块
专业班级财升本11-1
学号1120970105
姓名
指导教师徐娇月
2011年12月
目录
1设计时间1
2设计目的1
3设计任务1
4设计内容1
4.1需求分析1
4.1.1系统功能模块示意图1
4.2俄罗斯方块各个功能模块图设计2
4.2.1模型层(Model)功能模块图设计2
4.2.2视图层(View)功能模块图设计2
4.2.3控制层(Controller)功能模块图设计2
4.3编程步骤3
4.3.1方块的显示3
4.4游戏界面演示14
4.5程序测试结果16
5总结与展望17
参考文献18
成绩评定16
1设计时间
17周(2011年12月19~2011年12月25日)
2设计目的
Java课程设计是对所学面向对象课程的小结,是提高学生对所学知识综合应用能力的一种方式,是集中实践性环节之一。
要求同学们对理论课中所学习到的知识综合运用,实现有一定规模的Java应用.
3设计任务
俄罗斯方块
要实现的功能如下:
(1)游戏区:
玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。
(2)游戏控制:
玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。
(3)级别设置:
玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。
4设计内容
4.1需求分析
学习了《Java面向对象编程》的课程,为了更进一步的提高我们对Java的深入学习,进行了一周的课程设计,我所选择课程设计是利用Java设计一个简单的俄罗斯方块游戏。
其目的是通过本课程设计使我们能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
4.1.1系统功能模块示意图
图1――系统功能模块示意图
4.2俄罗斯方块各个功能模块图设计
4.2.1模型层(Model)功能模块图设计
图2――模型层功能模块图
4.2.2视图层(View)功能模块图设计
图3――视图层功能模块图
4.2.3控制层(Controller)功能模块图设计
图4――控制层功能模块图
4.3编程步骤
4.3.1方块的显示
1.用JAVA-MyEclipse中的JavaProject建立一个新项目。
2.创建界面类:
publicclassErsBlocksGameextendsJFrame{
publicfinalstaticintalinescore=100;
publicfinalstaticinteverylevelscore=alinescore*20;
publicfinalstaticintmaxlevel=10;
publicfinalstaticintinitlevel=5;
privateGameCanvascanvas;
privateErsBlockblock;
privatebooleanplaying=false;
privateControlPanelctrlPanel;
privateJMenuBarbar=newJMenuBar();
privateJMenu
mGame=newJMenu("游戏"),
mControl=newJMenu("控制"),
mhelp=newJMenu("帮助");
privateJMenuItem
miNewGame=newJMenuItem("新游戏"),
milevelup=newJMenuItem("提高级数"),
mileveldown=newJMenuItem("降低级数"),
miExit=newJMenuItem("退出"),
miPlay=newJMenuItem("开始"),
miPause=newJMenuItem("暂停"),
miResume=newJMenuItem("重新开始"),
miStop=newJMenuItem("停止"),
miCtrlBlock=newJMenuItem("方块控制键");
3设置窗体的大小:
setSize(315,392);
4设置窗体的标题:
setTitle(“俄罗斯方块游戏”);
把要用到的图形界面的系统类包import到文件开始处
importjavax.swing.*;
importjava.awt.*;
importjavax.swing.border.Border;
importjava.awt.event.*;
5初始化控件:
publicfinalstaticintboxes_rows=4;
publicfinalstaticintboxes_cols=4;
publicfinalstaticintflatgene=3;
publicfinalstaticintbetweenleveltime=50;
privatefinalstaticintblockkindnum=7;
privatefinalstaticintblockstatusnum=4;
publicfinalstaticint[][]STYLES={//共28种状态
{0x0f00,0x4444,0x0f00,0x4444},//长条型的四种状态
{0x04e0,0x0464,0x00e4,0x04c4},//'T'型的四种状态
{0x4620,0x6c00,0x4620,0x6c00},//反'Z'型的四种状态
{0x2640,0xc600,0x2640,0xc600},//'Z'型的四种状态
{0x6220,0x1700,0x2230,0x0740},//'7'型的四种状态
{0x6440,0x0e20,0x44c0,0x8e00},//反'7'型的四种状态
{0x0660,0x0660,0x0660,0x0660},//方块的四种状态
};
6调试运行
定义游戏数据管理类class为ErsBlocksGame。
把游戏数据(如:
方块数据、空间数据等)设置为类的成员变量,并在构造函数中写初始化代码。
publicclassErsBlocksGameextendsJFrame{
publicfinalstaticintalinescore=100;
publicfinalstaticinteverylevelscore=alinescore*20;
publicfinalstaticintmaxlevel=10;
publicfinalstaticintinitlevel=5;
//游戏核心数据
intblock_box[][]=newint[4][2];/*四个正方形的坐标(相对方块中心点)*/
intblock_cx,block_cy;/*方块中心点在游戏空间中的坐标(相对游戏空间左上角点)*/
intblock_type;/*方块类属(上图中四种分别为0,1,2,3)*/
intgamespace[][]=newint[sp_WIDTH][sp_HIGHT];/*空间数据*/
//游戏的其它属性
intm_score=0;/*游戏得分*/
intm_speed=5;/*控制游戏,单位:
1/1000秒/步*/
intisplaying=0;/*是否在游戏中*/
publicRussionBlockGame()//构造函数
{
cleargamespace();//初始化游戏空间
makenewblock();//第一方块
}
voidcleargamespace()//初始化游戏空间
{
for(inti=0;ifor(intj=0;jgamespace[i][j]=0;
}
}
7根据前面的分析,完成下列的功能函数
voidmakenewblock()//随机生成新的方块数据
voidmovedown()/*下移动方块*/
voidmoveleft()/*左移动方块*/
voidmoveright()/*右移动方块*/
voidturnleft()/*左转动方块*/
voidturnright()/*右转动方块*/
booleanIsCanChangeTo(intcx,intcy,intbox[][])//判断方块能否走到这位置
booleanIsHitBottom()//判断当前方块是否已触底,并处理
booleanCheckAndCutLine(intLn)/*查某行是否为全填充,如是,消掉并返回true*/
booleanIsGameOver()/*true---结束false--没有结束*/
8在窗体类中定义一个游戏数据管理类的成员变量,并实例化,它表示游戏的数据。
如
RussionBlockGamegame=newRussionBlockGame();//建立游戏数据对象
9绘制游戏空间
privateGameCanvascanvas;(画布)
privateErsBox[][]boxes=newErsBox[boxes_rows][boxes_cols];
privateintstyle,y,x,level;
privatebooleanpausing=false,moving=true;
publicErsBlock(intstyle,inty,intx,intlevel,GameCanvascanvas){
this.style=style;
this.y=y;
this.x=x;
this.level=level;
this.canvas=canvas;
intkey=0x8000;
for(inti=0;i{
for(intj=0;j{
booleanisColor=((style&key)!
=0);
boxes[i][j]=newErsBox(isColor);
key>>=1;
}
}
display();
}
10方块移动设置
publicvoidrun()
{
while(moving)
{
try
{
sleep(betweenleveltime
*(ErsBlocksGame.maxlevel-level+flatgene));
}catch(InterruptedExceptionie)
{
ie.printStackTrace();
}
if(!
pausing)
moving=(moveTo(y+1,x)&&moving);
}
}
publicvoidmoveLeft()
{
moveTo(y,x-1);
}
publicvoidmoveRight()
{
moveTo(y,x+1);
}
publicvoidmoveDown()
{
moveTo(y+1,x);
}
publicvoidturnNext()
{
for(inti=0;i{
for(intj=0;j{
if(STYLES[i][j]==style)
{
intnewStyle=STYLES[i][(j+1)%blockstatusnum];
turnTo(newStyle);
return;
}
}
}
}
publicvoidpauseMove()
{
pausing=true;
}
publicvoidresumeMove()
{
pausing=false;
}
publicvoidstopMove()
{
moving=false;
11游戏的重置
publicvoidreset()
{
score=0;
scoreForLevelUpdate=0;
for(inti=0;i{
for(intj=0;jboxes[i][j].setColor(false);
}
repaint();
}
}
12方块的旋转
privateclassControlKeyListenerextendsKeyAdapter
{
publicvoidkeyPressed(KeyEventke)
{
if(!
game.isPlaying())
return;
ErsBlockblock=game.getCurBlock();
switch(ke.getKeyCode())
{
caseKeyEvent.VK_DOWN:
block.moveDown();
break;
caseKeyEvent.VK_LEFT:
block.moveLeft();
break;
caseKeyEvent.VK_RIGHT:
block.moveRight();
break;
caseKeyEvent.VK_UP:
block.turnNext();
break;
default:
break;
}
}
}
}
13背景颜色的设置
privateColorbackColor=Color.darkGray,frontColor=Color.red;
privateErsBox[][]boxes=newErsBox[ErsBlock.boxes_rows][ErsBlock.boxes_cols];
privateintstyle,boxWidth,boxHeight;
privatebooleanisTiled=false;
14较高一级的设置
publicintgetScoreForLevelUpdate()
{
if(canvas!
=null)
returncanvas.getScoreForLevelUpdate();
return0;
}
publicbooleanlevelUpdate()
{
intcurLevel=getLevel();
if(curLevel{
setLevel(curLevel+1);
canvas.resetScoreForLevelUpdate();
returntrue;
}
returnfalse;
}
15方块的移动
privatevoidreportGameMethod(){
JOptionPane.showMessageDialog(this,"J为向左移动,L为向右移动,K为加速向下,I为翻转变化");
}
privatevoidreportGameOver(){
JOptionPane.showMessageDialog(this,"游戏结束!
");
}
16游戏的结束
privatebooleanisGameOver()
{
for(inti=0;i{
ErsBoxbox=canvas.getBox(0,i);
if(box.isColorBox())
returntrue;
}
returnfalse;
}
}
17游戏的重新开始
publicvoidresumeGame()
{
if(block!
=null)
block.resumeMove();
ctrlPanel.setPauseButtonLabel(true);
miPause.setEnabled(true);
miResume.setEnabled(false);
ctrlPanel.requestFocus();
}
18暂停游戏
publicvoidpauseGame()
{
if(block!
=null)
block.pauseMove();
ctrlPanel.setPauseButtonLabel(false);
miPause.setEnabled(false);
miResume.setEnabled(true);
}
19停止游戏
publicvoidstopGame()
{
playing=false;
if(block!
=null)
block.stopMove();
miPlay.setEnabled(true);
miPause.setEnabled(true);
miResume.setEnabled(false);
ctrlPanel.setPlayButtonEnable(true);
ctrlPanel.setPauseButtonLabel(true);
}
4.4游戏界面演示
图5――游戏界面演示图
4.5程序测试结果
(1)俄罗斯方块应用程序的Java源代码全部正确能够通过编译并正常运行。
(2)俄罗斯方块的应用程序要求的功能:
玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况,可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏,玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大等功能都以完全实现。
(3)通过Java编程完全实现了课程设计任务书的全部功能。
5总结与展望
游戏设计与实践是一项复杂而且庞大的工作,在选题之后,我才意识到过程的艰难,因为以前从来没有接触过游戏设计,刚开始时有点迷茫和彷徨。
后来通过看书和在网上查找资料,逐渐找到了一些感觉,依照资料自己动手编写了俄罗斯方块游戏。
此次设计过程中印象最深的收获有:
1、学到了很多新知识,并且对老知识进行了回顾。
经过长时间的学习,更进一步熟悉了Java语言。
2、通过不断上机实验,调试程序,总结经验,从对课题的不理解到能够开始动手去做,提出问题并自己想办法解决问题,自己多实践,所以增强了动手能力。
3、提高了中、英文资料的检索能力。
这次毕业设计过程中我查阅了很多资料,不但有图书馆的期刊、杂志、馆藏图书,还有网络中的电子文档、电子书籍、网页及下载的视频教学课程;不但有中文资料还有英文资料。
这些资料,使我的眼界更开阔,对课题的认识更加深刻,编写程序的时候思路更加清楚,少走了很多弯路。
但如果真的要从事游戏设计的工作,需要走的路还很长,即便是对于国际知名的大公司,也是在不断的探索和实践中前进。
但这并不表明前途就是渺茫的,通过这次实践,进行了一次从底而上和自上而下的归纳和演绎的过程,在变化多端的游戏面前,总算领悟了一点它的奥妙。
内容繁复、采用的表现手段多姿多彩的游戏世界,即便是再复杂,也可以通过一定程度的归纳演绎得出适应其规则和表现的契合点。
回顾这个设计过程,我学到了许多书本上没有学到的知识。
通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。
在这次设计的同时,我又从中学到了许多东西。
但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,如不能把要装载的方块提前显示出来。
因此做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个系统的不足之处。
经过一学期的Java课程设计学习,使我得知自己的知识还很欠缺,但是我并不灰心,通过这次实践操作使我认识到学习JAVA的乐趣,为以后的学习和工作打下基础。
参考文献
[1]屈辉立,陈可明,石武信.JSP网站编程教程[M].第1版,北京:
北京希望电子出版社,2005
[2]白勇.用B/S模式构建在线考试系统[J],重庆电力高等专科学校学报,2003,10(4):
100~130.
[3]JiangGuo,YuehongLiao,BehzadParviz.ASurveyofJ2EEApplicationPerformanceManagementSystems[J],ProceedingsoftheIEEEInternationalConferenceonWebServices(ICWS'04),2004.6(5):
17~32.
[4]VB数据库管理范例:
成绩评定
成绩教师签字