namespace Trabalho.CampoMinado
{
public class CampoMinado
{
private enum StatusTipo
{
Aberto, //0
Vitoria, //1
GameOver //2
}
private StatusTipo Status = StatusTipo.Aberto;
// O tabuleiro inicia com 34 casas abertas. Ao abrir 71 casas(casas que não possuem bombas) o jogo é ganho.
private int JogoTotalDeCasasAbertas = 34;
private readonly string[,] Solucao = new string[9, 9] {
{ "0", "0", "0", "0", "0", "0", "0", "1", "*" },
{ "0", "0", "0", "0", "0", "0", "0", "1", "1" },
{ "1", "2", "2", "1", "0", "0", "0", "0", "0" },
{ "1", "*", "*", "3", "2", "2", "1", "1", "0" },
{ "1", "2", "3", "*", "*", "4", "*", "2", "1" },
{ "0", "0", "1", "3", "*", "*", "3", "*", "2" },
{ "0", "0", "0", "1", "2", "2", "2", "2", "*" },
{ "0", "0", "0", "0", "0", "0", "0", "1", "1" },
{ "0", "0", "0", "0", "0", "0", "0", "0", "0" }
};
private string[,] Jogo = new string[9, 9] {
{ "0", "0", "0", "0", "0", "0", "0", "1", "-" },
{ "0", "0", "0", "0", "0", "0", "0", "1", "1" },
{ "1", "2", "2", "1", "0", "0", "0", "0", "0" },
{ "-", "-", "-", "3", "2", "2", "1", "1", "0" },
{ "-", "-", "-", "-", "-", "-", "-", "2", "1" },
{ "-", "-", "-", "-", "-", "-", "-", "-", "-" },
{ "-", "-", "-", "-", "-", "-", "-", "-", "-" },
{ "-", "-", "-", "-", "-", "-", "-", "-", "-" },
{ "-", "-", "-", "-", "-", "-", "-", "-", "-" }
};
///
/// Status atual do jogo após você realizar uma abertura de uma casa.
/// 0 - Jogo em aberto, continue procurando as casas que não possuem bombas;
/// 1 - Vitoria, você encontrou todas as casas que não possui bomba;
/// 2 - GameOver, você encontrou uma bomba.
///
public int JogoStatus
{
get
{
return (int)Status;
}
}
///
/// Retorna o tabuleiro atual em modo texto.
///
public string Tabuleiro
{
get
{
var tabuleiro = "";
for (var x = 0; x < 9; x++)
{
for (var y = 0; y < 9; y++)
{
tabuleiro += Jogo[x, y];
}
if (x != 8)
{
tabuleiro += "\r\n";
}
}
return tabuleiro;
}
}
///
/// Método responsável por abrir uma casa do tabuleiro e alterar o status do jogo para:
/// - GameOver(2) caso você abra uma bomba;
/// - Aberto(0) caso ainda não tenha encontrado todas as casas que não possui uma bomba e você deve continuar procurando;
/// - Vitoria (1) caso encontre todas as casas que não possuem bomba.
/// Como nosso jogo é baseado em um tabuleiro 9 x 9, informe valores dentro deste intervalo.
///
///
///
public void Abrir(int linha, int coluna)
{
if (linha >= 1 && linha <= 9 && coluna >= 1 && coluna <= 9)
{
linha--;
coluna--;
if (Status == StatusTipo.GameOver || Solucao[linha, coluna] == "*")
{
Jogo[linha, coluna] = Solucao[linha, coluna];
Status = StatusTipo.GameOver;
}
else
{
if (Jogo[linha, coluna] == "-" && Solucao[linha, coluna] != "0")
{
Jogo[linha, coluna] = Solucao[linha, coluna];
JogoTotalDeCasasAbertas++;
}
else if (Jogo[linha, coluna] == "-" && Solucao[linha, coluna] == "0")
{
if (Jogo[4, 0] == "-")
{
Jogo[4, 0] = Solucao[4, 0];
JogoTotalDeCasasAbertas++;
}
if (Jogo[4, 1] == "-")
{
Jogo[4, 1] = Solucao[4, 1];
JogoTotalDeCasasAbertas++;
}
if (Jogo[4, 2] == "-")
{
Jogo[4, 2] = Solucao[4, 2];
JogoTotalDeCasasAbertas++;
}
if (Jogo[5, 2] == "-")
{
Jogo[5, 2] = Solucao[5, 2];
JogoTotalDeCasasAbertas++;
}
if (Jogo[5, 3] == "-")
{
Jogo[5, 3] = Solucao[5, 3];
JogoTotalDeCasasAbertas++;
}
if (Jogo[6, 3] == "-")
{
Jogo[6, 3] = Solucao[6, 3];
JogoTotalDeCasasAbertas++;
}
if (Jogo[6, 4] == "-")
{
Jogo[6, 4] = Solucao[6, 4];
JogoTotalDeCasasAbertas++;
}
if (Jogo[6, 5] == "-")
{
Jogo[6, 5] = Solucao[6, 5];
JogoTotalDeCasasAbertas++;
}
if (Jogo[6, 6] == "-")
{
Jogo[6, 6] = Solucao[6, 6];
JogoTotalDeCasasAbertas++;
}
if (Jogo[6, 7] == "-")
{
Jogo[6, 7] = Solucao[6, 7];
JogoTotalDeCasasAbertas++;
}
if (Jogo[7, 7] == "-")
{
Jogo[7, 7] = Solucao[7, 7];
JogoTotalDeCasasAbertas++;
}
if (Jogo[7, 8] == "-")
{
Jogo[7, 8] = Solucao[7, 8];
JogoTotalDeCasasAbertas++;
}
Jogo[5, 0] = "0";
Jogo[5, 1] = "0";
Jogo[6, 0] = "0";
Jogo[6, 1] = "0";
Jogo[6, 2] = "0";
Jogo[7, 0] = "0";
Jogo[7, 1] = "0";
Jogo[7, 2] = "0";
Jogo[7, 3] = "0";
Jogo[7, 4] = "0";
Jogo[7, 5] = "0";
Jogo[7, 6] = "0";
Jogo[8, 0] = "0";
Jogo[8, 1] = "0";
Jogo[8, 2] = "0";
Jogo[8, 3] = "0";
Jogo[8, 4] = "0";
Jogo[8, 5] = "0";
Jogo[8, 6] = "0";
Jogo[8, 7] = "0";
Jogo[8, 8] = "0";
JogoTotalDeCasasAbertas += 21;
}
if (JogoTotalDeCasasAbertas == 71)
{
Status = StatusTipo.Vitoria;
}
}
}
}
}
}