2017-04-18 8 views
1

ゲーム用の昼夜システムをコーディングしましたが、そのうちの1つの方法で問題が発生しています。私はこれまで1つの方法を除いてそれをよくコード化しました。 )私は問題を抱えています方法はIsGettingLight(ある昼夜のシステムで、光が届かない場合でも光がチェックされていますか?

using Plus.Utilities; 
using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace Plus.Roleplay.GameEnvironment 
{ 
    class GameEnvironmentHandler 
    { 
     private List<TimeSpan> _darkTimes; 
     private List<TimeSpan> _lightTimes; 

     public GameEnvironmentHandler() 
     { 
      _darkTimes = new List<TimeSpan> 
      { 
       new TimeSpan(19, 0, 0), 
       new TimeSpan(19, 30, 0), 
       new TimeSpan(20, 0, 0), 
       new TimeSpan(20, 30, 0), 
       new TimeSpan (21, 0, 0) 
      }; 

      _lightTimes = new List<TimeSpan> 
      { 
       new TimeSpan(06, 0, 0), 
       new TimeSpan(06, 30, 0), 
       new TimeSpan(07, 0, 0), 
       new TimeSpan(07, 30, 0), 
       new TimeSpan (08, 0, 0) 
      }; 
     } 

     public bool IsGettingDark() 
     { 
      return RoleplayHelper.IsTimeOfDayBetween(DateTime.Now, 
       _darkTimes.First(), _darkTimes.Last()); 
     } 

     public bool IsGettingLight() 
     { 
      return RoleplayHelper.IsTimeOfDayBetween(DateTime.Now, 
       _lightTimes.First(), _lightTimes.Last()) 
       || RoleplayHelper.IsTimeOfDayBetween(DateTime.Now, 
       _lightTimes.First(), _darkTimes.Last()); 
     } 
    } 
} 

、私は時間が最初と最後の光回わたってるしきであるかどうかを確認するために、それをコード化しているが、何その最後の後の場合:ここでは完全なコードですそれが暗くなったり、暗くなったり、明るくなったりしていないかどうかをどうすれば確認できますか?私は最初の暗い時間から少し時間を取り除くこととは何かを知っていますが、正確に何を削除するのですか?

+0

Wouldn」 '_lightTimes.Last()'と '_darkTimes.First()'の間にあるt?私が質問を理解しているか、 '_darkTimes.Last()'と '_lightTimes.First()'の間の時間について似たような質問をしていないのかどうかわからない –

+0

また、 'TimeSpan'が正しいオブジェクト...特定の時間ではなく時間の長さを表すはずです。特定の時間は、 'DateTime'オブジェクトを使用し、' DateTime.Now.TimeOfDay'で時間、分、秒の部分を比較する必要があります –

+0

@RufusL深夜の後に2回重複する可能性があるため、TimeOfDayは使用できません別の日。私が言ったことは(_lightTimes.Last()と_darkTimes.First()の間に)私はそれが暗くなったり明るくなったりしていない時はいつも明るいと思いますか?私はそれが光になる日の毎分を得ようとしています。 –

答えて

0

ここでそれを行うための一つの方法です:

// firstLight starts at 5:30 
var firstLight = new TimeSpan(5, 30, 0); 

// fullLight start at 8:00 
var fullLightStart = new TimeSpan(8, 0, 0); 

// first Darkness starts at 18:30 
var firstDark = new TimeSpan(18, 30, 0); 

// fullDarkness starts at 21:00 
var fullDarkStart = new TimeSpan(21, 0, 0); 

次に、あなたが一日中にいる場合は、あなたが上記の値と現在のTimeOfDayを比較することができます参照してください。

var currentTime = DateTime.Now.TimeOfDay; 

var IsGettingLight = currentTime >= firstLight && currentTime < fullLightStart; 
var IsFullLight = currentTime >= fullLightStart && currentTime < firstDark; 
var IsGettingDark = currentTime >= firstDark && currentTime < fullDarkStart; 
var IsFullDark = currentTime >= fullDarkStart || currentTime < firstLight; 

var IsLight = IsGettingLight || IsFullLight; 
var IsDark = IsGettingDark || IsFullDark; 
+0

ありがとうございます。それは完全に動作します。 –

+0

素晴らしい!私は 'IsFullDark'に1つの問題を気付き、それを上に固定しました(これは' firstLight'を含んでいました)。 –

+0

私は自分自身に気づき、修正しました。ありがとうございました。 :) –

関連する問題