public Peca ExecutaMovimento(Posicao origem, Posicao destino) { Peca p = Tab.RemoverPeca(origem); p.IncrementarQntMovimentos(); Peca pecaCapturada = Tab.RemoverPeca(destino); Tab.AdicionarPeca(p, destino); if (pecaCapturada != null) { _capturadas.Add(pecaCapturada); } // #JogadaEspecial Roque pequeno if (p is Rei && destino.Coluna == origem.Coluna + 2) { Posicao origemTorre = new Posicao(origem.Linha, origem.Coluna + 3); Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1); Peca torre = Tab.RemoverPeca(origemTorre); Tab.AdicionarPeca(torre, destinoTorre); } // #JogadaEspecial Roque grande if (p is Rei && destino.Coluna == origem.Coluna - 2) { Posicao origemTorre = new Posicao(origem.Linha, origem.Coluna - 4); Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1); Peca torre = Tab.RemoverPeca(origemTorre); Tab.AdicionarPeca(torre, destinoTorre); } // #jogadaespecial en passant if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == null) { Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(destino.Linha + 1, destino.Coluna); } else { posP = new Posicao(destino.Linha - 1, destino.Coluna); } pecaCapturada = Tab.RemoverPeca(posP); _capturadas.Add(pecaCapturada); } } return(pecaCapturada); }
public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca p = Tab.RemoverPeca(destino); p.DecrementarQntMovimentos(); if (pecaCapturada != null) { Tab.AdicionarPeca(pecaCapturada, destino); _capturadas.Remove(pecaCapturada); } Tab.AdicionarPeca(p, origem); // #JogadaEspecial Roque pequeno if (p is Rei && destino.Coluna == origem.Coluna + 2) { Posicao origemTorre = new Posicao(origem.Linha, origem.Coluna + 3); Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1); Peca torre = Tab.RemoverPeca(destinoTorre); torre.DecrementarQntMovimentos(); Tab.AdicionarPeca(torre, origemTorre); } // #JogadaEspecial Roque grande if (p is Rei && destino.Coluna == origem.Coluna - 2) { Posicao origemTorre = new Posicao(origem.Linha, origem.Coluna - 4); Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1); Peca torre = Tab.RemoverPeca(destinoTorre); torre.DecrementarQntMovimentos(); Tab.AdicionarPeca(torre, origemTorre); } // #JogadaEspecial En Passant if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == VuneravelEnPassant) { Peca peao = Tab.RemoverPeca(destino); Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(3, destino.Coluna); } else { posP = new Posicao(4, destino.Coluna); } Tab.AdicionarPeca(peao, posP); } } }
public void RealizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutaMovimento(origem, destino); if (EstaEmCheque(JogadorAtual)) { DesfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em cheque"); } Peca p = Tab.Peca(destino); // #Jogada Especial - Promoção if (p is Peao) { if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7)) { p = Tab.RemoverPeca(destino); _pecas.Remove(p); Peca dama = new Dama(Tab, p.Cor); Tab.AdicionarPeca(dama, destino); _pecas.Add(dama); } } if (EstaEmCheque(Adversaria(JogadorAtual))) { EmXeque = true; } else { EmXeque = false; } if (TesteXequeMate(Adversaria(JogadorAtual))) { Terminada = true; } else { Turno++; MudaJogador(); } // #JogadaEspecial En Passant if (p is Peao && destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2) { VuneravelEnPassant = p; } }
public void ColocarNovaPeca(char coluna, int linha, Peca peca) { Tab.AdicionarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosicao()); _pecas.Add(peca); }