示例#1
0
        public bool atirar(Tabuleiro tabPlayer)
        {
            bool acertou = false;

            var(eixoXVar, eixoYVar) = decidirXY(tabPlayer);

            int eixoX = eixoXVar;
            int eixoY = eixoYVar;

            Peca barco        = tabPlayer.getMatrizPecas()[eixoX, eixoY];
            int  tamanhoBarco = barco.getTamanho();

            jogadasIAEixoX.Add(eixoX);
            jogadasIAEixoY.Add(eixoY);

            if (barco.GetType() != typeof(Agua))
            {
                tabPlayer.getMatrizPecas()[eixoX, eixoY].setTamanho(tamanhoBarco - 1);
                tamanhoBarco = tabPlayer.getMatrizPecas()[eixoX, eixoY].getTamanho();

                if (tamanhoBarco <= 0)
                {
                    tabPlayer.getMatrizPecas()[eixoX, eixoY].setAtingido(true);
                }

                tabPlayer.getMatrizPecas()[eixoX, eixoY] = new TiroBarco(true);
                ultimasPosicaosBarcoAtingidasX.Add(eixoX);
                ultimasPosicaosBarcoAtingidasY.Add(eixoY);
                acertou = true;
            }
            else
            {
                tabPlayer.getMatrizPecas()[eixoX, eixoY] = new TiroAgua(true);
                acertou = false;
            }

            if (tamanhoBarco <= 0)
            {
                tabPlayer.getMatrizPecas()[eixoX, eixoY] = new TiroBarco(true);
                countBarcosPlayer -= 1;
                ultimasPosicaosBarcoAtingidasX.Clear();
                ultimasPosicaosBarcoAtingidasY.Clear();
                lastDir = direcaoCerta.x_Plus;
            }
            return(acertou);
        }
示例#2
0
        private (int, int) decidirXY(Tabuleiro tabPlayer)
        {
            int eixoX = 0;
            int eixoY = 0;

            while (true)
            {
                if (jogadasIAEixoX.Count == 0)
                {
                    eixoX = r.Next(2, 8);
                    eixoY = r.Next(2, 7);
                }
                else
                {
                    eixoX = r.Next(0, 10);
                    eixoY = r.Next(0, 10);
                }

                if (ultimasPosicaosBarcoAtingidasX.Count > 0)
                {
                    eixoX = ultimasPosicaosBarcoAtingidasX[ultimasPosicaosBarcoAtingidasX.Count - 1];
                    eixoY = ultimasPosicaosBarcoAtingidasY[ultimasPosicaosBarcoAtingidasY.Count - 1];

                    if (lastDir.Equals(direcaoCerta.x_Plus))
                    {
                        if (eixoX + 1 < 10 && !tabPlayer.getMatrizPecas()[eixoX + 1, eixoY].getAtingido())
                        {
                            eixoX++;
                        }
                        else
                        {
                            lastDir = direcaoCerta.x_Minus;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.x_Minus))
                    {
                        if (eixoX - 1 >= 0 && !tabPlayer.getMatrizPecas()[eixoX - 1, eixoY].getAtingido())
                        {
                            eixoX--;
                        }
                        else
                        {
                            lastDir = direcaoCerta.y_Plus;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.y_Plus))
                    {
                        if (eixoY + 1 < 10 && !tabPlayer.getMatrizPecas()[eixoX, eixoY + 1].getAtingido())
                        {
                            eixoY++;
                        }
                        else
                        {
                            lastDir = direcaoCerta.y_Minus;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.y_Minus))
                    {
                        if (eixoY - 1 >= 0 && !tabPlayer.getMatrizPecas()[eixoX, eixoY - 1].getAtingido())
                        {
                            eixoY--;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.nada))
                    {
                        ultimasPosicaosBarcoAtingidasX.RemoveRange(1, ultimasPosicaosBarcoAtingidasX.Count - 1);
                        ultimasPosicaosBarcoAtingidasY.RemoveRange(1, ultimasPosicaosBarcoAtingidasY.Count - 1);
                    }
                }

                bool checkPosicaoTiro = true;
                for (int i = 0; i < jogadasIAEixoX.Count; i++)
                {
                    if (jogadasIAEixoX[i] == eixoX && jogadasIAEixoY[i] == eixoY)
                    {
                        checkPosicaoTiro = false;
                        break;
                    }
                }

                if (!tabPlayer.getMatrizPecas()[eixoX, eixoY].getAtingido() && checkPosicaoTiro)
                {
                    break;
                }
                else
                {
                    if (lastDir.Equals(direcaoCerta.y_Minus))
                    {
                        lastDir = direcaoCerta.nada;
                    }
                    else
                    {
                        lastDir++;
                    }
                }
            }
            return(eixoX, eixoY);
        }
        private bool jogarCPU()
        {
            int  eixoX   = 0;
            int  eixoY   = 0;
            bool acertou = false;

            while (true)
            {
                if (jogadasIAEixoX.Count == 0)
                {
                    eixoX = r.Next(2, 8);
                    eixoY = r.Next(2, 7);
                }
                else
                {
                    eixoX = r.Next(0, 10);
                    eixoY = r.Next(0, 10);
                }

                if (ultimasPosicaosBarcoAtingidasX.Count > 0)
                {
                    eixoX = ultimasPosicaosBarcoAtingidasX[ultimasPosicaosBarcoAtingidasX.Count - 1];
                    eixoY = ultimasPosicaosBarcoAtingidasY[ultimasPosicaosBarcoAtingidasY.Count - 1];

                    if (lastDir.Equals(direcaoCerta.x_Plus))
                    {
                        if (eixoX + 1 < 10 && !tabPlayer.getMatrizPecas()[eixoX + 1, eixoY].getAtingido())
                        {
                            eixoX++;
                        }
                        else
                        {
                            lastDir = direcaoCerta.x_Minus;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.x_Minus))
                    {
                        if (eixoX - 1 >= 0 && !tabPlayer.getMatrizPecas()[eixoX - 1, eixoY].getAtingido())
                        {
                            eixoX--;
                        }
                        else
                        {
                            lastDir = direcaoCerta.y_Plus;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.y_Plus))
                    {
                        if (eixoX + 1 < 10 && !tabPlayer.getMatrizPecas()[eixoX, eixoY + 1].getAtingido())
                        {
                            eixoY++;
                        }
                        else
                        {
                            lastDir = direcaoCerta.y_Minus;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.y_Minus))
                    {
                        if (eixoX - 1 >= 0 && !tabPlayer.getMatrizPecas()[eixoX, eixoY - 1].getAtingido())
                        {
                            eixoY--;
                        }
                    }
                    if (lastDir.Equals(direcaoCerta.nada))
                    {
                        ultimasPosicaosBarcoAtingidasX.RemoveRange(1, ultimasPosicaosBarcoAtingidasX.Count - 1);
                        ultimasPosicaosBarcoAtingidasY.RemoveRange(1, ultimasPosicaosBarcoAtingidasY.Count - 1);
                    }
                }

                bool checkPosicaoTiro = true;
                for (int i = 0; i < jogadasIAEixoX.Count; i++)
                {
                    if (jogadasIAEixoX[i] == eixoX && jogadasIAEixoY[i] == eixoY)
                    {
                        checkPosicaoTiro = false;
                        break;
                    }
                }

                if (!tabPlayer.getMatrizPecas()[eixoX, eixoY].getAtingido() && checkPosicaoTiro)
                {
                    break;
                }
                else
                {
                    if (lastDir.Equals(direcaoCerta.y_Minus))
                    {
                        lastDir = direcaoCerta.nada;
                    }
                    else
                    {
                        lastDir++;
                    }
                }
            }

            Console.WriteLine("CPU:" + eixoX + " - " + eixoY);

            Peca barco        = tabPlayer.getMatrizPecas()[eixoX, eixoY];
            int  tamanhoBarco = barco.getTamanho();

            jogadasIAEixoX.Add(eixoX);
            jogadasIAEixoY.Add(eixoY);

            if (barco.GetType() != typeof(Agua))
            {
                tabPlayer.getMatrizPecas()[eixoX, eixoY].setTamanho(tamanhoBarco - 1);
                ultimasPosicaosBarcoAtingidasX.Add(eixoX);
                ultimasPosicaosBarcoAtingidasY.Add(eixoY);
                acertou = true;
                Console.WriteLine("CPU acertou barco na posição X:" + eixoX + " e Y:" + eixoY);
            }
            else
            {
                tabPlayer.getMatrizPecas()[eixoX, eixoY].setAtingido(true);
                acertou = false;
            }

            if (tabPlayer.getMatrizPecas()[eixoX, eixoY].getTamanho() <= 0)
            {
                tabPlayer.getMatrizPecas()[eixoX, eixoY].setAtingido(true);
                countBarcosPlayer -= 1;
                ultimasPosicaosBarcoAtingidasX.Clear();
                ultimasPosicaosBarcoAtingidasY.Clear();
                lastDir = direcaoCerta.x_Plus;
                Console.WriteLine("Afundou barco do jogador");
            }
            return(acertou);
        }