java俄罗斯方块课程设计.docx
- 文档编号:8594984
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:195.50KB
java俄罗斯方块课程设计.docx
《java俄罗斯方块课程设计.docx》由会员分享,可在线阅读,更多相关《java俄罗斯方块课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
java俄罗斯方块课程设计
课程设计说明书NO.1
俄罗斯方块游戏
1.课程设计的目的
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。
而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于设计者而言,是个很好的锻炼机会。
因此为了进一步巩固课堂上所学到的知识,深刻掌握Java语言的重要概念及其面向对象的特性,锻炼熟练的应用面向对象的思想和设计方法解决实际问题的能力,通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,拓宽常用类库的应用。
使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
2.设计方案论证
2.1设计思路
根据对系统进行的需求分析,本系统将分为2个模块:
分别是游戏区显示模块和功能键模块。
实现的功能有:
(1)显示游戏的方块形状
游戏玩家打开游戏界面,点击开始游戏,便会在游戏整个界面的左面依次显示不同形状的方块。
(2)分数显示
根据游戏玩家在游戏当中的操作显示增加对应分数。
(3)级数显示
根据游戏玩家所选择的不同等级显示不同的等级数,级数越高,俄罗斯方块下落的速度越快,反之则越慢。
(4)开始游戏功能键
沈阳大学
课程设计说明书NO.2
游戏玩家进入游戏界面之后点击该功能键就能开始俄罗斯方块游戏。
(5)提高级数功能键
该功能键实现俄罗斯方块游戏的级数的增加,点击此功能键的同时级数显示功能模块的数字发生相应的变大,在游戏显示区显示的效果为方块下落的速度加快,使游戏的难度增加。
(6)降低级数功能键
该功能键实现俄罗斯方块游戏的级数的降低,点击此功能键的同时级数功能模块显示的数字发生相应的减小,在游戏显示区显示的效果为方块下落的速度减慢,使游戏的难度降低。
(7)暂停游戏功能键
在游戏玩家进行游戏的过程中,只要在任何时候单击该功能键就能实现俄罗斯方块游戏的暂停。
图1.游戏模块构成图
沈阳大学
课程设计说明书NO.3
(8)退出游戏功能键
游戏玩家在游戏的过程中,可以在任何时刻点击该功能键按钮,就可以实现该游戏的退出。
该俄罗斯方块游戏的流程是首先打开游戏进入游戏界面,选择相应的等级之后点击开始游戏即可进行俄罗斯方块游戏,该游戏流程图如下:
图2.俄罗斯方块流程图
沈阳大学
课程设计说明书NO.4
2.2设计方法
(1)游戏主方法的设计
在主方法中首先为ERS_Block建立一个对象ers且将游戏的界面命名为“俄罗斯方块游戏”,然后为框架添加了一个窗口事件类WindowListener监听器。
。
(2)游戏信息窗体的设计
在本游戏右边信息窗口中设计了分数、级数2个标签和对应的2个文本框以及开始游戏、提高等级、降低等级、游戏暂停和退出游戏五个命令按钮。
(3)方块形状与画方块的设计
在Block这个类首先定义一个二维数组pattern[][]存储方块的不同形状,在这其中
包含了方块的各种不同的形状以及翻转之后的方块的形状且用十六进至表示,表示如下:
{0x0f00,0x4444,0x0f00,0x4444},{0x04e0,0x0464,0x00e4,0x04c4},{0x4620,0x6c0
0,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},{0x6440,0x0e20,0x44c0,0x8e00},{0x0660,0x0660,0x0660,0x0660}其中一共包含了7种不同的形状的方块图形,分别是长条形,“Z”字形,反“Z”字形,“L”字形,反“L”字形,田字形以及“T”字形,每种形状的方块可以以90度为单位发生翻转形成反向的方块图形。
在GameCanvas类中定义一个initScr()方法,在initScr()方法中调用屏幕数组scrArr[i][j]并且将其赋值为0,接着调用随即函数产生一个随机数然后对其分别进行求余数操作,继而使方块进行下落动作,在下落过程中调用drawUnit(introw,intcol,inttype)方法实现方块的颜色,当方块下落到游戏窗体的底部并且方块没有满行时,继续调用drawUnit(introw,intcol,inttype)方法实现方块的颜色;调用scr.getInitRow()函数获取方块的横坐标和纵坐标。
在Block类之中包含了整形变量blockType表示方块的形状,模式编号为0-6的变化,即方块的7种基本的形状;整形变量turnState实现块的翻转状态0-3,如:
“Z”字形可以变化为反”Z”字形的形状;整形变量blockState实现方块的下落状态;整形变量row,col确定块在画布上的坐标。
在Block类中定义Block(GameCanvasscr)方法重新初始化块,并显示新块;首先定义publicvoidreset()方法实现"块"翻转的操作。
下图列举了方块的四种形状:
沈阳大学
课程设计说明书NO.5
图3.方块的形状
(4)满行删除方法的设计
设计成功的俄罗斯方块游戏,必须要达到在方块满行的实现消去满行的功能,在这里利用设计的deleteFullLine()方法来实现此功能,并在此同时实现分数的增加。
该功能通过以下关键代码实现:
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++;} 实现满行删除的方法首先定义方法deleteFullLine(),在方法里体定义累加删除满行的数量的整形变量full_line_num和控制变量整形变量k,算法是首先定义一个控制行数的变量i,调用一个for外循环使行数i从i=0开始循环进行从方块底部到顶部行数的遍历,直到i小于定义的行数变量rowNum时结束循环,然后在循环体内定义一个boolean型变量isfull且赋值为true;然后再对标签L1进行for循环即对每一行的每一列进行列的遍历,在循环之中定义一个控制循环控制变量j,使j从j等于0开始循环进行每一行进行遍历,对每一列利用分支结构if进行条件判断,如果scrArr[i][j]等于0表示此列没 沈阳大学 课程设计说明书NO.6 有方块存在,然后只要此处没有方块存在即scrArr[i][j]等于0,控制变量k进行自加1,反之如果scrArr[i][j]不等于0及scrArr[i][j]等于1表示此处有方块存在,接着isfull的值被赋值为true,if判断条件为真,行数累加的变量full_line_num进行自加,表示删除了一行方块。 如果在遍历时发现此行方块没有满行,即三个条件k不等于0,k-1不等于i和isfull为false取与之后的值为真继续应用一个for循环在画布上画出下落到底部的方块,在画方块的过程之中调用含有三个参数的方法drawUnit(),分别传入相应的方块在画布当中的坐标并且执行相应的操作在画布上画出方块图形,接着调用if判断条件scrArr[i][j]是否等于0.如果scrArr[i][j]等于零执行g.setColor(Color.black)即以背景为颜色画方块;如果scrArr[i][j]不等于0执行g.setColor(Color.magenta),即在画布上画出已经落下的方块,已经落下的方块的新坐标用scrArr[k-1][j]=scrArr[i][j]语句实现且将颜色设置为粉红色。 在删除满行的同时游戏还得不断的从游戏画布的顶端产生新的方块,并且调用for循环将屏幕数组横坐标从k-1至小于横坐标rowNum,纵坐标从j等于0开始至小于columnNum开始遍历整个屏幕数组scrArr[i][j],并且将scrArr[i][j]赋值为0。 在实现满行删除方法的最后将full_line_num的累计总和加上ERS_Block.score的总和赋值给ERS_Block.score作为游戏玩家在体验俄罗斯方块游戏过程中获得的游戏分数,别切将次分数在赋值给ERS_Block.scoreField.setText,使分数显示在游戏界面右边的分数显示框中。 (5)方块翻转的设计 在Block类中定义一个无返回值的方法leftTurn()实现方块的翻转,在leftTurn()方法体中使用if条件判断,在条件当中调用判断是否正确的方法assertValid(),在此方法中包含了四个参数分别为方块类型,方块的翻转状态以及方块的横坐标和纵坐标,在assertValid()方法中定义一个k并为其赋值为0x8000;利用for循环对i等于0至i小于4和j等于0至j小于4分别进行一次遍历,在j的循环体中将pattern[t][s]和k取与运算之后强制转换为整形变量,使用if条件来判断其值是否为不等于0,如果不等于0再通过GameCanvas类的对象对scr调用getScrArrXY()方法且传入row-i,col+j两个参数,如果temp小于0或者temp等于2返回false,反之则返回true。 接着程序继续往下运行,k无符号往右移一位。 在assertValid()返回值为真的情况下,继而调用Block类中的 沈阳大学 课程设计说明书NO.7 dispBlock()方法且向其中传入参数0,方法中定义一个k并为其赋值为0x8000;利用for 循环对i等于0至i小于4和j等于0至j小于4分别进行一次遍历,在j的循环体中将 pattern[blockType][turnState]与k取与运算之后强制转换为整形变量,使用if条件来判断其值是否为不等于0,如果其值不等于0,再通过GameCanvas类的对象对scr调用drawUnit()方法并且传入方块的坐标以及方块的翻转状态在游戏界面的画布上进行方块的操纵,然后在将k无符号向右移一位,这样就实现了块的翻转。 实现方块的主要代码如下: publicvoidleftTurn(){ if(assertValid(blockType,(turnState+1)%4,row,col)){ dispBlock(0); turnState=(turnState+1)%4; dispBlock (1);} } (6)方块移动的设计 在此功能中实现产生的每个的方块的移动的方法分为左移、右移和下落三种方法,在leftMov()方法体中使用if条件判断,在条件当中调用判断是否正确的方法assertValid(),在此方法中包含了四个参数分别为方块类型,方块的翻转状态以及方块的横坐标和纵坐标,在assertValid()方法中定义一个k并为其赋值为0x8000;利用for循环对i等于0至i小于4和j等于0至j小于4分别进行一次遍历,在j的循环体中将pattern[t][s]和k取与运算之后强制转换为整形变量,再通过GameCanvas类的对象对scr调用getScrArrXY()方法且传入row-i,col+j两个参数,如果temp小于0或者temp等于2,返回false,反之则返回true,接着调用dispBlock()方法并传入参数0,在方法体中定义一个参数k且赋值为0x8000,利用for循环对i等于0至i小于4和j等于0至j小于4分别进行一次遍历,在j的循环体中将pattern[blockType][turnState]与k取与运算之后强制转换为整形变量,通过GameCanvas类的对象对scr调用drawUnit()方法并且传入方块的坐标以及方块的翻转状态在游戏界面的画布上进行方块的操纵,接着程序继续往下运行,k无符号往右移一位。 实现方块的右移方法与左移的方法类似,只是在队列 沈阳大学 课程设计说明书NO.8 坐标从方块左移的语句col--变为方块右移的col++;定义实现方块下落的方法boolean型的fallDown()方法,在方法体内用if判断方块下落状态变量blockState是否等于2,如果等于2返回false;如果方块下落状态变量blockState不等于2,再用if判断是否正确方法assertValid()是否为真,如果为真继续调用dispBlock()方法并传入参数0,在方法体中定义一个参数k且赋值为0x8000,利用for循环对i等于0至i小于4和j等于0至j小于4分别进行一次遍历,在j的循环体中将pattern[blockType][turnState]与k取与运算之后强制转换为整形变量,通过GameCanvas类的对象对scr调用drawUnit()方法并且传入方块的坐标以及方块的翻转状态在游戏界面的画布上进行方块的操纵,接着程序继续往下运行,k无符号往右移一位,行坐标row自减返回,然后接着继续调用dispBlock()且传入参数1,返回true;如果判断方法assertValid()为假,将方块下落状态变量blockState赋值为2,调用dispBlock()且传入参数2,返回true。 实现方块左移的代码如下: publicvoidleftMove(){ if(assertValid(blockType,turnState,row,col-1)){ dispBlock(0); col--; dispBlock (1);} } (7)实现按钮功能方法的设计 按钮功能的方法的实现首先定义一个方法actionPerformed(),在方法体内定义一个switch分支结构选择执行相应的功能,用case进行选择。 在本方法内包含5种不同的功能: button_play开始功能,button_levelup提高等级,button_leveldown降低等级,button_pause游戏暂停,button_quit退出游戏;分别判断ERS_Block.isPlay非真,即调用scr.initScr()方法,然后将所有的成员变量初始化ERS_Block.isPlay赋值为true,ERS_Block.score赋值0,ERS_Block.scoreField.setText()的内容赋值为0,接着调用函数 ERS_Block.timer.resume()方法实现相应的功能,利用requestFocus()方法获得焦点结束开始游戏功能设计。 提高级数方法button_levelup: if(),如果ERS_Block.level小于10, 沈阳大学 课程设计说明书NO.9 方块游戏的级数进行自加,实现语句ERS_Block.level++的功能且在文本框中显示俄罗斯方块游戏的级数并将使游戏的分数赋值为0且在右边文本框之中显示游戏获得的分数为0。 实现开始游戏功能的代码如下: casebutton_play: if(! ERS_Block.isPlay){ scr.initScr(); ERS_Block.isPlay=true; ERS_Block.score=0; ERS_Block.scoreField.setText("0"); ERS_Block.timer.resume();} scr.requestFocus();break;} 3.设计结果与分析 (1)游戏整体界面 在游戏整体界面窗口中包含了游戏画布界面和功能区两个模块。 图4.俄罗斯方块游戏主界面 沈阳大学 课程设计说明书NO.10 (2)提高等级和降低等级后的界面 提高游戏等级和降低等级在游戏等级文本框中显示相应的等级数,游戏玩家可以通过提高等级和降低等级按钮改变游戏的等级,当游戏的等级发生相应的改变时,给玩家的变化是游戏中方块下落的速度也会发生相应的变化,等级提高便是游戏方块下落速度变快,反之则是游戏方块下落速度变慢。 如图5所示: 图5.提高等级和降低等级对比界面 (3)运行游戏界面 在运行游戏的过程中在游戏画布的顶端随机产生不确定的不同形状的方块图形,并且自动下落,在下落的过程中国可以通过玩家的操作改变方块的形状,直到达到玩家所预想的形状,直到方块下落到游戏画布的底端,方块停止下落,如果有方块满行情况自动删除,并且分数自动进行增加且在分数显示文本框显示玩家在游戏过程中获得的游戏分数。 如图6所示: 沈阳大学 课程设计说明书NO.11 图6.游戏运行界面 (4)游戏结束界面 当玩家在游戏过程中使未删除的方块行数达到画布的最顶端时,俄罗斯方块游戏便结束了,玩家点击开始游戏按钮可以重新开始游戏。 如图7所示: 图7.游戏结束界面 沈阳大学 课程设计说明书NO.12 4.设计体会 在为期两周的java课程设计的时间里,学到了很多东西。 虽然在课程设计的过程中,遇到了许多的困难,特别是在解决程序功能算法的时候总是感到很迷茫,但是通过自己不断的查阅这学期学习的java程序设计基础资料以及经过向同学和老师请教过程中,找到了解决功能算法的方法。 课设问题总是不断的出现,通过不断与同学之间的交流,慢慢的将问题解决,虽然在其中遇到了失败,但是只要坚持不懈,总会解决面临的问题。 通过这次俄罗斯方块游戏的课程设计,对java面向对象的编程有了深一步的了解。 通过这次的课程设计,明白了任何事要学会不仅要知其然,而且要知其所以然,做到严谨认真的态度,这样才能更好完成课程设计。 做事情首先要懂得实践,学会把书本上的理论用于实践,只有在实践中才能找到更多隐藏的没有被发现的问题。 这次通过课程设计锻炼了实践能力,在以后遇到更大的难题时,会显得更加的从容,更加的有自信,这样才能有更好的发展。 在以后的工作学习中,一定要相互学习,不耻下问,方能达到事半功倍的效果。 俗话说: 纸上得来终觉浅,绝知此事要躬行。 5.参考文献 [1]丁振凡,Java语言使用教程[M].北京: 邮件大学出版社2006.9 [2]丁振凡,Java语言使用教程实验指导[M].北京: 邮件大学出版社2006.9 [3]BruceEckel,Java编程思想[M].北京: 机械工业出版社2007.6 [4]张孝祥,JAVA就业培训教材[M].北京: 清华出版社2006 [5]宛延闿,实用Java程序设计教程[M].北京: 机械工业出版社2006.4 沈阳大学
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 俄罗斯方块 课程设计