所以我正在用C#开发一个基于文本的游戏,我现在已经把它布置好了,一个人将作为代码主体(Person.cs)中的一个类产生。这个人在类中有一个年龄,这个年龄是在生成器中随机挑选的(int在1-500之间),这也将包括随机的敌人(Enemy.cs : Person)和可能的一个或两个在路上的伙伴(Person.cs)。
我想要一种方式,当某些事情发生时,程序中的每个人都会改变年龄(人,宠物)。我不希望它基于PC时钟(想象一下魔术师可以向前或向后改变时间)。
我为TimeManager.cs设置了一个类,里面只有一个整数,显然我可以修改它,我只是没有办法将日期/年龄推送到所有其他类。如果有意义的话,我宁可不硬编码任何东西的数量限制
我是不是忽略了一些简单的东西?干杯
发布于 2020-01-14 13:32:54
首先,这个游戏看起来很有趣!
每个可以老化的元素都必须实现接口Ageable之类的东西,迫使它们实现一个方法来改变它们的年龄。
完成后,在代码中的某个位置保留一个List<Agable>,例如,在与主类密切相关的World类中,所有Magician都可以直接或间接地访问它。
一旦您想要更改所有Ageable的年龄,只需告诉您的World迭代列表并调用所有使您的生物更老或更年轻的方法。
发布于 2020-01-14 13:49:40
你可以用我的出生日期来确定我的年龄。为什么?因为你知道当前日期。似乎更好的做法是跟踪实体创建时的“时间”,然后将其与当前的“时间”进行比较,以便生成年龄。
我认为这种方法更好的原因可以归结为这样一个事实,即您有许多元素,否则当发生老化事件时,必须轮流访问每个元素以改变其年龄。您似乎不太可能需要同时计算大量实体的年龄,因此像这样计算年龄可能会导致较少的整体工作。
考虑一下你的时间服务:
public class TimeService
{
public int CurrentYear { get; private set; }
public void IncrementYear()
{
++CurrentYear;
}
public void DecrementYear()
{
--CurrentYear;
}
}和你的实体:
public class Entity
{
public int CreatedYear { get; set; }
}您可以通过以下方式确定年龄:
int age = timeService.CurrentYear - entity.CreatedYear;如果您不希望年龄为负,则可能需要将其包装在0和age之间的Math.Max();中,以确保最小年龄为0。
您可以将此计算封装到一个方法中,可能是在时间服务上:
public int GetAge(Entity e)
{
return Math.Max(0, this.CurrentYear - entity.CreatedYear);
}https://stackoverflow.com/questions/59727925
复制相似问题