拋出預設問題
需要有一個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;