Solusi Catur yang ringan dan berfitur lengkap untuk Aplikasi .NET yang menunjukkan pergerakan bidak yang benar dengan rokade, en passant, promosi gadai, dan pemain AI minmax.
Buat instance Board dengan menggunakan fungsi BoardFactory.CreateBoard statis, buat board dengan potongan di posisi default. Papan mengikuti sistem kisi X,Y dengan (0,0) sebagai kotak kisi kiri bawah dan (7,7) sebagai kotak kisi kanan atas. Bidak Player One (putih) dibuat pada dua baris terbawah dan bidak Player Two (hitam) dibuat pada dua baris teratas. Papan juga menyimpan giliran saat ini, yaitu Pemain Pertama saat papan pertama kali dibuat dan bertukar saat gerakan dilakukan.
Board board = BoardFactory . CreateBoard ( ) ;
Anda kemudian harus membuat instance ChessPlayers dan menambahkannya ke Papan. Kelas ChessPlayer sendiri bersifat abstrak sehingga Anda harus membuat kelas turunan atau cukup menggunakan BasicPlayer yang sudah ada. Saat membuat instance Pemain Catur, Anda juga harus menentukan di tim mana mereka berada, Pemain Satu atau Pemain Dua, lalu menambahkannya ke Papan. Instance ChessPlayer kemudian dapat bergerak dengan memanggil fungsi dasar 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 ) ) ;
Dengan Pemain Catur khusus, Anda dapat memiliki fungsi pemain tertentu, seperti AI yang bergerak untuk pemain, atau manajer masukan pihak ketiga yang menerapkan gerakan untuk salah satu pemain.
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 ) ) ;
}
}
Pergerakan ditentukan oleh Posisi Dari dan Posisi Ke. Pemain Catur dapat melakukan gerakan dengan memanggil fungsi MovePiece jika fungsi tersebut telah ditambahkan ke Papan.
var pawnPos = new Vector2I ( 4 , 1 ) ;
var pawnDest = new Vector2I ( 4 , 3 ) ;
var move = new BoardPieceMove ( pawnPos , pawnDest ) ;
_player . MovePiece ( move ) ;
Fungsi ApplyMove akan mengembalikan false jika perpindahan yang Anda lakukan tidak valid dan akan mengembalikan true jika perpindahan berhasil diterapkan. Suatu perpindahan mungkin tidak sah karena alasan berikut:
Anda dapat berlangganan berbagai panggilan balik yang dipanggil sepanjang permainan catur, sehingga memudahkan aplikasi Anda bereaksi terhadap peristiwa dalam permainan catur. Callback OnBoardChanged istimewa karena memberi Anda daftar setiap tindakan yang diterapkan pada papan pada giliran sebelumnya, seperti bidak dipindahkan, bidak diambil, promosi pion, dll. dan mencakup gerakan itu sendiri yang memberi Anda posisi bidak Ke dan Dari. bergerak. Ini memungkinkan Anda menganimasikan gerakan atau sekadar merender papan.
// 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 ;