俄罗斯方块单人版游戏.docx
- 文档编号:8927402
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:198.64KB
俄罗斯方块单人版游戏.docx
《俄罗斯方块单人版游戏.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块单人版游戏.docx(18页珍藏版)》请在冰豆网上搜索。
俄罗斯方块单人版游戏
Java程序设计课程设计报告
课题:
俄罗斯方块单人版游戏
姓名:
曹夏平
学号:
201117010127
同组姓名:
肖立、邹娟
专业班级:
计科11101班
指导教师:
刘国清
设计时间:
2013/6/23
评阅意见:
评定成绩:
指导老师签名:
年月日
一、课程设计目的
1)运用Java实现小游戏的开发
2)了解Java开发项目的流程
3)掌握规划,设计,开发,测试的能力
二、课程设计题目描述和要求
1)题目:
单人版俄罗斯方块
2)题目描述:
俄罗斯方块是基于JAVA-J2SE平台开发的一款JAVA小游戏。
3)题目要求:
熟悉java的编程环境J2SDK,掌握Application和Applet的程序结构,并能熟练编写和调试两类程序。
熟练使用各种常用类库。
理解JDK的事件处理机制,掌握java.awt、javax.swing,javax.swing.event中的GUI标准组件的用法,学会合理运用布局策略、综合运用各种界面元素,编程构造满足应用需要的图形工作界面。
三、课程设计报告内容
3.1设计方案的论证:
本游戏是根据流行的俄罗斯方块的样式改变而成的,但屏蔽了音乐,背景图片等功能,因为无法掌握深奥的算法。
因此玩法比较单一。
但是优点是开发周期较短。
本游戏的设计采用MVC模式(Model-View-Controller),即把本游戏的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样本游戏的设计被分成三个层—模型层、视图层、控制层。
MVC模型图如下所示:
3.3各个功能模块图设计
具体模块划分算法:
1,主面板设计,主面板为container其面积为300*400,其下添加子面板canvas,controlPanel,并采用BorderLayout的布局方式(如图片1)
2.Canvas面板中包含20行12列的小方块,用于显示游戏内容(如图片2)
3.controlPanel面板中包含tipPanel,InfoPanel,buttonPanel子面板,分别为图形界面面板,信息面板,按钮面板(如图片3)
图片3
4.图形显示面板设计为BorderLayout布局样式.其中添加tipPanel面板居中(以显示下一个俄罗斯方块样式),标签居上的样式(图片4)
图片4
信息面板设计为4行1列式的GridLayout网格状布局,并且添加当前等级,显示当前等级文本域,当前分数,显示当前分数文本域(图片5)
图片5
按钮面板设计为3行1列式的GridLayout网格状布局,并且添加开始,暂停,停止三个按钮(图片6)
图片6
5.Bar栏中添加3个菜单按钮,分别为gameMenu(游戏菜单),windowStyleMenu(窗口样式),informationMenu(信息菜单)
6.游戏菜单里有新游戏,退出两个选项卡,窗口样式菜单里有windows,motif,mentel这3种样式选项卡,信息菜单里面有作者,帮助两个选项卡
流程图:
1)视图层功能模块图设计:
2)控制层功能模块图设计:
3.4详细设计
3.4.1模型层设计
1)图形的产生
通过图形工厂类ShapeFactory的getShape(ShapeListenerlistener)方法随机产生方块的某种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:
你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品的方法,然后根据你传进来的产品,而决定工厂人生产什么产品,产生出来产品后,最后要返回您要的这个东西。
2)图形数据结购
定义一个4x4方阵,共16个小格。
用“0”和“1”来表示每个方格是绘制还是空白,由此可以组合出多种图形,如图所示:
其中图一表示为{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}
其中图二表示为{0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0}
其中图三表示为{0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0}
其中图四表示为{0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,0}
方块的旋转是通过绘制4个方向的方块,在不同旋转角度显示不同方向的方块来完成的。
所以程序要控制方块的旋转方向,只要控制显示哪副图就可以了。
本游戏是用一个三维数组int[][][]shapes=newint[][][];作为存储方块的数据结构来保存方块的28种状态的。
代码如下:
publicfinalstaticint[][]STYLES=//共28种状态
{
{0x0f00,0x4444,0x0f00,0x4444},//长条形的4种状态
{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},//方块
};
privateGameCanvascanvas;//该方块所在的画布
privateErsBox[][]boxes=newErsBox[BOXES_ROWS][BOXES_COLS];//16个方格
privateintstyle=0,y=0,x=0,level=0;
privatebooleanpausing=false,moving=true;
//构造方法,产生一个特定的块。
/**@paramstyle方块的样式,对应STYLES的28个值中的一个
*@paramy起始位置,左上角在canvas中的坐标行
*@paramx起始位置,左上角在canvas中的坐标列
*@paramlevel游戏等级,控制块的下落速度
*@paramcanvas画布,即游戏窗口。
*/
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(); } 以下这段代码是3个子模块的代码,通过实例化按钮,标签,文本域,图形面板等,用add方法进行添加等,具体解释在代码中有体现 publicControlPanel(finalErsBlockGamegame) { //整个控制面板有三个子面板,摆放在1列,每行的间距是4 setLayout(newGridLayout(3,1,0,4)); this.game=game; //预提示面板的两个构件及边界 plTip.add(newJLabel("下一个方块"),BorderLayout.NORTH); plTip.add(plTipBlock); plTip.setBorder(border); //游戏信息显示面板的两个标签和两个文本域及边界 plInfo.add(newJLabel("难度级别")); plInfo.add(tfLevel); plInfo.add(newJLabel("得分")); plInfo.add(tfScore); plInfo.setBorder(border); //两个文本域都是不可编辑的,只用于显示信息! ! ! tfLevel.setEditable(false); tfScore.setEditable(false); //按钮面板的5个按钮及边界 plButton.add(btPlay); plButton.add(btPause); plButton.add(btStop); plButton.add(btTurnLevelUp); plButton.add(btTurnLevelDown); //将三个合成面板加入到主面板中 add(plTip); add(plInfo); add(plButton); 3.4.2游戏演示 3.4.2.1游戏界面演示,如7 图7 3.4.2.2游戏设置控制菜单,如图8 图8 3.4.2.3游戏开始、继续、暂停、退出控制菜单,如图9 图9 3.4.2.4游戏窗口风格控制界面 图10 3.4.2.5游戏帮助界面 图11 3.5系统测试 3.5.2右侧快捷按钮测试 1.点击“开始”按钮 效果: 游戏开始 结果: 正常 2.点击“暂停”按钮 效果: 游戏暂停 结果: 正常 3.点击“停止”按钮 效果: 游戏重置 结果: 正常 4.点击“增加难度”按钮 效果: 难度系数增加 结果: 正常 5.点击“降低难度”按钮 效果: 难度系数降低 结果: 正常 3.5.3界面菜单选项的功能测试 1.“游戏”菜单的测试 (1)点击“游戏”“新游戏” 效果: 游戏正常开始 结果: 正常 (2)点击“游戏”“设置方块颜色” 效果: 可以自定义设置各种颜色 结果: 正常 (3)点击“游戏”“设置背景颜色” 效果: 可以自定义设置各种颜色 结果: 正常 (4)点击“增加难度”按钮 效果: 难度系数增加 结果: 正常 (5)点击“降低难度”按钮 效果: 难度系数降低 结果: 正常 2.“控制”菜单测试 (1)点击“开始”按钮 效果: 游戏开始 结果: 正常 (2)点击“暂停”按钮 效果: 游戏暂停 结果: 正常 (3)点击“继续”按钮 效果: 游戏继续 结果: 正常 (4)点击“停止”按钮 效果: 游戏重置 结果: 正常 3.“窗口风格”菜单测试 (1)点击“窗口样式”“Windows” 效果: 切换为Wingdows模式 结果: 正常 (2)点击“窗口样式”“Motif” 效果: 切换为Motif样式 结果: 正常 (3)点击“窗口样式”“Mentel” 效果: 切换为Mentel模式 结果: 正常 4.“帮助”菜单测试 点击“帮助” 效果: 显示作者及版本 结果: 正常 3.5.4按键事件的功能测试 (1)方块移动测试 游戏过程中,点击“左、右、下”方向键 输出: 方块正常移动,不会移出边界 结果: 正常 (2)方块反转测试 游戏过程中,点击向上方向键 输出: 方块无边界和障碍物阻挡的情况下可反转 结果: 正常 3.5.5方块堆砌与消行测试 (1)当方块下落到最底面或与障碍物接触时 输出: 方块成功堆砌在底部 结果: 正常 (2)当出现满行现象时 输出: 所有满行被消除,方块依次下移 结果: 正常 3.5.6测试结果分析 经过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。 四、结论 1、问题: 写程序的时候,由于对有些Java知识不懂,所以有些想要表达的意思无法用Java代码准确的表达出来,老是出错或者无法写下去; 一开始,自己准备的参考资料不足,无法在遇到问题时有效的利用参考资料解决,遇到不懂的问题和不会用程序语言表达的问题时,只能留在那里,无法解决,结果问题最后越积越多,导致我无法再把程序写下去; 一开始,对于老师布置的作业题目,我不太懂,无法进行有效而且清晰的分析,自然也无法继续下去写程序了,耽误了较多的时间; 对于要写流程图,一开始我并不懂是什么意思,也不知道怎么去写。 2、解决方法: 对于那些不懂的Java知识和不会写的程序,我通过向同学寻求帮助和利用参考资料书,最终都解决了; 对于自己参考资料不足的缺点,我在下课后,去了图书馆借阅有关方面的Java参考资料书,并且向同学借阅了他们所拥有的资料书,然后又利用自己的电脑上网查找了一些有关方面的参考知识,终于在最后解决了资料不足的缺点; 对于不懂的题目,我也通过向多个同学进行询问,最终弄懂了老师布置的题目所要求的内容; 至于流程图,在我向同学询问过,并且上网进行了一番查找和咨询后,也总算弄懂了流程图的含义,并努力写了出来。 五、结束语 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程. 回顾起课程设计,至今我仍感慨颇多,的确,在这一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 通过课程设计之后,把以前所学过的知识重新温故。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的指导下,终于迎刃而解。 在此我表示感谢! 同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢 六、参考书目: [1][美]克罗夫特著,彭晖译.Java游戏高级编程.清华大学出版社.2005. [2]李尊朝,苏军.Java语言课程设计.中国铁道出版社.2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 单人 游戏