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

How can i check if all my checkers are in the same place?

我需要制作西洋双陆棋游戏。游戏已完成 90%。我必须完成残局(当你从“家”中取出跳棋时,我不知道它在英语中是怎么称呼的)。我在 ArrayPieseAlbe 中拥有所有 whitecheckers,我正在使用 foreach 检查位置是否匹配。

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

PiesaAlba 是白色跳棋所在的 class。 ArrayPieseAlbe 包含所有白色棋子。由于某些奇怪的原因,这不起作用,因为它应该起作用。当“家里”有 7 个或更多跳棋时它可以工作,但需要所有 15 个跳棋都在那里才能正常工作。有什么建议吗?抱歉我的英语不好

如果 所有 部分都是“家”,则需要 return 为真。目前,如果 任何(即至少一个)作品在家,你就是 returning true。

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

  1. 遍历每一块并检查它是否在家
  2. 如果不是,立即return false
  3. 如果所有片段都被检查过,return 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 中的 All() 方法:

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

查看 source of All(),它的作用与上面基本相同,但使用谓词在循环内部进行检查:

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;
}