俄罗斯方块游戏
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目 俄罗斯方块设计
学生姓名 秦乙
学 号 20071309087
学 院 电子与信息工程学院
专 业 信息工程
二,一, 年 十一 月 一 日
目 录
1
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
封面........................................ 错误~未定义书签。1 2 论文标题........................................ 错误~未定义书签。1 3 摘要和关键词.................................... 错误~未定义书签。1 4 正文............................................ 错误~未定义书签。1
4.1 标题 .................................. 错误~未定义书签。1
4.2 文章中的图表 .......................... 错误~未定义书签。2 5 参考文献........................................ 错误~未定义书签。3 6 页面排版........................................ 错误~未定义书签。5
参考文献(五号宋体加粗,参考文献详细说明见前文)错误~未定义书签。5
2
俄罗斯方块游戏的设计与开发
秦乙
南京信息工程大学电子与信息工程学院信息工程系,南京 210044
摘要:在现今电子信息高速发展的时代~电子游戏已经深入人们的日常生活~成为老少皆宜的娱乐方式。但是游戏设计结合了日新月异的技术~在一个产品中整合了复杂的设计、艺术、声音和软件~所以并不是人人皆知。直到今天~在中国从事游戏设计的人仍然很少~但是游戏行业的发展之快~远超如家电、汽车等传统行业~也正因为如此~游戏人才的教育、培养远落后于产业的发展。
俄罗斯方块是个老幼皆宜的小游戏~它实现由四块正方形的色块组成~然后存储在一个数组的四个元素中~计算机随机产生不同七种类型的方块~根据计算机时钟控制它在一定的时间不停的产生~用户根据键盘的四个方向键控制翻转、向左、向右和向下操作~,控制键的实现是由键盘的方向键的事件处理实现,。然后程序根据这七种方块堆叠成各种不同的模型。
在当前的游戏开发领域中~java有自己的独到之处~用java编写的代码简单明了、可以执行强~这些都是java开发游戏的优点,另外~最新的二维三维图形技术、搜索技术、碰撞探测、beanshell的游戏脚本以及多方游戏引擎的生成都是java开发游戏的优势。
论文描述了游戏的历史~开发此游戏的环境~游戏开发的意义。遵循软件工程的知识~从软件问题定义开始~接着进行可行性研究、需求分析、概要设计、详细设计~最后对软件进行了测试~整个开发过程
系统下~以Java为开发语言~在eclipse开发贯穿软件工程的知识体系。此次设计在Microsoft Windows,
平台上进行游戏的设计与实践。
关键字:游戏设计,算法,数组,事件,测试
3
1 绪论
1.1 电子游戏及其分类
电子游戏,也就是运行在家用电脑、家用电子游戏机或是掌中宝游戏机及街机上的电子游戏程序。电子游戏是一种结合剧情故事、美术、音乐、动画、程序等技术于一身的互动型娱乐软件,涉及到多个行业。
从电子游戏的分类来看,有着多种分类方式。传统的游戏分类是按照游戏类型将其分为即时战略游戏、第一人称射击游戏、角色扮演游戏、策略型游戏等类别。根据游戏运行平台的不同,可将电子游戏分为游戏机游戏、单机版PC游戏、互动电视游戏、在线游戏和手机游戏。此外,韩国政府将电子游戏业分为家用游戏机游戏、单机版PC 游戏、网络游戏和街机游戏四大类。考虑到中韩游戏业比较接近,论文采用韩国的分类
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
。“网络游戏”也就是人们一般所指的“在线游戏”,是指通过互联网进行的电脑游戏,通过人与人之间的互动达到交流、娱乐和休闲的目的。在互联网(局域网)技术出现之前,电子游戏都可以归于单机版游戏,即“人机对战”游戏,或最多是双人对战游戏。而随着互联网技术的出现,通过连接游戏服务器,上百、上千、乃至上万的游戏玩家同时连线娱乐成为了现实,这就大大增加了游戏的互动性、真实性,丰富了电子游戏的内涵
1.2 电子游戏发展现状
1.2.1 电子游戏在国外的发展现状
电子游戏是最初产生于美国,1971 年,一个还在MIT就读的学生设计了世界上第一个业务用游戏机,这个街机游戏的名字叫《电脑空间》。可以说时至今日,电子游戏仍然是外国的天下。
美国至今仍是世界第一大游戏市场,它遵循的是以发行商为主的产业开发链模式,根据美国市场调查公司NPD Group 调查统计,美国2004 年游戏总销售金额(包括家用、掌上型主机及软件)为99 亿美元,占了全球游戏市场的45%。其中游戏软件销售的具体数字是:视频游戏软件的销售额达52 亿美元(1.6 亿套),PC 游戏软件销售额达11 亿美元(4500 万套),掌机游戏销售额达10 亿美元(4230 万套)。2004 年一共大约有2.48 亿套游戏售出。据估计,美国每个家庭平均购买过2 部游戏。
日本近20 年来疯狂赚电子游戏的钱。从上世纪60 年代初的街机,到六七十年代之间的家用游戏机,再到八九十年代的掌上游戏机,日本经过30 多年的耕耘,终于把电子游戏这棵“摇钱树”,培育成第一时尚娱乐产业,垄断全球业界长达10 余年。
韩国号称世界上网络游戏产业最发达国家之一。迄今为止,国内网络游戏市场有超过60%的产品来自韩国游戏软件开发商,韩国网络游戏使国内很多游戏运营公司在游戏营销市场或股票资本市场上获得了巨大的成功。
1.2.2 电子游戏在国内的发展现状
与电子游戏发达的国家相比,我国在电子游戏方面还存在比较大的差距。目前,我国游戏市场正处于发展阶段,但市场上的游戏软件主要来自日本、美国、韩国等地,但由本土游戏制作人开发创作的游戏正在高速增加,国产原创的游戏即将成为游戏的主流。 2 可行性研究
2.1 设计目的
通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯方块游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软
4
件工程的系统理论,初步掌握MVC这种设计模式,进一步巩固和加强自身对j2se基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。
2.2 软件问题定义
基本要求:本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。整个开发过程遵循软件工程规范,采用JAVA GUI 编程来实现界面以及事件的控制,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、调整难度、积分以及等级的功能。
目标:通过本游戏的开发,主要实现游戏的可操作性以及美观性,同时使自己对JAVA 语言的了解更进一层,为将来的工作实践打下坚实的基础。
条件、假定和限制:由于知识以及能力的限制,本游戏所实现的功能不够强大,可对本游戏进行改善,从而增强游戏的功能。
可行性研究的方法:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。
评价
LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载
尺度:由于本人编程水平有限,由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。
2.3 可行性分析
技术可行性:开发本游戏的编程语言有多种,考虑到自身对语言的掌握程度,选择JAVA 语言进行游戏的开发,采用JAVA GUI 编程来实现界面以及事件的控制。
经济可行性:本游戏的开发旨在完成课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行相应JAVA 程序的电脑便可,所以不用考虑到经济问题。
社会可行性:本游戏的开发主要为了完成课程设计,开发的主体是个人,不存在法律上的侵权行为,也不会为社会造成影响,这方面是完全可行的。
3 需求分析
3.1 引言
对软件需求分析就是通过调查研究,建立系统的数据模型、功能模型、行为模型,用户和开发人员在“系统必须做什么”这个问题上实现相互理解,达到共识,从而形成双方认可的软件产品的需求规格说明书。这样有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。
3.2 游戏需求
28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便以玩家所需要的形态和位置落下。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,若由存在空格的方块填满整个窗口,则游戏失败。游戏功能需求如下:
游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的背景色是黑色,方块用黄色颜色,在一定的区域内运动和变形,落下后的障碍物用黄色显示,这样看起来会有一定的美感。
游戏形状需求:用数组作为存储方块28 种状态的数据结构,即长条形、Z 字形、反Z 形、田字形、7 字形、反7 形、T 字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。
5
键盘处理事件需求:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。
鼠标处理事件需求:通过点击菜单栏中相应的菜单项,可以实现游戏的开始、结束,调整难度,分数、等级的显示,以及游戏帮助等功能。
显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定分数的时候,会增加相应的等级。
3.3 软硬件要求
操作系统:Microsoft Windows 7
内存:2 G
硬盘:160 G
CPU:Inter(R)Core(TM)2 Duo CPU T5800 @ 2.00GHz 2.00 GHz
交互工具:键盘/鼠标
显示器:液晶显示器
JDK 版本:jdk1.6.0.02
Eclipse 版本:eclipse-SDK-3.4-win32
3.4 接口控制
本游戏通过键盘及鼠标进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘和鼠标的接口事件。
3.5 方案论证
学校现已开设的课程有C语言、C++,Java,自己本身自学了Java,通过网上以及图书馆的资料,知道可以通过C,C++,VB,Delphi,Java实现俄罗斯方块游戏的设计。通过本人对自身条件的评估,以及在图书馆借阅了相关的图书之后感觉用Java来实现俄罗斯方块的设计还是可行的,尤其是java具有可移植性强、多线程机制、跨平台的有点,所以本次选用Java来实现课程设计,还可以为以后的工作进行一次实践。
4 概要设计
4.1 游戏总体构思
4.1.1 游戏界面设计
俄罗斯方块的游戏界面如下图所示。
6
上图分为两个窗口,即Canvas和Panel。这两个窗口并列,但是所占的宽度比例并不一样。两个窗口之上是菜单条。
界面的设计还包括游戏块的设计,游戏块是俄罗斯方块游戏最基本的元素。在设计游戏块的过程中有以下两个设计思路:
1. 利用引入图形方块来构建游戏块,即每一个游戏格为一个图形块。
2. 利用java中提供的图形类对象并对其着色来实现游戏块。
这里采用第2种设计思路因为图形类的使用便于进一步对游戏进行控制,另外,采用图形对象还能在后面将俄罗斯方块游戏扩充为网络游戏时减少数据的传输量。
游戏画布的设计,游戏画布是游戏的背景窗口,方块的运动、变形都在画布中进行,画布的大小20*12个ErsBox单元格。另外,游戏画布还要相应键盘消息。
控制面板的设计,游戏的控制面板是整个游戏的框架,其中包括游戏画布、菜单、游戏提示画板(提示下一个方块信息)、控制按钮(控制游戏的开始,使菜单生效)等。 4.1.2 游戏控制设计
游戏中的方块采用线程实现,一个方块由4*4个ErsBox单元格构成,它可以由键盘控制移动、下落、变型等。
游戏控制由两个主要的 Thread完成。
(1) 游戏开始时初始化游戏面板并启动一个新的游戏线程
定义在主类ErsBlocksGame中的一个私有内部类Game,该类实现Runnable接口,其代码结构如下:
Private class Game implements Runnable
{ public void run()
{……
}
}
(2) 当前游戏活动块线程反映每一个游戏动作
游戏块的变化和移动过程由线程类ErsBox 实现。
7
4.2 基本类设计
根据所要求实现的功能可将俄罗斯方块的编码分为5个类,即游戏主类、控制面板类、方块类、画布类和方格类。这五个类的作用如下。
, 游戏主要负责游戏的全局控制。
, 控制面板类主要用来控制游戏进程。
, 方块类控制块的移动、下落、变形等。
, 方格类是组成块的基本元素,用自己的颜色来表示块的外观。
, ErsBlocx线程类动态改变画布类的方格颜色,画布类通过检查方格颜色来实现
ErsBlocx块的移动情况。
5 详细设计
5.1 菜单类的实现
5.1.1 菜单系统
菜单系统分为两部分,一部分是菜单的声明,另一部分是菜单的创建。
首先,菜单的声明部分的代码如下:
private JMenu //用逗号分隔,声明4个菜单
mGame = new JMenu("游戏"),
mControl = new JMenu("控制"),
mWindowStyle = new JMenu("窗口风格"),
mInfo = new JMenu("帮助"); //4个菜单中分别包含的菜单项
private JMenuItem
miNewGame = new JMenuItem("新游戏"),
miSetBlockColor = new JMenuItem("设置方块颜色"),
miSetBackColor = new JMenuItem("设置背景颜色"),
miTurnHarder = new JMenuItem("增加难度"),
miTurnEasier = new JMenuItem("降低难度"),
miExit = new JMenuItem("退出"),
miPlay = new JMenuItem("开始"),
miPause = new JMenuItem("暂停"),
miResume = new JMenuItem("继续"),
miStop = new JMenuItem("停止"),
miAuthor = new JMenuItem("作者 :秦乙"),
miSourceInfo = new JMenuItem("版本:v1.0");//设置窗口风格的菜单
private JCheckBoxMenuItem
miAsWindows = new JCheckBoxMenuItem("Windows"),
miAsMotif = new JCheckBoxMenuItem("Motif"),
miAsMetal = new JCheckBoxMenuItem("Metal", true);
这段代码声明的菜单条和菜单的外观如下图所示1-1所示。其中“窗口风格”菜单下有三个菜单项,每个菜单项可以设置窗口的风格。图1-1(1)和(2)显示的是Metal风格,图1-1(4)显示的是Motif风格,图1-1(3)显示的是Windows风格。
8
(1) (2)
(3) (4)
图1-1 游戏的4个菜单
上诉声明只是给出了菜单的外观,具体的创建过程以及菜单触发的动作定义由下面的createMenu 方法进行设置,其细节在程序的注释中说明。
//建立并设置窗口菜单
9
private void createMenu()
{ //将4个菜单加入到菜单条
bar.add(mGame);
bar.add(mControl);
bar.add(mWindowStyle);
bar.add(mInfo);
// “游戏”菜单的菜单项
mGame.add(miNewGame);
mGame.addSeparator();
mGame.add(miSetBlockColor);
mGame.add(miSetBackColor);
mGame.addSeparator();
mGame.add(miTurnHarder);
mGame.add(miTurnEasier);
mGame.addSeparator();
mGame.add(miExit);
//“控制”菜单的菜单项
mControl.add(miPlay);
mControl.add(miPause);
mControl.add(miResume);
mControl.add(miStop);
//“窗口风格”菜单的菜单项
mWindowStyle.add(miAsWindows);
mWindowStyle.add(miAsMotif);
mWindowStyle.add(miAsMetal);
//“帮助”菜单的菜单项
mInfo.add(miAuthor);
mInfo.add(miSourceInfo);
setJMenuBar(bar);//把菜单条加入到窗口中
,
5.1.2 菜单项对应的操作设置
(1)快捷键的设置菜单
首先为“暂停”和“继续”菜单项设置快捷键,该功能要用到KeyStroke类,该类表示
一个键盘或等价的设备的一个动作,它可以对应一个特定的键的按下和松开操作,就像KeyEvent类中的KEY_PRESSED和KEY_RELEASED动作一样;也可以对应键入一个特定的
Java字符,就像KeyEvent类中的KEY_TYPED动作一样;KeyStroke还可以说明在特定动作
中匹配出现的组合键,如Alt、Shift、Control等键的修饰符。getKeyStroke类的对象,其修饰
符由以下常量组合而成:
, Java.awt.event.InputEvent.SHIFT_MASK(1) 。
, Java.awt.event.InputEvent.CTRL_MASK(2) 。
, Java.awt.event.InputEvent.META_MASK(4) 。
, Java.awt.event.InputEvent.ALT_MASK(8) 。
设置“暂停”和“继续”菜单项的快捷键的具体语句如下: miPause.setAccelerator(
10
KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_MASK)); miResume.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
(2) 方可颜色和背景颜色的选择菜单
该程序中用到了JColorChooser类,该类可以让用户自己手工选择色彩,这个类提供了三
个级别API:
, 一个静态方法显示一个模态的色彩选择对话框,然后返回用户选择的色彩。
, 一个静态方法创建一个色彩选择对话框,对这个对话框ActionListener监听用户按下
的色彩选择按钮。
, 在任何容器内直接创建JColorChooser边条的实例,可加入PropertyChange监听接口
来
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
当前色彩的变化。
这些功能在俄罗斯方块游戏的方块颜色和背景颜色的选择菜单中得到了很好地应用。具
体代码如下:
//JColorChooser类提供一个标准的Gui构件,让用户选择色彩
//使用JColorChooser的方法选择方块的颜色
miSetBlockColor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
Color newFrontColor = JColorChooser.showDialog(ErsBlocksGame.this,
"设置方块颜色", canvas.getBlockColor());
if (newFrontColor != null)
canvas.setBlockColor(newFrontColor);
}
});
//使用JColorChooser的方法选择游戏面板的背景颜色
miSetBackColor.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent ae)
{ Color newBackColor =
JColorChooser.showDialog(ErsBlocksGame.this,
"设置背景颜色", canvas.getBackgroundColor());
if (newBackColor != null)
canvas.setBackgroundColor(newBackColor);
}
});
无论是选择方块的颜色还是背景颜色和背景颜色,选中相应的菜单项后都会弹出一个对
话框,该对话框上有三个标签,分别是HSB、样品和RGB,如图1-2(1)、图1-2(2)、图
1-2(3)所示。
11
(1)
(2) (3)
图1-2“设置方块颜色”对话框 (3)菜单相应的设置
设置菜单的响应,即指定当用户有某种行为后应采取的相应的动作。完成该功能的语句
如下:
菜单项.addActionListerner(动作监听器);
12
而动作监听器又是以匿名类的形式实现的。其语句形式为:
New ActionListener(){/*监听方法的描述*/}
各菜单项增加监听器和监听接口具体的描述语句如下:(因代码太多,只有一部分,具体代码查阅我交的软件,谢谢啊)
miNewGame.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent ae) {
stopGame();
reset();
setLevel(DEFAULT_LEVEL);
}
};
„„
13