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); }
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); }