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!