O xadrez é um jogo incrível criado no século VI d.C. com origens indianas e depois adaptado na Europa no século XV. Existe toda uma mitologia ligada à criação do jogo e uma das mais famosas é a que atribui sua criação ao jovem brâmane (que equivale a um sacerdote indiano) Lahur Sessa.
Segundo a lenda, numa província indiana de Taligana havia um poderoso Rajá que havia perdido o filho em batalha. O Rajá estava em constante depressão e passou a descuidar-se de si e do reino. Em determinado dia, o Rajá foi visitado por Sessa, que apresentou-lhe um tabuleiro com 64 casas brancas e pretas intercaladas e com diversas peças que representavam tropas do exército: infantaria, cavalaria, carros de combate, condutores de elefantes, o principal Vizir e o próprio Rajá. O sacerdote explicou ao Rajá que a prática do jogo daria conforto espiritual e cura para a depressão, o que realmente ocorreu.
Quem diria, hein? Os jogos ajudando na depressão da galera desde aquele tempo…
Por que xadrez?
O xadrez moderno não é um jogo fácil de se codificar. Em verdade, existem várias regras que os seres humanos acabam lidando bem, porém, codificá-las pode ser um verdadeiro terror.
Em primeiro lugar, precisamos entender que o jogo precisa ser representado em um tabuleiro de 8×8, ou seja, uma matriz:
Depois precisamos também compreender que cada tipo de peça possui regras próprias para movimentação e captura.
Movimentação
- Peão: apenas 1 movimento para frente, se estiver no primeiro movimento pode ser movido duas casas;
- Cavalo: faz uma movimentação em “L”, ou seja, duas casas adiante/atrás e uma à esquerda/direita;
- Torre: faz movimentações para cima/baixo/direita/esquerda quantas casas desejar;
- Bispo: movimenta-se nas diagonais quantas casas desejar;
- Rainha: se movimenta para qualquer lado quantas casas desejar;
- Rei: se movimenta apenas 1 casa para qualquer direção.
Captura
- Peão: captura peças na diagonal;
- Cavalo: captura apenas peças na casa onde sua movimentação foi concluída;
- Torre: faz a captura de peças onde a sua movimentação foi concluída;
- Bispo: faz a captura de peças onde a sua movimentação foi concluída;
- Rainha: faz a captura de peças onde a sua movimentação foi concluída;
- Rei: faz a captura de peças onde a sua movimentação foi concluída.
Movimentos especiais
Roque: esse movimento permite que a Torre e o Rei troquem suas posições realizando um movimento de defesa.
Captura En-passant: esse movimento permite o avanço por duas casas do peão, caso haja um peão adversário na coluna adjacente na quarta fileira para as brancas, ou quinta para as pretas. Este pode capturar o peão como se fosse “de passagem”, movendo-o para a casa por onde o peão capturado passou sobre. A captura “en passant” deve ser feita imediatamente após o peão ter sido movido por duas casas, caso contrário, o jogador adversário perde o direito de fazê-lo posteriormente.
Check e Checkmate
O “xeque” acontece quando o jogo progrediu a ponto do Rei de um dos jogadores estar em ameaça de ser capturado no próximo movimento, assim, quando isso acontece, o jogador é obrigado a avisar o adversário dizendo a palavra “cheque”.
Já o “xeque-mate” é o último movimento do jogo, ou seja, ele acontece quando o adversário já não possui nenhuma outra escapatória.
Como codificar
Nesse exemplo, vamos criar uma interface jogável de xadrez com espaços para entradas de movimentações. Além disso, vamos fazer a validação de cada um dos movimentos dos jogadores verificando se eles estão seguindo as regras do jogo. Por fim, vamos verificar as situações de “check” e “checkmate”.
Para isso utilizamos o PHP versão 7.2, um servidor Apache, um pouco de CSS e JavaScript e nenhum banco de dados.
Requisitos funcionais
- Criar uma interface funcional que mostre o tabuleiro do jogo – ok;
- Criar uma interface onde o jogador possa inserir o seu movimento – ok;
- Criar uma interface que possibilite o jogador reiniciar o jogo – ok;
- Criar uma forma de converter as movimentações em notação de xadrez (ex. a1-c5) para posições em uma matriz – ok;
- Criar restrições de movimento para cada peça de acordo com suas regras – ok;
- Criar regras especiais para permitir movimentos ou então capturas considerando os movimentos especiais;
- Criar uma forma de verificação se o jogo entrou em Check;
- Criar uma forma de verificar se o jogo acabou (Checkmate);
- Criar testes automatizados para cada situação;
- Criar uma forma de jogar com um bot (homem vs máquina);
- Criar uma forma de jogo máquina vs máquina.