分析:一周销量破千万的《幻兽帕鲁》到底用的什么技术?

news/2024/4/16 14:52:01/文章来源:https://blog.csdn.net/ll15982534415/article/details/136569596

在《幻兽帕鲁》这款游戏中,玩家沉浸于创建一个属于自己的英雄角色。从选择种族到定制外观,每一步都体现了建造者模式的精髓。

建造者模式在游戏中的体现

玩家在游戏中创建角色,就像是在逐步构建一个复杂对象。首先,有一个基本的角色模型——这就是我们的Builder。接着,玩家会选择不同的属性和特征,这些具体的选择就好比是ConcreteBuilder。最后,游戏系统(Director)会根据玩家的选择,组合出一个完整的角色。

实现代码:

为了实现这样一个系统,我们需要以下代码:

  • 抽象建造类(AbstractBuilder): 定义了构建角色所需的各种部件的接口。
abstract public class AbstractBuilder {public abstract void buildHead();public abstract void buildBody();public abstract void buildArms();public abstract void buildLegs();public abstract void chooseGenius();public abstract void chooseCloth();public abstract void chooseWeapon();public abstract Character getResult();
}
  • 具体建造类(例如:ElfArcherBuilder): 实现了抽象建造者定义的所有方法,并保持了产品的创建过程和细节。
public class ElfArcherBuilder extends AbstractBuilder {private Character character = new Character();@Overridepublic void buildHead() {character.addPart("Elf head with sharp ears");}@Overridepublic void buildBody() {character.addPart("Slim elf body");}@Overridepublic void buildArms() {character.addPart("Long and agile elf arms");}@Overridepublic void buildLegs() {character.addPart("Swift elf legs");}@Overridepublic void chooseGenius() {character.addPart("Archer genius with keen eyesight");}@Overridepublic void chooseCloth() {character.addPart("Light leather armor");}@Overridepublic void chooseWeapon() {character.addPart("Longbow and quiver of arrows");}@Overridepublic Character getResult() {return character;}
}
  • 产品类(Character): 包含了角色的所有部件,并提供了添加部件和获取结果的方法。
public class Character {private List<String> parts = new ArrayList<>();public void addPart(String part) {parts.add(part);}public void showCharacter() {for (String part : parts) {System.out.println(part);}}
}
  • 指挥者类(Director): 负责接收一个建造者对象,并执行其构建方法,最后返回产品。
public class Director {private AbstractBuilder builder;public Director(AbstractBuilder builder) {this.builder = builder;}public Character construct() {builder.buildHead();builder.buildBody();builder.buildArms();builder.buildLegs();builder.chooseGenius();builder.chooseCloth();builder.chooseWeapon();return builder.getResult();}
}
  • 客户端代码(GameClient): 利用指挥者和具体建造者创建角色。
public class GameClient {public static void main(String[] args) {AbstractBuilder elfArcherBuilder = new ElfArcherBuilder();Director director = new Director(elfArcherBuilder);Character elfArcher = director.construct();elfArcher.showCharacter();}
}

总结:

《幻兽帕鲁》的角色创建系统让玩家体验到了建造者模式的威力:自由度高、操作简单、结果个性化。正如建造者模式将复杂对象的构建与表示分离,游戏中的角色创建也将玩家的想象与角色的呈现分离,使玩家可以专注于创造,而游戏负责实现。

优点:

  • 玩家友好: 玩家无需关心角色构建的细节。
  • 高度自定义: 提供多样化的选项,满足不同玩家的需求。
  • 细节控制: 每一步建造都可以精细控制,如同捏脸系统的每一细节。

缺点:

  • 系统复杂: 当角色选项多时,系统和代码可能变得复杂。
  • 适用范围限制: 更适合结构稳定而细节多变的角色创建。

现在,让我们一起在《幻兽帕鲁》的世界中,用建造者模式编织我们的幻想冒险吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_998312.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】多环境切换的灵活配置

文章目录 profile 的使用激活 profile 的方式命令行启动idea 中配置配置文件中激活 开发中最灵活的多环境配置创建四个配置主配置文件其他几个环境配置使用方式 配置文件拆分总结 在日常的开发中&#xff0c;一般都会分好几种环境&#xff0c;比如通常的 开发环境&#xff1a;一…

NTFS Disk by Omi NTFS for mac v1.1.4中文版

NTFS Disk by Omi NTFS for Mac&#xff1a;NTFS文件系统的无缝桥梁 软件下载&#xff1a;NTFS Disk by Omi NTFS for mac v1.1.4中文版 &#x1f310; 跨平台访问&#xff0c;文件无阻 NTFS Disk by Omi NTFS for Mac 为您的Mac提供了对NTFS文件系统的无缝访问。无论您是在Win…

FPGA-VGA成像原理与时序

什么是VGA: VGA, Video Graphics Array。即视频图形阵列,具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LCD液晶显示设备的标准接口,具有广泛的应用范围。在FGPA中,常广泛用于图像处理等领域。 VGA 显示器成像原理 在 VGA 标准刚兴…

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

前言 师弟&#xff1a;“师兄&#xff0c;我又被鄙视了。说我的系统太差&#xff0c;测试不过关。” 我&#xff1a;“怎么说&#xff1f;” 师弟&#xff1a;“每次发布版本给程夏&#xff0c;都被她发现一些bug&#xff0c;太丢人了。师兄&#xff0c;有什么方法来衡量测试的…

供应链思维导图

https://author.baidu.com/home?frombjh_article&app_id1733215801356691 1 供应链管理流程图 2. 进销存 功能

【李沐精读系列】GPT、GPT-2和GPT-3论文精读

论文&#xff1a; GPT&#xff1a;Improving Language Understanding by Generative Pre-Training GTP-2&#xff1a;Language Models are Unsupervised Multitask Learners GPT-3&#xff1a;Language Models are Few-Shot Learners 参考&#xff1a;GPT、GPT-2、GPT-3论文精读…

VBA_MF系列技术资料1-395

MF系列VBA技术资料1-395 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-0…

《解密云计算:企业之选》

前言 在当今数字化时代,企业面临着巨大的数据处理压力和信息化需求,传统的IT架构已经无法满足日益增长的业务需求。在这样的背景下,越来越多的企业开始转向云计算,以实现灵活、高效和可扩展的IT资源管理和利用。 云计算 云计算是一种基于互联网的计算模式,它通过将数据、…

ElasticSearch之分片相关概念segment,merge,refresh等

写在前面 本文看下分片相关概念&#xff0c;segment&#xff0c;merge&#xff0c;refresh等。 1&#xff1a;segment&#xff0c;commit point&#xff0c;.del 一个倒排索引的文件称为segment&#xff0c;多个segment组合在一起就是lucene的index&#xff0c;也就是es的sh…

五种msvcp140.dll丢失的解决方法

《绝地求生》&#xff08;PUBG&#xff09;的玩家数量在不同时期有所变化&#xff1a; 最新的官方数据显示&#xff0c;截至2023年2月1日&#xff0c;PUBG全球玩家总数已经超过4亿&#xff0c;并且当时有月活跃玩家2.27亿和日活跃玩家8700万。 而在较早的一个时间点&#xff…

JS判断对象属性是否存在

一 、在JavaScript中&#xff0c;有几种方法可以判断对象属性是否存在&#xff1a; 使用in操作符&#xff1a; property in object 例如&#xff1a;name in obj&#xff0c;如果obj对象有name属性&#xff0c;返回true&#xff0c;否则返回false。 使用hasOwnProperty()方法&…

为什么说鸿蒙开发就业面广?人才遭“爆抢”的背后说明什么?

鸿蒙开发&#xff0c;作为华为推出的全新操作系统&#xff0c;自其诞生以来就备受关注。而鸿蒙开发就业面广&#xff0c;人才遭“爆抢”的现象&#xff0c;更是引发了业界的广泛讨论。那么&#xff0c;这一现象背后究竟隐藏着怎样的原因和深意呢&#xff1f; 首先&#xff0c;…

基于单片机的家庭防盗报警器设计

目 录 摘 要 II Abstract III 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 项目总体设计 5 2 项目硬件设计 7 2.1 单片机型号的选择 7 2.2 单片机的引脚说明 8 2.3 单片机的最小系统 9 2.3.1 时钟电路设计 9 2.3.2 复位电路设计 10 2.4 红外信号采集及其处理 11 2.5 蜂鸣器电…

C语言第三十五弹---文件操作(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 文件操作 1、为什么使用文件&#xff1f; 2、什么是文件&#xff1f; 2.1、程序文件 2.2、数据文件 2.3、文件名 3、二进制文件和文本文件 4、文件的打开和…

高校水电预付费系统有什么作用?

Hey小伙伴们&#xff0c;今天来聊聊咱们大学里的一个超级实用的设施——水电预付费系统&#xff01;你是不是还在为每个月的水电账单烦恼呢&#xff1f;别担心&#xff0c;这个系统就是你的生活小帮手&#xff01; 首先&#xff0c;想象一下这 样的场景&#xff1a;开学初&…

win11修改主机mac地址

很多时候&#xff0c;为了限制恶意的蹭流浪&#xff0c;除了分配固定的ip地址外&#xff0c;还限制mac地址。只有mac与ip一致&#xff0c;才能上网冲浪 网络适配器中修改 搜索“控制面板”打开 控制面板 > 网络和Internet > 网络和共享中心 >查看网络状态和任务>…

机器学习 | 四大常用机器学习Python库介绍

今天这篇我们介绍下Python中常用的机器学习库(机器学习、深度学习啥的&#xff0c;小编还是建议使用Python进行建模编写哈)&#xff0c;也算是本公号机器学习的第一篇推文&#xff0c;主要内容如下&#xff1a; 机器学习常用四大Python库 关于机器学习的我想说的话 所有完整代…

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数如何访问全局api 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });如何…

【Leetcode每日一题】 前缀和 - 连续数组(难度⭐⭐)(30)

1. 题目解析 题目链接&#xff1a;525. 连续数组 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于计算题目所给数组是否存在连续子数组使得数组里头0和1的数量相同&#xff0c;存在返回连续子数组最长长度即可&#xff0c…

pytest测试框架使用基础07 fixture—parametrize获取参数的几种常用形式

【pytest】parametrize获取参数的几种常用形式: a.数据结构 b.文件 c.数据库 d.conftest.py配置一、直接在标签上传参 1.1 一个参数多个值 pytest.mark.parametrize("参数", (参数值1, 参数值2, 参数值3))示例&#xff1a; import pytest # 单个参数的情况 pytest.…