ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:143.16KB ,
资源ID:3180815      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3180815.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(11积木游戏的设计Word文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

11积木游戏的设计Word文档格式.docx

1、2运行环境 64.模块分析 74.1 主界面模块 74.2 方块的各种形状模块 94.3 画布的设计模块 104.4块的操作设计模块 114.5 消除行的模块 135.系统测试 156.结论 19致谢 20参考文献 21 摘要近来,随着计算机的快速发展,以计算机作为对战平台,各种游戏如雨后春笋般纷纷冒出,俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 Java是面向对象的编程语言。面向对象技术

2、较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。本程序用java语言,实现了一个简单的俄罗斯方块。关键字:

3、俄罗斯方块、JAVA 、 1 引 言1.1 问题的提出电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机DEC公司的PDP10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者

4、必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢1.2国内外研究的现状 近来,随着计算机的快速发展,小方块的魅力经久不衰。截至2009年,俄罗斯方块发售了125亿份,受到50多个国家和地区的玩家喜爱,有超过50种语言的版本,运行在几十种游戏平台 上,从掌机、街机、个人电脑,到手机和PDA。罗杰斯说,移动设备已经成为俄罗斯方块新的主要平台,该领域的发售量已超过7500万份,并且还在快速增 长。在俄罗斯方块网络版的北美和欧洲官方网站上,每天超过100万人次玩这个游戏。俄 罗斯方块获得许多奖励,在多项评选中被评为最经

5、典游戏之一。它还创造了一些世界纪录,比如它是在最多平台上运行的视频游戏,也是直接连累玩家坐牢时间最长 的游戏。2002年,一名过分沉迷的英国玩家不听机组人员的劝阻,在飞机上用手机玩俄罗斯方块,结果被判刑入狱4个月。俄 罗斯方块成功的奥妙在哪里?它的创造者帕基特诺夫认为,可能在于这个游戏非常简单,而且拼图的过程有“从混乱中寻找秩序”的成就感。罗杰斯则说,俄罗斯方 块是一个建设性的游戏,这一点与中国的围棋相似,“国际象棋就是杀杀杀,围棋则重视构建领地,是建设性的,俄罗斯方块也是”。25 年过去了,电脑业和电子游戏业都发生了巨大变化,拥有华丽画面、震撼音效和丰富剧情的大型游戏包括网络游戏纷纷出现,开

6、辟并占据了新的市场。俄罗斯方块这 样的游戏还有前途吗?帕基特诺夫认为还很有前途。他说,俄罗斯方块是一个休闲游戏,它面对的是那些没有精力或兴趣玩大型游戏的玩家,这些人需要一类简单好 玩的游戏,拿起来就能进入状态,在忙碌的生活中寻求片刻放松。帕基特诺夫表示,将对俄罗斯方块进行改进,使人们能够更容易从中获得休闲乐趣。罗杰斯说,今后的努力方向包括发展俄罗斯方块的竞技性,开发能够适应玩家特点的“智能”俄罗斯方块,并使来自世界各地、说不同语言的人们能够一起娱乐,通过这个游戏寻求共同点。对于中国市场,罗杰斯说,他正在与中国腾讯公司商谈,研究将俄罗斯方块集成到即时通讯软件QQ中去的事宜。他还将参加今年7月份举

7、行的中国国际数码互动娱乐展览会,与联众等中国游戏企业探讨合作前景。1.4 任务与分析1设计内容:设计完成一个多情况积木游戏。2设计要求:(1)完成积木为矩形块,区间是矩形的设计;(2)完成积木为矩形块,T形块、L形块,区间是矩形的设计;(3)完成积木为矩形块,T形块、L形块,区间是凸边形的设计;(4)完成积木为矩形块,T形块、L形块,区间是矩形的设计;(5)积木为矩形块,T形块、L形块,区间是口袋的设计;2.总体设计方案2.1 算法设计2.1.1 总体框架图根据分析,积木游戏这个程序一共要实现如下几个功能,开始游戏、游戏的暂停继续、游戏控制和退出游戏。其中游戏控制最为主要和重要,它控制着整个游

8、戏的画面和有关数据的操作,是游戏的核心部分。暂停和退出功能做成一体,在退出的提示下不做任何操作即可实现暂停的功能。程序结构如图2-1-1所示。图2-1-1 整体框架图2.1.2 程序流程图根据分析后的程序结构图设计出相应的流程图。积木游戏的内容主要包括游戏开始,画背景和边框,显示分数等级和下一个方块的预览图;根据速度没隔一定时间方块自动下落,当有按键操作时,根据相应按键执行动作,每次动作前要判断是否动作可以执行。下落方块满一行时,消去该行,根据消去行数得到相应分数,如图2-1-2所示:图2-1-2 具体流程图3 程序运行平台1开发环境 AMD 4600+ 4 2.0GHz,1G内存,160G硬

9、盘 Microsoft Windows XP Professional 语言:JAVA 平台:Eclipse2运行环境 Intel Pentium 2及以上处理器,32M以上内存,4G以上硬盘 Windows 9X/NT操作系统 800*600或以上的屏幕分辨率4.模块分析4.1 主界面模块该模块设计思想是:定义一个类实现主界面,在主窗口分成两份,左边画布类,右边添加开始、分数、暂停、退出按钮。/俄罗斯方块类的构造方法 ERS_Block(String title) super(title); setSize(600,480); setLayout(new GridLayout(1,2); g

10、ameScr = new GameCanvas(); gameScr.addKeyListener(gameScr); timer = new MyTimer(gameScr); timer.setDaemon(true); timer.start(); timer.suspend(); add(gameScr); Panel rightScr = new Panel(); rightScr.setLayout(new GridLayout(2,1,0,30); rightScr.setSize(120,500); add(rightScr); /右边信息窗体的布局 MyPanel infoS

11、cr = new MyPanel(); infoScr.setLayout(new GridLayout(4,1,0,5); infoScr.setSize(120,300); rightScr.add(infoScr); /定义标签和初始值 Label scorep = new Label(分数:,Label.LEFT); Label levelp = new Label(级数: scoreField = new TextField(8); levelField = new TextField(8); scoreField.setEditable(false); levelField.set

12、Editable(false); infoScr.add(scorep); infoScr.add(scoreField); infoScr.add(levelp); infoScr.add(levelField); scorep.setSize(new Dimension(20,60); scoreField.setSize(new Dimension(20,60); levelp.setSize(new Dimension(20,60); levelField.setSize(new Dimension(20,60); scoreField.setText(0); levelField.s

13、etText(1 /右边控制按钮窗体的布局 MyPanel controlScr = new MyPanel(); controlScr.setLayout(new GridLayout(5,1,0,5); rightScr.add(controlScr); /定义按钮play Button play_b = new Button(开始游戏 play_b.setSize(new Dimension(50,200); play_b.addActionListener(new Command(Command.button_play,gameScr); /定义按钮Level UP Button le

14、vel_up_b = new Button(提高级数 level_up_b.setSize(new Dimension(50,200); level_up_b.addActionListener(new Command(Command.button_levelup,gameScr); /定义按钮Level Down Button level_down_b =new Button(降低级数 level_down_b.setSize(new Dimension(50,200); level_down_b.addActionListener(new Command(Command.button_le

15、veldown,gameScr); /定义按钮Level Pause Button pause_b =new Button(游戏暂停 pause_b.setSize(new Dimension(50,200); pause_b.addActionListener(new Command(Command.button_pause,gameScr); /定义按钮Quit Button quit_b = new Button(退出游戏 quit_b.setSize(new Dimension(50,200); quit_b.addActionListener(new Command(Command.

16、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(); 4. 方块的各种形状模块这个实现了方块的各种形状,初始化的时候是随机生成方块的形状: static int pattern = 0x0f00,0x4444,0x0f00,0x4444,/用十六进至表示,本行表示

17、长条四种状态 0x04e0,0x0464,0x00e4,0x04c4, /|- 0x4620,0x6c00,0x4620,0x6c00, /反Z 0x2640,0xc600,0x2640,0xc600, /Z 0x6220,0x1700,0x2230,0x0740, /7 0x6440,0x0e20,0x44c0,0x8e00, /L 0x0660,0x0660,0x0660,0x0660 /田 ; int blockType; /块的模式号(0-6) int turnState; /块的翻转状态(0-3) int blockState; /快的下落状态 int row,col; /块在画布上

18、的坐标 GameCanvas scr; /块类的构造方法 Block(GameCanvas scr) this.scr = scr; blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1; row = scr.getInitRow(); col = scr.getInitCol(); 4. 画布的设计模块定义一个类(class GameCanvas extends Canvas implements KeyListener)这个类中画当前的方块状态

19、,当生成一个随机块后需要对块进行在画布上画,采用了一个线程,每隔毫秒之后画一次当前画布上的所有块:(关键代码): /画方块的方法 public void drawUnit(int row,int col,int type) scrArrrowcol = type; Graphics g = getGraphics(); switch(type) /表示画方快的方法 case 0: g.setColor(Color.black);break; /以背景为颜色画 case 1: g.setColor(Color.blue); /画正在下落的方块 case 2: g.setColor(Color.m

20、agenta); /画已经落下的方法 g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true); g.dispose(); /定时线程 class MyTimer extends Thread public MyTimer(GameCanvas scr) public void run() while(true) try sleep(10-ERS_Block.level + 1)*100); catch(InterruptedException e) if(!scr.getBlock(

21、).fallDown() scr.deleteFullLine(); if(scr.isGameEnd() ERS_Block.isPlay = false; suspend(); else scr.getBlock().reset();4.4块的操作设计模块当把块画出来了之后,就需要添加对键盘的操作监听模块(方向键:向上键实现对块的翻转,向左键实现对块的向左移动,向右键实现对块的向右移动,向下键实现对块的加速下落): /处理键盘输入的方法 public void keyPressed(KeyEvent e) ERS_Block.isPlay) return; switch(e.getKeyC

22、ode() case KeyEvent.VK_DOWN:b.fallDown(); case KeyEvent.VK_LEFT:b.leftMove(); case KeyEvent.VK_RIGHT:b.rightMove(); case KeyEvent.VK_UP:b.leftTurn(); /实现“块”翻转的方法 public void leftTurn() if(assertValid(blockType,(turnState + 1)%4,row,col) dispBlock(0); turnState = (turnState + 1)%4; dispBlock(1); /实现“

23、块”的左移的方法 public void leftMove() if(assertValid(blockType,turnState,row,col-1) col-; /实现块的右移 public void rightMove() if(assertValid(blockType,turnState,row,col+1) col+; /实现块落下的操作的方法 public boolean fallDown() if(blockState = 2) return(false); if(assertValid(blockType,turnState,row-1,col) row-; return(

24、true); else blockState = 2; dispBlock(2);4.5 消除行的模块当块下落后要实现对所有的行遍历,如果一行的颜色都是一样的,着对当前的行记录,如果有一行或多行,则全部消除。 /满行删除方法 void deleteFullLine() int full_line_num = 0; int k = 0; for (int i=0;irowNum;i+) boolean isfull = true; L1:for(int j=0;jcolumnNum;j+) if(scrArrij = 0) k+; isfull = false; break L1; if(isf

25、ull) full_line_num+; if(k!=0 & k-1!=i & !isfull) for(int j = 0; j columnNum; j+) if (scrArrij = 0) drawUnit(k-1,j,0); else drawUnit(k-1,j,2); scrArrk-1j = scrArrij; for(int i = k-1 ;i rowNum; i+) drawUnit(i,j,0); scrArrij=0; ERS_Block.score += full_line_num; ERS_Block.scoreField.setText(+ERS_Block.s

26、core); for (int j = 0; 11; j+) /竖 if (chessxj = temp & chessxj + 1 = temp & chessxj + 2 = temp & chessxj + 3 = temp chessxj + 4 = temp) return true; 5.系统测试1运行Eclipse,打开ERS_Block.java 文件,点击运行,出现主界面:图5-1主界面2.点击开始游戏按钮,则可以开始游戏(游戏界面会出现各种形状的方块):图5-2 各种形状的方块3.、当有一行或多行的块的颜色相同,则消除该行,并更新分数:图5-3 行消除前 图5-4 行消除后6.结论首先我对Java游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。这次通过做毕业设计,我完成了俄罗斯游戏的软件开发任务。在整个开发过程中遇到了很多问题,如方块的装载和变形、屏幕太闪烁的问题、满行判断及消行的处理。但最终都被我一一解决,对其中比较主要的几点体会总结如下。第一,为了熟悉俄罗斯方块的相关运作,我经常在玩街机和游戏机上的俄罗斯方块,慢慢去发现它所有的功能,然后再思考和查阅资料进行分析,经过逐步的设计与反复的修改论证,才完成了整个游戏的开发。第二,完成了从“小而全”,到“全而精”的转变。设计过程中,经常会遇到困难,我学会通过反复思考和测试,然后

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2