{"id":344021,"date":"2023-01-16T21:01:41","date_gmt":"2023-01-16T21:01:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=344021"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=344021","title":{"rendered":"<span>\u041c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u0448\u0430\u0448\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"right\">\u042f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u043b \u043d\u0443\u0436\u043d\u0443\u044e \u0448\u0430\u0448\u043a\u0443 \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u0435\u2026<\/p>\n<p align=\"right\"><em>(\u043e\u0442\u0432\u0435\u0442 \u041c\u0430\u0440\u0438\u043e\u043d\u0430 \u0422\u0438\u043d\u0441\u043b\u0438 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c)<\/em>  <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u041e\u0431 \u0438\u0434\u0435\u0435<\/h2>\n<p>\u0412 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043e\u043f\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438, \u0430 \u0432 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0435\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u2014 \u0442\u044b\u0441\u044f\u0447\u0438, \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438 \u0418\u0418 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u0448\u0430\u0445\u043c\u0430\u0442\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0448\u0430\u0448\u043a\u0438 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u044e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430. \u0412 \u0420\u0443\u043d\u0435\u0442\u0435 \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u0448\u0430\u0448\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0448\u0430\u0448\u043a\u0438 (checkers) \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0438\u0433\u043b\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B8%D1%87%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%81%D0%BC%D0%B5%D1%80%D1%82%D1%8C\" rel=\"noopener noreferrer nofollow\">\u043d\u0438\u0447\u0435\u0439\u043d\u0430\u044f \u0441\u043c\u0435\u0440\u0442\u044c<\/a>, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u0448\u0430\u0448\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0445. \u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0442\u0435\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0438\u0436\u0435:<\/p>\n<ul>\n<li>\n<p>\u0428\u0430\u0448\u043a\u0438 \u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043a\u043b\u0435\u0442\u043a\u0430\u043c \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0448\u0430\u0448\u043a\u0430 \u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0435\u0434 \u043d\u0430 \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435, \u0430 \u0431\u044c\u0435\u0442 \u2014 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430\u0437\u0430\u0434, \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u044f \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 <em>(\u0432 checkers \u2014 \u0431\u044c\u0435\u0442 <\/em><strong><em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em><\/strong><em> \u0432\u043f\u0435\u0440\u0435\u0434)<\/em><\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u043c\u043a\u0430 \u0445\u043e\u0434\u0438\u0442 \u0438 \u0431\u044c\u0435\u0442 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430 \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439 <em>(\u0432 checkers \u2014 \u0445\u043e\u0434\u0438\u0442 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430\u0437\u0430\u0434 <\/em><strong><em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em><\/strong><em> \u043d\u0430 1 \u043f\u043e\u043b\u0435; \u0431\u044c\u0435\u0442, \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u044f <\/em><strong><em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em><\/strong><em> 1 \u043f\u043e\u043b\u0435)<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0438\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e! <\/strong>\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0431\u043e\u044f \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0442, \u043a\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 python, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u0443\u0442\u0443\u044e \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438\u0433\u0440\u0443 \u0438 \u0432\u044b\u0431\u0440\u0430\u043b Unity (C#). \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438\u0433\u0440\u0443 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b.<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h2>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u0448\u0430\u0448\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0440\u0430\u0437\u043d\u044b\u0435. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 MonoBehaviour Unity-\u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e \u043c\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0438\u0448\u0443, \u043a\u0430\u043a \u044f \u0445\u0440\u0430\u043d\u044e \u0434\u043e\u0441\u043a\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 \u0448\u0430\u0448\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, <strong>\u0442\u0438\u043f \u0448\u0430\u0448\u043a\u0438<\/strong> \u0438 \u0435\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043f\u043e\u043b\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"cs\">public enum PieceType {     EMPTY, WHITE_MAN, WHITE_KING, BLACK_MAN, BLACK_KING }  public class Piece {     public PieceType Type { get; private set; }     public Vector2Int Pos { get; private set; }     public bool IsWhite { get; private set; }     public bool IsKing { get; private set; }       public Piece(PieceType type, Vector2Int pos)     {         Type = type;         Pos = pos;         IsWhite = type == PieceType.WHITE_MAN || type == PieceType.WHITE_KING;         IsKing = type == PieceType.WHITE_KING || type == PieceType.BLACK_KING;     }      public void ChangePos(Vector2Int newPos)     {         Pos = newPos;     }     public void BecomeKing()     {         Type = IsWhite ? PieceType.WHITE_KING : PieceType.BLACK_KING;         IsKing = true;     }     public void BecomeMan()     {         Type = IsWhite ? PieceType.WHITE_MAN : PieceType.BLACK_MAN;         IsKing = false;     } }<\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0442\u0443\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.<\/p>\n<p>\u0414\u043e\u0441\u043a\u0430 \u0436\u0435 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0448\u0435\u043a \u0438 \u0438\u0445 \u0445\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u043a\u0438, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0436\u043d\u043e\u0435:<\/p>\n<pre><code class=\"cs\">    public class Board     {         private Piece[,] _board = new Piece[8, 8]; \/\/ \u0444\u0438\u0433\u0443\u0440\u044b         public List&lt;Piece> Pieces { get; private set; } = new List&lt;Piece>(); \/\/ \u0442\u0435 \u0436\u0435 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430         private List&lt;Move> _currentMoves; \/\/ \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432         private int[] _countCheckers = new int[5]; \/\/ \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0448\u0430\u0448\u0435\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f (\u0432\u0441\u0435\u0445, \u0431\u0435\u043b\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0431\u0435\u043b\u044b\u0445 \u0434\u0430\u043c\u043e\u043a, \u0447\u0435\u0440\u043d\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0447\u0435\u0440\u043d\u044b\u0445 \u0434\u0430\u043c\u043e\u043a)         private List&lt;MemorisedMove> LastMoves = new List&lt;MemorisedMove>();        ...          \/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u0441\u043a\u0438 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435         \/\/ searchAllMoves -- \u043d\u0430\u0434\u043e \u043b\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u044b         public Board (string arr, bool whitesMove = true, bool searchAllMoves = true)         {             int index = 0;             \/\/ \u041f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043b\u0435\u0442\u043a\u0430\u043c             for (int y = 0; y &lt; 8; y++)             {                 for (int x = (y+1) % 2; x &lt; 8; x += 2)                 {                     if (arr[index] != '0')                     {                       \/\/ \u0418\u043d\u0434\u0435\u043a\u0441 \u0444\u0438\u0433\u0443\u0440\u044b                         int num = int.Parse(arr[index].ToString());                       \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443                         Piece piece = new Piece((PieceType) num, new Vector2Int(x, y));                        \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u0432 \u0441\u043f\u0438\u0441\u043a\u0438                         _board[y, x] = piece;                         Pieces.Add(piece);                         _countCheckers[num]++;                     }                      index++;                 }             }             WhitesMove = whitesMove;             _rowKingsMoves = 0;             _jumpIndex = 0;             _countCheckers[0] = _countCheckers[1] + _countCheckers[2] + _countCheckers[3] + _countCheckers[4];              \/\/ \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0438\u0449\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0445\u043e\u0434\u044b             if (searchAllMoves)                 FindAllMoves();         }        ...     }<\/code><\/pre>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 Board() \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442 \u0434\u043e\u0441\u043a\u0443 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u0437 \u0446\u0438\u0444\u0440, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0448\u0430\u0448\u043a\u0443 (\u0441\u043c. \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 PieceType \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 Piece).<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0434\u043e\u0441\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><em>(\u0420\u0430\u0437\u043e\u0431\u044c\u044e \u0432\u0435\u0441\u044c \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u0434\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0430\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f)<\/em><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432.<\/p>\n<pre><code class=\"cs\">public void FindAllMoves () {     List&lt;Move> takingMoves = new List&lt;Move>(); \/\/ \u0432\u0437\u044f\u0442\u0438\u044f     List&lt;Move> simpleMoves = new List&lt;Move>(); \/\/ \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b      foreach (Piece piece in Pieces)     {         if (piece.IsWhite == WhitesMove)         {           \/\/ \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0449\u0435\u043c \u0432\u0441\u0435 \u0432\u0437\u044f\u0442\u0438\u044f             takingMoves.AddRange(GetAllTakingMovesOfPiece(piece));           \/\/ \u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u0438\u0439 \u043d\u0435\u0442, \u0438\u0449\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b             if (takingMoves.Count == 0)                 simpleMoves.AddRange(GetAllSimpleMovesOfPiece(piece));         }     }      \/\/ \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0437\u044f\u0442\u0438\u044f, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b; \u0438\u043d\u0430\u0447\u0435 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b     if (takingMoves.Count > 0)     {         \/\/ \u0412\u0437\u044f\u0442\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u043e\u0431\u0438\u0442\u044b\u0445 \u0448\u0430\u0448\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0448\u043b\u0438 \u0441\u0430\u043c\u044b\u0435 \u043b\u0443\u0447\u0448\u0438\u0435         \/\/ \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0445\u043e\u0434\u044b, \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0435\u0440\u0432\u044b\u043c\u0438         takingMoves.Sort((Move a, Move b) => -a.Taken.Count.CompareTo(b.Taken.Count));          AllMoves = _currentMoves = takingMoves;     }     else         AllMoves = _currentMoves = simpleMoves; }  \/\/ \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0437\u044f\u0442\u0438\u0439 \u0444\u0438\u0433\u0443\u0440\u044b \/\/ \u0412 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 exc \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u043b\u044f, \u0448\u0430\u0448\u043a\u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u0431\u0438\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0448\u0430\u0448\u043a\u0430\u0445, \/\/ \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443, \u0448\u0430\u0448\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0441 \u0434\u043e\u0441\u043a\u0438 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0445\u043e\u0434\u0430 (\u0441\u043c. \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u043e\u0434 \u043a\u043e\u0434\u043e\u043c) private List&lt;Move> GetAllTakingMovesOfPiece (Piece piece, List&lt;Vector2Int> exc = null) {     if (exc == null)         exc = new List&lt;Vector2Int>();     List&lt;Move> moves = new List&lt;Move>(); \/\/ \u0432\u0441\u0435 \u0432\u0437\u044f\u0442\u0438\u044f     List&lt;Move> movesWithFollowingTake = new List&lt;Move>(); \/\/ \u0432\u0437\u044f\u0442\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0431\u0438\u0442\u044c \u0435\u0449\u0435      if (piece.IsKing)     {       \/\/ \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 4 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f         for (int x = 1; x > -2; x -= 2)         {             for (int y = 1; y > -2; y -= 2)             {                 bool opp_found = false;                 Vector2Int pos_opp = Vector2Int.zero;                \/\/ \u041a\u0443\u0434\u0430 \u0434\u0430\u043c\u043a\u0430 \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u044b\u0436\u043a\u0430                 Vector2Int target = piece.Pos + new Vector2Int(x, y);                 while (InField(target)) \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f InField \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b (x, y) \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u043b\u044e                 {                     if (IsEmpty(target)) \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f IsEmpty \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u043e                     {                         if (opp_found) \/\/ \u0415\u0441\u043b\u0438, \u043f\u0440\u044b\u0433\u043d\u0443\u0432 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0443 target \u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0435\u043c \u0448\u0430\u0448\u043a\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0442\u043e \u044d\u0442\u043e \u0432\u0437\u044f\u0442\u0438\u0435                             AddMove(piece.Pos, target, pos_opp); \/\/ \u041a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u043f\u0440\u044b\u0436\u043a\u043e\u0432 \u0441\u043e \u0432\u0437\u044f\u0442\u0438\u0435\u043c                     }                     else if (_board[target.y, target.x].IsWhite == piece.IsWhite) \/\/ \u0415\u0441\u043b\u0438 \u0443\u043f\u0435\u0440\u043b\u0438\u0441\u044c \u0432 \u0441\u0432\u043e\u044e \u0448\u0430\u0448\u043a\u0443 \u2014 \u0442\u043e \u0443\u0441\u0451                         break;                     else                     {                         if (!opp_found) \/\/ \u0415\u0441\u043b\u0438 \u0443\u043f\u0435\u0440\u043b\u0438\u0441\u044c \u0432 \u0448\u0430\u0448\u043a\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u044d\u0442\u043e                         {                             opp_found = true;                             pos_opp = target;                         }                         else \/\/ \u0415\u0441\u043b\u0438 \u0443\u0442\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0432\u043e 2-\u044e \u0448\u0430\u0448\u043a\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f                             break;                     }                     target += new Vector2Int(x, y);                 }             }         }     }     else     {       \/\/ \u0422\u0443\u0442 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 4 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432\u0437\u044f\u0442\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0448\u0430\u0448\u043a\u0438 (\u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e)         \/\/ target - \u043f\u043e\u043b\u0435 \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0438\u043c\u0441\u044f, middle - \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0435\u043c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u0432\u043d\u0438\u0437 \u0432\u043f\u0440\u0430\u0432\u043e)         Vector2Int target = new Vector2Int(piece.Pos.x + 2, piece.Pos.y + 2);         Vector2Int middle = new Vector2Int(piece.Pos.x + 1, piece.Pos.y + 1);         if (InField(target) &amp;&amp; IsEmpty(target) &amp;&amp; !IsEmpty(middle) &amp;&amp; _board[middle.y, middle.x].IsWhite != piece.IsWhite)             AddMove(piece.Pos, target, middle);         ...         ...         ...     }     if (movesWithFollowingTake.Count > 0)         return movesWithFollowingTake;     return moves;        bool AddMove (Vector2Int fr, Vector2Int to, Vector2Int taken)     {       \/\/ \u0422\u0443\u0440\u0435\u0446\u043a\u0438\u0439 \u0443\u0434\u0430\u0440 (\u0441\u043c. \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0438\u0436\u0435)         if (exc.Contains(taken))             return false;        \/\/ \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u0441\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0439\u043e \u044d\u0442\u043e\u0442 \u0445\u043e\u0434 \u0441\u0434\u0435\u043b\u0430\u043d         Board nextBoard = new Board(this, deepCopyMoves:false);         Piece thisPiece = nextBoard.MovePiece(fr, to);         List&lt;Vector2Int> newExc = new List&lt;Vector2Int>(exc);         newExc.Add(taken);        \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u043b\u0438 \u043d\u0430\u0448\u0430 \u0448\u0430\u0448\u043a\u0430 \u0432 \u0434\u0430\u043c\u043a\u0443 \u044d\u0442\u0438\u043c \u0445\u043e\u0434\u043e\u0432         bool isThisMoveKinging = !piece.IsKing &amp;&amp; IsKinging(to, piece.IsWhite);         List&lt;Move> nextTakes = nextBoard.GetAllTakingMovesOfPiece(thisPiece, newExc);          if (nextTakes.Count == 0)         {             moves.Add(new Move(new List&lt;Vector2Int>() { fr, to }, new List&lt;Vector2Int>() { taken }, isThisMoveKinging));             return false;         }         else         {             foreach (Move nextTake in nextTakes)             {                 List&lt;Vector2Int> pos = nextTake.Pos;                 pos.Insert(0, fr);                 List&lt;Vector2Int> takes = nextTake.Taken;                 takes.Add(taken);                 moves.Add(new Move(pos, takes, isThisMoveKinging || nextTake.IsKinging));                 movesWithFollowingTake.Add(new Move(pos, takes, isThisMoveKinging || nextTake.IsKinging));             }             return true;         }     } } \/\/ \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0449\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b \u0448\u0430\u0448\u043a\u0438. \u041e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 private List&lt;Move> GetAllSimpleMovesOfPiece (Piece piece) {     ... }<\/code><\/pre>\n<ul>\n<li>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0445\u043e\u0434\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c\u0438, \u0430 \u0432\u0437\u044f\u0442\u0438\u044f \u2014 \u043d\u0435\u0442: \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0432\u0437\u044f\u0442\u0438\u044f \u044d\u0442\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044c\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0448\u0430\u0448\u0435\u043a \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetAllTakingMoves, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0449\u0435\u0442 \u0432\u0441\u0435 \u0445\u043e\u0434\u044b-\u0432\u0437\u044f\u0442\u0438\u044f, \u0432\u0430\u0436\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0438\u0433\u0440\u0430\u0435\u0442 \u0442.\u043d. \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0431\u0438\u0442\u044b\u0435 \u0448\u0430\u0448\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0441 \u0434\u043e\u0441\u043a\u0438 <strong>\u043f\u043e\u0441\u043b\u0435<\/strong> \u0445\u043e\u0434\u0430 \u0438 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u0437\u044f\u0442\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0438\u0436\u0435, \u0435\u0441\u043b\u0438 \u0431\u0435\u043b\u044b\u0435 \u0432\u043e\u0437\u044c\u043c\u0443\u0442 \u0434\u0430\u043c\u043a\u043e\u0439 e1:a5:d8:f6:d4, \u043e\u043d\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u0432\u0437\u044f\u0442\u044c \u0435\u0449\u0435 \u0438 \u0448\u0430\u0448\u043a\u0443 c5, \u0442\u0430\u043a \u043a\u0430\u043a, \u0445\u043e\u0442\u044f \u0448\u0430\u0448\u043a\u0430 b6 \u043a \u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0431\u0438\u0442\u0430, \u043e\u043d\u0430 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u043a\u0435, \u043c\u0435\u0448\u0430\u044f\u0441\u044c \u0434\u0430\u043c\u043a\u0435 \u0431\u0435\u043b\u044b\u0445.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/45a\/256\/6e5\/45a2566e57a147162ab1a9f9dd5e6448.jpeg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0433\u043e \u0443\u0434\u0430\u0440\u0430\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0433\u043e \u0443\u0434\u0430\u0440\u0430\" width=\"290\" height=\"276\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/45a\/256\/6e5\/45a2566e57a147162ab1a9f9dd5e6448.jpeg\" data-blurred=\"true\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0433\u043e \u0443\u0434\u0430\u0440\u0430<\/figcaption><\/figure>\n<\/li>\n<li>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 AddMove() \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0448\u0430\u0448\u043a\u0430 \u0441\u0432\u043e\u0438\u043c \u0445\u043e\u0434\u043e\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0430\u043c\u043a\u0443 \u2014 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u0437\u044f\u0442\u0438\u0435 \u043f\u043e \u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f MakeMove \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0445\u043e\u0434 \u043d\u0430 \u0434\u043e\u0441\u043a\u0435:<\/p>\n<pre><code class=\"cs\">public void MakeMove(Move move, bool memoriseMove = false) {     \/\/ \u0425\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0445\u043e\u0434, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e     if (memoriseMove)         LastMoves.Add(new MemorisedMove(move.Fr, move.To, null, move.IsKinging, _rowKingsMoves));      \/\/ \u0414\u0432\u0438\u0433\u0430\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443 (\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 _board \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044e  \u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 \u0441\u0430\u043c\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u044b,     \/\/ \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0444\u0438\u0433\u0443\u0440\u044b \u0432 \u0434\u0430\u043c\u043a\u0443)     MovePiece(move.Fr, move.To);      \/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043f\u043e\u0431\u0438\u0442\u044b\u0435 \u0448\u0430\u0448\u043a\u0438     foreach (Vector2Int taken in move.Taken)     {         Piece takenPiece = GetPiece(taken);         _countCheckers[(int)takenPiece.Type]--;         _countCheckers[0]--;          Pieces.Remove(takenPiece);         _board[taken.y, taken.x] = null;          if (memoriseMove)             LastMoves[LastMoves.Count - 1].AddTakenPiece(takenPiece);     } }<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044f\u0449\u0438\u0439 \u0434\u043e\u0441\u043a\u0443, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 500 \u0441\u0442\u0440\u043e\u043a. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u043d\u0435 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0432\u0441\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043d\u044b\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0433\u0440\u044b. <\/p>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0438 \u044f \u0434\u0430\u0436\u0435 \u043c\u043e\u0433 \u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0438 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0448\u0430\u0448\u0435\u043a \u0432 Unity, \u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u0433\u0440\u0443. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c. <\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0432\u0435\u0449\u0430\u043c<\/p>\n<h2>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u0431\u0435\u0434\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h2>\n<blockquote>\n<p>\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441. \u042d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0438\u0433\u0440 \u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0443\u043c\u043c\u043e\u0439 <em>(\u043e\u0434\u0438\u043d \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u2014 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b). <\/em>\u041e\u043d \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432, \u043f\u0440\u0435\u0434\u0443\u0433\u0430\u0434\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u2014 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u0442\u0432\u0435\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430. <\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u0441\u044e \u0438\u0433\u0440\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0439\u0434\u044f \u0434\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u043c \u0438\u0434\u0442\u0438 \u0432 \u044d\u0442\u0443 \u0432\u0435\u0442\u043a\u0443 \u0438\u0433\u0440\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u044b \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 (\u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e) \u0445\u043e\u0434\u0443. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c <em>(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u2014 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0443 \u0431\u0435\u043b\u044b\u0445, \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u2014 \u0443 \u0447\u0435\u0440\u043d\u044b\u0445)<\/em>, \u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u0445\u043e\u0434 \u043d\u0430\u0448, \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0434 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0442\u043e \u043e\u043d\u0430 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0441. \u041e\u0442\u0441\u044e\u0434\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ca\/c29\/7ce\/9cac297cedccf024cad7c55725894ba2.png\" width=\"1599\" height=\"728\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ca\/c29\/7ce\/9cac297cedccf024cad7c55725894ba2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0442\u0430\u043a, \u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443.<\/p>\n<blockquote>\n<p>\u041c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c, \u0430 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c, \u0445\u043e\u0442\u044f \u043e\u043d \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u043a\u043b\u0430\u0441\u0441 \u0418\u0418 \u0438 \u0442\u0430\u043a \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b \u043e \u043d\u0435\u043c \u0434\u0443\u043c\u0430\u0442\u044c, \u043f\u043e\u043d\u044f\u0432 \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<\/blockquote>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435, \u0430 \u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0430\u043f\u0435\u0440\u0435\u0434, \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 AI.sc \u0443\u043c\u0435\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0448\u0430\u0448\u0435\u043a \u043e\u0431\u043e\u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u0434\u043e\u0441\u043a\u0435. \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 <strong>\u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0448\u0430\u0448\u043a\u0438<\/strong>, <strong>\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043e\u043d\u0443\u0441\u0430 \u043a\u043b\u0435\u0442\u043a\u0438<\/strong> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0448\u0430\u0448\u043a\u0438 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u0434\u043e\u0440\u043e\u0436\u0435 \u0448\u0430\u0448\u0435\u043a \u0441 \u043b\u0435\u0432\u043e\u0433\u043e \u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043a\u0440\u0430\u044f \u0434\u043e\u0441\u043a\u0438) \u0438 <strong>Y-\u0431\u043e\u043d\u0443\u0441\u0430 <\/strong>(\u0431\u043e\u043d\u0443\u0441 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438: \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0448\u0430\u0448\u043a\u0430 \u0442\u0435\u043c \u0434\u043e\u0440\u043e\u0436\u0435, \u0447\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u043e\u043d\u0430 \u043a \u0434\u0430\u043c\u043e\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044f\u043c).<\/p>\n<p><code>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0448\u043a\u0438 = value * _squareBonus * yBonus<\/code><\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u0431\u043e\u043d\u0443\u0441\u043e\u0432 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0442\u0430\u043a\u0438\u0435:<\/p>\n<pre><code class=\"cs\">int _checkerValue = 100; \/\/ \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0448\u043a\u0438 int _kingValue = 250; \/\/ \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0440\u043e\u043b\u044f float[,] _squareBonus = new float[8, 4] \/\/ \u0431\u043e\u043d\u0443\u0441 \u043a\u043b\u0435\u0442\u043a\u0438     {         { 1.2f, 1.2f, 1.2f, 1.2f },         { 1.15f, 1.2f, 1.2f, 1.15f },         { 1.15f, 1.2f, 1.2f, 1.13f },         { 1.0f, 1.2f, 1.15f, 1.0f },         { 1.0f, 1.2f, 1.2f, 1.0f },         { 1.0f, 1.0f, 1.0f, 1.0f },         { 1.0f, 1.0f, 1.0f, 1.0f },         { 1.0f, 1.0f, 1.0f, 1.0f },     };   private float[] _yBonus = new float[8]; \/\/ Y-\u0431\u043e\u043d\u0443\u0441<\/code><\/pre>\n<pre><code class=\"cs\">public float EvaluateMaterialAndPosition (Board board)     {         float eval = 0;         \/\/ \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0448\u0430\u0448\u043a\u0438         foreach (Piece piece in board.Pieces)         {             Vector2Int coord = piece.Pos;             switch (piece.Type)             {                 case PieceType.WHITE_MAN:                     eval += _checkerValue * _yBonus[coord.y] * _squareBonus[coord.y, coord.x \/ 2];                     break;                 case PieceType.BLACK_MAN:                     eval -= _checkerValue * _yBonus[7 - coord.y] * _squareBonus[7 - coord.y, 3 - coord.x \/ 2];                     break;                 case PieceType.WHITE_KING:                     eval += _kingValue;                     break;                 case PieceType.BLACK_KING:                     eval -= _kingValue;                     break;             }         }         return eval;     }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u0445\u043e\u0434\u044b, \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043d\u0438\u0445 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u043d\u0430\u0448\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430 \u0438 \u0442.\u0434. <\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u043d\u044b\u043d\u0435\u0448\u043d\u044f\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0442.\u0435. \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 2 \u0445\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c 4, 6 \u0438 \u0442.\u0434. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/translated.turbopages.org\/proxy_u\/en-ru.ru.a65a851c-63c5651b-2407c825-74722d776562\/https\/en.wikipedia.org\/wiki\/Iterative_deepening_depth-first_search\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0438\u0441\u043a \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0441 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435\u043c.<\/a> \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0432\u0435\u0434\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430: \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 <strong>\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u0439<\/strong> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0445\u043e\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0445\u043e\u0434 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 public void ActiveSearch () {     int depth = 0,  startDepth = 2;     CurrentBestMove = Move.None;   \/\/ \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0445\u043e\u0434 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0440\u0430\u0437\u0434\u0443\u043c\u0438\u0439     if (_board.AllMoves.Count == 1)     {         CurrentBestMove = _board.AllMoves[0];         return;     }     \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u043f\u0438\u044e \u0434\u043e\u0441\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437     \/\/ \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0444\u0438\u0433\u0443\u0440\u044b     Board boardCopy = new Board(_board, deepCopyMoves: true);     _searchStartTime = DateTime.Now;     IterativeDeepeningMinimax(boardCopy, _timeLimit, startDepth, ActiveSearchDepth, ref CurrentBestMove, ref depth, true);      if (CurrentBestMove == Move.None)         CurrentBestMove = boardCopy.AllMoves[new System.Random().Next(0, boardCopy.AllMoves.Count)]; }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441\u0430 \u0441 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435\u043c: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441 \u0441\u043e \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439, \/\/ \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u044f \u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 public void IterativeDeepeningMinimax (Board board, float timeLimit, int minDepth, int maxDepth, ref Move bestMove, ref int depth, bool isWhileActiveSearch)     {         for (depth = minDepth; depth &lt;= maxDepth; depth++)         {               (float eval, Move tempBestMove) = Minimax(board, depth, board.WhitesMove, timeLimit);             \/\/ \u0415\u0441\u043b\u0438 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442             if ((DateTime.Now - _searchStartTime).TotalSeconds &lt; timeLimit &amp;&amp; tempBestMove is not null &amp;&amp; tempBestMove != Move.None)             {                     bestMove = (Move) tempBestMove.Clone();             }           \/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e, \u043e\u043d\u0430 \u043d\u0435\u043f\u043e\u043b\u043d\u0430\u044f \u0438 \u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d             else             {                 depth -= 1;                 break;             }                \/\/ \u041c\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448             if (eval >= Infinity &amp;&amp; board.WhitesMove || eval &lt;= -Infinity &amp;&amp; !board.WhitesMove)                 break;         }     }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 \u0445\u043e\u0434 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0437\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430 \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0430\u043c \u0445\u043e\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u043a\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0445\u043e\u0434 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \/\/ depth \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0449\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439-\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0439 \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f (\u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u043d\u043e\u0432\u044b\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c depth \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f) \/\/ maximizingPlayer \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0437\u0430 \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430 \u043c\u044b \u0438\u0449\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0439 \u0445\u043e\u0434, \u0442.\u0435. \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c public (float, Move) Minimax (Board board, int depth, bool maximizingPlayer, float timeLimit)         {           \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438              if ((DateTime.Now - _searchStartTime).TotalSeconds >= timeLimit)                 return (0, null);            \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u044b\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0443\u0436\u0435 \u0433\u0435\u0439\u043c \u043e\u0432\u0435\u0440)             GameState state = board.GetGameState();             if (state != GameState.IN_PROCESS)             {                 if (state == GameState.WHITE_WIN)                     return (Infinity + depth, Move.None);                 if (state == GameState.BLACK_WIN)                     return (-Infinity - depth, Move.None);                 else                     return (0, Move.None);             }              \/\/ \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0446\u0435\u043d\u043a\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u0438               \/\/ \u0425\u043e\u0434 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0432\u0430\u0436\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u0443\u0447\u0448\u0438\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0445\u043e\u0434, \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0439 \u043e\u0446\u0435\u043d\u043a\u043e\u0439             if (depth == 0)             {                 float eval = Evaluate(board);                 return (eval, Move.None);             }              \/\/ \u0415\u0441\u043b\u0438 \u0445\u043e\u0434 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 -- \u0441\u043c. \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043f\u043e\u0434 \u043a\u043e\u0434\u043e\u043c             if (board.AllMoves.Count == 1)             {                 Move move = board.AllMoves[0];                  board.MakeMove(board.AllMoves[0], memoriseMove: true);                 board.OnMoveFinished(board.AllMoves[0]);                 float eval = Minimax(board, depth, alpha, beta, !maximizingPlayer, timeLimit, isWhileActiveSearch).Item1;                 board.UnmakeLastMove();                 _transpositions.Add(new Transposition(PositionCache, eval, Infinity, board.AllMoves[0]));                 return (eval, board.AllMoves[0]);             }              \/\/ \u0418\u0449\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0439 \u0445\u043e\u0434 (\u0437\u0430 \u0431\u0435\u043b\u044b\u0445)             Move bestMove = Move.None;             if (maximizingPlayer)             {                 float maxEval = -Infinity;               \/\/ \u041f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0445\u043e\u0434\u0430\u043c                 foreach (Move move in board.AllMoves)                 {                   \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e                     board.MakeMove(move, memoriseMove: true);                     board.OnMoveFinished(move);                   \/\/ \u0418 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u041f\u0420\u041e\u0422\u0418\u0412\u041d\u0418\u041a\u0410                     (float eval, Move compMove) = Minimax(board, depth - 1, alpha, beta, false, timeLimit, isWhileActiveSearch);                    \/\/ \u041e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u0445\u043e\u0434                     board.UnmakeLastMove();                    \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438                     if (compMove == null)                         return (0, null);                   \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e\u0442 \u0445\u043e\u0434 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e                     if (eval > maxEval)                     {                         maxEval = eval;                         bestMove = move;                     }                 }                 return (maxEval, bestMove);             }           \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0437\u0430 \u0447\u0435\u0440\u043d\u044b\u0445             else             {                 float minEval = Infinity;                 foreach (Move move in board.AllMoves)                 {                     board.MakeMove(move, memoriseMove: true);                     board.OnMoveFinished(move);                      (float eval, Move compMove) = Minimax(board, depth - 1, alpha, beta, true, timeLimit, isWhileActiveSearch);                     board.UnmakeLastMove();                      if (compMove == null)                         return (0, null);                     if (eval &lt; minEval)                     {                         minEval = eval;                         bestMove = move;                     }                 }                 return (minEval, bestMove);             }         }<\/code><\/pre>\n<ul>\n<li>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 IterativeDeepeningMinimax \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0435\u043c\u0441\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u0435. \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043c\u044b \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u0435\u0439 \u0445\u043e\u0434; \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0440\u043e\u0447\u043d\u043e \u0438 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u0442\u043e \u043e\u043d\u0430 \u043d\u0435\u043f\u043e\u043b\u043d\u0430\u044f \u0438 \u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439, \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0445\u043e\u0434 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439, \u0442\u043e \u043e\u043d \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c <strong>\u043c\u044b \u0434\u0430\u0436\u0435 \u043d\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em><u>\u0433\u043b\u0443\u0431\u0436\u0435<\/u><\/em><\/strong>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0430\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0433\u043b\u0443\u0431\u0436\u0435 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0441\u0447\u0438\u0442\u0430\u044e <strong>\u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u043c<\/strong> \u0437\u0434\u0435\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u044f <em>\u043d\u0435<\/em> <em>\u043a\u043e\u043f\u0438\u0440\u0443\u044e<\/em> \u0434\u043e\u0441\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0434: \u0412\u0415\u0421\u042c \u043f\u043e\u0438\u0441\u043a \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0445\u043e\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <strong>\u043e\u0434\u043d\u043e\u0439<\/strong> \u0434\u043e\u0441\u043a\u0435 (\u043a\u043e\u043f\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0439), \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c (make) \u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u0442\u044c \u0445\u043e\u0434\u044b (unmake). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0442\u044f\u0436\u0435\u043b\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c <em>\u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b.<\/em><\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0443\u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u0433\u0440\u0430\u0442\u044c <strong>\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0435\u0432\u0430\u0442\u044c \u0444\u0438\u0433\u0443\u0440\u044b \u0432 \u043e\u0434\u0438\u043d-\u0434\u0432\u0430 \u0445\u043e\u0434\u0430!<\/strong><\/p>\n<p><em>Profit!<\/em><\/p>\n<h2>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438e \u21161: alpha-beta pruning<\/h2>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0440\u0430\u0437\u044b \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0441\u0442\u0430\u043b\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D1%8C%D1%84%D0%B0-%D0%B1%D0%B5%D1%82%D0%B0-%D0%BE%D1%82%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0430\u043b\u044c\u0444\u0430-\u0431\u0435\u0442\u0430 \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435. <\/a><\/p>\n<p>\u0415\u0433\u043e \u0441\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u0434\u0443\u0433\u0430\u0434\u044b\u0432\u0430\u044f \u0445\u043e\u0434 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430, \u043c\u044b \u0434\u0430\u0436\u0435 <strong>\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c<\/strong> \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e <strong>\u0433\u043b\u0443\u043f\u044b\u0435 \u0445\u043e\u0434\u044b<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0433\u043b\u0443\u043f\u044b\u0435 \u2014 \u0442\u043e <em>\u043d\u0430\u043c \u0436\u0435 \u043b\u0443\u0447\u0448\u0435<\/em>!<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 \u043c\u044b (\u0438\u0433\u0440\u0430\u044f \u0437\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 (\u0437\u0430 \u0431\u0435\u043b\u044b\u0445)), \u043f\u0440\u043e\u0441\u0447\u0438\u0442\u0430\u0432 \u043f\u0435\u0440\u0432\u044b\u0435 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0445\u043e\u0434\u0430, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 <strong>6<\/strong>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0445\u043e\u0434 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0432\u0435\u0442\u0432\u0435\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 <strong>5<\/strong>, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0434\u0430\u0436\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0435, \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 <strong>5<\/strong>, \u0432\u0435\u0434\u044c \u043e\u043d \u2014 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 (\u0447\u0435\u0440\u043d\u044b\u0435). \u0410 \u043f\u043e\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u0430\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c 3-\u044e \u0432\u0435\u0442\u043a\u0443, \u0432\u0435\u0434\u044c \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0439\u0442\u0438 \u043f\u043e 2-\u0439. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/393\/632\/d08\/393632d08f3e3691284b79a7d4aac304.png\" width=\"1920\" height=\"974\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/393\/632\/d08\/393632d08f3e3691284b79a7d4aac304.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0441\u0435\u0447\u044c <em>(prune) <\/em>\u043c\u043d\u043e\u0433\u043e \u043b\u0438\u0448\u043d\u0438\u0445 \u0432\u0435\u0442\u0432\u0435\u0439, \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \u0435\u0433\u043e \u0440\u0430\u0437\u0436\u0435\u0432\u044b\u0432\u0430\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b alpha \u0438 beta, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u0437 IterativeDeepeningMinimax \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a -Infinity \u0438 Infinity \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 115-\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0430\u043b\u044c\u0444\u0435:<\/p>\n<pre><code>... alpha = Mathf.Max(alpha, eval); if (beta &lt;= alpha)   break; ...<\/code><\/pre>\n<p>\u0410 \u043f\u043e\u0441\u043b\u0435 139-\u0439 \u2014 \u043f\u043e \u0431\u0435\u0442\u0435:<\/p>\n<pre><code>... beta = Mathf.Min(beta, eval); if (beta &lt;= alpha)     break; ...<\/code><\/pre>\n<p><em>Double profit!<\/em><\/p>\n<h2>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438e \u21162: \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/h2>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0447\u0435\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Transposition_(chess)\" rel=\"noopener noreferrer nofollow\">\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/a>. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0442\u043a\u0430\u0445 \u043c\u0438\u043d\u0438\u043c\u0430\u043a\u0441\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043b\u0443\u0447\u0448\u0438\u0439 \u0445\u043e\u0434 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 X \u043d\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 d \u043d\u0430\u0439\u0434\u0435\u043d \u043b\u0443\u0447\u0448\u0438\u0439 \u0445\u043e\u0434 n, \u0442\u043e \u044d\u0442\u043e\u0442 \u0436\u0435 \u0445\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0438\u043c \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u043d\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430\u0445 \u043c\u0435\u043d\u044c\u0448\u0435 d. \u0410 \u0432\u043e\u0442 \u043d\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 d \u2014 \u043d\u0435 \u0444\u0430\u043a\u0442: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043c \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043b\u0443\u0447\u0448\u0438\u0439, \u043d\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0445\u043e\u0434 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 X \u0445\u043e\u0434 n \u0432\u0435\u0434\u0435\u0442 \u043a \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0431\u0435\u0434\u0435, \u0442\u043e \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0445\u043e\u0434 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439. <\/p>\n<p>\u041f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u0448\u0430\u0448\u043a\u0438 \u0441\u0442\u043e\u044f\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043d\u043e \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u044c \u0445\u043e\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<p>\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <code>private List&lt;Transposition> _transpositions = new List&lt;Transposition>();<\/code> <\/p>\n<p>\u0413\u0434\u0435 \u043a\u043b\u0430\u0441\u0441 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>public class Transposition {     public string Pos { get; private set; }     public float Eval { get; private set; }     public int Depth { get; private set; }     public Move BestMove { get; private set; }      public Transposition(string pos, float eval, int depth, Move bestMove)     {         Pos = pos;         Eval = eval;         Depth = depth;         BestMove = bestMove;          }     public bool IsSameTo (string otherPos)         => Pos == otherPos; }<\/code><\/pre>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Minimax() <em>(\u043f\u043e\u0441\u043b\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438) <\/em>\u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438 \u043b\u0438 \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u0435:<\/p>\n<pre><code class=\"cs\">string PositionCache = board.Board2Number(); \/\/ \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0441\u0442\u0440\u043e\u043a\u0443  Transposition pos_trans = null; pos_trans = _transpositions.FirstOrDefault(tr => tr.IsSameTo(PositionCache)); if (pos_trans != null) {     if (pos_trans.Depth >= depth)     {         return (pos_trans.Eval, pos_trans.BestMove);     } }<\/code><\/pre>\n<p>\u041f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0438, \u0442.\u043a. \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 32 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 &#8212; \u0444\u0438\u0433\u0443\u0440 \u043d\u0430 \u0447\u0435\u0440\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 (+1 \u0441\u0438\u043c\u0432\u043e\u043b \u0434\u043b\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438 \u0445\u043e\u0434\u0430).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0446\u0438\u043a\u043b, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0435 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u043a\u0430\u043a \u0432\u043a\u043b\u0430\u0434 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cs\">\/\/ \u0437\u0430 \u0431\u0435\u043b\u044b\u0445 AddTransposition(new Transposition(PositionCache, maxEval, depth, bestMove)); return (maxEval, bestMove);<\/code><\/pre>\n<pre><code class=\"cs\">\/\/ \u0437\u0430 \u0447\u0435\u0440\u043d\u044b\u0445 AddTransposition(new Transposition(PositionCache, minEval, depth, bestMove)); return (minEval, bestMove);<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f AddTransposition \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, <strong>\u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043c \u0443\u0436\u0435 \u043d\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043d\u043e \u043d\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u0435. <\/strong>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0441\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043c\u0435\u043d\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u0435\u0441\u043b\u0438 \u0443\u0436\u0435 \u043f\u043e\u0434\u043e\u0441\u043f\u0435\u043b \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439?!<\/p>\n<p>\u0418\u0442\u0430\u043a, \u044d\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0436\u0430\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. <\/p>\n<p><em>Triple profit!<\/em><\/p>\n<h2>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u21163: \u043a\u043d\u0438\u0433\u0430 \u0434\u0435\u0431\u044e\u0442\u043e\u0432 \u0438 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u0435\u0439<\/h2>\n<p>\u041e\u0441\u043e\u0431\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u0435\u0431\u044e\u0442\u044b (\u043d\u0430\u0447\u0430\u043b\u043e \u0438\u0433\u0440\u044b) \u0438 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u0438 (\u0435\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435). \u042d\u0442\u043e \u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0434\u0435\u0431\u044e\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0445\u043e\u0434\u0430, \u0432\u0435\u0434\u044c \u0444\u0438\u0433\u0443\u0440\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f; \u0432 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u0435 \u0436\u0435 \u0444\u0438\u0433\u0443\u0440 \u043c\u0435\u043d\u044c\u0448\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0445\u043e\u0434\u043e\u0432 (\u0437\u0430 \u0441\u0447\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u043e\u0431\u043e\u0439\u043d\u044b\u0445 \u0434\u0430\u043c\u043e\u043a) \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u043b\u0433\u0438\u043c. <\/p>\n<blockquote>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u044f\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438.<\/p>\n<\/blockquote>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u0434\u0435\u0431\u044e\u0442\u043d\u044b\u0445 \u0438 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0448\u0430\u0448\u0435\u043a, \u0445\u043e\u0442\u044f \u0434\u043b\u044f \u0448\u0430\u0445\u043c\u0430\u0442 \u0442\u0430\u043a\u0438\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D1%88%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D0%BD%D1%8B%D1%85_%D0%BE%D0%BA%D0%BE%D0%BD%D1%87%D0%B0%D0%BD%D0%B8%D0%B9#%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D0%9D%D0%B0%D0%BB%D0%B8%D0%BC%D0%BE%D0%B2%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442<\/a>, \u043f\u0440\u0438\u0447\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0435\u0442\u0430\u0431\u0430\u0439\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0448\u0430\u0448\u0435\u0447\u043d\u044b\u0445 \u043f\u0430\u0440\u0442\u0438\u0439 \u0438 \u0432\u044b\u0443\u0434\u0438\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0434\u0435\u0431\u044e\u0442\u044b \u0438 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u0438 (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430: <\/p>\n<pre><code>private OpeningBook _openingBook; private EndgameBook _endgameBook;<\/code><\/pre>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b OpeningBook \u0438 EndgameBook \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e TheoryBook, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u0439 \u0432 \u043d\u0435\u0439 \u0445\u043e\u0434:<\/p>\n<pre><code class=\"cs\">public abstract class TheoryBook {     protected abstract string TheoryPath { get; }     private BookRecord _records;      public TheoryBook()     {         Debug.Log(TheoryPath);         using (StreamReader reader = new StreamReader(TheoryPath))         {             _records = JsonUtility.FromJson&lt;BookRecord>(reader.ReadToEnd());         }         _records.BuildUpDictionary();     }      public bool TryGetBestMove(string pos, out string move)     {         if (_records.ContainsPosition(pos))         {             move = _records.GetMoveFor(pos, BookRecord.BookMoveSelector.Random);             return true;         }         else         {             move = null;             return false;         }     } }  [System.Serializable] public class BookRecord {     public List&lt;string> positions;     public List&lt;string> moves;     public int CountRecords => moves.Count;      private Dictionary&lt;string, List&lt;string>> _pairs;      public enum BookMoveSelector     {         Random, First, Last     }      public BookRecord()     {         positions = new List&lt;string>();         moves = new List&lt;string>();     }      public void AddRecord(string pos, string move)     {         positions.Add(pos);         moves.Add(move);     }      public void BuildUpDictionary()     {         _pairs = new Dictionary&lt;string, List&lt;string>>();         for (int i = 0; i &lt; CountRecords; i++)         {             if (_pairs.ContainsKey(positions[i]))                 _pairs[positions[i]].Add(moves[i]);             else                 _pairs.Add(positions[i], new List&lt;string>() { moves[i] });         }     }      public bool ContainsPosition(string pos)     {         return _pairs.ContainsKey(pos);     }     public string GetMoveFor(string pos, BookMoveSelector selector)     {         switch (selector)         {             case BookMoveSelector.Random:                 return _pairs[pos][new System.Random().Next(0, _pairs[pos].Count)];             case BookMoveSelector.First:                 return _pairs[pos][0];             case BookMoveSelector.Last:                 return _pairs[pos][_pairs[pos].Count - 1];             default:                 return _pairs[pos][0];         }     } }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 4-5 \u0445\u043e\u0434\u043e\u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u043a\u0430 \u0443 \u043d\u0435\u0435 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u0442\u0435\u043e\u0440\u0438\u044f.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u043f\u0430\u0440\u0442\u0438\u0439 \u0431\u044b\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447), \u0430 \u0438 \u044d\u043d\u0434\u0448\u043f\u0438\u043b\u0438, \u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0434\u0435\u0431\u044e\u0442\u044b \u0432 \u043d\u0435\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0433\u0440\u044b \u044d\u0442\u043e \u043d\u0435 \u0434\u0430\u043b\u043e. \u041d\u0430\u0439\u0442\u0438 \u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0430\u0437\u044b \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c&#8230;<\/p>\n<h2>\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/h2>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u0448\u0430\u0448\u043a\u0438.<\/p>\n<p>\u041b\u0438\u0447\u043d\u043e \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0441\u0438\u0442 \u0432 \u043f\u0443\u0445 \u0438 \u043f\u0440\u0430\u0445 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0449\u0435 \u0437\u0430 \u043f\u0430\u0440\u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u043d\u0435 \u0443\u043c\u0435\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u0448\u0430\u0448\u043a\u0438 \u0438 \u0437\u0435\u0432\u0430\u043b \u0444\u0438\u0433\u0443\u0440\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0434). \u042f \u0442\u0430\u043a\u0436\u0435 \u0434\u0430\u043b \u0435\u0439 \u0441\u044b\u0433\u0440\u0430\u0442\u044c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043f\u043b\u0435\u0439\u043c\u0430\u0440\u043a\u0435\u0442\u0435 \u0438 \u043e\u043d\u0430 \u043e\u0431\u044b\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041e\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044b\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 Quick Checkers. <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0435\u0433\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f, \u044f \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f <strong>\u0448\u0430\u0445\u043c\u0430\u0442<\/strong>. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0446\u0435\u043d\u043a\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0442\u043e\u0447\u043d\u0430. <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0448\u0430\u0448\u043a\u0438 \u043a \u0434\u0430\u043c\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 100:250, \u0430 100:150 \u0438\u043b\u0438 100:500. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u043e\u044f\u0442\u044c \u0432 \u0446\u0435\u043d\u0442\u0440\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u043a\u0440\u0430\u044e \u0448\u0430\u0448\u043a\u0430\u043c \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435 \u043d\u0435 \u0432 1.25 \u0440\u0430\u0437\u0430, \u0430 \u0432 1.1 \u0438\u043b\u0438 1.5. <\/p>\n<p><em>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e&#8230;<\/em><\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0432\u0441\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c &#171;\u0442\u0443\u0440\u043d\u0438\u0440&#187; \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043c\u0443\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u0438\u0433\u0440\u0430\u0442\u044c, \u0435\u0439 \u043d\u0443\u0436\u043d\u043e 10-15 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 <strong>\u041a\u0410\u0416\u0414\u042b\u0419 \u0425\u041e\u0414<\/strong> (\u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 9-10 \u0445\u043e\u0434\u043e\u0432 \u0432\u043f\u0435\u0440\u0435\u0434). \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0448\u0430\u0448\u0435\u0447\u043d\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0445\u043e\u0434\u043e\u0432 30, \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c <strong>5-8 \u043c\u0438\u043d\u0443\u0442<\/strong>, \u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u0443\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/a> \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, <strong><em>\u0441\u043e\u0442\u043d\u0438 \u0438 \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u0430\u0440\u0442\u0438\u0439.<\/em><\/strong><\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f <strong>\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c<\/strong>. \u0421\u0430\u043c\u043e\u043c\u0443 \u043c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043d\u0430\u0439\u0434\u0443\u0442\u0441\u044f <em>\u0437\u043d\u0430\u044e\u0449\u0438\u0435<\/em> \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u042f \u0442\u0430\u043a\u0436\u0435 <strong>\u043d\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u044e<\/strong>, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c Unity, \u0442\u0430\u043a \u043a\u0430\u043a, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430 <em>\u0447\u0438\u0441\u0442\u043e\u043c<\/em> C++ \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c <strong>\u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong>, \u0447\u0435\u043c \u043d\u0430 Unity+C#, \u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430 \u0421++ \u044f \u043d\u0435 \u0445\u043e\u0447\u0443, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044f \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u0421++, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. <\/p>\n<p>P.S. \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0431\u0443\u0434\u0443 \u0440\u0430\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435\u043c, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e <em>\u0432\u044b\u0441\u0448\u0435\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435<\/em> \u0432\u0440\u044f\u0434 \u043b\u0438 \u0441\u043c\u043e\u0433\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0439 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438:)<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/710990\/\"> https:\/\/habr.com\/ru\/post\/710990\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"right\">\u042f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u043b \u043d\u0443\u0436\u043d\u0443\u044e \u0448\u0430\u0448\u043a\u0443 \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u0435\u2026<\/p>\n<p align=\"right\"><em>(\u043e\u0442\u0432\u0435\u0442 \u041c\u0430\u0440\u0438\u043e\u043d\u0430 \u0422\u0438\u043d\u0441\u043b\u0438 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c)<\/em>  <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u041e\u0431 \u0438\u0434\u0435\u0435<\/h2>\n<p>\u0412 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043e\u043f\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438, \u0430 \u0432 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0435\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u2014 \u0442\u044b\u0441\u044f\u0447\u0438, \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438 \u0418\u0418 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u0448\u0430\u0445\u043c\u0430\u0442\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0448\u0430\u0448\u043a\u0438 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u044e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430. \u0412 \u0420\u0443\u043d\u0435\u0442\u0435 \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u0448\u0430\u0448\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0448\u0430\u0448\u043a\u0438 (checkers) \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0438\u0433\u043b\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B8%D1%87%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%81%D0%BC%D0%B5%D1%80%D1%82%D1%8C\" rel=\"noopener noreferrer nofollow\">\u043d\u0438\u0447\u0435\u0439\u043d\u0430\u044f \u0441\u043c\u0435\u0440\u0442\u044c<\/a>, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u0448\u0430\u0448\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0445. \u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0442\u0435\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0438\u0436\u0435:<\/p>\n<ul>\n<li>\n<p>\u0428\u0430\u0448\u043a\u0438 \u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043a\u043b\u0435\u0442\u043a\u0430\u043c \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0448\u0430\u0448\u043a\u0430 \u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0435\u0434 \u043d\u0430 \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435, \u0430 \u0431\u044c\u0435\u0442 \u2014 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430\u0437\u0430\u0434, \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u044f \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 <em>(\u0432 checkers \u2014 \u0431\u044c\u0435\u0442 <\/em><strong><em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em><\/strong><em> \u0432\u043f\u0435\u0440\u0435\u0434)<\/em><\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u043c\u043a\u0430 \u0445\u043e\u0434\u0438\u0442 \u0438 \u0431\u044c\u0435\u0442 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430 \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439 <em>(\u0432 checkers \u2014 \u0445\u043e\u0434\u0438\u0442 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430\u0437\u0430\u0434 <\/em><strong><em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em><\/strong><em> \u043d\u0430 1 \u043f\u043e\u043b\u0435; \u0431\u044c\u0435\u0442, \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u044f <\/em><strong><em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em><\/strong><em> 1 \u043f\u043e\u043b\u0435)<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0438\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e! <\/strong>\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0431\u043e\u044f \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0442, \u043a\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 python, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u0443\u0442\u0443\u044e \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438\u0433\u0440\u0443 \u0438 \u0432\u044b\u0431\u0440\u0430\u043b Unity (C#). \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438\u0433\u0440\u0443 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b.<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h2>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u0448\u0430\u0448\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0440\u0430\u0437\u043d\u044b\u0435. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 MonoBehaviour Unity-\u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e \u043c\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0438\u0448\u0443, \u043a\u0430\u043a \u044f \u0445\u0440\u0430\u043d\u044e \u0434\u043e\u0441\u043a\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 \u0448\u0430\u0448\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, <strong>\u0442\u0438\u043f \u0448\u0430\u0448\u043a\u0438<\/strong> \u0438 \u0435\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043f\u043e\u043b\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"cs\">public enum PieceType {     EMPTY, WHITE_MAN, WHITE_KING, BLACK_MAN, BLACK_KING }  public class Piece {     public PieceType Type { get; private set; }     public Vector2Int Pos { get; private set; }     public bool IsWhite { get; private set; }     public bool IsKing { get; private set; }       public Piece(PieceType type, Vector2Int pos)     {         Type = type;         Pos = pos;         IsWhite = type == PieceType.WHITE_MAN || type == PieceType.WHITE_KING;         IsKing = type == PieceType.WHITE_KING || type == PieceType.BLACK_KING;     }      public void ChangePos(Vector2Int newPos)     {         Pos = newPos;     }     public void BecomeKing()     {         Type = IsWhite ? PieceType.WHITE_KING : PieceType.BLACK_KING;         IsKing = true;     }     public void BecomeMan()     {         Type = IsWhite ? PieceType.WHITE_MAN : PieceType.BLACK_MAN;         IsKing = false;     } }<\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0442\u0443\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.<\/p>\n<p>\u0414\u043e\u0441\u043a\u0430 \u0436\u0435 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0448\u0435\u043a \u0438 \u0438\u0445 \u0445\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u043a\u0438, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0436\u043d\u043e\u0435:<\/p>\n<pre><code class=\"cs\">    public class Board     {         private Piece[,] _board = new Piece[8, 8]; \/\/ \u0444\u0438\u0433\u0443\u0440\u044b         public List&lt;Piece> Pieces { get; private set; } = new List&lt;Piece>(); \/\/ \u0442\u0435 \u0436\u0435 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430         private List&lt;Move> _currentMoves; \/\/ \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432         private int[] _countCheckers = new int[5]; \/\/ \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0448\u0430\u0448\u0435\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f (\u0432\u0441\u0435\u0445, \u0431\u0435\u043b\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0431\u0435\u043b\u044b\u0445 \u0434\u0430\u043c\u043e\u043a, \u0447\u0435\u0440\u043d\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0447\u0435\u0440\u043d\u044b\u0445 \u0434\u0430\u043c\u043e\u043a)         private List&lt;MemorisedMove> LastMoves = new List&lt;MemorisedMove>();        ...          \/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u0441\u043a\u0438 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435         \/\/ searchAllMoves -- \u043d\u0430\u0434\u043e \u043b\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u044b         public Board (string arr, bool whitesMove = true, bool searchAllMoves = true)         {             int index = 0;             \/\/ \u041f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043b\u0435\u0442\u043a\u0430\u043c             for (int y = 0; y &lt; 8; y++)             {                 for (int x = (y+1) % 2; x &lt; 8; x += 2)                 {                     if (arr[index] != '0')                     {                       \/\/ \u0418\u043d\u0434\u0435\u043a\u0441 \u0444\u0438\u0433\u0443\u0440\u044b                         int num = int.Parse(arr[index].ToString());                       \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443                         Piece piece = new Piece((PieceType) num, new Vector2Int(x, y));                        \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u0432 \u0441\u043f\u0438\u0441\u043a\u0438                         _board[y, x] = piece;                         Pieces.Add(piece);                         _countCheckers[num]++;                     }                      index++;                 }             }             WhitesMove = whitesMove;             _rowKingsMoves = 0;             _jumpIndex = 0;             _countCheckers[0] = _countCheckers[1] + _countCheckers[2] + _countCheckers[3] + _countCheckers[4];              \/\/ \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0438\u0449\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0445\u043e\u0434\u044b             if (searchAllMoves)                 FindAllMoves();         }        ...     }<\/code><\/pre>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 Board() \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442 \u0434\u043e\u0441\u043a\u0443 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u0437 \u0446\u0438\u0444\u0440, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0448\u0430\u0448\u043a\u0443 (\u0441\u043c. \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 PieceType \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 Piece).<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0434\u043e\u0441\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><em>(\u0420\u0430\u0437\u043e\u0431\u044c\u044e \u0432\u0435\u0441\u044c \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u0434\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0430\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f)<\/em><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432.<\/p>\n<pre><code class=\"cs\">public void FindAllMoves () {     List&lt;Move> takingMoves = new List&lt;Move>(); \/\/ \u0432\u0437\u044f\u0442\u0438\u044f     List&lt;Move> simpleMoves = new List&lt;Move>(); \/\/ \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b      foreach (Piece piece in Pieces)     {         if (piece.IsWhite == WhitesMove)         {           \/\/ \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0449\u0435\u043c \u0432\u0441\u0435 \u0432\u0437\u044f\u0442\u0438\u044f             takingMoves.AddRange(GetAllTakingMovesOfPiece(piece));           \/\/ \u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u0438\u0439 \u043d\u0435\u0442, \u0438\u0449\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b             if (takingMoves.Count == 0)                 simpleMoves.AddRange(GetAllSimpleMovesOfPiece(piece));         }     }      \/\/ \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0437\u044f\u0442\u0438\u044f, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b; \u0438\u043d\u0430\u0447\u0435 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0445\u043e\u0434\u044b     if (takingMoves.Count > 0)     {         \/\/ \u0412\u0437\u044f\u0442\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u043e\u0431\u0438\u0442\u044b\u0445 \u0448\u0430\u0448\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0448\u043b\u0438 \u0441\u0430\u043c\u044b\u0435 \u043b\u0443\u0447\u0448\u0438\u0435         \/\/ \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0445\u043e\u0434\u044b, \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0435\u0440\u0432\u044b\u043c\u0438         takingMoves.Sort((Move a, Move b) => -a.Taken.Count.CompareTo(b.Taken.Count));          AllMoves = _currentMoves = takingMoves;     }     else         AllMoves = _currentMoves = simpleMoves; }  \/\/ \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0437\u044f\u0442\u0438\u0439 \u0444\u0438\u0433\u0443\u0440\u044b \/\/ \u0412 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 exc \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u043b\u044f, \u0448\u0430\u0448\u043a\u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u0431\u0438\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0448\u0430\u0448\u043a\u0430\u0445, \/\/ \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443, \u0448\u0430\u0448\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0441 \u0434\u043e\u0441\u043a\u0438 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0445\u043e\u0434\u0430 (\u0441\u043c. \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u043e\u0434 \u043a\u043e\u0434\u043e\u043c) private List&lt;Move> GetAllTakingMovesOfPiece (Piece piece, List&lt;Vector2Int> exc = null) {     if (exc == null)         exc = new List&lt;Vector2Int>();     List&lt;Move> moves = new List&lt;Move>(); \/\/ \u0432\u0441\u0435 \u0432\u0437\u044f\u0442\u0438\u044f     List&lt;Move> movesWithFollowingTake = new List&lt;Move>(); \/\/ \u0432\u0437\u044f\u0442\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0431\u0438\u0442\u044c \u0435\u0449\u0435      if (piece.IsKing)     {       \/\/ \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 4 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f         for (int x = 1; x > -2; x -= 2)         {             for (int y = 1; y > -2; y -= 2)             {                 bool opp_found = false;                 Vector2Int pos_opp = Vector2Int.zero;                \/\/ \u041a\u0443\u0434\u0430 \u0434\u0430\u043c\u043a\u0430 \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u044b\u0436\u043a\u0430                 Vector2Int target = piece.Pos + new Vector2Int(x, y);                 while (InField(target)) \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f InField \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b (x, y) \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u043b\u044e                 {                     if (IsEmpty(target)) \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f IsEmpty \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u043e                     {                         if (opp_found) \/\/ \u0415\u0441\u043b\u0438, \u043f\u0440\u044b\u0433\u043d\u0443\u0432 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0443 target \u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0435\u043c \u0448\u0430\u0448\u043a\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0442\u043e \u044d\u0442\u043e \u0432\u0437\u044f\u0442\u0438\u0435                             AddMove(piece.Pos, target, pos_opp); \/\/ \u041a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u043f\u0440\u044b\u0436\u043a\u043e\u0432 \u0441\u043e \u0432\u0437\u044f\u0442\u0438\u0435\u043c                     }                     else if (_board[target.y, target.x].IsWhite == piece.IsWhite) \/\/ \u0415\u0441\u043b\u0438 \u0443\u043f\u0435\u0440\u043b\u0438\u0441\u044c \u0432 \u0441\u0432\u043e\u044e \u0448\u0430\u0448\u043a\u0443 \u2014 \u0442\u043e \u0443\u0441\u0451                         break;                     else                     {                         if (!opp_found) \/\/ \u0415\u0441\u043b\u0438 \u0443\u043f\u0435\u0440\u043b\u0438\u0441\u044c \u0432 \u0448\u0430\u0448\u043a\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u044d\u0442\u043e                         {                             opp_found = true;                             pos_opp = target;                         }                         else \/\/ \u0415\u0441\u043b\u0438 \u0443\u0442\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0432\u043e 2-\u044e \u0448\u0430\u0448\u043a\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f                             break;                     }                     target += new Vector2Int(x, y);                 }             }         }     }     else     {       \/\/ \u0422\u0443\u0442 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 4 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432\u0437\u044f\u0442\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0448\u0430\u0448\u043a\u0438 (\u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e)         \/\/ target - \u043f\u043e\u043b\u0435 \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0438\u043c\u0441\u044f, middle - \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0435\u043c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u0432\u043d\u0438\u0437 \u0432\u043f\u0440\u0430\u0432\u043e)         Vector2Int target = new Vector2Int(piece.Pos.x + 2, piece.Pos.y + 2);         Vector2Int middle = new Vector2Int(piece.Pos.x + 1, piece.Pos.y + 1);         if (InField(target) &amp;&amp; IsEmpty(target) &amp;&amp; !IsEmpty(middle) &amp;&amp; _board[middle.y, middle.x].IsWhite != piece.IsWhite)             AddMove(piece.Pos, target, middle);         ...         ...         ...     }     if (movesWithFollowingTake.Count > 0)         return movesWithFollowingTake;     return moves;        bool AddMove (Vector2Int fr, Vector2Int to, Vector2Int taken)     {       \/\/ \u0422\u0443\u0440\u0435\u0446\u043a\u0438\u0439 \u0443\u0434\u0430\u0440 (\u0441\u043c. \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0438\u0436\u0435)         if (exc.Contains(taken))             return false;        \/\/ \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u0441\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0439\u043e \u044d\u0442\u043e\u0442 \u0445\u043e\u0434 \u0441\u0434\u0435\u043b\u0430\u043d         Board nextBoard = new Board(this, deepCopyMoves:false);         Piece thisPiece = nextBoard.MovePiece(fr, to);         List&lt;Vector2Int> newExc = new List&lt;Vector2Int>(exc);         newExc.Add(taken);        \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u043b\u0438 \u043d\u0430\u0448\u0430 \u0448\u0430\u0448\u043a\u0430 \u0432 \u0434\u0430\u043c\u043a\u0443 \u044d\u0442\u0438\u043c \u0445\u043e\u0434\u043e\u0432         bool isThisMoveKinging = !piece.IsKing &amp;&amp; IsKinging(to, piece.IsWhite);         List&lt;Move> nextTakes = nextBoard.GetAllTakingMovesOfPiece(thisPiece, newExc);          if (nextTakes.Count == 0)         {             moves.Add(new Move(new List&lt;Vector2Int>() { fr, to }, new List&lt;Vector2Int>() { taken }, isThisMoveKinging));             return false;         }         else         {             foreach (Move nextTake in nextTakes)             {                 List&lt;Vector2Int> pos = nextTake.Pos;                 pos.Insert(0, fr);                 List&lt;Vector2Int> takes = nextTake.Taken;                 takes.Add(taken);                 moves.Add(new Move(pos, takes, isThisMoveKinging || nextTake.IsKinging));<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-344021","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/344021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=344021"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/344021\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=344021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=344021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=344021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}