캐슬링, 앙파상, 폰 승격 및 minmax AI 플레이어를 통해 정확한 말 이동을 보여주는 .NET 애플리케이션용 경량의 모든 기능을 갖춘 체스 솔루션입니다.
정적 BoardFactory.CreateBoard 함수를 사용하여 Board의 인스턴스를 생성하고 기본 위치에 조각이 있는 보드를 생성합니다. 보드는 (0,0)이 왼쪽 하단 그리드 정사각형이고 (7,7)이 오른쪽 상단 그리드 정사각형인 X,Y 그리드 시스템을 따릅니다. Player One 조각(흰색)은 아래쪽 두 행에 생성되고 Player Two 조각(검은색)은 위쪽 두 행에 생성됩니다. 보드는 또한 보드가 처음 생성될 때 플레이어 1이고 이동이 이루어질 때 교체되는 현재 턴을 저장합니다.
Board board = BoardFactory . CreateBoard ( ) ;그런 다음 ChessPlayers의 인스턴스를 생성하여 보드에 추가해야 합니다. ChessPlayer 클래스 자체는 추상적이므로 파생 클래스를 생성하거나 기존 BasicPlayer를 사용해야 합니다. ChessPlayer를 인스턴스화할 때 플레이어 1 또는 플레이어 2 중 어느 팀에 속해 있는지 지정한 다음 보드에 추가해야 합니다. 그런 다음 ChessPlayer 인스턴스는 기본 MakeMove 함수를 호출하여 이동할 수 있습니다.
public abstract class ChessPlayer
{
public virtual void Update ( float deltaTime ) { }
protected virtual void OnGameStateChanged ( GameState state ) { }
protected virtual void OnTurnSwapped ( Player player ) { }
protected bool MovePiece ( BoardPieceMove boardPieceMove ) { }
} _board = BoardFactory . CreateBoard ( ) ;
_board . AddPlayer ( new UnityChessPlayer ( _board , Player . PlayerOne ) ) ;
_board . AddPlayer ( new AIChessPlayer ( _board , Player . PlayerTwo ) ) ; 사용자 정의 ChessPlayers를 사용하면 플레이어를 위한 AI 이동이나 플레이어 중 한 명을 위한 이동을 적용하는 제3자 입력 관리자와 같은 특정 플레이어 기능을 가질 수 있습니다.
public class AIChessPlayer : ChessPlayer
{
public AIChessPlayer ( Board board , Player player ) : base ( board , player ) { }
protected override void BoardOnOnTurnSwapped ( Player player )
{
if ( player == _player )
{
ThreadPool . QueueUserWorkItem ( ( state ) => CalculateAndMove ( ) ) ;
}
}
private void CalculateAndMove ( )
{
MovePiece ( MinMaxMoveCalc . GetBestMove ( Board ) ) ;
}
}이동은 시작 위치(From Position)와 끝 위치(To Position)로 정의됩니다. ChessPlayers는 보드에 추가된 경우 MovePiece 함수를 호출하여 이동할 수 있습니다.
var pawnPos = new Vector2I ( 4 , 1 ) ;
var pawnDest = new Vector2I ( 4 , 3 ) ;
var move = new BoardPieceMove ( pawnPos , pawnDest ) ;
_player . MovePiece ( move ) ;ApplyMove 함수는 이동이 어떤 식으로든 유효하지 않은 경우 false를 반환하고 이동이 성공적으로 적용된 경우 true를 반환합니다. 다음과 같은 이유로 이동이 유효하지 않을 수 있습니다.
체스 게임 전반에 걸쳐 호출되는 다양한 콜백을 구독할 수 있으므로 응용 프로그램이 체스 게임의 이벤트에 쉽게 반응할 수 있습니다. OnBoardChanged 콜백은 이전 턴에 보드에 적용된 모든 작업(예: 이동된 조각, 가져간 조각, 폰 승격 등)의 목록을 제공하고 이동 자체를 포함하므로 특별합니다. 이동하다. 이를 통해 움직임을 애니메이션화하거나 보드를 렌더링할 수 있습니다.
// Called when a player makes their move and its parameter is the current players go.
public event PlayerDelegate OnTurnSwapped ;
/// Called when a player is in checkmate and its parameter is the player in check.
public event PlayerDelegate OnPlayerInCheck ;
/// Called when a something on the board has changed and its parameter is a list of changes.
public event BoardChangesDelegate OnBoardChanged ;
/// Called when the state of the game changes, such as when a game is paused, resumed or ended.
public event BoardGameStateDelegate OnGameStateChanged ;