Пример #1
0
        public static int MakeMove(Move move)
        {
            if (move == null || move.FromPole == null || move.ToPole == null)
            {
                return -1;
            }
            if (move.AffectCount())
            {
                MoveCount++;
            }

            if (move.IsValid())
            {
                Disk disk = move.FromPole.GetTopDisk();
                Poles[move.FromPole.Number].RemoveDisk();
                Poles[move.ToPole.Number].AddDisk(disk);
                return MoveCount;
            }

            else //Invalid move
            {
                return -1;
            }
        }
Пример #2
0
        void thisBox_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
        {
            Disk disk = (Disk)sender;
            disk.Location = new Point(Cursor.Position.X - this.Location.X - (disk.Size.Height / 2),
                                             Cursor.Position.Y - this.Location.Y - (disk.Size.Width / 2));

            if (e.Action == DragAction.Drop)
            {
                int destinationPoleNumber = DeterminePoleFromCursorPosition();
                Pole currentPole = GameState.FindDisk(disk);
                Move move = new Move(currentPole, GameState.Poles[destinationPoleNumber]);

                if (move.IsValid())
                {
                    MakeMove(move);
                }
                else
                {
                    Move moveBack = new Move(currentPole, currentPole);
                    GameState.MakeMove(moveBack);
                }
            }
        }