Casa > C > Como Fazer Um Jogo De Xadrez Em C

Como fazer um jogo de xadrez em C

Eu escrevi um programa de xadrez quando eu tinha 19 anos, em 1985. Dois anos depois, ele jogou em torneios da Federação de Xadrez dos Estados Unidos sob a USCF ID 12528567. Depois de 13 jogos de controle de tempo, foi avaliado em 2129 e só perdeu para jogadores classificados acima de 2300 (Mark Eidemiller, USCF meber ID 10145791, e Stefan Rakowsky, membro da USCF ID 12544065. O programa chamava-se The Sniper e funcionava num Macintosh SE/30 de 16 MHz muito lento com um processador Motorola 68030.

main-qimg-e4d688edbfafbea6224d684bfd329c75

I menciono tudo isto para que vocês saibam que eu realmente completei a tarefa em mãos, e não sou apenas um "quarterback de poltrona" atirando generalizações vagas. Mais tarde, publiquei um programa chamado World Championship Checkers e Blackjack Deluxe na plataforma Macintosh, de 1994-1999. O programa de damas era capaz de anunciar uma vitória de uma distância de 157 jogadas inicialmente (contando turnos para ambos os lados) e eventualmente 293 jogadas.

main-qimg-25258d53bcba146c62fe5a4328fdcff2

E, finalmente, inventei o jogo de Xadrez Gótico, uma variante de xadrez de 80 quadrados com duas peças extra no tabuleiro: uma joga como um Cavaleiro ou uma Torre, e a outra joga como um Cavaleiro ou um Bispo. E, claro, eu escrevi um programa para jogar esse jogo também!

main-qimg-06fb6d13d8635bbf620806c33ae5f03b

Então, espero que os leitores apreciem a minha resposta de longa data aqui. Eu só queria mostrar minhas credenciais primeiro.

O primeiro passo para escrever seu programa de xadrez deveria ser responder a esta pergunta:

O programa terá um gerador de jogadas de bitboard (um pouco difícil) ou será um gerador de jogadas de array (mais fácil de escrever, e depurar, mas pode ser mais lento que um gerador de bitboard).

Um bitboard é basicamente uma representação tal que um dígito binário (a que "bit" literalmente se refere) indica a presença ou ausência de um determinado tipo de peça em uma determinada casa. Um "1" indica que algo está nesse quadrado, e um "0" significa que o quadrado NÃO tem esse tipo de peça PARTICULAR, embora possa ter outro tipo de peça. Por exemplo:

Binário:

00000000 11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000

...poderiam ser os peões pretos que estão no tabuleiro. Isso seria armazenado como uma única variável de 64 bits, um longo não assinado em convenções C antigas ou uint64 em convenções mais recentes.

O benefício de usar uma bitboard é que a matemática binária permite que você compute usando as funções "bit OR" e "bit AND" muito rapidamente, e "bit shifting" permite que você "mova" peças em velocidades de registro, mais rápido do que qualquer outro método.

Como você pode imaginar, é muito mais difícil depurar e testar uma bitboard. Você tem que escrever muitas de suas próprias funções de teste, tais como BitboardToBoard() para mostrar como é a rendição do bit para que você possa realmente ver o que está acontecendo.

Uma representação de array é muito mais simples.

Pawns[64] = {0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 ... }; é muito mais intuitivo. Se você definir o quadrado A8 como 1, B8 como 2, etc, então Black_Pawn[C7 - 1] retornaria o número 1. Lembre-se, em C, todas as arrays são baseadas em um índice 0. Então, o primeiro elemento no array é sempre [0] e não [1].

Então já antes de começar, você tem uma pergunta difícil de responder. Uma vez que você decida que tipo de gerador de movimento você quer, então eu posso responder a pergunta de forma mais completa.

De Lilli Seavers

Vale a pena comprar o relógio inteligente da Tempestade Barco? :: Qual é o melhor teclado de jogos sem fio do orçamento em 2021?