希望NPC根据一天中的时间做出反应

时间:2016-01-12 22:06:06

标签: c# visual-studio

基本上,我正在尝试创建一个基于文本的冒险游戏,其中添加了一个店主。这个店主有三种不同的情绪(快乐,愤怒和悲伤),这取决于一天中的时间。

所以,从早上5点到中午12点,店主心情愉快,它发出的信息就像“嘿!好久不见!”,从中午12点到晚上10点,他的心情很生气并且对你大喊大叫,最后从晚上10点到凌晨5点,他害怕并说出一些可怕的话。

我几乎已经完成了其他所有工作,但仍然坚持这个店主。有人可以帮我完成这个。对于这部分,我只设法编写了时间。 我无法使用时间写if语句:(

private void Form1_Load(object sender, EventArgs e)
{
    this.dateTimePicker1.Format = DateTimePickerFormat.Time;
    this.dateTimePicker1.Width = 100;
    this.dateTimePicker1.ShowUpDown = true;
}

private void currentTime_Click(object sender, EventArgs e)
{
    this.dateTimePicker1.Value = DateTime.Now;
}

private void btnShopkeeper_Click(object sender, EventArgs e)
{
}

2 个答案:

答案 0 :(得分:1)

DateTime dt = DateTime.Now;

if (dt.Hour >= 5 && dt.Hour < 12)
{
     //Hey! Long time no see!
}
else if (dt.Hour < 20)
{
     //I'm shouting at you
}
else
{
     //I'm scared :(
}

答案 1 :(得分:1)

在构建这样的逻辑时,我认为重要的是要注意你要表达的是什么。你是在表达一种行为/状态..或者你是在制作某种不以数字表示的时钟?

所以我会按照定义行为的方式做点什么......

public enum Behavior
{  
   Happy,
   Angry,
   Scary
}

public Behavior GetShopKeeperBehavior()
{
    DateTime now = DateTime.Now;

    if (now.Hour >= 5 && now.Hour < 12) return Behavior.Happy;
    if (now.Hour >=12 && now.Hour < 20) return Behavior.Angry;
    return Behavior.Scary;
}


// usage
Behavior shopKeeperMood = GetShopKeeperBehavior();
if (shopKeeperMood == Behavior.Happy)
{
     // shop keeper says "Long time no see!"
}

这将使您的调用程序代码更易于阅读(而不是在整个代码中散布一大堆日期时间条件),并且它允许您根据您可能没有的其他一些标准在将来添加其他行为想到了(可能是基于时间以外的因素)。