Xadrez em PHP

Xadrez em PHP

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.

roque
Retirado de Wikipedia

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.

Retirado de Wikipedia

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.

Código fonte do projeto para contribuição

E o Live demo desse game está disponível em:

http://jogos.computersciencemaster.com.br/xadrez

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta