2017-01-21 2 views
1

私はゲームを統一しています。コードは機能しますが、私は何か間違っていることを確認しているか、より良いことをすることができます。if文(C#)の 'または'演算子へのより簡単な方法

if (waveCount == 5 || waveCount == 10 || waveCount == 15 || waveCount == 20 || waveCount == 25 || waveCount == 30 || waveCount == 35 || waveCount == 40 || waveCount == 45 || waveCount == 50) 
{ 
    // yield return new WaitForSeconds(shopWait); 
    shopPanel.SetActive(true); 
} 

あなたが見ることができるように「ステートメントが」良いことではないが、通常はそれがwaveCount == 100にすべての方法を続けますが、私はそれをカット。そこにこれを行うには、単純またはきれいな方法でなければなりません:/しかし、私はちょうどそれのまわりで私の頭をラップすることはできません:(

編集1

おかげで、私は、剰余についてあまり知りませんでした私はあなたが剰余演算を使用することができますについて:)

+8

モジュロ演算子: '%'を使うと、左側を右側で分割したときの余りが得られます。余りがゼロの場合、左辺は右辺の整数倍です。したがって、次のように試してください: 'if(waveCount%5 == 0)' – Iridium

+1

http://stackoverflow.com/questions/3427602/c-sharp-modulus-operator – rene

答えて

6

を読むために持っているものを知っている知っている:

if (waveCount % 5 == 0)

0

はそれを

を試してみて
if (waveCount % 5 == 0 && waveCount <= 50) 
0

modulo演算子はを使用する:

if(waveCount % 5 == 0 && waveCount <= 100) ... 

オペレータは整数divisonの剰余を計算します。あなたのケースでは、ステートメントは、5で除算されたあなたの数字に余りがないことを示すゼロを返さなければなりません。ただ、一般化する

0

:場合にはあなたが持っているデータを使用すると、メンバーシップのセットをテストし、その後、すべてのものがセットに照合する置くことができ、パターンに一致しない:

var thingsToMatch = Set(2, 5, 8, 14, 23, 80, 274...); 
if (someNumber in thingsToMatch) {...} 

限り関数が呼び出されるたびにセットが再作成されないことがわかっているので、これはかなり高速であることが証明されています。言語が自動的にセットをキャッシュしない場合は、その関数の静的変数にすることができます。

0

あなたは、このために剰余演算子を使用することができます。

if (waveCount % 5 == 0 && waveCount > 0 && waveCount <= 50) 
{ 
    //yield return new WaitForSeconds(shopWait); 
    shopPanel.SetActive(true); 
} 
2

はい、これを行うためのシンプルな方法は確かにあります。あなたが数学と論理の少しを使用する場合は、これを把握することができます。

waveCountの値が5の倍数であるかどうかを確認するため、%を使用してwaveCount/5のリマインダーを取得できます。 waveCountが100よりも大きい場合にそのリマインダーが0の場合、waveCountは5

if (waveCount % 5 == 0 && waveCount <= 100) 

の倍数である私はあなたのコードの動作を複製するwaveCount <= 100を追加、すなわち、if文に入れません。

また、あなたはリストにすべての値を置くことができます。

var list = new List<int>(); 
for (int i = 1 ; i <= 20 ; i++) { 
    list.Add(i * 5); 
} 

し、リストには番号が含まれているかどうか確認してください。

if (list.Contains(waveNumber)) 

この方法の利点は、あなたがすることを決めた場合ということですゲームの仕方を変えて、店のメニューを波9,52、および77で開くことができると言うならば、ifステートメントを変更せずにリストに数字を追加するだけです。これは多くの柔軟性を提供します。

0

あなたは5で除算した余りが数5.

if (waveCount % 5 == 0 && waveCount >= 5 && waveCount <= 50) 

C位行う整数数タイプの整数演算intで割り切れることを意味し、0であるかどうかをテストすることができ、long,uint、...)。 例:

13/5 = 2 

e.e.e.小数部分を得ることはありません。相補的な演算はモジュロ演算である。

13 % 5 = 3 

すなわち13/5 2プラス一緒に残り3は、分割及びモジュロ演算を使用して、逆の操作を実行することを可能にする:それはあなたに、この除算の余りを返します。

(5 * (13/5)) + (13 % 5) = 
(5 *  2 ) + ( 3 ) = 13 

あなたが不規則な数字を持っている場合は、全く異なるアプローチがswitchステートメントを使用するために、次のとおりです。

switch (waveCount) { 
    case 5: 
    case 10: 
    case 15: 
    case 20: 
    case 25: 
    case 30: 
    case 35: 
    case 40: 
    case 45: 
    case 50: 
     shopPanel.SetActive(true); 
     break; 
} 

または許可された値の配列:

private static readonly int[] AllowedValues = 
    new int[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 }; 

if(Array.IndexOf(AllowedValues, waveCount) >= 0) { ... } 
2
if (waveCount % 5 == 0 && waveCount <= 50) { 
    //...code 
} 
1

あなたの "if"ステートメントのボディがちょうどshopPanel.SetActive(true);が含まれています。そのような "if"を使用しなくても実行できます。

shopPanel.SetActive(waveCount % 5 == 0 && waveCount <= 50); 
関連する問題