Пример #1
0
        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();
        }
Пример #2
0
 private void btn_comenzar_Click(object sender, EventArgs e)
 {
     play = true;
     Barco.ResetearNumeroBarcos();
     this.Close();
 }
Пример #3
0
        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);
                }
            }
        }