2009-05-03 14 views
0

私は練習用のスペースインベーダーをプログラミングしていますが、かなりうまく動作しますが、火災を起こした侵略者には問題があります。LINQ:グループ化コレクション

すべての侵略者がリストに格納されています。私はlinqを使ってそのX位置でグループを分類します。グループにランダムにアクセスし、その列の下部にある侵略者を撃墜して戻します。

var r = from invader in invaders 
       group invader by invader.Location.X into invaderGroup 
       orderby invaderGroup descending 
       select invaderGroup.Take(random.Next(0, invaderGroup.Count())); 

でも何でも、私はしてみてください(例:が新しい{invaderGroup.Key、invadergroup}を選択します。)私の結果は常にヌルのですか?

誰かが私に助けやヒントを教えてくれますか?ありがとう

答えて

1

質問に2つの問題があります。あなたは、侵略者をソートするのではなくグループをソートしていて、空の数字を0とするとTakeを使用しているので、空の結果が返される可能性があります。

これは、座標Xによって侵略者をグループ化するY座標によってそれらを並べ替え、ランダムでグループを選ぶと最高で侵入者を得るために働く

Y座標:

var r = 
    from invader in invaders 
    orderby invader.Location.Y descending 
    group invader by invader.Location.X into invaderGroup 
    select invaderGroup; 

Invader fire = r.Skip(random.Next(r.Count())).First().First(); 
関連する問題