博主主页:电子科技大神
博主简介:专注电子技术领域和毕业设计项目实战,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(单片机项目,plc,仿真等)、简历模板、学习资料、技术咨询。


文章目录

  • 一、摘要
  • 二、绪论
  • 二、系统分析
  • 2.1 用户需求
  • 2.2 功能需求
  • 三、效果图
  • 4.1 开发环境
  • 4.2 开发规范
  • 4.3 数据存储和读取实现
  • 4.4 核心功能实现
  • 总结
  • 目 录




一、摘要

  21世纪随着社会飞速进步和科技的发展,对于工作和学习压力越来越大,对于缓解压力的需求逐渐增多,但是大多数人的时间碎片化,需要简单,快速的活动来放松身心,这就使得游戏开发被人们所需要。基于社会需求,本项目针对休闲新颖的玩法开发了一款AVG卡牌游戏。
  通过对市场需求的分析以及行业现状的调研。本项目运用了Unity引擎进行游戏开发,采用轻量级UI消息框架,用于UI之间的通信,解决了一对多的通信问题。使用管理器设计模式+原型设计模式,使游戏代码和数据更加干净整洁,更易于控制和管理。使用了XML可标记语言进行数据的读取和存储,该语言特点是方便快捷的快速使用。使用可UGUI进行游戏页面的搭建和游戏数据的可视化显示,UGUI是目前Unity引擎主流的UI组件,组件自身功能较为成熟,不需要过多的考虑功能的设计,能够满足大部分显示的需求
  本项目经过测试后,基本实现预期功能,能够体现完整的游戏性,展现了AVG的特点,添加了Roguelike元素以后,游戏不会因为重复体验而带来枯燥的感觉。项目本身采用的框架设计模式,后续继续开发拓展新功能的难度大大降低。

二、绪论

  现在市面上的游戏类型种类繁多,玩家的喜好的游戏类型不尽相同,重口难调。卡牌游戏是一个总能被人们津津乐道的游戏类型,因为卡牌游戏本身是一个需要经过思考过程的博弈过程,不需要高强度的操作就能完成。这也满足了休闲游戏的特点。
  为了满足休闲游戏的特点,让游戏能够轻松进行,并且不枯燥的重复进行,需要有足够游戏环节进行支持,卡牌游戏的思考过程,以及AVG[1]冒险性的体验感,同时还添加了Roguelike的元素[2],保证了游戏的特点,并将其升华。本项目的核心系统主要分为以下几个部分:
  角色模块:角色模块是游戏的基础,玩家在进入游戏的时候,会选择一名角色,从而获得这个角色的基础卡组,每个角色对应的基础卡组和后续收集到的卡牌都不会相同,每种角色的核心玩法都不会相同,能够给玩家带来不同的体验
  卡牌模块:卡牌游戏为游戏的主要核心部分,每张卡牌会有自己特点,卡牌会有各类的属性数值,玩家在游戏过程中会获取不同的卡牌,来组成自己的卡组,卡组中的卡牌是玩家在冒险过程中的主要手段,充分利用这些卡牌为自己的战斗中获取优势,从而最终赢得胜利。
  地图模块:地图模块是体现Roguelike元素的主要体现,玩家在选择完角色之后,会获取一张地图,这份地图中会有各种图标,每种图标代表的是一个类型的房间。因为路线的不可后退性,玩家应当思考需要行进的路线来决定该进入哪个房间,这会影响到后续的游戏。
  战斗模块:本游戏的战斗采用的回合制战斗,在进入了可以战斗的房间以后,玩家会和敌人遭遇,不同的敌人的行动规则不同,会在敌人的角色上方进行提示,玩家在回合开始会有相应的行动点,行动点有限,行动点所对应的是卡牌上的消耗。玩家应该根据提示来决定这一回合需要打出的卡牌,同时玩家应该在这其中思考如何在下一回合开始时能获取优势。在战斗过程中,某一方先死亡,结束战斗。在玩家取得这一场
  房间模块:在整个地图中,会存在不同的房间,不同的房间,玩家所经历的事件也不会相同,在战斗房间,玩家和敌人遭遇,展开战斗。在商店房间,玩家可以购买,相应的卡牌和使用移除卡牌服务。在宝箱房间,玩家可以直接获取奖励,提升自身。在休息处,玩家可以选择回复生命值或者提升卡牌的品质增加战斗力。
  本文的总体结构为第1章相关技术综述,该部分用于介绍游戏开发所使用的框架,以及游戏开发所使用到的相关技术等;第2章游戏系统分析,该部分将对游戏内容的需求进行具体的详细分析,策划其游戏目标、研究其可行性以及游戏的需求分析工作;第3章系统设计,从总体上确定游戏的设计方案、组成游戏系统的模块以及模块之间的关系。同时要进行本地数据存储设计、以及确定每个模块应该如何被详细实现,包括游戏过程设计;第4章系统实现,阐述游戏的具体实现过程,按照顺序演示核心功能的核心代码,并对其进行解释说明;第5章游戏测试,该部分将介绍完成项目功能实现后如何开展测试工作的测试计划、测试用例,性能测试等。

二、系统分析

  系统分析主要分为2个部分,功能需求和非功能需求。本项目主要的模块有:人物角色模块,战斗模块,游戏房间模块,卡牌模块,UI搭建模块,场景搭建,地图模块。

2.1 用户需求

  在日常工作和学习之余,总会需要放松身心,休闲益智类游戏带给人们简单轻松的快乐。卡牌游戏是休闲游戏的代表之一,其中有相当多的博弈过程,取代了高强度的操作,只需要点击就可以带来互动性[17]。AVG冒险题材,玩家会扮演一个角色,从角色自身触发带入到游戏当中,去经历游戏世界里发生的种种。但是卡牌游戏的重复性是一个致命的缺点,所以如果能有一些随机的元素添加到AVG卡牌中,这会使得这一游戏变幻莫测,给人带来特别的体验。

2.2 功能需求

  根据用户的需求分析出游戏包含的系统,主要的模块有:人物角色模块,战斗模块,游戏房间模块,卡牌模块,UI搭建模块,场景搭建,地图模块。
主菜单UI模块:进入游戏后需要有相应的主菜单,主菜单需要有基本的游戏风格,展示游戏的标题,可操作的游戏界面,在菜单上的文字可以展示相应的功能,点击之后有相应的展示。可以适当装饰主菜单。
  人物角色模块:人物角色模块应当展示相应的人物信息,有提供给玩家选择的角色,给角色添加相应的说明,可以返回主菜单的按钮以及进入游戏的按钮。角色模块需要有相应数据支持,每个角色会对应不同的卡牌[3]。
  卡牌模块:每个玩家在选择完角色之后会获得一定数量的基础卡牌,卡牌上会有相应的说明,基础卡牌分为三种类型,分别是攻击类卡牌、技能类卡牌、能力类卡牌,每种卡牌会有不同的品质,卡牌上能显示对应的功能和消耗。
  地图模块:在选择完角色后,给玩家提供地图使玩家能够进行游戏,每种地图图标对应了不同的房间类型,只有同一层的房间能够提供给玩家点击。
  战斗模块:玩家进图地图后,会出现在游戏场景中,玩家在左边,敌人在右边,战斗开始后,给玩家发规定数量的卡片,玩家应当应当根据怪物行动提示和自己的体力消耗来决定打出的卡牌。直到一方没有剩余的生命值,这场游戏结束。
  UI模块:在游戏的上方,会提示游戏玩家名称、使用角色的名称,当前血量和最大血量,可以查看地图,可以查看自己所有拥有的卡牌,可以打开系统设置面板。
  场景模块:使用提前准备好的图片素材,对这些图片素材进行拼接,拼接完成之后,添加相应的光照和相机特效。

三、效果图

  本系统在window10操作系统,运用Unity引擎进行开发,运用简单易于读取的json作为数据支持,通过C#语言完成整个游戏,游戏整体。本系统特点在于游戏性,以及复杂的功能逻辑。

4.1 开发环境

  本系统使用了Windows 10 企业版 64-bit操作系统,该操作系统为目前主流操作系统,界面简约好看,操作不复杂,操作环境好。本系统开发环境为CPU即Intel® Core™ i5-6300HQ CPU @ 2.30GHz,内存为8GB,硬盘即256G SSD,开发引擎为Unity3D2017.4.20f2;本项目的代码编写工具为Visual Studio2019。

4.2 开发规范

  代码的规范性和一致性使团队协作开发速度得到了提升,同时也提高开发者对代码理解的清晰程度和改修代码的难易程度。代码的程序结构以及命名风格是开发系统时的重要环节,决定一个项目是否成立的关键一步[23]。命名方法为大驼峰。方法命名为大驼峰,例如ExampleMethod()。脚本变量和属性命名方法为小驼峰,例如myVariable。

4.3 数据存储和读取实现

  XML可标记语言来进行数据的存储,利用System.XML进行数据的操作。根据指定路径加载到内存中。通过API加载所有XML文件信息,遍历节点获取数据,并分类保存[24]。
XML存储数据主要通过文本的形式,树型结构。在根节点下可以延伸子节点,在子节点中,存储子节点的属性。子节点可以嵌套子节点,卡牌特性数据,如属性ID,属性名,页面呈现时颜色,属性描述等,XML结果如下展示所示:

<?xml version="1.0" encoding="utf-8" ?> 
<Attributes>
  <Attribute ID="0" Name="<color=yellow>格挡</color>" Description="持续到下回合开始前,阻挡伤害。"></Attribute>
  <Attribute ID="1" Name="<color=yellow>易伤</color>" Description="有易伤效果的生物从攻击中受到的伤害增加<color=LightSkyBlue>50%</color>。"></Attribute>
  <Attribute ID="2" Name="<color=yellow>消耗</color>" Description="在战斗结束前移出牌组。"></Attribute>
</Attributes>

  卡牌特性加载过程,获取到XML文件路径,声明一个存储数据的容器,声明一个XML文件对象实例,声明XML读取规则对象实例,更具规则实例读取XML文件对象。从节点和属性中获取需要保存的数据并存储。

4.4 核心功能实现

  如图4.1所示为游戏主菜单界面,主菜单显示了游戏的标题,标题后有可以重复滚动云做装饰。这一场景是作为游戏的初始场景,界面如图4.1所示。该功能的核心功能如下所示,详细参考附录1主菜单实现类。

unity fgui卡牌扇形排列 unity制作卡牌游戏_UI

图4.1 游戏主菜单界面

   界面设计主要利用了Unity3D引擎的UGUI,背景中的云彩使用了重置RectTransf的锚点位置,利用锚点的重置,达到了一个循环的效果,主要组件有Text组件,Image组件和Button组件,在这些组件中添加相应的回调方法,来实现每个组件的具体功能。而UI在很对时候是一个多对一的关系,所以在需要有多个回调的时候,可以给这个组件添加关心事件,利用关心事件,来实现多对一,本质参考了观察者设计模式的思想,详细参考附录1主菜单实现类。

  战斗页面所涉及到的模块较多,最上方的是UI模块,下方是抽卡堆,当前手牌,洗牌堆,中间左边的为玩家角色,右边为敌人角色,两个角色下方显示的是双方的生命值。

如图4.2所示为战斗界面,核心代码参考附录2战斗回合管理类。

unity fgui卡牌扇形排列 unity制作卡牌游戏_unity_02

图4.2 战斗模块界面

   在进入战斗时,玩家先开始,玩家会从玩家所有卡牌中克隆出一份新的卡组,然后添加到抽卡堆当中,在抽卡堆中随机抽取相应数量的卡牌,添加到玩家持卡卡组中,也就是图片正中区域展示的卡牌,玩家点选卡牌以后,会出现一个箭头,这个箭头是使用了二阶贝塞尔曲线完成的UI。箭头所指的对象,就是卡牌的使用对象,在箭头变为红色以后,就可以使用卡牌。玩家使用卡牌后会实现卡牌相应的效果,并从可行动点中扣除行动点,然后将使用后的卡牌添加到右下角的弃牌堆当中。玩家点击结束会后,回合就转到敌人,敌人会按AI的预先行动和回合数决定这一回合要做什么。在敌人的回合结束以后,就会重新开始一个新的回合。

如图4.3为商店界面,在商店中随机出售部分卡牌,并有特价卡牌,右下角为卡牌移除服务可移除卡牌,核心代码如下:

unity fgui卡牌扇形排列 unity制作卡牌游戏_unity_03

图4.3 商店模块界面

for (int i = 0; i < CardPoints.childCount; i++)
        {
AllCardPoint.Add(CardPoints.GetChild(i).GetComponent<RectTransform>());
        }
        for (int i = 0; i < RelicsPoints.childCount; i++)
        {
            AllRelicsPoint.Add(RelicsPoints.GetChild(i).GetComponent<RectTransform>());
        }SetPointEnter(RemovePoint.transform.Find("Card").GetComponent<Image>(), OnCardRemoveEnter);SetPointExit(RemovePoint.transform.Find("Card").GetComponent<Image>(), OnCardRemoveExit);
SetOnClick(RemovePoint.transform.Find("Card").GetComponent<Image>(), OnCardRemoveClick);

总结

   通过对Unity游戏引擎脚本编程的了解,完成了对整体游戏的一个设计,想要做一个游戏确实具有很大的挑战,不仅仅是功能实现带来的苦恼,必须要有一颗清醒的头脑去思考出相应的步骤,才可顺利进行下去,这使得整体开发没有想象中的那么顺畅,前期策划以及对整体游戏的思考还需要更加细致的去商讨并进行再三修订,才能在后续写代码,对整体游戏更加明确,提升开发速度。
   游戏开发不同于软件设计,游戏开发并没有一个整体的框架概念,因为游戏的灵活性,很多时候生搬硬套一套框架反而得不偿失,被框架所束缚住。所以在开发过程中需要灵活应变,条条大路通罗马,也需要筛选,在有限的条件下筛选出和项目最为贴合的框架。设计模式就显得格外重要,大大小小的框架都建立于设计模式上,设计模式和数据结构在游戏整体框架当中显得格外重要,这也会是一个积累的过程。
   本人在此次毕设结束后,将继续开发该项目,在后续开发当中,会添加其他游戏元素,而对于项目本身而言,需要优化的地方还有很多,游戏数据可以更改为使用Excel表格的形式,利用JSON的形式存储在本地,表格的配置更为便捷,JSON的读取效率更好,在战斗AI方面可以引入BehaviorDesigner插件来给敌人做表现,可以更好的管理AI的行为。
   这次毕业设计使得本人充分认识到了书山有路勤为径,学海无涯苦作舟的道理,各行各业若想在行业中有所称就,就要付出比常人更加对的汗水,提升自己的技能水平,感触良多虽道阻且长,但仍一路前行。

目 录

目 录

摘 要 I
Abstract II
引 言 1
1 相关技术 3
1.1 C# 3
1.2 Unity3D 3
1.3 UGUI 3
1.4 XML 4
1.5 原型设计模式 4
1.6 本章小结 4
2 系统分析 5
2.1 用户需求 5
2.2 功能需求 5
2.3 非功能需求 6
2.4 本章小结 6
3 系统设计 7
3.1 系统该要设计 7
3.2 系统详细设计 7
3.2.2 数据逻辑结构设计 10
3.4 UI设计原则 11
3.5 本章小结 12
4 系统实现 13
4.1 开发环境 13
4.2 开发规范 13
4.3 数据存储和读取实现 13
4.4 核心功能实现 14
4.5 本章小结 16
5 系统测试 17
5.1 测试计划 17
5.2 游戏测试 17
5.4 本章小结 17
结 论 19
致 谢 20
参考文献 21