0% acharam este documento útil (0 voto)
5 visualizações4 páginas

Engine de Xadrez Simples em Python

Este documento contém um código para um simples motor de xadrez que utiliza a biblioteca 'chess' em Python. O motor avalia o tabuleiro com base em valores de peças, controle do centro e mobilidade, e pode jogar aberturas básicas de forma aleatória. O usuário pode jogar contra a engine, que alterna entre os lances do jogador e os melhores lances calculados.

Enviado por

mamacolindinho
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
5 visualizações4 páginas

Engine de Xadrez Simples em Python

Este documento contém um código para um simples motor de xadrez que utiliza a biblioteca 'chess' em Python. O motor avalia o tabuleiro com base em valores de peças, controle do centro e mobilidade, e pode jogar aberturas básicas de forma aleatória. O usuário pode jogar contra a engine, que alterna entre os lances do jogador e os melhores lances calculados.

Enviado por

mamacolindinho
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Simple chess engine

import chess

import random

# Aberturas básicas

aberturas = {

"Italiana": ["e4", "e5", "Nf3", "Nc6", "Bc4"],

"Ruy Lopez": ["e4", "e5", "Nf3", "Nc6", "Bb5"],

"Siciliana": ["e4", "c5"],

"Londres": ["d4", "d5", "Bf4"]

# Função para avaliar o tabuleiro

def avaliar_tabuleiro(tabuleiro):

valores = {[Link]: 1, [Link]: 3, [Link]: 3,

[Link]: 5, [Link]: 9}

score = 0

for casa, peca in tabuleiro.piece_map().items():

valor_peca = [Link](peca.piece_type, 0)

score += valor_peca * (1 if [Link] == [Link] else -1)

# Controle do centro

if casa in [chess.D4, chess.E4, chess.D5, chess.E5]:

score += (0.5 if [Link] == [Link] else -0.5)


# Penalidade para rei exposto

if peca.piece_type == [Link]:

if not tabuleiro.is_check():

score += (0.5 if [Link] == [Link] else -0.5)

else:

score -= (1 if [Link] == [Link] else -1)

# Bônus por mobilidade

score += len(list(tabuleiro.legal_moves)) * 0.1

return score

# Função para encontrar o melhor lance

def encontrar_melhor_lance(tabuleiro):

melhor_lance = None

melhor_valor = -float('inf')

for lance in tabuleiro.legal_moves:

[Link](lance)

valor = avaliar_tabuleiro(tabuleiro)

[Link]()

if valor > melhor_valor:

melhor_valor = valor

melhor_lance = lance

return melhor_lance
# Função para jogar uma abertura aleatória

def jogar_abertura(tabuleiro):

abertura = [Link](list([Link]()))

for movimento in abertura:

if movimento in [[Link](l) for l in tabuleiro.legal_moves]:

tabuleiro.push_san(movimento)

else:

break

tabuleiro = [Link]()

# Sorteia a cor do jogador

jogador_brancas = [Link]([True, False])

if jogador_brancas:

print("Você joga de brancas! ")

else:

print("Você joga de pretas! ")

jogar_abertura(tabuleiro)

print("Bem-vindo ao Xadrez contra a Engine! ")

while not tabuleiro.is_game_over():

print(tabuleiro)

try:

if ([Link] and jogador_brancas) or (not [Link] and not


jogador_brancas):
lance_jogador = input("Seu lance (ex: e4, d5, Nf3): ")

tabuleiro.push_san(lance_jogador)

else:

melhor_lance = encontrar_melhor_lance(tabuleiro)

[Link](melhor_lance)

print(f"\nEngine jogou: {melhor_lance}\n")

except Exception as e:

print(f"Lance inválido: {e}. Tente novamente.\n")

print("Fim de jogo! Resultado:", [Link]())

# Agora a engine joga as aberturas de verdade!

Você também pode gostar