Olá programadores, programadoras e curiosos de plantão. Vamos dar continuidade ao desenvolvimento do nosso jogo da velha com a linguagem de programação C?
Se você perdeu a parte 1 sugiro começar por ela primeiro. Você pode acessar a parte 1 aqui.
Na computação existe uma técnica muito utilizada para “quebrar” grandes problemas em problemas menores e, consequentemente, mais fáceis de resolver, chamada “dividir pra conquistar” (provavelmente esta técnica é inspirada nas ações de generais em batalhas na antiguidade).
Basicamente o que faremos hoje será “quebrar” o grande problema de resolver o jogo da velha no computador em problemas menores e mais fáceis de resolver.
Sem mais delongas, vamos então ao que interessa.
Para resolver o grande problema jogo da velha, em algum momento nós precisaremos percorrer o nosso tabuleiro (nossa matriz) e verificar o caractere presente em cada posição, só assim saberemos se algum jogador ganhou.
Dito isso, perceba que temos aí um pequeno problema: determinar se o caractere de uma posição x y da matriz é um “x” ou um “0”.
Para resolver este pequeno problema, faremos uma função que irá receber um caractere e retornar 1 caso o caractere seja um “x” ou um “0”, e 0 caso contrário, como apresentado no trecho de código a seguir.
int eValido(char letra) { if(letra == 'x' || letra == '0') return 1; else return 0; }
Outro pequeno problema que precisaremos resolver é a validação das coordenadas digitadas pelos jogadores. Como nossa matriz possui 3 linhas, existem apenas as linhas de índice 0, 1 e 2. Qualquer outro valor digitado não é válido e deve ser pedido novamente. O mesmo vale para as colunas.
Para resolver este problema faremos outra função que receberá como parâmetro os dois números digitados pelo jogador. Esta retornará 1 caso sejam válidos (posição existe na matriz) e 0 caso contrário (posição fora dos limites da matriz), como apresentado no trecho de código abaixo.
int coordenadaEhValida(int x, int y) { if(x >= 0 && x < 3) { if(y >= 0 && y < 3) return 1; } return 0; }
Por fim, quando o jogador digitar a coordenada onde ele deseja jogar, além de verificar se a coordenada é válida, como feito acima, precisamos também verificar se a posição está vazia, afinal um jogador não pode jogar em posições já preenchidas com x ou 0.
Para resolver este problema, faremos uma terceira função que receberá a coordenada jogada pelo usuário, que já deve ter sido validada com a função anterior, e retornaremos 1 caso a posição esteja vazia (o jogador pode jogar na posição escolhida) e 0 caso contrário (alguém já jogou naquela posição. O jogador deve escolher outra posição), como apresentado no trecho de código abaixo.
int posicaoVazia(int x, int y) { if(jogo[x][y] != 'x' && jogo[x][y] != '0') return 1; else return 0; }
Se ficou alguma dúvida, compartilhe nos comentários que faremos o possível para esclarecer. Um grande abraço, bons estudos e até o próximo.