void ca_Drop(object sender, DragEventArgs e) { int columna, fila; if (e.Handled == false) { Canvas canvasNuevo = (Canvas)sender; Label label = (Label)e.Data.GetData("Etiqueta"); Barco barco = (Barco)e.Data.GetData("Object"); if (canvasNuevo != null && label != null) { Canvas padre = (Canvas)VisualTreeHelper.GetParent(label); if (padre != null) { if (e.AllowedEffects.HasFlag(DragDropEffects.Move)) { //rotar columna = Grid.GetColumn(canvasNuevo); fila = Grid.GetRow(canvasNuevo); bool colocado = colocarBarco(canvasNuevo, label, barco, columna, fila); if (colocado) { padre.Children.Remove(label); canvasNuevo.Children.Add(label); Canvas.SetTop(label, 0); //elimina el evento de poder arrastrar barco.eliminarMouseDown(); } if (canvasBarcos.Children.Count == 0) { //MessageBox.Show("No tiene hijos"); this.bJugar.IsEnabled = true; } } } } } }
private bool colocarBarco(Canvas padre, Label label, Barco barco, int x, int y) { //si el barco es mayor que 1 abre orientación bool ocupado = false; int direccion = 0; //los barcos de 1 casilla no es necesario pedir dirección if (barco.getTamaño() > 1) { Orientacion or = new Orientacion(x, y, barco.getTamaño()); or.ShowDialog(); if (or.DialogResult == true) { //0 derecha, 1 abajo, 2 izquierda, 3 arriba direccion = or.Direccion; } else { return(false); } //"funciona" //or.ShowDialog(); //direccion = or.Direccion; //dirección 4 es al cerrar la ventana de direcciones //if (direccion == 4) { // return false; //} } for (int i = 0; i < barco.getTamaño(); i++) { for (int j = 0; j < barcos.Count; j++) { ocupado = barcos[j].comprobarPosicion(x, y); if (ocupado == true) { //limpia las coordenadas del barco arrastrado barco.eliminarCoordenadas(); break; } } //mejorar if (!ocupado) { barco.anyadirCoordenadas(x, y); Console.WriteLine(x.ToString() + " " + y.ToString()); switch (direccion) { case 0: x++; break; case 1: y++; break; case 2: x--; break; case 3: y--; break; } } else { //si alguna casilla corresponde con otro barco, no lo añade return(false); } } RotateTransform rotateTransform1 = new RotateTransform(90 * direccion, 17.5, 17.5); label.RenderTransform = rotateTransform1; return(true); }