论文部分内容阅读
计文章编号: 2095-2163(2018)03-0235-06中图分类号: 文献标志码: A
摘要: 关键词: (College of Information Engineering, Wenzhou Business College, Wenzhou Zhejiang 325035, China)
Abstract: With the rise of the gaming market, various programming languages are widely used,JAVA language is the most widely used and the highest using proportion. This article takes the extremely classic magic tower game as an example, with the help of the JAVA language’s object-oriented characteristic using the programming techniques: package and inherited.
Key words:
作者簡介: 许益凡(1997-),男,本科生,主要研究方向:JAVA的桌面应用、前端塔建; 薛益鸽(1990-),男,硕士,助教,主要研究方向:计算智能。
通讯作者: 收稿日期: 引言
游戏作为大众生活必不可少的一项娱乐方式,近年来发展势头良好。开发游戏的语言有很多种,JAVA是当前最流行最热门的一种编程语言, 因其是一种可以撰写跨平台应用程序的面向对象的程序设计语言\[3\],并具有卓越的通用性、高效性和平台移植性\[2\],同时,JAVA语言在游戏开发方面,又因为其语言严谨、可读性强、高度的便利性等优势,在游戏开发中具有非常重要的地位\[3\]。
魔塔游戏是一款策略类的RPG(角色扮演)游戏。游戏虽不大却充满难度,往往一步小小的失误就会让游戏失败,前功尽弃\[4\]。本文基于JAVA平台对魔塔游戏进行设计和开发。整个游戏在Microsoft Windows 7 64位操作系统下,利用 IntelliJ IDEA 2017.2.4 x64开发工具进行开发。游戏的菜单栏、操作栏和商品购买使用鼠标进行操作;勇士移动使用方向键上、下、左、右操作;打开/关闭怪物手册用快捷键A; 往上跳跃楼层用快捷键Z;往下跳跃楼层用快捷键X。
1需求分析及流程
1.1功能需求
通过对魔塔游戏的多次试玩和深入分析,可以发现,该款游戏虽然像容易通关的地牢游戏,但每一小小的决定都影响着能否救出公主顺利通关。如图1所示,此游戏有着繁多的属性和独有的伤害计算公式,伤害所扣除的血量并不是简单地直接攻击减去防御,而是需要经过伤害次数的参与计算。伤害次数是敌人的血量除去自身攻击与敌方防御之差。最终损失的血量又是需要次数乘以敌人的攻击与自身防御之差,若损失的血量超过拥有的血量则无法攻击此怪物,此时,若不提升自身能力则会卡在这个怪物面前,导致游戏失败。
本文设计的游戏主要涉及下列功能模块:战斗以及血量的计算模块、查看怪物手册模块、商店交易模块、游戏的存档与读取模块、重新开始游戏模块、退出游戏模块、与NPC对话模块、楼层跳转和金手指系统模块。功能结构如图2所示。
1.2游戏整体流程
游戏流程如下所述:游戏开始,勇士出现在魔塔的一层,没有配备装备,只被赋予了初始的属性和3把不同颜色的钥匙。勇士行动中遇到的事件如下:
(1)获取物品。可提升勇士的攻击防御等属性,增加勇士的综合实力,同时,有机会获取到特殊物品,特殊物品具有的特殊功能对游戏进展有很大帮助。
(2)遭遇怪物。怪物种类繁多,属性也不近相同,如“小怪物”、“士兵队长”、“蝙蝠怪”、“骷髅怪”、“法师”、“卫兵”等等。越高级的怪物属性越高,所需勇士的实力也就越高。其中,魔王是整个游戏中最强大也是最困难的一个怪物类NPC,魔王强具有强大的属性和华丽的外观,镇守着去往救助公主的通道,只有打败魔王才可以救出公主完成游戏。
(3)遇到商店。玩家可根据自身的购买能力提升自身的属性或等级,更好地进行游戏。
(4)NPC。在本文设计的游戏中,去除了一些购买钥匙的NPC,将其整合在商店和金手指中。同时,保留了公主这个重要角色并添加了新的剧情:击杀魔王后需解除公主手上的锁链才能将她救走,则游戏成功,否则游戏失败。流程如图3所示。
2程序实现
本款游戏具有以下3种特性:可靠性,即程序执行时不会出现故障;可维护性,即在不破坏玩家数据的前提下进行维护修复程序BUG;扩展性,即在原有基础上有更多的创新,使用户不产生使用疲劳,开发新的功能模块\[5\]。下面,详细介绍游戏中各功能的实现。
2.1游戏界面的实现
游戏界面是游戏开发的点睛之笔。本文开发的游戏界面在原版的基础上增加了金手指菜单。游戏界面由以下3个板块构成:游戏主界面,显示游戏的内容,大部分游戏的操作全在这里操作并显示;游戏控制面板,显示勇者的属性及携带的钥匙数量,并提供了保存、读取、退出、重玩游戏的按钮;游戏菜单栏,集合了所有可进行的操作,并添加了可玩性极高的金手指,给初玩者一个良好的体验。图4示出了游戏界面。
游戏主页面中地图复杂多样、各个楼层的地图都不相同,怪物NPC也是层出不穷,因此本文将图片以数字形式储存在一个二维数组里,需要时读取该数组并“画”在界面上,不同数字代表不同图片,即代表不同的角色、不同的游戏环境。同时,也为勇士行动操作提供更好的判断。第0层地图的储存图的代码如下: map1 = new int\[\]\[\]{
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
{-1, 1, 3, 3, 3, 3, 1000, 3, 3, 3, 3, 1, -1},
.................. }
魔塔有很多层,每一層创建一个数组,同时,创建了一个专门用来储存初始地图的类MapPackage,以方便调用读取显示。以下是部分代码(第0、1层):
public classSaveMap {
public Map map;
public int\[\]\[\] map1;
public SaveMap() {
map1 = new int\[\]\[\]{
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
{-1, 1, 3, 3, 3, 3, 1000, 3, 3, 3, 3, 1, -1},
....................... };
为了在界面上画出地图,本文首先把所有图片和怪物分类存入数组,然后根据所在楼层找到相应的二维数组,使用2个嵌套的for循环对其进行遍历,将数字与实例化的图片对象进行匹配,一个一个“画”在界面上。部分代码如下:
importjavax.swing.*;
public class Map {
public MapPackge mapPackge;
public Map() {
mapPackge = new MapPackge();
map = new int\[13\]\[13\];
wall = Toolkit.getDefaultToolkit().getImage("image/05.jpg");
////NPC
NPC01a = Toolkit.getDefaultToolkit().getImage("image/NPC01a.png");
Princess = Toolkit.getDefaultToolkit().getImage("image/Princess.png");
////怪物ID、属性、图片
monsters\[0\] = new Monster(49, "黄金BOSS", 1000, 500, 250, 22, 19, Toolkit.getDefaultToolkit().getImage("image/Yellow.png"));
.............
for (int i = 0; i < 13; i ) {
for (int j = 0; j < 13; j ) {
map\[i\]\[j\] = mapPackge.map1\[i\]\[j\];
} }}
public void DrawMap(Graphics g, JPanel i) {
for (int z = 1; z < 12; z ) {
for (int j = 1; j < 12; j ) {
if (map\[z\]\[j\] == 1) {
g.drawImage(wall, (j - 1) * 32, (z - 1) * 32, 32, 32, (ImageObserver) i);
}
...........
if (map\[z\]\[j\] >= 1000
摘要: 关键词: (College of Information Engineering, Wenzhou Business College, Wenzhou Zhejiang 325035, China)
Abstract: With the rise of the gaming market, various programming languages are widely used,JAVA language is the most widely used and the highest using proportion. This article takes the extremely classic magic tower game as an example, with the help of the JAVA language’s object-oriented characteristic using the programming techniques: package and inherited.
Key words:
作者簡介: 许益凡(1997-),男,本科生,主要研究方向:JAVA的桌面应用、前端塔建; 薛益鸽(1990-),男,硕士,助教,主要研究方向:计算智能。
通讯作者: 收稿日期: 引言
游戏作为大众生活必不可少的一项娱乐方式,近年来发展势头良好。开发游戏的语言有很多种,JAVA是当前最流行最热门的一种编程语言, 因其是一种可以撰写跨平台应用程序的面向对象的程序设计语言\[3\],并具有卓越的通用性、高效性和平台移植性\[2\],同时,JAVA语言在游戏开发方面,又因为其语言严谨、可读性强、高度的便利性等优势,在游戏开发中具有非常重要的地位\[3\]。
魔塔游戏是一款策略类的RPG(角色扮演)游戏。游戏虽不大却充满难度,往往一步小小的失误就会让游戏失败,前功尽弃\[4\]。本文基于JAVA平台对魔塔游戏进行设计和开发。整个游戏在Microsoft Windows 7 64位操作系统下,利用 IntelliJ IDEA 2017.2.4 x64开发工具进行开发。游戏的菜单栏、操作栏和商品购买使用鼠标进行操作;勇士移动使用方向键上、下、左、右操作;打开/关闭怪物手册用快捷键A; 往上跳跃楼层用快捷键Z;往下跳跃楼层用快捷键X。
1需求分析及流程
1.1功能需求
通过对魔塔游戏的多次试玩和深入分析,可以发现,该款游戏虽然像容易通关的地牢游戏,但每一小小的决定都影响着能否救出公主顺利通关。如图1所示,此游戏有着繁多的属性和独有的伤害计算公式,伤害所扣除的血量并不是简单地直接攻击减去防御,而是需要经过伤害次数的参与计算。伤害次数是敌人的血量除去自身攻击与敌方防御之差。最终损失的血量又是需要次数乘以敌人的攻击与自身防御之差,若损失的血量超过拥有的血量则无法攻击此怪物,此时,若不提升自身能力则会卡在这个怪物面前,导致游戏失败。
本文设计的游戏主要涉及下列功能模块:战斗以及血量的计算模块、查看怪物手册模块、商店交易模块、游戏的存档与读取模块、重新开始游戏模块、退出游戏模块、与NPC对话模块、楼层跳转和金手指系统模块。功能结构如图2所示。
1.2游戏整体流程
游戏流程如下所述:游戏开始,勇士出现在魔塔的一层,没有配备装备,只被赋予了初始的属性和3把不同颜色的钥匙。勇士行动中遇到的事件如下:
(1)获取物品。可提升勇士的攻击防御等属性,增加勇士的综合实力,同时,有机会获取到特殊物品,特殊物品具有的特殊功能对游戏进展有很大帮助。
(2)遭遇怪物。怪物种类繁多,属性也不近相同,如“小怪物”、“士兵队长”、“蝙蝠怪”、“骷髅怪”、“法师”、“卫兵”等等。越高级的怪物属性越高,所需勇士的实力也就越高。其中,魔王是整个游戏中最强大也是最困难的一个怪物类NPC,魔王强具有强大的属性和华丽的外观,镇守着去往救助公主的通道,只有打败魔王才可以救出公主完成游戏。
(3)遇到商店。玩家可根据自身的购买能力提升自身的属性或等级,更好地进行游戏。
(4)NPC。在本文设计的游戏中,去除了一些购买钥匙的NPC,将其整合在商店和金手指中。同时,保留了公主这个重要角色并添加了新的剧情:击杀魔王后需解除公主手上的锁链才能将她救走,则游戏成功,否则游戏失败。流程如图3所示。
2程序实现
本款游戏具有以下3种特性:可靠性,即程序执行时不会出现故障;可维护性,即在不破坏玩家数据的前提下进行维护修复程序BUG;扩展性,即在原有基础上有更多的创新,使用户不产生使用疲劳,开发新的功能模块\[5\]。下面,详细介绍游戏中各功能的实现。
2.1游戏界面的实现
游戏界面是游戏开发的点睛之笔。本文开发的游戏界面在原版的基础上增加了金手指菜单。游戏界面由以下3个板块构成:游戏主界面,显示游戏的内容,大部分游戏的操作全在这里操作并显示;游戏控制面板,显示勇者的属性及携带的钥匙数量,并提供了保存、读取、退出、重玩游戏的按钮;游戏菜单栏,集合了所有可进行的操作,并添加了可玩性极高的金手指,给初玩者一个良好的体验。图4示出了游戏界面。
游戏主页面中地图复杂多样、各个楼层的地图都不相同,怪物NPC也是层出不穷,因此本文将图片以数字形式储存在一个二维数组里,需要时读取该数组并“画”在界面上,不同数字代表不同图片,即代表不同的角色、不同的游戏环境。同时,也为勇士行动操作提供更好的判断。第0层地图的储存图的代码如下: map1 = new int\[\]\[\]{
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
{-1, 1, 3, 3, 3, 3, 1000, 3, 3, 3, 3, 1, -1},
.................. }
魔塔有很多层,每一層创建一个数组,同时,创建了一个专门用来储存初始地图的类MapPackage,以方便调用读取显示。以下是部分代码(第0、1层):
public classSaveMap {
public Map map;
public int\[\]\[\] map1;
public SaveMap() {
map1 = new int\[\]\[\]{
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
{-1, 1, 3, 3, 3, 3, 1000, 3, 3, 3, 3, 1, -1},
....................... };
为了在界面上画出地图,本文首先把所有图片和怪物分类存入数组,然后根据所在楼层找到相应的二维数组,使用2个嵌套的for循环对其进行遍历,将数字与实例化的图片对象进行匹配,一个一个“画”在界面上。部分代码如下:
importjavax.swing.*;
public class Map {
public MapPackge mapPackge;
public Map() {
mapPackge = new MapPackge();
map = new int\[13\]\[13\];
wall = Toolkit.getDefaultToolkit().getImage("image/05.jpg");
////NPC
NPC01a = Toolkit.getDefaultToolkit().getImage("image/NPC01a.png");
Princess = Toolkit.getDefaultToolkit().getImage("image/Princess.png");
////怪物ID、属性、图片
monsters\[0\] = new Monster(49, "黄金BOSS", 1000, 500, 250, 22, 19, Toolkit.getDefaultToolkit().getImage("image/Yellow.png"));
.............
for (int i = 0; i < 13; i ) {
for (int j = 0; j < 13; j ) {
map\[i\]\[j\] = mapPackge.map1\[i\]\[j\];
} }}
public void DrawMap(Graphics g, JPanel i) {
for (int z = 1; z < 12; z ) {
for (int j = 1; j < 12; j ) {
if (map\[z\]\[j\] == 1) {
g.drawImage(wall, (j - 1) * 32, (z - 1) * 32, 32, 32, (ImageObserver) i);
}
...........
if (map\[z\]\[j\] >= 1000