APP下载

雷电游戏的设计与实现

2021-12-18唐型基柴群杨光临

电脑知识与技术 2021年31期
关键词:Java程序设计项目驱动面向对象

唐型基 柴群 杨光临

摘要:许多高校的Java程序设计课程教学正在改革,强调提升编程应用能力。但在教学中普遍的学生完成作业还行,开发项目却不会,一个主要的原因是面向对象的编程思想没有建立起来,该文以项目驱动教学法案例——雷电游戏的设计实现为例讨论引导学生学习面向对象的程序设计方法。

关键词:Java程序设计;项目驱动;面向对象;教学方法

中图分类号:TP311       文献标识码:A

文章编号:1009-3044(2021)31-0092-03

1 引言

Java程序设计这门课程是目前高校计算机类相关专业的基础必修课程,该课程具有很强的运用性、实践性,传统的教学过程在大多数情况下只是让学生学会了一门程序设计语言的基础,现代社会的竞争异常激烈,对学生的应用能力要求也在提高。面对这样的情形,各高校也在对Java程序设计课程进行改革,不断往课程里“加料”,强调提升学生的应用能力。

Java 语言作为一门纯面向对象编程语言,面向对象编程思想和算法是它的灵魂[1]。Java程序设计语言基础语法部分的学习并不难,学过C语言的学生基本上都能掌握。但Java本身它是一门面向对象的程序设计语言,很多的学生不会使用面向对象的思想去分析问题,对于Java的使用也仅停留在使用“升级版C语言”的层次,仍是采用面向过程的编程方式使用Java语言[2]。这也是许多学生完成课本作业还行,但独立去完成一小个项目却无从下手的根本原因。

2 项目驱动教学法

Java程序设计课程中的内容相较多,基础部分包括:数据类型、分支控制结构、循环控制结构、数组、异常处理、类和对象、接口等,结合应用部分还有:图形界面、数据库连接和操纵、多线程、网络、面向对象高级特性等。按传统的教师讲,学生被动“填鸭”灌输的方式教学,学生难以接受众多的知识,更别说应用。只有将知识融合到项目中,以项目来驱动学生去学习掌握这些知识,才能让学生更好地学会这些繁杂琐碎的知识,并认识到这些知识是怎么运用的。在课堂教学中结合项目开发,激发学生学习兴趣,增强他们的代码调试能力,提高项目开发水平[3]。教学整体设计“以职业技能培养为目标,以项目任务实现为载体、理论学习与实际操作相结合”[4]。因此项目驱动教学法是学习Java程序设计课程的有效的教学方法。

3 雷电游戏项目的面向对象设计

为激发学生对项目驱动学习的积极性和兴趣,选取的是游戏方面的项目,学习与娱乐相结合,将学生玩游戏的热情与兴趣引导向开发游戏和编程方面来,激起学生学习的热情,在开发游戏的过程学习面向对象方法的程序设计,在项目开发过程中体会Java程序设计的相关知识。本文以“雷电游戏”这一项目案例的设计与实现来讨论项目驱动教学法中引导学生进行面向对象的设计与开发。

面向对象程序设计过程一般分为三个阶段:面向对象分析,面向对象设计,面向对象实现[5]。

3.1 面向对象分析

将游戏程序分享给学生,让学生一起运行体验和观察游戏。引导学生开始面向对象程序设计的第一阶段:面向对象的分析。此阶段分为两个小的步骤,第一步是找出游戏中有哪些元素组成?这些元素也就是项目中的对象。

通过观察和分析,在游戏中找到如下的对象:1)主角飞机,2)敌人飞机,3)主角子弹,4)敌人子弹,5)增加生命值物品,6)生命值(次)数(在窗体上方显示的),7)最终的BOSS。从游戏界面上看,暂时找到的对象就是上述的对象。但是游戏要正常运行还缺少了一些东西,比如游戏背景,游戏运行时听到的声音,游戏主框架等,没有他们程序是不完整的。因此把这三个元素分别拟定成为游戏项目中的对象,它们是:8)游戏背景,9)游戏声音,10)游戏主框架。

接下来是面向对象分析阶段中的第二步,分析各个对象具有什么特性(属性)?主要指静态和动态两个方面的特性。静态的是成员变量,动态的则是成员方法。

经分析得到各对象的属性有:

1)主角飞机 。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:取得坐标(x,y)、绘制图片、发射子弹、移动。

2)敌人飞机。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:取得坐标(x,y)、移动、绘制图片、发射子弹。

3)主角子弹。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:取得坐标(x,y)、移动、绘制图片。

4)敌人子弹。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:取得坐标(x,y)、移动、绘制图片。

5)增加生命值物品对象。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:取得坐标(x,y)、移动、绘制图片。

6)生命值(条)数。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:绘制图片。

7)最终的BOSS对象。静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:移动、绘制图片。

8)游戏背景对象。静态成员:位置坐标(x,y),图像大小(width,height),圖片。动态成员:绘制图片。

9)声音对象。静态成员:声音文件名。动态成员:播放声音文件。

10)游戏主框架对象。它是一个框架,把上述所有对象都包含,并控制着它们协调地工作。静态成员:生命值(次)数对象,增加生命物品对象,敌机对象,主角飞机对象,敌方子弹对象,主角子弹对象,背景对象,声音对象。动态成员:初始化游戏,绘图,按键控制。

3.2 面向对象设计

面向对象开发过程的第二阶段是面向对象设计,即以项目中的各对象为原型设计出各个类,各个类实例化之后即得到了项目中的对象。此阶段中包含两个步骤,第一步是分析项目中各对象之间的关系(如包含,控制,生成等),然后使用UML工具画出类图。

分析每个对象得知,他们有很多的共通点,如:静态成员:位置坐标(x,y),图像大小(width,height),图片。动态成员:取得坐标(x,y);移动;绘制图片。于是提高代码的重用性,采用面向对象的继承的思想,先定义出抽象类:移动对象类(MovableObject),然后其他相应的各对象类可从该类那里继承而得到。如图1所示。

第二步是进一步细化类图,确定类中各个对象静态成员的具体属性的类型,明确动态成员要完成的功能,并用采用自然语言或者图形工具(如流程图,PAD图等)描述出来。

1)MovableObject类的设计,x,y坐标设定为整型数据,高(height),宽(width)设定为整型数据,图片设定为Image类型,如图2所示。

2)主角飞机(Hero)类的设计。继承于抽象类MovableObject,增加发射子弹的成员方法。由于主角飞机类是受到按键控制的,因此不用父类中的move方法,新增加向上下左右四个方法的移动的成员方法。

其中,发射子弹方法的算法描述为生成主角子弹对象,并填写它首次出现的位置坐标及图片小大等信息。

向上移动方法的算法描述为:如果纵坐标y的值大于10则坐标y值减去10,否则不减。

向下移动方法的算法描述为:如果纵坐标y的值小于600(游戏窗口的高度值)减去70(主角飞机图片的高度)则坐标y加10,否则不加。

向左移动方法的算法描述为:如果横坐标x的值大于10则坐标x值减去10,否则不减。

向右移动方法的算法描述为:如果横坐标x的值小于400(游戏窗口的宽度值)减去40(主角飞机图片的宽度)则坐标x加10,否则不加。

3)敌机(Enemy)类的设计。继承于抽象类MovableObject,增加发射子弹的方法。

发射子弹方法的算法描述为生成敌机子弹对象,并填写它首次出现的位置坐标及图片小大等信息。

重写父类中的move方法,每间隔一段时间,向下移动5(坐标y加5),向左或向右移动一段距离(x坐标加上-5到5之间的一个数值)。

4)游戏主框架类(GamePanel)类的设计。主框架类继承于Panel类,在该类中将各对象的运动变化交由一个线程来进行处理运行,为确保游戏程序顺畅运行,各对象的显示和绘制交由另一个线程来进行处理。其中,绘制显示的对象,这线程不用新建线程另外处理,因为界面程序的组件都有绘制的线程和专用的方法(paint),对象运动变化之后,只要通知界面程序的组件绘制的线程(也可以理解为调用界面程序的绘图方法更新内容)即可。静态成员:生命值(次)数对象列表,增加生命物品列表,敌机列表,主角飞机,敌方子弹列表,主角子弹列表,背景对象,声音对象,各图形元素运动控制的线程对象。成员方法:初始化游戏,绘图(重写paint方法),按键控制(控制主角移动),(各对象碰撞的)音效播放,背景音乐播放;事件监听(按键监听处理);重新开始游戏。

5)各对象运动控制的线程(ThdObjMove)类的设计。此类最好在主框架类中进行设计(内部类),这样方便线程访问和控制主框架类的各成员。各图形元素运动控制的线程类的设计:在线程体中控制敌人、敌人子弹、主角子弹、主角、增加生命值物品等各个对象的移动;并检查是否发生(敌人与主角、敌人子弹与主角、主角子弹与敌人、增加生命值物品与主角)碰撞;游戏进程发展;Boss出场;检查游戏是否结束;播放指定音效等。静态成员:循环控制标记。成员方法:产生敌人;产生增加生命值物品;敌人开火(三类敌人,分别发射三种子弹);敌人移动;增加生命值物品对象移动;检查增加生命值物品对象与主角是否碰撞;检查敌人与主角是否碰撞;查检敌人子弹与主角是否碰撞;查检主角子弹与敌人是否碰撞(两种子弹);线程主方法(线程体)。

项目中还有其他类和对象的设计,在此省略。

3.3 面向对象实现

面向对象实现阶段的任务是将上一阶段的类图中各类的静态成员和成员方法的算法用Java语言描述出来,加上类相应的构造方法,将上述每个类编写为相應的Java源程序文件。

1)MovableObject的定义:

2)主角飞机Hero类的定义:

其他类的定义在此省略。

最后定义程序的窗口类,在窗口类将游戏主框架类的对象加入到窗口内容窗格的中间,于是游戏画面便可在窗口中显示出来了。

public class GameFrame extends JFrame {//游戏窗口类,继承于JFrame

private GamePanel gpanel = new GamePanel();

public GameFrame() {//构造方法

gpanel.setFocusable(true);

gpanel.requestFocus();

this.add(gpanel, BorderLayout.CENTER);

//将将游戏主框架类的对象gpanel添加到内容空格的中间

}

public static void main(String[] args) {

GameFrame frame = new GameFrame();

frame.setSize(410, 630); //设定窗口的大小

frame.setIconImage(Resources.IconPNG);//设置窗口图标

frame.setTitle("雷电");//设置窗口标题

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口关闭按钮的默认动作是退出程序

frame.setVisible(true);//设置窗口可见

}

}

4 总结

项目驱动的教学方法是较为有效的学习Java程序设计的教学方法,以项目驱动学习,结合学生感兴趣的游戏项目激发学生主动学习的热情。本文以雷电游戏项目的设计实现为例讨论了在项目驱动教学法中引导学生学习面向对象的程序设计方法。展示了面向对象程序设计过程中面向对象分析、面向对象设计、面向对象实现三个阶段的主要思想。项目驱动教学方法中第一个项目要教师带领着学生练习,然后再布置难度合理的项目让学生自己动手去完成,在项目设计实现的过程中使学生学会面向对象的程序设计方法。

参考文献:

[1] 田春婷.单机版记忆游戏的设计与实现——Java语言任务驱动教学法应用案例[J].科技与创新,2021(5):21-22,25.

[2] 曹文平,宁彬.任务驱动+过程反馈的Java教学方法研究[J].教育教学论坛,2021(4):165-168.

[3] 虞晓霞,彭浩.项目制班内分层互动教学模式在Java程序设计课程教学中的应用[J].计算机教育,2021(5):96-100.

[4] 张虎,叶传奇,谷志峰.基于案例驱动的教学在《Java程序设计》課程中的实施与探索[J].电脑知识与技术,2021,17(14):146-148.

[5] 张海藩,牟永敏.软件工程导论[M].6版.北京:清华大学出版社,2013.

【通联编辑:朱宝贵】

收稿日期:2021-05-25

项目基金:凯里学院线下一流课程——“Java程序设计”(课题编号:xx202009)

作者简介:唐型基(1984—),男,贵州凯里人,副教授,主要从事数据结构与算法分析研究。

猜你喜欢

Java程序设计项目驱动面向对象
面向对象的计算机网络设计软件系统的开发
面向对象的数据交换协议研究与应用
《Java程序设计》课程网站的设计与实现
Java程序设计基础课实践教学中的分层教学模式研究
基于实训项目的Java程序设计实验教学模式改革与实践
基于工程思维的Java程序设计课程教学研究
依托工作室的软件工程实践教学研究
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
基于“红色之旅”项目驱动的《调酒与咖啡》工作室制人才培养机制探讨
试论基于项目驱动的机械制图教学改革