本文整理汇总了C#中Square.Validate方法的典型用法代码示例。如果您正苦于以下问题:C# Square.Validate方法的具体用法?C# Square.Validate怎么用?C# Square.Validate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Square
的用法示例。
在下文中一共展示了Square.Validate方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetMoveRangeWithTable
/// <summary>
/// テーブルを使用し、指定の相対位置に動けるか調べます。(先手専用)
/// </summary>
private IEnumerable<Square> GetMoveRangeWithTable(BWType bwType,
Square square,
int[][] table)
{
// 後手側なら上下反転します。
var sign = (bwType == BWType.White ? -1 : +1);
foreach (var elem in table)
{
var sq = new Square(
square.File + elem[0],
square.Rank + elem[1] * sign);
if (sq.Validate())
{
yield return sq;
}
}
}
示例2: PointToSquare
/// <summary>
/// 与えられた座標にあるマスを取得します。
/// </summary>
private Square PointToSquare(System.Drawing.Point pos)
{
// とりあえず設定します。
var file = (int)((pos.X - BoardSquareBounds.Left) / SquareSize.Width);
var rank = (int)((pos.Y - BoardSquareBounds.Top) / SquareSize.Height);
// 正しい位置にありましぇん。
var square = new Square(Board.BoardSize - file, rank + 1);
if (!square.Validate())
{
return null;
}
/*// 各セルの幅と高さを取得します。
var gridX = pos.X % this.SquareSize.Width;
var gridY = pos.Y % this.SquareSize.Height;
// セルの端ぎりぎりならそのセルにいると判定しません。
if (gridX < SquareSize.Width * 0.1 || SquareSize.Width * 0.9 < gridX)
{
return null;
}
if (gridY < SquareSize.Height * 0.1 || SquareSize.Height * 0.9 < gridY)
{
return null;
}*/
return (ViewSide == BWType.White ? square.Flip() : square);
}
示例3: GetCanMoveRange
/// <summary>
/// <paramref name="square"/>にある駒が移動できる
/// 可能性のある位置をすべて列挙します。
/// </summary>
private IEnumerable<Square> GetCanMoveRange(Square square, BWType bwType)
{
if (square == null || !square.Validate())
{
yield break;
}
var piece = this[square];
if (piece == null || piece.BWType != bwType)
{
yield break;
}
IEnumerable<Square> list;
var file = square.File;
var rank = square.Rank;
using (LazyLock())
{
if (piece.IsPromoted)
{
// 成り駒の場合
switch (piece.PieceType)
{
case PieceType.Gyoku:
case PieceType.Hisya:
case PieceType.Kaku:
list = GetMoveRangeWithTable(bwType, square, MoveTableGyoku);
foreach (var p in list)
{
yield return p;
}
break;
case PieceType.Kin:
case PieceType.Gin:
case PieceType.Kei:
case PieceType.Kyo:
case PieceType.Hu:
list = GetMoveRangeWithTable(bwType, square, MoveTableKin);
foreach (var p in list)
{
yield return p;
}
break;
}
}
else
{
// 成り駒で無い場合
switch (piece.PieceType)
{
case PieceType.Gyoku:
list = GetMoveRangeWithTable(bwType, square, MoveTableGyoku);
foreach (var p in list)
{
yield return p;
}
break;
case PieceType.Kin:
list = GetMoveRangeWithTable(bwType, square, MoveTableKin);
foreach (var p in list)
{
yield return p;
}
break;
case PieceType.Gin:
list = GetMoveRangeWithTable(bwType, square, MoveTableGin);
foreach (var p in list)
{
yield return p;
}
break;
case PieceType.Kei:
list = GetMoveRangeWithTable(bwType, square, MoveTableKei);
foreach (var p in list)
{
yield return p;
}
break;
case PieceType.Hu:
list = GetMoveRangeWithTable(bwType, square, MoveTableHu);
foreach (var p in list)
{
yield return p;
}
break;
case PieceType.Kyo:
for (var r = 1; r <= BoardSize; ++r)
{
yield return new Square(file, r);
}
break;
}
}
// 飛車角は成り/不成りに関わらず調べる箇所があります。
//.........这里部分代码省略.........
示例4: CanPromote
/// <summary>
/// 駒が成れるか調べます。
/// </summary>
public static bool CanPromote(Piece piece, BWType bwType,
Square dstSquare, Square srcSquare)
{
if (dstSquare == null || !dstSquare.Validate())
{
return false;
}
// 駒の移動でない場合は成れません。
if (srcSquare == null || !srcSquare.Validate())
{
return false;
}
// 既に成っている駒を再度成ることはできません。
if (piece == null || piece.IsPromoted)
{
return false;
}
var srcRank = srcSquare.Rank;
var dstRank = dstSquare.Rank;
if (bwType == BWType.White)
{
srcRank = (BoardSize + 1) - srcRank;
dstRank = (BoardSize + 1) - dstRank;
}
// 1,2,3の段の時だけ、成ることができます。
if (srcRank > 3 && dstRank > 3)
{
return false;
}
// 金玉は成れません。
if (piece.PieceType == PieceType.None ||
piece.PieceType == PieceType.Gyoku ||
piece.PieceType == PieceType.Kin)
{
return false;
}
return true;
}
示例5: using
/// <summary>
/// <paramref name="dstSquare"/> にある駒を取得します。
/// </summary>
public BoardPiece this[Square square]
{
get
{
if (square == null || !square.Validate())
{
return null;
}
var rank = square.Rank - 1;
var file = BoardSize - square.File;
using (LazyLock())
{
return this.board[rank * 9 + file];
}
}
set
{
if (square == null || !square.Validate())
{
throw new ArgumentException("dstSquare");
}
var rank = square.Rank - 1;
var file = BoardSize - square.File;
using (LazyLock())
{
this.board[rank * 9 + file] = value;
}
}
}
示例6: IsPromoteForce
/// <summary>
/// 駒を強制的に成る必要があるか調べます。
/// </summary>
public static bool IsPromoteForce(Piece piece, BWType bwType,
Square dstSquare)
{
if (dstSquare == null || !dstSquare.Validate())
{
return false;
}
// 駒の移動元に自分の駒がなければダメ
if (piece == null || piece.IsPromoted)
{
return false;
}
var normalizedRank = (
bwType == BWType.White ?
(BoardSize + 1) - dstSquare.Rank :
dstSquare.Rank);
if (piece.PieceType == PieceType.Kei)
{
return (normalizedRank <= 2);
}
else if (piece.PieceType == PieceType.Kyo ||
piece.PieceType == PieceType.Hu)
{
return (normalizedRank == 1);
}
return false;
}
示例7: RemovePieceObject
/// <summary>
/// 指定の位置にある駒を削除します。
/// </summary>
private void RemovePieceObject(Square square)
{
if (square == null || !square.Validate())
{
return;
}
// 指定のマスにある駒を探します。
var index = this.pieceObjectList.FindIndex(
_ => _.Square == square);
if (index < 0)
{
return;
}
RemovePieceObject(this.pieceObjectList[index]);
}
示例8: GetPieceObject
/// <summary>
/// 指定の位置にある駒を取得します。
/// </summary>
private PieceObject GetPieceObject(Square square)
{
if (square == null || !square.Validate())
{
return null;
}
return this.pieceObjectList.FirstOrDefault(
_ => _.Square == square);
}