我正在编写太空入侵者进行练习;-)并且工作得很好但是我的入侵者还没有遇到问题。
所有入侵者都存储在一个列表中,我使用linq按照X-location对这些入侵者进行分组,这样我就可以随机访问一个组,并使用该列底部的入侵者进行回击。
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}; ),我的结果总是 null ?
有人可以给我一些帮助/提示吗?感谢
答案 0 :(得分:1)
我发现您的查询有两个问题;您正在对组进行排序而不是对入侵者进行排序,并且您使用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();