Ok, vou-te explicar teoricamente... funciona como uma hierarquia: Primeiro vês onde podes jogar, e depois fazes um random disso. MAS se em vez de jogares ao calhas, puderes jogar logicamente, jogas. MAS se puderes efectuar alguma tática, fá-la. MAS se puderes, vais antes bloquear uma combinação do adversário. MAS se der, vais antes completar uma combinação tua. Por aí fora... (pode não parecer grande A.I., até porque está bastante resumida, mas se perderes algum tempo vais ver... XD. Eu por acaso andava hoje a tentar limar o meu Bot no Expert, e está mesmo invencível... só se der algum erro ou qualquercoisa do género, mas que eu tenha visto consegue sempre empatar... ou ganhar
). Para as táticas aconselho-te então a "trackares" as jogadas do Jogador e do Bot até à terceira, são sempre úteis...
Voltando ao outro assunto, para veres quem ganhou, cria uma void à parte e depois chama-a com
Nome(null, null);. Para "trackares" o jogador, vais ter de "repetir" o código, pois muda nos valores.
Outra coisa, não faças isto:
(Sendo Quadrado1 uma variável correspondente ao estado do quadrado 1 ou A1 ou como lhe quiseres chamar, e por aí adiante)
int Jogada = 0;
private void AI(object sender, EventArgs e)
{
Random Aleatorio = new Random();
Jogada = Aleatorio.Next(1, 9);
if (Jogada == 1 && Quadrado1 != 0)
{
AI(null, null);
}
/*
E etc. para as outros quadrados
*/
VerificacaoVencedor(null, null);
Torna o código pouco eficiente, demasiadamente, e só ganhas problemas... E até te pode crashar com o programa. Conta antes primeiro os casos, declara uma variavel correspondente a cada quadrado e, faz um random de mínimo 1 e máximo o numero de quadrados disponíveis. Explico-te agora com código:
int Quadrados = 0;
int Q1 = 0;
int Q2 = 0;
int Q3 = 0;
int Q4 = 0;
int Q5 = 0;
int Q6 = 0;
int Q7 = 0;
int Q8 = 0;
int Q9 = 0;
if (Quadrado1 == 0)
{
Quadrados += 1;
Q1 = 1;
Q2 = Q1;
Q3 = Q2;
Q4 = Q3;
Q5 = Q4;
Q6 = Q5;
Q7 = Q6;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado2 == 0)
{
Quadrados += 1;
Q2 = Q1 + 1;
Q3 = Q2;
Q4 = Q3;
Q5 = Q4;
Q6 = Q5;
Q7 = Q6;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado3 == 0)
{
Quadrados += 1;
Q3 = Q2 + 1;
Q4 = Q3;
Q5 = Q4;
Q6 = Q5;
Q7 = Q6;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado4 == 0)
{
Quadrados += 1;
Q4 = Q3 + 1;
Q5 = Q4;
Q6 = Q5;
Q7 = Q6;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado5 == 0)
{
Quadrados += 1;
Q5 = Q4 + 1;
Q6 = Q5;
Q7 = Q6;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado6 == 0)
{
Quadrados += 1;
Q6 = Q5 + 1;
Q7 = Q6;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado7 == 0)
{
Quadrados += 1;
Q7 = Q6 + 1;
Q8 = Q7;
Q9 = Q8;
}
if (Quadrado8 == 0)
{
Quadrados += 1;
Q8 = Q7 + 1;
Q9 = Q8;
}
if (Quadrado9 == 0)
{
Quadrados += 1;
Q9 = Q8 + 1;
}
if (Quadrado1 != 0)
{
Q1 = 0;
}
if (Quadrado2 != 0)
{
Q2 = 0;
}
if (Quadrado3 != 0)
{
Q3 = 0;
}
if (Quadrado4 != 0)
{
Q4 = 0;
}
if (Quadrado5 != 0)
{
Q5 = 0;
}
if (Quadrado6 != 0)
{
Q6 = 0;
}
if (Quadrado7 != 0)
{
Q7 = 0;
}
if (Quadrado8 != 0)
{
Q8 = 0;
}
if (Quadrado9 != 0)
{
Q9 = 0;
}
Depois disto, fazes uma random, como a que eu te disse, e depois ves se o valor da random é igual a Q1 (caso queiras jogar no quadrado 1), então jogada = 1 e etc.
int PreJogada = 0;
try
{
PreJogada = Aleatorio.Next(1, Quadrados);
}
catch (System.Exception)
{
PreJogada= 10; //Assim não vai jogar em lado nenhum
}
E depois:
if (PreJogada == Q1)
{
Jogada = 1;
}
/*
E por aí adiante para o resto
*/
VerificacaoVencedor(null, null);
E assim, já temos A.I. para não escrever por cima e para jogar ao calhas... bastante bom =) O resto pensa, é claro... também tens neurónios
Se publicares um jogo, com esta A.I., não deve ficar lá muito bem visto, por isso, mão à obra...