抛出预设问题
需要有一个npc需要在一周中的,周一,周二,周三会出现,其他时间不可见
解决问题
因为一周时间是固定的,所以创建枚举类型比较合适,如下
enum Days { None, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, }
根据需求直觉一般会这样处理
switch (Days)
{
case Days.None:
break;
case Days.Sunday:
case Days.Monday:
case Days.Tuesday:
// 出现
break;
case Days.Wednesday:
case Days.Thursday:
case Days.Friday:
case Days.Saturday:
// 隐藏
break;
default:
break;
}
如果出现的时间改变,那么就需要变动 switch 块中的代码了,特别是如果时间变动是动态的,那么这样处理就很不方便了,这种情况下就可以使用位运算来处理这种问题
Days /*出现日*/meeting_days = Days.Sunday | Days.Monday | Days.Thursday;
Days /*隐藏日*/unmeeting_days = Days.Wednesday | Days.Thursday | Days.Friday | Days.Saturday;
Days /*当前日*/current_day = Days.Monday; if ((meeting_days¤t_day)==current_day)
/*等同 (meeting_days¤t_day)!=0*/
/*等同 meeting_days.HasFlag(current_day)*/
{
//出现
Console.WriteLine("出现");
}
else if ((unmeeting_days¤t_day)==current_day)
{
//隐藏
Console.WriteLine("隐藏");
}
这样的好处,可方便操作定义的 meeting_days 和 unmeeting_days 日期集合,而不需要改动其他代码块。对于集合的操作
//添加操作
meeting_days |= Days.Wednesday;
//移除操作
meeting_days ^= Days.Wednesday;