JAVA课程设计报告.docx

上传人:b****1 文档编号:2155635 上传时间:2023-05-02 格式:DOCX 页数:37 大小:259.76KB
下载 相关 举报
JAVA课程设计报告.docx_第1页
第1页 / 共37页
JAVA课程设计报告.docx_第2页
第2页 / 共37页
JAVA课程设计报告.docx_第3页
第3页 / 共37页
JAVA课程设计报告.docx_第4页
第4页 / 共37页
JAVA课程设计报告.docx_第5页
第5页 / 共37页
JAVA课程设计报告.docx_第6页
第6页 / 共37页
JAVA课程设计报告.docx_第7页
第7页 / 共37页
JAVA课程设计报告.docx_第8页
第8页 / 共37页
JAVA课程设计报告.docx_第9页
第9页 / 共37页
JAVA课程设计报告.docx_第10页
第10页 / 共37页
JAVA课程设计报告.docx_第11页
第11页 / 共37页
JAVA课程设计报告.docx_第12页
第12页 / 共37页
JAVA课程设计报告.docx_第13页
第13页 / 共37页
JAVA课程设计报告.docx_第14页
第14页 / 共37页
JAVA课程设计报告.docx_第15页
第15页 / 共37页
JAVA课程设计报告.docx_第16页
第16页 / 共37页
JAVA课程设计报告.docx_第17页
第17页 / 共37页
JAVA课程设计报告.docx_第18页
第18页 / 共37页
JAVA课程设计报告.docx_第19页
第19页 / 共37页
JAVA课程设计报告.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JAVA课程设计报告.docx

《JAVA课程设计报告.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计报告.docx(37页珍藏版)》请在冰点文库上搜索。

JAVA课程设计报告.docx

JAVA课程设计报告

 

安阳工学院计算机学院JAVA课程设计报告

 

课程题目:

俄罗斯方块

 

专业班级:

09级软件工程一班

学生姓名:

高玉姣

学生学号:

200903030001

小组成员:

牛纪斌高玉姣张利星

指导教师姓名:

宋强

第一章绪论1

1.1游戏的历史1

1.2游戏的意义与内涵1

1.2.1游戏的组成要素1

第二章可行性研究2

2.1设计目的2

2.2可行性分析2

第三章需求分析3

3.1引言3

3.2游戏需求4

3.3接口控制4

3.4方案论证4

3.4.1Java的优点4

第四章概要设计5

4.1游戏设计分析5

4.2注意事项6

4.3游戏流程图7

第五章详细设计8

5.1总体设计8

5.2屏幕信息初始化9

5.3方块的装载10

5.4处理键盘事件10

5.5方块变化11

5.6控制游戏速度与自动下降12

5.7处理下降事件13

5.8判断满行14

5.9显示控制及消行15

5.10处理游戏结束16

第六章 体会16

参考文献16

 

第一章绪论

1.1游戏的历史

游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。

1.2游戏的意义与内涵

游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦”。

因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。

1.2.1游戏的组成要素

“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。

从更专业的角度形容,“游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。

这种行为表现具备以下4个要素。

行为模式:

“游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。

倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。

举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做“猜拳游戏”吗?

所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。

条件规则:

当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。

简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。

如同一种简单的球赛,打球的英文解释可以用PLAYGAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。

所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。

娱乐身心:

一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。

简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。

 

第二章设计目的

2.1设计目的

综合运用本学期所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。

2.2可行性分析

管理可行性:

该游戏软件为首次开发,目的只为提高工作自身素质和检查自学Java的效果,用Java3.0软件编写后在Applet管理器中运行简单明了,所有功能均根据基本需求所做。

便于管理,所以在这方面是可以实现的。

经济可行性:

由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行JAVA3.0软件的电脑便可,所以不用考虑到经济问题。

技术可行性:

可用与本游戏的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择JAVA作为编程语言。

需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。

第三章需求分析

3.1引言

对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。

3.2游戏需求

随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置三关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。

游戏功能要求如下:

游戏界面需求:

良好的用户界面,有关数显示和分数显示。

让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。

还需用另一种颜色把黑色围起来,宽度适中,要实现美感。

游戏形状(方块)需求:

良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。

键盘处理事件:

方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。

显示需求:

当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。

当达到一定的分数时过关。

3.3接口控制

本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。

3.4方案论证

Java的优点

Java是定义位于网络计算的计算机语言,它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适全于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java也集中体现和充分利用了若于当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。

开台无关性

如前所述,Java语言独特的运行机制使得它具有良好的二进制级的可移植性,利用Java,开发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。

面向对象

Java是面向对象的编程语言。

面向对象技术较好地适应了当今软件开发过程

中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。

面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。

安全稳定

对网络上应用程序的另一个需求是较高的安全可靠性。

用户通过网络获取并

在本地运行的应用程序必须是可依赖的,不会充当病毒或其他恶意操作的传播者而攻击用户本地的资源;同时它还应该是稳定的,轻易不会产生死机等错误,使得用户乐于使用。

支持多线程

多线程是当今软件技术的又一重要成果,已成功应用在操作系统、应用开发

等多个领域。

多程序技术允许同一个程序有两个执行线索,即同时做两件事情,满足了一些复杂软件的需求。

Java不但内置多线程功能,而且提供语言级的多线程支持,即定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。

第四章概要设计

4.1游戏设计分析

Java为纯面向对象(Object-Oriented,OO)的程序语言,它的诸多优点在此就不作论述了。

从面向对象的观念出发,本程序可分为以下几个对象:

●方块类型数据

●程序运算逻辑

●绘图

●显示平台

分析对象的技巧在于它的重复利用及维护效率。

在本程序分析时将不变与易变的因素分别做成对象,如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。

1.方块类型数据

方块类型虽然运送不同,但状态与行为都是相同的,如下表所示。

对象要素

说明

状态

记录方块形状的变量

行为

方块根据x=y;y=2-x进行旋转

表1方块的状态与行为

2.程序运逻辑

程序中逻辑运算通常只作数值的运算及分析,如方块移动时阻碍判断、方块满行判断、删除满行、方块移动、定时器、事件响应等。

3.绘图

绘图会因为显示平的不同而有所不同,例如在单机与手机上的显示环境就不相同,或显示效果会有所不同,例如方块的样式作修正时,即可以产生出不同的显示效果。

4.显示平台

“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。

4.2注意事项

游戏在设计时除了将程序切割成多个对象外,在游戏的逻辑运算上应尽可能做到弹性化。

所谓弹性就是方块地图的长与宽应该可以用参数来改变。

 

4.3游戏流程图

 

图1顶层图

图2

第五章详细设计

5.1总体设计

图3程序流程图

所涉及方法及其作用如下表:

序号

方法名

作用

1

Main()

定义窗口

2

Init()

创建变量

3

start()

打开线程

4

paint()

游戏界面初始化和游戏开始开关

5

run()

控制游戏速度

6

initscr()

游戏变量初始化

7

reset()

装载图形

8

suspend()

暂停

9

reach()

处理到达后的图形,进行加分,满行判断及消行处理等

10

keyDown()

控制按键信息

11

leftturn()

控制图形变化

12

gameend()

游戏结束

表2

5.2屏幕信息初始化(paint())

  

图4游戏开关控制图(在panint()内实现)

paint()方法是绘制游戏地图的方法,先指明是什么颜色,再定义颜色范围,本游戏是先用红色画了一个大的实心矩形框,再在红色中画一个比红色小一点的黑色实心矩形框,这样黑色的框便会把原来红色的部分遮掉,让人看起来就是黑色的框周围围了一圈红色。

黑色矩形框为后面的游戏方块活动的范围。

该方法中还设置了一把锁,是游戏是否开始的锁,如果还没开始则会在黑色框中提示游戏开始的方法。

如果游戏锁解开,会调用gameinit()方法。

Paint()方法还可在前面加re,即repaint(),该方法可以将整个屏幕清屏,再重新画一个游戏界面。

gameinit()方法是游戏初始化,用双重循环把定义游戏地图的二维数组screen[][]赋为false,即清空游戏地图中的所有方块。

也把每行方块数初始化,分数初始化,打开游戏地图清屏开关,再调用装载游戏方块begin()方法。

 

5.3方块的装载(reset())

图5方块装载(reset()方法)

定义一个随机变量,然后调用随机函数(rand=(int)(Math.random()*7)+1),

所取得的随机数在1到7之间,用这7个数字表示7中常见的方块,并从7种方块中随机抽取图形。

图形坐标装载完后,先判断在方块的下一行是否已有方块,如果有则说明方块以到达游戏地图的顶端,游戏将结束。

没有则先把方块坐标保存,这是为了在方块向下移动的时候在它的后面不会有虚假的方块,因为方块向下运动,记录的是新一行的方块坐标,但旧一行的没有消掉,所以要先旧方块的坐标保存起来,搽掉旧方块再显示方块。

这样也会减少屏幕的闪烁问题。

 

5.4处理键盘事件

图6键盘事件功能图(KeyDown())

keyDown()是处理按键的事件,刚开始运行程序时,游戏还没有开始,当方块要进行上(变形)、下、左、右变化时,先对方块将要移动到的位置进行判断,判断是否有障碍,有则保持原来的位置不变,没有则根据所按的键执行相关的操作。

再把方块的位置显示在屏幕上。

方块的移动其实也只是对行或列坐标的增减而己。

 

5.5方块变化(leftdown())

当按下向上键时,将会执行方块变化事件(change())。

常见的方块有7种(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),所有图形都是用两个一维数组来统计它的横坐标和纵坐标,每个方块有4种不同的变化形状,

publicvoidleftTurn(){

if(assertValid(blockType,(turnState+1)%4,row,col)){

dispBlock(0);

turnState=(turnState+1)%4;

dispBlock

(1);

}

}

5.6控制游戏速度与自动下降(run())

图7

为了使每一关中每个方块的下降速度的一致性,Thread.sleep(1200-pass*300)是一个固定的数字,每次循环时都会根据关数(pass)的级别决定所增加的数字大小。

可以说控制游戏的关数,也就是控制速度,也可以说是对休眠时间长短的控制,休眠时间越短则游戏关数越高,游戏速度就越快。

因为这个数字就是控制方块在每行的休眠时间,不会受游戏者按键的影响。

Thread.sleep()是游戏休眠,括号中的数字将决定休眠的时间,也是方

块在此行停留的时间。

Run()是当游戏没有任何操作,就会返回它进行循环运行。

如果游戏还没开始那么在这里下降功能将被锁定,因为游戏都没有开始,在这里处理自动下降有点说不过去。

如果游戏开始这个功能马上会被开启,正因为有自动向下运行的功能,那么也少不了障碍物的判断和是否到达底行的判断,只要符全其中之一,就可以调用下降来处理。

否则就为了清除旧图而保存方块当前坐标,然后方块再向下移动一行。

方块向下运动时,先保存旧方块的坐标,记录新的方块坐标,然后用黑色把旧方块覆盖,再画出新方块的图形,由于电脑处理速度快,在视觉效果上就像方块向下运动了一行一样。

5.7处理下降事件

图8处理方块下降图

fellDown()事件是在方块自动下降或是按键下降时,当方块新坐标遇到障碍或是到达底部时调用此事件。

到达事件是将方块所在位置上的点,用一个屏幕数组记录下来,成为以后的障碍物。

屏幕采用的是一个二维的逻辑数组,主要描述第几行第几列上是否存在方块,如果存在则这个逻辑变量的值将会为真,否则为假。

这个数组也能描述哪行哪列上存在着小方块,能描述方块在屏幕上的准确位置。

但在屏幕上显示方块,

是通过这个数组和显示里面的控制得到屏幕上的显示信息。

到达事件一触动就证明了方块到达目的地,那么就将方块进行堆积。

方块的堆积实现如下:

for(j=0;j

{

scrArr[i]][j]]=true;//将到达的活动方块赋给屏幕控制数组

row[i]]++;//对活动方块所在行的数量加1

}

统计分数:

在消行处理里面有一个专门用来统计消行数的变量,然后根据变

量的值决定分数的多少,程序统计分数是:

消一行得10分,同时消4行得40分,没有定义因为同时消多行而得多分数的情况。

如果总分数达到过关条件就过关,改变游戏速度,游戏初始化,开启新的一关,然后再加载方块。

没有达到过关分数或者没有满行,则加载下一个方块继续游戏。

 

5.8显示控制

图9显示控制

方块组成:

小方块是由三个不同颜色的正方形方框组成,其中正方形有实心

的也有空心的,这样使得方块变得好看点能看出堆积的视觉效果.每个图形是由四个小方块拼凑而成的。

显示控制时先看之前是否发生过消行事件,如果发生了清除屏幕所有方块、成绩和关数,全部重新绘置,使得消行视觉化。

然后再清除旧图形,绘制新图形。

其实消除屏幕只是将屏幕重新画一次而己,显示成绩和关数,根据消掉行数改变。

重新绘置新点,就是从下向上判断看哪些地方有方块的就得新画一个小方块,没有的不画。

 

5.9判断满行及消行

图10判断满行及消行图

满行判断及消行是到达事件中的一部分,是方块堆积,并对每个小方块所在行个数统计后,利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断是不是空行,如果那一行是空行则证明它以上的所有行都将不会有方块,也就不必要向上查找了。

然后再判断是否有行满的情况,否的话就继续检查上一行。

不然就进行消行处理及方块下移。

最后再向上查找满行情况直到本行为空时为止。

消行及方块下移:

当有行满时,则说明需要消行,有消行那么所有方块则要下移。

当本行满时,则以间隔为1向上查找,当遇到所查找的行也是满行,那么它的间隔自增1,然后继续向上查找,直到那一行不是满行的情况,则将此行所有数据信息移到本行,以后本行以上的每行都会以这个间隔去判断它将获得的那行数据,可以则继承,不然和上述一样操作。

如果将获得的那行数据为空行,则只须对本行的数据清空即可,那么方块下移也就完成。

5.10处理游戏结束

isGameEnd()来判断游戏结束,

●关闭游戏开关

●关闭初始化

●调用键盘事件

●释放键盘事件

第六章 体会

在做课程实际以前,我对Java游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。

这次通过做课程设计,我们小组完成了俄罗斯游戏的软件开发任务。

在整个开发过程中遇到了很多问题,如方块的装载和变形、满行判断及消行的处理。

但最终通过小组成员的努力,我们都一一解决对其中比较主要的几点体会总结如下。

第一,为了熟悉俄罗斯方块的相关运作,我经常在玩街机和游戏机上的俄罗斯方块,慢慢去发现它所有的功能,然后再思考和查阅资料进行分析,经过逐步的设计与反复的修改论证,才完成了整个游戏的开发。

第二,完成了从“小而全”,到“全而精”的转变。

设计过程中,经常会遇到困难,我们集体配合通过反复思考和测试,然后找出错误并加以改正,再进行下一个步骤。

这个程序就是在这样反复过程序中一点一点的完成的。

完成之后再来优化整个程序。

第三,作是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成,我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义。

经过将近一个月的不断努力,课程设计内容已经基本上完成了。

回顾这个设计过程,我学到了许多书本上没有学到的知识。

通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。

在这次设计的同时,我又从中学到了许多东西。

但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,如不能把要装载的方块提前显示出来。

因此做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个系统的不足之处,在这里也恳请老师能够对我们小组的作品提出意见或建议。

参考文献

[1].郑人杰、马素霞、殷人昆编著,《软件工程概论》机械工程出版社2010年7月

[2].Y.DanielLiang编著,《java语言程序设计》机械工程出版社2011年3月

[3].荣钦科技编著,《Java2游戏设计》北京:

清华大学出版社2004年11月

[4].朱福喜编著,《Java程序设计技巧与开发实例》北京:

人民邮电出版社2004年2月

附加代码:

/*

*ERS_Block.java

*

*Createdon2011年11月21日,上午10:

41

*

*Tochangethistemplate,chooseTools|TemplateManager

*andopenthetemplateintheeditor.

*/

packagejavaapplication3;

/**

*

*@authorAdministrator

*/

importjava.awt.*;

importjava.awt.event.*;

//俄罗斯方块类

publicclassERS_BlockextendsFrame{

publicstaticbooleanisPlay=false;

publicstaticintlevel=1,score=0;

publicstaticTextFieldscoreField,levelField;

publicstaticMyTimertimer;

GameCanvasgameScr;

publicstaticvoidmain(String[]argus){

ERS_Blockers=newERS_Block("俄罗斯方块游戏V1.0Author:

Vincent");

WindowListenerwin_listener=newWinListener();

ers.addWindowListener(win_listener);

}

//俄罗斯方块类的构造方法

ERS_Block(Stringtitle){

super(title);

setSize(600,480);

setLayout(newGridLayout(1,2));

gameScr=newGameCanvas();

gameScr.addKeyListener(gameScr);

timer=newMyTimer(gameScr);

timer.setDaemon(true);

timer.start();

timer.suspend();

add(gameScr);

PanelrightScr=newPanel();

rightScr.setLayout(newGridLayout(2,1,0,30));

rightScr.setSize(120,500);

add(rightScr);

//右边信息窗体的布局

MyPanelinfoScr=newMyPanel();

infoScr.setLayout(newGridLayout(4,1,0,5));

infoScr.setSize(120,300);

rightScr.add(infoScr);

//定义标签和初始值

Labelscorep=newLabel("分数:

",Label.LEFT);

Labellevelp=newLabel("级数:

",Label.LEFT);

scoreField=newTextField(4);

levelField=newTextField(4);

scoreField.setEditable(false);

levelF

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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