毕业设计-俄罗斯方块.doc
摘 要随着internet的迅速发展,社会已经进入了网络时代。电子商务,网上购物,网上调查,网上学校等等已经确实地存在于我们身边了,而掌握网页和网站的设计技术已经成为程序员的必备技能,将一些编程技术融入网站设计中,可以建立出强大功能的动态网页。该建立出具有强大功能的动态网页,该论文就是基于以上目的的,通过html技术来完成网站的设计。本系统就是利用javaapplet,应用html技术和采用java语言来构成网页游戏应用的基本代码,完成了基于html的网页小游戏。它操作简单,结果清晰。本文只要介绍了俄罗斯方块网页小游戏设计开发的整个过程,本网页在开发方法上采用了结构化模块的设计方法,根据用户的需求及程序的应用与响应,将程序各个部分置于不同的模块当中,一一实现各模块,进而完成整个系统的开发。本游戏界面由网页框架,游戏主屏幕,操作按钮,游戏状态组成。主要模块分别是图形产生模块,图形移动模块,障碍物模块,中央处理模块,面板显示模块。最后,对本次设计取得的成绩和不足做出概况性的总结,并对未来的工作进行展望。关键词: 互联网;俄罗斯方块网页小游戏;javaappletAbstractWith the rapid development of Internet, the society has entered the Internet age. E-commerce, online shopping, online surveys, online schools have indeed exist around us, and the master page and site design technology has become an essential skill of the programmer, programming technology into the website design, you can create a powerful dynamic web pages. The establishment of a powerful dynamic pages, the paper is based on the above purpose, html technology to complete the design of the site.The system is the use of javaapplet application html and java language to constitute the application of the basic code of web games, html-based web game. It is simple, clear results. This article as long as the the the whole process of of the the web pages of the Russian box small game design and development is introduced the, this web page in the your development method, on the the uses a the the design method of of the structured module, according to the the the application of and response of the the needs of users and procedures, will the the various parts of of the procedures placed in the different modules among the, one by one each module to achieve, and then complete the the the development of of the the entire system.The game interface consists of a web framework, the main game screen, the buttons, the game state. The to main module is or module, Graph moving module, obstructions module, the central processing module Transportation, Panel the display module in if you are, respectively is the Graph-generating.Finally, make an overview summary of the achievements and shortcomings of the design, and future work prospects.Key words: Internet;the web pages of the Russian box small game;javaapplet目录1 绪论11.1 开发背景12系统开发平台22.1 开发工具简介22.1.1 JDK22.1.2Eclipse 4.222.2 系统配置22.2.1 安装JDK22.2.2 Eclipse的安装32.2.2.1 Eclipse软件安装32.2.2.2 Eclipse插件安装33 系统分析63.1 需求分析63.2 可行性研究64 系统设计74.1 功能概述74.1.1 网页框架功能74.1.2 游戏功能75 详细设计85.1网页框架设计85.2 游戏设计95.2.1 游戏主要框架95.2.2 java程序功能与实现105.2.2.1 俄罗斯方块背景棋盘的产生105.2.2.2 俄罗斯方块功能按钮的产生125.2.2.3 俄罗斯方块的事件处理175.2.2.3.1开始按钮175.2.2.3.2重新开始按钮185.2.2.3.3暂停按钮205.2.2.3.4继续按钮205.2.2.3.5关于按钮215.2.2.3.6游戏结束事件处理225.2.2.4 俄罗斯方块的产生235.2.2.5 俄罗斯方块预览区方块的产生295.2.2.6 俄罗斯方块关数以及分数的处理316 结论34主要参考文献:35致 谢361 绪论1.1 开发背景中国互联网络信息中心(以下简称CNNIC)自2008年开始,以每年2次的互联网发展统计报告为基础,对于中国网络游戏行业进行进一步细分研究,连续开展了2008年和2009年网络游戏用户调研并撰写了中国网络游戏用户调研分析报告,取得了一定的效果。为了更加完善的了解中国网络游戏市场状况,CNNIC互联网发展研究部将网络游戏类型进一步细化,针对正处于高速发展期的网页游戏(Web Game/Browser Game)做出专项调研。 中国网页游戏近两年发展迅速,尽管在用户规模上与传统网络游戏还存在很大差距,但在我国整体网络游戏用户增长速度趋于放缓的情况下,网页游戏却持续增长,已经成为带动网络游戏发展的新生力量。与此同时,网页游戏出现了一些问题:首先,由于网页游戏的进入门槛相对于传统网络游戏低,主要以中小企业为主,其自身原创力不足,抄袭、复制问题严重,导致盲目量产、同质化现象严重;其次,在发展过程中,企业缺乏清晰的盈利模式,忽视社会责任和行业发展状况,仅仅考虑短期利益;第三,由于产品品质和服务等原因,造成个人用户生命周期短,更新换代速度过快,用户黏性低;最后,网页游戏中类似“色情”、“暴力”、“赌博”等方面的内容,也会对用户的行为产生负面影响,众多因素决定了政府和企业对网页游戏市场了解的迫切需求。 综上所述,中国互联网络信息中心(CNNIC)互联网发展研究部开展此次2010年中国网页游戏研究,对于该游戏类型的用户行为与态度、心理认知等状况做出调查,了解该游戏类型市场状况以及存在的问题,为政府以及运营商发展提供有力的支持。2系统开发平台2.1 开发工具简介本系统的开发主要使用的是javaapplet1,所以开发工具只用了eclipse和记事本,而语言则选择了java2。2.1.1 JDKJDK(Java Development Kit) 3是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket4在服务器端运行效率也要比Sun JDK好很多。从SUN的JDK1.5开始,提供了泛型等非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。现在JDK的最新版本为JDK1.7,本系统使用的是JDK1.6。2.1.2Eclipse 4.2 Eclipse9 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。2.2 系统配置2.2.1 安装JDKu 将JDK 1.6安装到 C:Program Files目录下,然后配置环境变量u 进系统->高级->环境变量,在系统环境变量中新建下列环境变量,并赋值如下10:u java_home=C:Program FilesJavajdk1.6u catalina_home=C:apache-tomcat-6.0.18u classpath=.;C:ProgramFilesJavajdk1.6lib path=%path%;%java_home%bin;%java_home%lib;%catalina_home%bin;u %catalina_home%lib2.2.2 Eclipse的安装2.2.2.1 Eclipse软件安装Eclipse是一款绿色软件,安装很方便,只要将下载的压缩包文件解压到指定目录即可。可以在http:/www.eclipse.org/downloads/下载相关软件。在Eclipse安装目录下找到eclipse.exe执行文件,双击就可以启动Eclipse。启动后选择工作空间(即您用于存放项目文档的文件夹,就进入Eclipse的欢迎界面,在这里,您可以了解到Eclipse的新功能、新动态等。至此,Eclipse就安装完成了。2.2.2.2 Eclipse插件安装Eclipse插件的安装方法大体有以下三种5:第一种:直接复制法假设Eclipse的安装目录在C:eclipse,解压下载的eclipse 插件或者安装eclipse 插件到指定目录AA(如:c:AA)文件夹,打开AA 文件夹,在AA文件夹里分别包含两个文件夹features和plugins ,然后把两个文件夹里的文件分别复制到C:eclipse下所对应的文件夹下的features 和plugins 下,一般的把插件文件直接复制到eclipse目录里是最直接也是最愚蠢的一种方法!因为日后想要删除这些插件会非常的困难,不推荐使用。注意:直接将插件包解压到plugins文件夹下之后,重启eclipse,可能不会加载新的插件。解决方法是:1、打开命令行,到当前eclipse的目录下,输入eclipse -clean,重新启动eclipse,这样eclipse就会加上新的插件了。2、如果插件不能生效,则请将eclipseconfigurationorg.eclipse.update目录删除后再启动eclipse;你可以在eclipse的菜单"Help"->"About Eclipse SDK"->"Feature Details" 和"Plug-in Details"中看到新安装的插件。第二种:使用link文件法a.假设Eclipse的安装目录在C:eclipse,在该文件夹下,新建这样的目录结构C:eclipsePluginsEclipsejodeeclipse;b.解压下载的eclipse 插件或者安装eclipse 插件到指定目录BB(如:C:BB)文件夹,打开BB文件夹,然后把 BB文件夹里的两个文件夹features和plugins复制到刚刚新建好C:eclipsePluginsEclipsejodeeclipse,这样eclipse中就有了两个插件目录features and plugins下。c.在C:eclipse目录中新建links(C:eclipselinks)目录,在links目录中建立一个以link为扩展名的文本文件如jode.link,内容如下path=C:/eclipse/PluginsEclipse/jode 或者path=C:eclipsePluginsEclipsejode(插件的目录),保存后重启eclipse插件就会安装完成。注意:link文件中path=插件目录的path路径分隔要用或是/Java代码/eclipse/links/jode.linkwebtools.linkupdateManager.link./eclipse/ links/ jode.link webtools.link updateManager.link . . 可以在eclipse的菜单"Help"->"About Eclipse SDK"->"Feature Details" 和"Plug-in Details"中看到新安装的插件。第三种:使用eclipse自带图形界面安装6选择Help > Software Updates > Manager Configuration,再选择Add > Extension Location 找到你要安装插件的目录就可以了。使用eclipse的help->SoftwareUpdates ->Find and install. search for new features. 输入软件安装地址进行安装强烈推荐这种方法,优点很多比如可以方便的添加删除,也不用自己写link文件!备注:Eclipse插件的目录结构Java代码/eclipse-plugins/eclipse/.eclipseextensionfeatures/plugins/第2.3种方法所指向的目录都指的是"eclipse"目录,如果用第3种方法,在eclipse这个目录下必须有文件.eclipseextension,如果下载的插件没有这个文件,那就随便eclipse安装目录下的那个文件拷过去就行,只有有这么个文件就可以了,内容没什么用,主要是一些版本信息。例如:Java代码id=org.eclipse.platform name=Eclipse Platformversion=3.1.1id=org.eclipse.platform name=Eclipse Platform version=3.1.13 系统分析3.1 需求分析网页游戏有着方便快捷、相应配置低的优点。网页游戏的出现弥补了有端网游对于上班人群的空白,而随着网页游戏的不断发展,目前网页游戏的受众群已上至六旬下至青少年,网页游戏的特性使得网页游戏老少皆宜而有端网游往往只针对部分人群。 众所周知,下载一款网络游戏往往需要好3到10多个小时不等,而下载完后不喜欢又得卸载再重新下载其他有端网游,过程繁琐。打开网页就能玩的优点,是网页游戏赶超有端网游的有利条件。3.2 可行性研究无可争议,俄罗斯方块是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。俄罗斯方块举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似俄罗斯方块触动了我们某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。在曾经发布过的所有游戏中,俄罗斯方块还被认为是仅有的一个能够真正吸引广泛人群的作品。某些批评家也许会声称,俄罗斯方块要比过去二十年间出现的任何东西都要浪费人们的时间。至于我们,则要欣然提名它为GameSpot评选出的历史上最伟大游戏之一。4 系统设计4.1 功能概述本系统分为网页框架与游戏两个部分。4.1.1 网页框架功能 作为让java程序在网页运行的容器。4.1.2 游戏功能l 用户点击开始游戏,游戏运行。l 用户运行游戏时显示当前游戏分数和难度指数。l 用户得到一定分数,难度自动提高。l 用户点击暂停游戏,游戏暂停,然后点击继续游戏,游戏继续运行。l 用户点击重新开始游戏,当前分数清零,难度初始化,游戏界面也重新开始运行游戏。l 用户点击关于,显示游戏玩法。l 用户关闭浏览器当前页面,游戏关闭。5 详细设计本系统分为网页框架与游戏两个部分。5.1网页框架设计作为一个网页游戏,网页是必不可少的,但是由于本系统的重点在于游戏,所以网页做得比较简单。图5.1网页框架如图5.1所示只有一个背景图片和标题。代码如下:<html><head><title>俄罗斯方块</title></head><body background="tu.jpg"><h1 align="center"><font color="#FF0000">俄罗斯方块</font></h1><center><applet code="Main.class" align="baseline" width="430"height="500"></applet></center></body></html>5.2 游戏设计5.2.1 游戏主要框架本程序分为6个类,分别是Block,Main,GameCanvas,GameEvent,GameThread,NextGameCanvas。l Block是画图形以及图形的操作类。l GameCanvas是游戏中的画布类7,用于画各种方块。l GameEvent是游戏中的事件处理类,用于各个事件的处理。l GameThread是游戏的线程类,管理游戏的运行。l NextGameCanvas也是游戏中的画布类,但是与GameCanvas不同,是用于预览下一个出现图形的画布类。l Main是游戏的主界面类,用于呈现整个游戏。5.2.2 java程序功能与实现5.2.2.1 俄罗斯方块背景棋盘的产生游戏背景的棋盘是利用Canvas类画出来的,如图5.2所示。 图5.2棋盘背景代码如下:class GameCanvas extends Canvas implements KeyListener int i = 0, j = 0; int rowNum=15,columnNum=10;/画图形的行数与列数 int scrArr;/屏幕数组 Color bgcolor;/用于获得背景颜色 Main haha ; GameCanvas(Main q) haha = q; scrArr = new int1616;/标记界面 初始值全为零 /初始化屏幕,并将屏幕数组清零的方法 for (int i = rowNum; i >=0; i-) for (int j = columnNum; j >=0 ; j-) scrArrij = 0; setSize(315,465); bgcolor = getBackground();/得到背景颜色 repaint(); public synchronized void paint(Graphics g)/重新刷新画布方法 (同步) for( i = 0; i <=rowNum; i+) g.drawLine(10,30*i+10,310,30*i+10); /画横线 g.drawLine(10,30*i+13,310,30*i+13); /画横线 for( i = 0; i <=columnNum; i+) g.drawLine(30*i+10,10,30*i+10,460); /画纵线 g.drawLine(30*i+13,10,30*i+13,460); /画纵线 /绘制图形 for (i = 0; i < rowNum; i+) for(j = 0; j < columnNum; j+) switch (scrArrij) case 0: break; case 1: g.setColor(Color.BLACK); /方块的背景颜色为黑色 g.fillRect(j * 30 + 10, i * 30 + 10, 29, 29);/画正在下落的方块 +1是保持线不被覆盖 case 2: g.setColor(Color.blue); /方块的前背景颜色为蓝色 g.fillRect(j*30+13,i*30+13,29,28);break; /画已经落下的方法 g.dispose(); 5.2.2.2 俄罗斯方块功能按钮的产生 俄罗斯方块的功能按钮是在Main类种产生的如图5.3所示,。 图5.3功能按钮代码如下:public void init()/初始化界面 gamecanvas = new GameCanvas(this);/游戏界面绘制类 nextgamecanvas = new NextGameCanvas();/游戏预览区的对象 block = new Block(gamecanvas,nextgamecanvas);/方块类的对象并将GameCanvas 与NextGameCanvas 的对象传递给它 gameevent = new GameEvent(this,block);/按钮功能实现类 gamethread = new GameThread(block,this); setBackground(Color.LIGHT_GRAY);/设置界面的背景颜色为银灰色 /对象的初始化 panel1 = new Panel(); panel2 = new Panel(); panel3 = new Panel();/ but1=new Button("降低难度");/ but2=new Button("提高难度"); but3=new Button("重新开始"); but4=new Button("开 始"); but5=new Button("暂 停"); but6=new Button("继 续"); but7=new Button("关于"); label1=new Label("得分:"); label2=new Label("关数: "); label3=new Label("下一个图形"); label4=new Label("0"); label5=new Label("1"); label6=new Label("计应1005班 易申制作"); /分别设置组建上的字样/ but1.setFont(new Font("Dialog",Font.BOLD,15);/ but2.setFont(new Font("Dialog",Font.BOLD,15); but3.setFont(new Font("Dialog",Font.BOLD,15); but4.setFont(new Font("Dialog",Font.BOLD,15); but5.setFont(new Font("Dialog",Font.BOLD,15); but6.setFont(new Font("Dialog",Font.BOLD,15); but7.setFont(new Font("Dialog",Font.BOLD,15); label1.setFont(new Font("Dialog",Font.BOLD,15); label2.setFont(new Font("Dialog",Font.BOLD,15); label3.setFont(new Font("Dialog",Font.BOLD,15); label4.setFont(new Font("Dialog",Font.BOLD,15); label5.setFont(new Font("Dialog",Font.BOLD,15); label6.setFont(new Font("Dialog",Font.BOLD,12); label4.setForeground(Color.blue); label5.setForeground(Color.blue); label6.setForeground(Color.yellow); /设置字体大小 this.add(panel1);/主面板 panel1.setLayout(null); panel1.setBounds(0,0,430,500); / 主面板中添加各种组件 panel1.add(label3); label3.setBounds(330,10,80,30); panel1.add(label1); label1.setBounds(340,120,65,25); panel1.add(label4); label4.setBounds(340,150,65,25); panel1.add(label2); label2.setBounds(340,180,65,25); panel1.add(label5); label5.setBounds(340,210,65,25);/ panel1.add(but1);/ but1.setBounds(340,250,65,25);/ panel1.add(but2);/ but2.setBounds(340,290,65,25); panel1.add(but3); but4.setBounds(340,250,65,25); panel1.add(but4); but3.setBounds(340,300,65,25); panel1.add(but5); but5.setBounds(340,350,65,25); panel1.add(but6); but6.setBounds(340,400,65,25); panel1.add(but7); but7.setBounds(340,450,65,25); panel1.add(label6); label6.setBounds(70,475,365,25); / 注册监听按钮/ but1.addActionListener(this);/ but2.addActionListener(this); but3.addActionListener(this); but4.addActionListener(this); but5.addActionListener(this); but6.addActionListener(this); but7.addActionListener(this); /添加游戏图形的界面 panel1.add(panel2); panel2.setBounds(5,1,315,470);/设置游戏图形界面的大小 panel2.setBackground(Color.gray);/设置游戏图形界面的颜色 panel2.add(gamecanvas);/ 在panel2 中添加图形绘制类的对象 gamecanvas.addKeyListener(gamecanvas);/为gamecanvas 添加键盘事件 /添加游戏图形预缆区的界面 panel1.add(panel3); panel3.setBounds(340,45,80,75); panel3.setBackground( Color.WHITE); panel3.add(nextgamecanvas);/ 在panel3 中添加图形预览绘制类的对象5.2.2.3 俄罗斯方块的事件处理5.2.2.3.1开始按钮 图5.4开始图片 如图5.4所示点击开始游戏,游戏开始。代码如下: public void bagin()/ 游戏开始if (haha.gameFlag = false && zanting = false) block.drawBlock();haha.gamethread.start();haha.gameFlag = true;haha.gamecanvas.requestFocus(); else if (zanting = true) JOptionPane.showMessageDialog(this, "游戏已经开始", "俄罗斯方块",JOptionPane.WARNING_MESSAGE);haha.gamecanvas.requestFocus();haha.gamecanvas.requestFocus();5.2.2.3.2重新开始按钮图5.5重新开始如图5.5所示用户点击重新开始游戏,当前分数清零,难度初始化,游戏界面也重新开始运行游戏。代码如下:public void asBagin()/ 重新开始if (haha.gameFlag | haha.gamethread.gameover | zanting = true)/ 游戏已经开始for (int i = 0; i < haha.gamecanvas.rowNum; i+)for (int j = 0; j < haha.gamecanvas.columnNum; j+)haha.gamecanvas.scrArrij = 0;/ 游戏界面重新设置为零block.drawBlock();/ 产生一个新的方块if (haha.gamethread.gameover)/ 游戏结束时的从新开始haha.gamethread.gameover = false;haha.gameFlag = true;haha.gamethread.resume();haha.gamecanvas.repaint();/ 游戏界面的重新绘制haha.gamesum = 1;haha.gamescore = 0;haha.gamethread.gametime = 1000;haha.label4.setText("0");haha.label5.setText("1"); else JOptionPane.showMessageDialog(this, "游戏还没有开始,请单击开始按钮。", "俄罗斯方块",JOptionPane.WARNING_MESSAGE);haha.gamecanvas.requestFocus();/ 使游戏界面获得焦点 用以判断键盘的输入5.2.2.3.3暂停按钮用户点击暂停按钮,游戏暂停。代码如下:public synchronized void stop()/ 游戏暂停if (haha.gamethread != null && haha.gameFlag = true) haha.gamethread.suspend();haha.gameFlag = false;zanting = true;haha.gamecanvas.requestFocus(); 5