alt text http://img707.yfrog.com/img707/6250/newpicturer.jpgИспользование LINQ для выделения конкретного объекта из списка объектов
Я пытаюсь мою руку на создание клона захватчиками. есть 30 инопланетян, расположенных в матрице размером 5x6 на экране. Мне нужно дать дно самой чужой способность выстрелить. Я использую LINQ, чтобы сгруппировать пришельцев в 5 групп на основе Location.X, а затем отсортировать группы по убыванию. Затем мне нужно выбрать одну из групп (которая дает мне 5 групп) и выбрать первого иностранца в группе и используйте его координату s, чтобы выстрелить.
Мой код ниже, ну, работает, но инопланетяне в ЛЮБОЙ строке весело стреляют - не только самое нижнее. Посмотрите мой код ниже и скажите мне, что случилось. (r = экземпляр класса Random, все инопланетяне находятся в списке, называемом захватчиками).
{
var query = (from inv in invaders
group inv by inv.Location.X
into invgroup
orderby invgroup.Key descending
select invgroup).ToList();
var invfirst = query[r.Next(query.Count)].First();
invaderShots.Add(new Shot(
new Point(invfirst.Area.X + invfirst.Area.Width/2, invfirst.Area.Y + invfirst.Area.Height + 5),
displayrect, Shot.Direction.Down));
}
EDIT:
Solved.Now работает как требуется после того, как David B толкнул меня в правильном направлении.
Окончательный код ниже. Может потребоваться некоторое улучшение в свете большого количества группировок/сортировки. Если у кого-то есть что-то конструктивное, чтобы сказать по этому поводу, я все уши (или глаза, в данном случае). Спасибо всем, кто помог.
List<Invader> firstinvader = invaders.GroupBy(inv => inv.Location.X)
.Select(g => g.OrderByDescending(inv => inv.Location.Y)).ElementAt(r.Next(5)).ToList();
firstinvader.Sort(comparerByLocation);
Invader item = firstinvader[firstinvader.Count -1];
if(invaderShots.Count < 2)
{
invaderShots.Add(new Shot(
new Point(item.Area.X + item.Area.Width/2, item.Area.Y + item.Area.Height/2),
displayrect, Shot.Direction.Down));
}
else
{
return;
}
Что случилось с 'r'? –
Этот код работает отлично для меня – Midhat
@jonas Elfstrom: r является экземпляром Random, мне нужно вытащить случайный столбец из группы из 5 столбцов. (игра может стать предсказуемой иначе) – dezkev