コード例 #1
0
ファイル: GameLogic.cs プロジェクト: yan1304/YanChess
 /// <summary>
 /// Остановить игру (часы и т.д)
 /// </summary>
 public static void StopGame()
 {
     TimerStop();
     TimeWhite.Stop();
     TimeBlack.Stop();
     EventGameEnd?.Invoke(new object(), new EventArgs());
 }
コード例 #2
0
ファイル: GamePage.xaml.cs プロジェクト: ivand21/ChessClock
        private void OnBlackTapped(object sender, EventArgs e)
        {
            if (ToMove == Side.Black)
            {
                MovesCount++;
                if (BlackPerMove != null)
                {
                    TimeBlack = TimeBlack.Add(BlackPerMove);
                }

                if (TimeControlMoves != 0 && MovesCount == TimeControlMoves)
                {
                    TimeWhite = TimeWhite.Add(TimeControlBonus);
                    TimeBlack = TimeBlack.Add(TimeControlBonus);
                }
                ToMove = Side.White;
            }
        }
コード例 #3
0
ファイル: GameLogic.cs プロジェクト: yan1304/YanChess
 /// <summary>
 /// Проверяет не иссякло ли время у одной из сторон
 /// </summary>
 public static void CheckTime(object obj)
 {
     if (TimeBlack.Elapsed > MaxTimeBlack)
     {
         WhiteWin = true;
         TimeBlack.Stop();
         TimeWhite.Stop();
         StopGame();
         EventTimeEnded?.Invoke(TimeBlack, TimeEndedArgs);
     }
     else if (TimeWhite.Elapsed > MaxTimeWhite)
     {
         BlackWin = true;
         TimeBlack.Stop();
         TimeWhite.Stop();
         StopGame();
         EventTimeEnded?.Invoke(TimeWhite, TimeEndedArgs);
     }
 }
コード例 #4
0
ファイル: GameLogic.cs プロジェクト: yan1304/YanChess
 /// <summary>
 /// Сделать ход в позиции (возвращает - возможен ли он)
 /// </summary>
 public static bool TryMoved(MoveCoord move)
 {
     if (GamePosition.Board[move.xStart, move.yStart].Figure.Type == TypeFigur.king)
     {
         if (move.yStart == 4)
         {
             if ((move.xStart == 0 && GamePosition.IsWhiteMove) || (move.xStart == 7 && GamePosition.IsWhiteMove == false))
             {
                 if (move.yEnd == 2 || move.yEnd == 6)
                 {
                     move.IsCastling = true;
                 }
             }
         }
     }
     if (GamePosition.Board[move.xStart, move.yStart].Figure.CheckMove(GamePosition, move))
     {
         Positions.Add((Position)GamePosition.DeepCopy());
         MoveCoord mc = new MoveCoord();
         mc.xStart      = move.xStart;
         mc.yStart      = move.yStart;
         mc.yEnd        = move.yEnd;
         mc.xEnd        = move.xEnd;
         mc.StartFigure = move.StartFigure;
         Moves.Add(mc);
         int coll = 0;
         GamePosition.MoveChess(move);
         if (move.EndFigure == new NotFigur() && !move.IsEnPassant)
         {
             MovesWithoutEating++;
         }
         else
         {
             MovesWithoutEating = 0;
         }
         foreach (Position p in Positions)
         {
             if (p.Equals(GamePosition))
             {
                 coll++;
             }
         }
         if (GamePosition.IsWhiteMove)
         {
             TimeBlack.Stop();
             TimeWhite.Start();
             int?i = CheckPosition(GamePosition);
             if (i < 0)
             {
                 BlackWin = true;
                 StopGame();
             }
             else if (i == 0)
             {
                 StopGame();
             }
             else if (coll > 2)
             {
                 MessageBox.Show("Троекратное повторение ходов. Ничья!");
                 MovesWithoutEating = 50;
                 StopGame();
             }
             else if (MovesWithoutEating > 49)
             {
                 MessageBox.Show("50 ходов без взятий. Ничья!");
                 StopGame();
             }
             return(true);
         }
         else
         {
             TimeWhite.Stop();
             TimeBlack.Start();
             int?i = CheckPosition(GamePosition);
             if (i > 0)
             {
                 WhiteWin = true;
                 StopGame();
             }
             if (i == 0)
             {
                 StopGame();
             }
             if (coll > 2 || MovesWithoutEating > 49)
             {
                 StopGame();
             }
             return(true);
         }
     }
     move = new MoveCoord();
     return(false);
 }