Verificação na horizontal
Chegamos na parte meio que complicada: criar as funções que ficarão responsáveis por verificar o ganhador.
Haverá, praticamente, três verificações. São elas: Horizontal, Vertical e Diagonal.
Vamos começar pela horizontal:
function vereficaVencendorHorizontal()
{
var combinacao;
var simbolo;
for(var i = 0 ; i < 3;i++)
{
if (i == 0)
{
simbolo = 'x';
}
else if (i == 1 )
{
simbolo = 'y';
}
else if (i == 2)
{
simbolo = 'z';
}
//Colunas Horizontais
for(var j = 1 ; j <= 3 ; j++)
{
combinacao += $( "button[name='" + simbolo + j + "']").text();
if(combinacao == "undefinedX")
{
combinacao = "X";
}
if (combinacao == "XXX")
{
alert('Ganhador X');
return;
}
else if(combinacao == "OOO")
{
alert("Ganhador O");
return;
}
}
combinacao = ''";
}
}
Então, vamos para a explicação disso tudo:
Primeiro de tudo, é bom saber que o jogo da velha é, nada mais, que uma matriz bidimensional.
Você deve estar se perguntando onde está nossa variável bidimensional. Nesse caso, vamos usar os botões como nossa matriz. E como toda matriz, devemos controlar usando
for. Como é uma bidimensional, vamos usar dois
for ou pode ser outro loop (while).
1. Primeiro
for:
- Serve para controlar as colunas e cada vez que passa nesse for, muda o símbolo x,y,z que representam os botões.
2. Segundo
for:
- Controlamos as linhas, perceba que ele vai armazenando todos os dados das linhas e depois de armazenar 3 vezes cada linha de coluna, verifica se tem alguma sequência de XXX ou OOO, para verificar se existe algum ganhador. Se existir, já dá o return para acabar com a função.
Verificação na vertical
Essa é a parte mais fácil: a da verificação na parte vertical.
Vamos ao código:
function vereficaVencendorVertical()
{
var simbolo;
var combinacao;
//alert('vertical');
for(var i = 1 ; i<= 3; i++)
{
combinacao += $( "button[name='x" + i + "']").text();
if(combinacao == "undefinedX")
{
combinacao = "X";
}
combinacao += $( "button[name='y" + i + "']").text();
combinacao += $( "button[name='z" + i + "']").text();
//alert(combinacao);
if (combinacao == "XXX")
{
alert('Ganhador X');
return;
}
else if (combinacao == "OOO")
{
alert('Ganhador O');
return;
}
combinacao = "";
}
}
O que muda, é que precisamos apenas de um
for, apenas para verificar, pois só queremos saber se o número da linha corresponde à alguma sequência. O
for apenas controla a coluna.
Verificação na diagonal
Vamos para a última verificação, que é na diagonal:
function vereficaVencendorVertical()
{
var combinacao;
combinacao += $( "button[name='x1']").text();
if(combinacao == "undefinedX")
{
combinacao = "X";
}
combinacao += $( "button[name='y2']").text();
combinacao += $( "button[name='z3']").text();
if (combinacao == "XXX")
{
alert('Ganhador X');
return;
}
else if (combinacao == "OOO")
{
alert('Ganhador O');
return;
}
combinacao = "";
combinacao += $( "button[name='x3']").text();
if(combinacao == "undefinedX")
{
combinacao = "X";
}
combinacao += $( "button[name='y2']").text();
combinacao += $( "button[name='z1']").text();
if (combinacao == "XXX")
{
alert('Ganhador X');
return;
}
else if (combinacao == "OOO")
{
alert('Ganhador O');
return;
}
}
Verifica apenas duas vezes, pois existe apenas duas diagonais, sem a necessidade de
for. Usando o
if, já conseguimos saber se existe alguma sequência de
X ou
O.