首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在基于文本的游戏中添加年龄幻觉

在基于文本的游戏中添加年龄幻觉
EN

Stack Overflow用户
提问于 2020-01-14 13:23:33
回答 2查看 55关注 0票数 4

所以我正在用C#开发一个基于文本的游戏,我现在已经把它布置好了,一个人将作为代码主体(Person.cs)中的一个类产生。这个人在类中有一个年龄,这个年龄是在生成器中随机挑选的(int在1-500之间),这也将包括随机的敌人(Enemy.cs : Person)和可能的一个或两个在路上的伙伴(Person.cs)。

我想要一种方式,当某些事情发生时,程序中的每个人都会改变年龄(人,宠物)。我不希望它基于PC时钟(想象一下魔术师可以向前或向后改变时间)。

我为TimeManager.cs设置了一个类,里面只有一个整数,显然我可以修改它,我只是没有办法将日期/年龄推送到所有其他类。如果有意义的话,我宁可不硬编码任何东西的数量限制

我是不是忽略了一些简单的东西?干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-14 13:32:54

首先,这个游戏看起来很有趣!

每个可以老化的元素都必须实现接口Ageable之类的东西,迫使它们实现一个方法来改变它们的年龄。

完成后,在代码中的某个位置保留一个List<Agable>,例如,在与主类密切相关的World类中,所有Magician都可以直接或间接地访问它。

一旦您想要更改所有Ageable的年龄,只需告诉您的World迭代列表并调用所有使您的生物更老或更年轻的方法。

票数 4
EN

Stack Overflow用户

发布于 2020-01-14 13:49:40

你可以用我的出生日期来确定我的年龄。为什么?因为你知道当前日期。似乎更好的做法是跟踪实体创建时的“时间”,然后将其与当前的“时间”进行比较,以便生成年龄。

我认为这种方法更好的原因可以归结为这样一个事实,即您有许多元素,否则当发生老化事件时,必须轮流访问每个元素以改变其年龄。您似乎不太可能需要同时计算大量实体的年龄,因此像这样计算年龄可能会导致较少的整体工作。

考虑一下你的时间服务:

代码语言:javascript
复制
public class TimeService
{
    public int CurrentYear { get; private set; }

    public void IncrementYear()
    {
        ++CurrentYear;
    }

    public void DecrementYear()
    {
        --CurrentYear;
    }
}

和你的实体:

代码语言:javascript
复制
public class Entity
{
    public int CreatedYear { get; set; }
}

您可以通过以下方式确定年龄:

代码语言:javascript
复制
int age = timeService.CurrentYear - entity.CreatedYear;

如果您不希望年龄为负,则可能需要将其包装在0age之间的Math.Max();中,以确保最小年龄为0。

您可以将此计算封装到一个方法中,可能是在时间服务上:

代码语言:javascript
复制
public int GetAge(Entity e)
{
    return Math.Max(0, this.CurrentYear - entity.CreatedYear);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59727925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档