提问者:小点点

如何检查我所有的跳棋是否都在同一个地方?


我要做一个双陆棋游戏。游戏完成了90%。我必须做最后一局(当你从“家”拿出你的跳棋时,我不知道它在英语里是怎么叫的)。我在ArrayPieseAlbe中有所有的白块,我正在使用foreach来检查位置是否匹配。

public bool SuntToatePieseAlbeCasa()
        {
            foreach (PiesaAlba p in ArrayPieseAlbe)
            {
                return p.Location.X > 503; //503 is the right location 
            }
            return false;

PiesaAlba是白跳棋所在的班级。ArrayPieseAlbe包含所有白色方格。出于某种奇怪的原因,这并不像它应该做的那样工作。当7个或更多的跳棋在“家里”时,它是工作的,但它需要所有15个跳棋都在那里才能正常工作。有什么建议吗?对不起,我英语不好


共1个答案

匿名用户

如果所有部分都是“home”,则需要返回true。当前,如果有任何(即至少一个)片段在家中,则返回true。

要解决这个问题,你的逻辑应该是:

这看起来像:

public bool SuntToatePieseAlbeCasa()
{
    foreach (PiesaAlba p in ArrayPieseAlbe)
    {
        if (p.Location.X <= 503) //503 is the right location 
        {
            return false;
        }
    } 
    return true;
}

您也可以在System.Linq中使用方法:

public bool SuntToatePieseAlbeCasa()
{
    return ArrayPieseAlbe.All(p => p.Location.X > 503);
}

查看的源代码,它实际上做了与上面相同的事情,但使用谓词在循环内部进行检查:

public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
    if (source == null) throw Error.ArgumentNull("source");
    if (predicate == null) throw Error.ArgumentNull("predicate");
    foreach (TSource element in source) {
        if (!predicate(element)) return false;
    }
    return true;
}