本文整理汇总了C#中PieceType.Where方法的典型用法代码示例。如果您正苦于以下问题:C# PieceType.Where方法的具体用法?C# PieceType.Where怎么用?C# PieceType.Where使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PieceType
的用法示例。
在下文中一共展示了PieceType.Where方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: IsCheckMated
/// <summary>
/// 手番側の玉が詰まされているか調べます。
/// </summary>
/// <remarks>
/// 手番のある側が可能な指し手をすべて指しても
/// 玉の王手が外れなければ詰みとなります。
/// </remarks>
public bool IsCheckMated()
{
if (!IsChecked(Turn))
{
return false;
}
var srcSquares = (
from file in Enumerable.Range(1, BoardSize)
from rank in Enumerable.Range(1, BoardSize)
select new Square(file, rank))
.ToList();
// 駒打ちは合い駒を調べればいいので、
// 打てる範囲がもっとも広い駒を1つだけ調べます。
var pieceList = new PieceType[]
{
// どこでも打てる
PieceType.Hisya,
PieceType.Kaku,
PieceType.Kin,
PieceType.Gin,
// 2段目まで
PieceType.Kyo,
PieceType.Hu,
// 3段目まで
PieceType.Kei,
};
var dropPieceType = pieceList
.Where(_ => GetCapturedPieceCount(_, Turn) > 0)
.FirstOrDefault();
if (dropPieceType != PieceType.None)
{
if (srcSquares.Any(_ => !IsDropAndChecked(Turn, dropPieceType, _)))
{
return false;
}
}
// 駒の移動はすべてを試します。
var sqList = srcSquares
.SelectMany(_ =>
GetCanMoveRange(_, Turn)
.Select(__ => Tuple.Create(_, __)))
.Where(_ => _.Item2.Validate());
if (sqList.Any(_ => !IsMoveAndChecked(Turn, _.Item1, _.Item2)))
{
return false;
}
return true;
}
示例2: IsCheckMated
/// <summary>
/// 手番側の玉が詰まされているか調べます。
/// </summary>
/// <remarks>
/// 手番のある側が可能な指し手をすべて指しても
/// 玉の王手が外れなければ詰みとなります。
/// </remarks>
public bool IsCheckMated()
{
if (!IsChecked(Turn))
{
return false;
}
// 実際に駒を動かしながら調べるため、
// コピーしたオブジェクトを使います。
var clone = Clone();
// 駒打ちは合い駒を調べればいいので、
// 打てる範囲がもっとも広い駒を1つだけ調べます。
var pieceList = new PieceType[]
{
// どこでも打てる
PieceType.Hisya,
PieceType.Kaku,
PieceType.Kin,
PieceType.Gin,
// 2段目まで
PieceType.Kyo,
PieceType.Hu,
// 3段目まで
PieceType.Kei,
};
var dropPieceType = pieceList
.Where(_ => clone.GetCapturedPieceCount(_, Turn) > 0)
.FirstOrDefault();
if (dropPieceType != PieceType.None &&
AllSquares().Any(_ => !clone.IsDropAndChecked(Turn, dropPieceType, _)))
{
return false;
}
// 駒の移動はすべてを試します。
var sqList = AllSquares()
.SelectMany(_ =>
clone.GetCanMoveRange(_, Turn)
.Select(__ => Tuple.Create(_, __)));
if (sqList.Any(_ => !clone.IsMoveAndChecked(Turn, _.Item1, _.Item2)))
{
return false;
}
return true;
}