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; } }
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); } } }