Esempio n. 1
0
        public virtual bool PutPoint(Pos point, PlayerColor player)
        {
            if (point.X < 1 || point.X > Width || point.Y < 1 || point.Y > Height)
            {
                return(false);
            }

            if (!Points[point.X, point.Y].PuttingAllow())
            {
                return(false);
            }

            // Добавляем новый список изменений поля.
            MainState.AddNewBase();
            // Запоминаем захваченные точки и поля игроков.
            MainState.AddCaptureCount(CaptureCountRed, CaptureCountBlack);
            // Запоминаем игрока, чей ход сейчас должен быть.
            MainState.AddPlayer(CurPlayer);

            MainState.AddPosPoint(point, Points[point.X, point.Y]);

            Points[point.X, point.Y].Putted = true;
            Points[point.X, point.Y].Color  = player;
            PointsSeq.Add(point);

            CheckClosure(point);

            return(true);
        }
Esempio n. 2
0
 public virtual void BackMove()
 {
     CaptureCountRed   = MainState.States[MainState.States.Count - 1].CaptureCountsRed;
     CaptureCountBlack = MainState.States[MainState.States.Count - 1].CaptureCountsBlack;
     for (var i = MainState.States[MainState.States.Count - 1].PointPoses.Count - 1; i >= 0; i--)             // Делаем отмену обязательно в обратном порядке, так как возможны дублирования позции (в частности, когда происходит окружение, точка, приведшая к окружению будет в изменениях 2 раза).
     // Стоит подумать над откатом поставленной точки отдельно. Но проблема - посталенная точка в свою пустую базу.
     {
         Points[MainState.States[MainState.States.Count - 1].PointPoses[i].Pos.X, MainState.States[MainState.States.Count - 1].PointPoses[i].Pos.Y] = MainState.States[MainState.States.Count - 1].PointPoses[i].Point;
     }
     CurPlayer = MainState.States[MainState.States.Count - 1].Player;
     MainState.DeleteLastState();
     PointsSeq.RemoveAt(PointsCount - 1);
 }