Repository navigation
Expand file tree
/
Copy path20.py
More file actions
117 lines (90 loc) · 3.9 KB
/
Copy path20.py
File metadata and controls
117 lines (90 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
'''
Exercise 20 - Implemente um jogo de tabuleiro em que cada peça (peões, torres, etc.) seja representada por uma classe, com regras específicas de movimento e captura. No caso do xadrez, adicione a regra de roque, en passant, promoção de peões e xeque-mate.
'''
class Peca:
def __init__(self, xadrez, cor):
self.xadrez = xadrez
self.cor = cor
def movimentos(self, posicao):
pass
class Peao(Peca):
def __init__(self, xadrez, cor):
super().__init__(xadrez, cor)
def movimentos(self, posicao):
pass
class Torre(Peca):
def __init__(self, xadrez, cor):
super().__init__(xadrez, cor)
def movimentos(self, posicao):
movimentos_possiveis = []
for i in range(1, 8):
if posicao[0] + i < 8:
movimentos_possiveis.append((posicao[0] + i, posicao[1]))
if posicao[0] - i >= 0:
movimentos_possiveis.append((posicao[0] - i, posicao[1]))
if posicao[1] + i < 8:
movimentos_possiveis.append((posicao[0], posicao[1] + i))
if posicao[1] - i >= 0:
movimentos_possiveis.append((posicao[0], posicao[1] - i))
return movimentos_possiveis
class Cavalo(Peca):
def __init__(self, xadrez, cor):
super().__init__(xadrez, cor)
def movimentos(self, posicao):
pass
class Bispo(Peca):
def __init__(self, xadrez, cor):
super().__init__(xadrez, cor)
def movimentos(self, posicao):
pass
class Rainha(Peca):
def __init__(self, xadrez, cor):
super().__init__(xadrez, cor)
def movimentos(self, posicao):
pass
class Rei(Peca):
def __init__(self, xadrez, cor):
super().__init__(xadrez, cor)
def movimentos(self, posicao):
pass
def roque(self, posicao):
pass
class Xadrez:
def __init__(self):
self.tabuleiro = self.criar_tabuleiro()
self.jogo_em_andamento = True
def criar_tabuleiro(self):
tabuleiro = [[None for _ in range(8)]for _ in range(8)]
tabuleiro[0] = [Torre(self, 'branca'), Cavalo(self, 'branca'), Bispo(self, 'branca'), Rainha(self, 'branca'), Rei(self, 'branca'), Bispo(self, 'branca'), Cavalo(self, 'branca'), Torre(self, 'branca')]
tabuleiro[1] = [Peao(self, 'branco') for _ in range(8)]
tabuleiro[7] = [Torre(self, 'preta'), Cavalo(self, 'preta'), Bispo(self, 'preta'), Rainha(self, 'preta'), Rei(self, 'preta'), Bispo(self, 'preta'), Cavalo(self, 'preta'), Torre(self, 'preta')]
tabuleiro[6] = [Peao(self, 'preto') for _ in range(8)]
return tabuleiro
def imprimir_tabuleiro(self):
for linha in self.tabuleiro:
print(' '.join([str(peca.__class__.__name__[0]) if peca else '.' for peca in linha]))
def mover_peca(self, origem, destino):
peca = self.tabuleiro[origem[0]][origem[1]]
movimentos_validos = peca.movimentos(origem)
if destino in movimentos_validos:
destino_peca = self.tabuleiro[destino[0]][destino[1]]
if destino_peca is None or destino_peca.cor != peca.cor:
self.tabuleiro[destino[0]][destino[1]] = peca
self.tabuleiro[origem[0]][origem[1]] = None
print(f'Peça movida de {origem} para {destino}')
else:
print('Movimento inválido: Destino ocupado por peça da mesma cor')
else:
print('Movimento inválido')
def verificar_checagem(self):
pass
def verificar_mate(self):
pass
def realizar_roque(self, origem, destino):
rei = self.tabuleiro[origem[0]][origem[1]]
if isinstance(rei, Rei):
rei.roque(destino)
xadrez = Xadrez()
xadrez.imprimir_tabuleiro()
xadrez.mover_peca((1, 0), (2, 0))
xadrez.mover_peca((0, 0), (3, 0))