Ch355 - Desenvolvimento

Este é um projeto que iniciei em 2013, enquanto lia Professional JavaScript for Web Developers (C. ZAKAS, Nicholas. Wiley, 2005). A ideia era criar um jogo de xadrez simples, mas com a possibilidade de jogar contra o computador. Naquela época, eu estava estudando JS e achei que seria uma boa oportunidade para praticar.

"A vida é o que acontece com você enquanto você está ocupado fazendo outros planos."

Allen Saunders

Que atire a primeira pedra quem nunca desejou programar seu próprio jogo na época da graduação em Ciência da Computação (ou cursos derivados).

Há aproximadamente 10 anos eu estava concluindo um curso extracurricular de programação em Javascript e para colocar algumas ideias em prática decidi criar meu algoritmo de Xadrez do zero, ignorando as milhares de implementações e os estudos já existentes publicados na web. Com a evolução do código e na base do erro e acerto eu fui percebendo que o que estava me preocupando naquele momento era a interface do usuário (GUI), deixando de lado a inteligência da CPU pra posteridade.

O Xadrez é um jogo de estratégia que envolve dois jogadores, cada um com 16 peças, que se movem em um tabuleiro quadriculado de 8x8 casas. O objetivo do jogo é capturar o rei do adversário, colocando-o em xeque-mate. Cada peça tem suas próprias regras de movimento e captura, e o jogo exige habilidades táticas e estratégicas para vencer.

Mal sabia eu que pra realizar a análise dos possíveis movimentos e julgar a melhor estratégia a se usar nos próximos turnos exige-se um nível de compreensão absurdo! O Xadrez é um dos jogos mais estudados na área de Inteligência Artificial (IA) e Aprendizado de Máquina (Machine Learning). Desde os anos 50, pesquisadores têm desenvolvido algoritmos para jogar xadrez, culminando em 1997, quando o supercomputador Deep Blue da IBM derrotou o campeão mundial Garry Kasparov. Desde então, os programas de xadrez têm se tornado cada vez mais sofisticados, utilizando técnicas avançadas de IA para analisar milhões de posições por segundo e tomar decisões estratégicas.

Eu tinha a pretensão de criar uma engine. Mas era somente um April Fools' Day. LOL!

Após muitos meses fritando o cérebro eu joguei a toalha e fui ler mais a respeito, e foi então que realmente percebi onde estava me metendo. A estimativa de tempo e dedicação necessários pra esse projeto cresceu exponencialmente e tudo acabou parado no tempo. De lá pra cá eu não evoluí com a criação da minha própria CPU, e finalmente concluí que se eu não utilizar a solução mais prática eu nunca vou ver isso funcionando: então recentemente corri atrás de algumas APIs de motores pré existentes. Minha escolha acabou sendo o Stockfish, uma engine muito popular entre enxadristas. É um motor de código aberto, conhecido por sua força e eficiência. É amplamente utilizado em competições de xadrez e é considerado um dos melhores motores disponíveis atualmente. O Stockfish utiliza algoritmos avançados de busca e avaliação para analisar as posições e determinar os melhores movimentos a serem feitos.

Graças aos jogos eletrônicos de xadrez que eu tinha conhecimento até então, a notação UCI já era familiar e utilizei esse protocolo para gravar o log da partida, porém eu modifiquei o padrão pra exibir o caractere Unicode da peça sendo movimentada. Foi uma escolha redundante, uma vez que o UCI prevê a movimentação das peças no tabuleiro desde a posição inicial. Para nossa alegria, eu terei que modificar o log, porque a engine somente entende a UCI puramente como foi criada, sem meus caracteres de enfeite.

Pra que eu fui inventar de colocar esse char à esquerda? :(

Se você gosta de xadrez e algoritmos de programação, lhe convido a me acompanhar em uma jornada pelo código que já tenho escrito e o que eu terei de modificar para conseguir conversar com o Stockfish. Falta muito pouco pro resultado final, mas vamos passar por cada detalhe com calma.

O código-fonte do projeto está disponível no meu repositório do GitHub.

Até o próximo post!


Próximo