これはすべて間違っていると思いますが、良い解決策を見つけることができないので、どのポインタも役に立ちます。私は自分のコードに次の文があります。何も起こらないif文内の3項演算子
if (!mapDict.ContainsKey(_thisRoom.Item1))
{
MapGraphItem roomMGI = new MapGraphItem();
var rndOrderRooms = roomList.OrderBy(i => rnd.Next());
foreach (MapGraphItem room in rndOrderRooms)
{
if (!room._flags.IsFlagSet(GlobalValues.MapTileType.start) && !room._flags.IsFlagSet(GlobalValues.MapTileType.exit)
&& ((_thisRoom.Item2 == 'N') ? room._north : (_thisRoom.Item2 == 'S') ? room._south : (_thisRoom.Item2 == 'E') ? room._east : room._west)
&& ((mapOpenings.Count < 4) : !room._flags.IsFlagSet(GlobalValues.MapTileType.deadend) ? *ignore this section*))
{
roomMGI = room;
earlyRooms.Add(room);
goto Exit;
}
}
Exit:
//MapGraphItem _room = earlyRooms[rnd.Next(0, earlyRooms.Count)];
GameObject _roomGO = (GameObject)Instantiate(roomMGI.gameObject, _thisRoom.Item1, Quaternion.identity);
roomMGI._position = GlobalValues.MapTilePos.Early;
mapDict.Add(_roomGO.transform.position, roomMGI);
_mapUsed++;
if (roomMGI._north) _n = true;
if (roomMGI._south) _s = true;
if (roomMGI._east) _e = true;
if (roomMGI._west) _w = true;
Debug.Log ("Early room added at: " + _thisRoom.Item1.ToString() + " N? " + (_n ? "yes" : "no") + " S? " + (_s ? "yes" : "no") +
" E? " + (_e ? "yes" : "no") + " W? " + (_w ? "yes" : "no"));
GetRoomOpenings(_roomGO.transform.position, _n, _s, _e, _w);
_tiles--;
}
基本的には、*ignore this section*
面積は、私は何も起こりませんすることを意味します。
つまり、if
の最初の2行が正しいと仮定すると、.Count
が4未満の場合、追加の条件があります。 .Count
が4つ以上の場合、その条件は必要ありません。
反対側に設定することはできません。ちょうどroom._flags.IsFlagSet(GlobalValues.MapTileType.deadend)
に設定することはできません。私は強制終了させたくないからです。私はちょうどそれが4つよりも少なく残っていないことを確かめたいと思うmapOpening
。多くの人が指摘したよう
3つの演算子を1つのステートメントで使用すると賞がありますか?なぜなら、あなたはこれをいくつか入れ子にしてしまわないようにする他の説得力のある理由は考えられないからです。 –
質問 - このプログラムの出力には決定的な答えがあります - 出力はそれを書いた開発者が解雇されたことです。 – Stilgar
if {if {if {if ...} ...} ...} ...}の可読性が良くないため、 1つのif文の各セクションに簡単にコメントを付けることができます。そして結果として生まれる体は1つのもののセットであり、まったく何もないからです。 –