3D引擎模型视图控制器软件团队开发外文翻译资料

 2021-10-24 09:10

英语原文共 10 页

全国大学生研究会议论文集

(NCUR)2016年北卡罗来纳大学阿什维尔分校

北卡罗来纳州阿什维尔

四月7-9,2016

3D引擎模型视图控制器软件团队开发

Nicholas Blum, W. Henry Henderson, Michael Parker, Michael Kuczkuda, James Yount, Sean Stamm, James Morrow

计算机科学

One University Heights组织

北卡罗来纳大学阿什维尔分校

阿什维尔 28804,北卡罗来纳州,美国

教学顾问:Adam Whitley博士

摘要

这个软件开发项目使用面向对象(OO)抽象和MVC(模型-视图-控制器)体系结构实现了一个棋盘游戏:东京之王。在计算机科学本科课程中,群体软件开发经常是缺乏的,因此本项目的重点是教学软件的设计技能、团队技能和良好的编码实践。游戏由Unity引擎中的C#语言构建(Unity引擎誉有“一个灵活和强大的开发平台,用于创建多平台3D和2D游戏和互动体验。”的美称),Unity引擎允许快速测试,并在C#中有许多记录良好的教学资源和教程。它使用基于组件的方法,包括使用渲染器、脚本和控制器来创建游戏对象。该项目将面向对象开发方法与Unity的标准组件游戏设计相结合。该软件的MVC体系结构提供了游戏状态(模型)和游戏图形表示(视图)之间的分离,使团队能够同时处理两个模块,并轻松地进行设计更改。Unity游戏对象通过显示图形并通知控制器用户输入来实现此视图。C#的OO特性(如接口)促进了模型和视图之间的逻辑分离。第一个原型在功能上是完整的,包括所有主要的游戏机制。未来工作的想法包括整合来自谷歌地图的地形数据,添加网络多人游戏、人工智能玩家,并为用户体验提供统一的美学。

关键字: 控制器,Unity 3D引擎,模型

1.介绍

Kaijuko是一款软件实现了东京棋王游戏中的统一游戏引擎。Kaijuko自2015年春季以来由学生小组在几个学期内开发,在大型可扩展项目中教授团队合作的重要性以及良好的软件实践。这些软件实践包括坚持面向对象编程(OOP)的许多有益特性。此外,项目代码库是用模型-视图-控制器(MVC)样式编写的。该项目还利用了它所构建的游戏引擎的特性Unity,以促进快速原型和测试。本介绍将首先描述游戏本身的基本规则,然后继续快速概述MVC、OOP以及Unity作为游戏引擎的好处。

东京之王是一个山板游戏之王,玩家控制哥斯拉大小的怪物(开州)竞争控制东京市。要赢,玩家必须收集足够的胜利点数,或者杀死所有其他怪物。在轮到他们的时候,玩家掷骰子给他们胜利点和能量(游戏中的货币),同时为攻击其他玩家提供伤害点。玩家可以使用能源购买卡。卡有各种各样的影响,从对其他玩家的简单伤害到对现有金钱产生利息或窃取其他玩家的卡。虽然赢得游戏的方式是相同的,但随着不同的策略变得可行,成功之路会改变每一个游戏,这取决于可用的牌。

因为此游戏有这么多的牌,所以重要的是要找到一种保持游戏状态的方法,同时也允许项目轻松地扩展。随着越来越多的卡片被添加,一个良好的架构和设计的系统将确保新的效果不会与旧的冲突,同时易于实施。此外,项目团队由具有不同焦点和专业的个人组成,如艺术家、编码人员和建模人员。最后,随着项目变得越来越复杂,代码冲突不可避免,这会减慢开发速度。一旦游戏的逻辑在C#中构建,并且项目成员开始讨论统一实施游戏的最佳方式,他们在很大程度上选择了MVC,因为它满足了这些问题。

该软件的MVC架构提供了游戏状态(模型)和游戏图形表示(视图)之间的分离。控制器脚本处理两个独立系统之间的通信。这使得视图(在Unity中实现)和模型(在C#中实现)能够在独立工作的同时协同工作。模型可以在许多不同的视图中实现,只需要一个新的控制器就可以正常工作。项目成员可以分别处理模型和视图,减少程序员团队之间的代码冲突,允许艺术家在编程时建模。这也非常有用,因为Unity中的视图是基于组件的,而纯C#中的模型更面向对象。控制器和MVC使这两个不同的范例能够可靠地协同工作。

该软件的MVC架构提供了游戏状态(模型)和游戏图形表示(视图)之间的分离。控制器脚本处理两个独立系统之间的通信。这使得视图(在Unity中实现)和模型(在C#中实现)能够在独立工作的同时协同工作。模型可以在许多不同的视图中实现,只需要一个新的控制器就可以正常工作。项目成员可以分别处理模型和视图,减少程序员团队之间的代码冲突,允许艺术家在编程时建模。这也非常有用,因为Unity中的视图是基于组件的,而纯C#中的模型更面向对象。控制器和MVC使这两个不同的范例能够可靠地协同工作。

Unity游戏引擎功能强大、直观、支持良好且易于代码测试[1]。为项目选择的语言C#,是用于统一开发的主要语言之一,具有广泛的支持功能库。此外,Unity还有一个庞大的、有帮助的社区,可以回答与游戏开发相关的问题。Unity的C#编程社区比Unity的其他脚本语言,JavaScript和UnityScript要大得多,这是选择C#进行项目的一个主要原因[2]。C#还具有类型化语言的许多优点,例如易多态性和类层次结构,以及功能性语言(如lambda表达式和非类型化变量)的优点。它实现了良好的平衡,这对于游戏开发代码来说是非常好的,它需要既易于扩展又易于阅读。

与传统的OO相比,Unity将游戏对象的方案作为纯粹的聚合[3]。游戏世界中的对象或实体是不同组件的集合,例如渲染器、脚本和控制器。将这些组件组合成离散的对象允许开发人员用简单的可重用部件构建复杂的交互对象。这对游戏开发很好,因为这意味着你可以构建一段代码,例如一个卡片脚本,并将其附加到不同类型的卡片上。这些卡片虽然包含卡片脚本,但根据对象上存在的其他组件,它们的行为可能有所不同。

2.项目代码结构

如下图1所示,代码遵循一个相当具体的层次结构。类可以有一个或多个子类,这些子类与类可能控制的内容相关。例如,一个牌组将包含卡片。项目使用MVC,因此每个部分都使用接口形式的约定规则进行通信。本节将简要讨论模型、视图和控制器,然后再讨论几个关键的游戏系统。

图1. 项目代码类图

2.1.模型

模型按层次结构分类,独立于统一实现。GameState类包含接口方法以及逻辑子类的内部通信方法(例如,在东京为玩家查询游戏板的方法)。

“Player类”包含每个玩家当前存储在整数中的资源:健康、能量和胜利点数。此外,每个玩家都有一副牌和一个牌事件管理器来处理对该玩家的任何应用效果。不直接修改资源。相反,类包含用初始量调用的函数,并在执行修改之前检查播放器是否有任何修改该量的效果。例如,如果玩家有一张卡,它可以使接收到的任何点数加倍,那么modifyPoints()函数将获取初始点数,请参见该卡,并在应用前将点数加倍。

游戏板跟踪哪些玩家在哪个位置。目标位置存储为顶点。目前,唯一重要的位置顶点是0,也就是东京。然而,在未来,这个系统将允许开发者扩展游戏板与其他可能应用不同效果的位置(例如,雨天位置、风等)。游戏板使用邻接矩阵,这样当玩家试图进进出出城市时,游戏板可以首先验证所需的城市顶点是否已被占用。

骰子类将逐轮更新,并包含活动玩家骰子的当前状态。它还包含每个骰子的值,这些值被编码到一个字符数组中。玩家每轮最多可得到三个滚。滚动后,玩家可以选择保留某些骰子,并重新滚动其他的骰子。一个布尔数组被映射到骰子数组,这样当骰子重新滚动时,骰子条可以阻止玩家想要保留的任何骰子。它可以随时动态调整大小来处理修改骰子条的牌。

卡的效果通过接口GameState类的iCardeffect调用。这使得卡片可以更新模型,执行各种改变游戏规则的任务,例如修改玩家健康状况,从另一个玩家手中夺取东京,并获得第二个回合。用于创建这些效果的许多方法都是通过gamestate类抽象出来的,以减少冗余,并通过使用现有的方法使卡的创建的过程也得到了简化。

“Card类”是一个多态模型实现,通过它的三个子类来实现每种卡的类型:被动、即时和主动。这三种类型的牌从主牌类继承其属性,并在游戏开始创建随机牌组时实例化所有牌对象。实例化是使用C#的反射特性执行的-所有继承自非抽象卡的类都被拉入一个数组中,当游戏开始时,每个类中的一个存储在牌堆中。这使得程序员可以继续添加和开发卡片,而不必担心每一张卡片都需要添加到卡片组中——所有这些都是自动处理的。

2.2.控制器

控制器管理模型和视图之间的通信。如上图所示,信息可以双向流动,这可以通过使用接口来实现。模型可以通知控制器它应该使用iGamestateEventReceiver响应的事件,并且控制器可以通过iGamestate查询或更新模型的状态。控制器在构建期间实现了单例设计模式,这样视图的任何主要部分都可以与之通信,而无需去参考。

控制器插入Unity生态系统,以便它既能看到视图又能看到模型。游戏开始时,控制器使用主菜单中收集

原文和译文剩余内容已隐藏,您需要先支付 20元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。