private void EliminaBarco(int id) { //Creamos un Array List que contendrá los picturebox que tengan el id del barco que se le pasa al método. List <PictureBox> casillas = new List <PictureBox>(); foreach (Control c in tableLayoutPanel1.Controls) { PictureBox picture = c as PictureBox; if (picture != null) { int idPicture = tablero.ComprobarCasilla(picture.Tag.ToString())[0]; if (idPicture == id) { casillas.Add(picture); tablero.CambiarValorCasilla(picture.Tag.ToString(), new int[] { -1, -1 }); } } } foreach (PictureBox casilla in casillas) { casilla.BackgroundImage = null; } int barcoSize = casillas.Count(); switch (barcoSize) { case 1: Barco.numFragatas--; break; case 2: Barco.numDestructores--; break; case 3: Barco.numSubmarinos--; break; case 4: Barco.numPortaaviones--; break; default: throw new Exception("Número de casillas inválido"); } RestarNumeroBarcos(); Barco barco = null; foreach (Barco b in barcos) { if (b.Id == id) { barco = b; } } barcos.Remove(barco); quitarBarco.Play(); PoderEmpezar(); }
private void btn_comenzar_Click(object sender, EventArgs e) { play = true; Barco.ResetearNumeroBarcos(); this.Close(); }
private void pictureBox1_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count == 0) { error.Play(); MessageBox.Show("Debes seleccionar un barco."); } else { PictureBox pb = sender as PictureBox; int numCasillas = int.Parse(listView1.SelectedItems[0].SubItems[1].Text.ToString()); //Número de casillas que ocupa el Barco. int fila = int.Parse(pb.Tag.ToString().Split(',')[0]); int columna = int.Parse(pb.Tag.ToString().Split(',')[1]); if (tablero.ComprobarCasilla(fila + "," + columna)[0] != -1) // Click en barco { int idBarco = tablero.ComprobarCasilla(fila + "," + columna)[0]; EliminaBarco(idBarco); this.Cursor = Cursors.Hand; } else // Click en casilla vacía { bool horizontal = cb_posicion.SelectedIndex == 0; int d = ((horizontal && (columna - 1) + numCasillas > 9) || (!horizontal && (fila - 1) + numCasillas > 9)) ? -1 : 1; // si es 1, va a la derecha, si es -1, va a la izquierda bool otroLadoProbado = false; int id = Barco.lastId + 1; if (!ComprobarBarco(numCasillas, true)) { return; } for (int x = 0; x < numCasillas; x++) // bucle comprobación casillas { int filaActual = (horizontal) ? fila : fila + (x * d); // desplazamiento vertical int columnaActual = (horizontal) ? columna + (x * d) : columna; // desplazamiento horizontal string tag = filaActual.ToString() + "," + columnaActual.ToString(); if (filaActual < 0 || columnaActual < 0) // Se sale por la izquierda { error.Play(); MessageBox.Show("No cabe el barco en la casilla seleccionada!"); return; } if (tablero.ComprobarCasilla(tag)[0] != -1) // Se encuentra un barco { if (!otroLadoProbado && d != -1) // primer barco { otroLadoProbado = true; x = 0; d = -1; } else { error.Play(); MessageBox.Show("No cabe el barco en la casilla seleccionada!"); return; } } } int imagenBarco = 0; switch (numCasillas) // Obtener el primer índice de las imágenes del barco seleccionado { case 2: imagenBarco = 1; break; case 3: imagenBarco = 3; break; case 4: imagenBarco = 6; break; } if (d == -1) { imagenBarco = imagenBarco + (numCasillas - 1); } for (int x = 0; x < numCasillas; x++) // bucle pintar { int filaActual = (horizontal) ? fila : fila + (x * d); // desplazamiento vertical int columnaActual = (horizontal) ? columna + (x * d) : columna; // desplazamiento horizontal string tag = filaActual.ToString() + "," + columnaActual.ToString(); PictureBox pbPintar = ObtenerPictureBox(tag); pbPintar.BackgroundImage = (horizontal)?images[imagenBarco]:imagesv[imagenBarco]; //pbPintar.BackColor = ObtenerColor(numCasillas); tablero.CambiarValorCasilla(tag, new int[] { id, -1 }); imagenBarco = (d == -1) ? imagenBarco - 1 : imagenBarco + 1; } Barco barco = new Barco(numCasillas); RestarNumeroBarcos(); barcos.Add(barco); ponerBarco.Play(); PoderEmpezar(); prePintado = false; barcoPrePintado.Clear(); this.Cursor = new Cursor(Properties.Resources.trash.Handle); } } }