Exemplo n.º 1
0
        private void pictureBox1_Click(Object sender, EventArgs e)
        {
            PictureBox pb = sender as PictureBox;

            int[] casilla = tablero.ComprobarCasilla(pb.Tag.ToString());

            //MessageBox.Show((casilla[0] + "," + casilla[1]).ToString());

            if (casilla[1] == -1) // No ha sido tocado
            {
                int estado = -1;
                if (casilla[0] == -1) // Ha tocado agua
                {
                    estado = 0;
                    tablero.CambiarEstado(pb.Tag.ToString(), estado);
                    disparo_agua.Play();
                    jug.RestarNumDisparos();
                    pb.Image = Properties.Resources.water;
                    if (jug.NumeroDisparos == 0)
                    {
                        Perder();
                    }
                }
                else // Ha tocado barco
                {
                    estado = 1;
                    tablero.CambiarEstado(pb.Tag.ToString(), estado);
                    estado = tablero.ComprobarTocadoHundido(casilla[0])?2:1;
                    if (estado == 2) //Barco Hundido
                    {
                        int barcoId = tablero.ComprobarCasilla(pb.Tag.ToString())[0];
                        foreach (Control c in tabla.Controls)
                        {
                            PictureBox pbComprobar = c as PictureBox;
                            if (pbComprobar != null)
                            {
                                if (tablero.ComprobarCasilla(pbComprobar.Tag.ToString())[0] == barcoId)
                                {
                                    pbComprobar.Image = null;
                                }
                            }
                        }
                        sonidoHundido.Play();
                        jug.RecuperarDisparos();
                        pb.Image = null;
                    }
                    else //Barco tocado
                    {
                        sonidoTocado.Play();
                        pb.Image = Properties.Resources.cross;
                    }
                    if (tablero.ComprobarVictoria())
                    {
                        Ganar();
                    }
                }
            }
            else // Ya ha sido tocado
            {
                MessageBox.Show("Esta casilla ya ha sido tocada");
            }
            ActualizarIntentos();
        }
Exemplo n.º 2
0
        private void pictureBox1_MouseEnter(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0)
            {
                this.Cursor = Cursors.No;
                return;
            }
            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) // Hover en barco
                {
                    this.Cursor = new Cursor(Properties.Resources.trash.Handle);;
                    return;
                }
                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;
                    if (!ComprobarBarco(numCasillas, false))
                    {
                        this.Cursor = Cursors.No;
                        return;
                    }
                    this.Cursor = Cursors.Hand;
                    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 o arriba
                        {
                            this.Cursor = Cursors.No;
                            return;
                        }
                        if (tablero.ComprobarCasilla(tag)[0] != -1) // Se encuentra un barco
                        {
                            if (!otroLadoProbado && d != -1)        // primer barco
                            {
                                otroLadoProbado = true;
                                x = 0;
                                d = -1;
                            }
                            else
                            {
                                this.Cursor = Cursors.No;
                                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) ? imagest[imagenBarco] : imagesvt[imagenBarco];
                        //pbPintar.BackColor = ObtenerColor(numCasillas);
                        imagenBarco = (d == -1) ? imagenBarco - 1 : imagenBarco + 1;
                        barcoPrePintado.Add(pbPintar);
                    }
                    prePintado = true;
                }
            }
        }