public Peca ExecutarMovimento(Posicao origem, Posicao destino) { Peca peca = TabuleiroPartida.RetirarPeca(origem); peca.IncrementarMovimento(); Peca PecaCapturada = TabuleiroPartida.RetirarPeca(destino); TabuleiroPartida.ColocarPeca(peca, destino); if (PecaCapturada != null) { _capturadas.Add(PecaCapturada); } // #MovimentoEspecial Roque maior if (peca 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 = TabuleiroPartida.RetirarPeca(origemTorre); torre.IncrementarMovimento(); TabuleiroPartida.ColocarPeca(torre, destinoTorre); } // #MovimentoEspecial Roque menor if (peca 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 = TabuleiroPartida.RetirarPeca(origemTorre); torre.IncrementarMovimento(); TabuleiroPartida.ColocarPeca(torre, destinoTorre); } // #MovimentoEspecial En Passant if (peca is Peao) { if (origem.Coluna != destino.Coluna && PecaCapturada == null) { Posicao posicaoPeao; posicaoPeao = (peca.Cor == Cor.Branca) ? new Posicao(destino.Linha + 1, destino.Coluna) : new Posicao(destino.Linha - 1, destino.Coluna); PecaCapturada = TabuleiroPartida.RetirarPeca(posicaoPeao); _capturadas.Add(PecaCapturada); } } return(PecaCapturada); }
public void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca peca = TabuleiroPartida.RetirarPeca(destino); peca.DecrementarMovimento(); if (pecaCapturada != null) { TabuleiroPartida.ColocarPeca(pecaCapturada, destino); _capturadas.Remove(pecaCapturada); } // #MovimentoEspecial Roque maior (revertendo) if (peca 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 = TabuleiroPartida.RetirarPeca(destinoTorre); torre.DecrementarMovimento(); TabuleiroPartida.ColocarPeca(torre, origemTorre); } // #MovimentoEspecial Roque menor (revertendo) if (peca 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 = TabuleiroPartida.RetirarPeca(destinoTorre); torre.DecrementarMovimento(); TabuleiroPartida.ColocarPeca(torre, origemTorre); } // #MovimentoEspecial En Passant (revertendo) if (peca is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant) { Peca peao = TabuleiroPartida.RetirarPeca(destino); Posicao posicaoPeao = (peca.Cor == Cor.Branca) ? new Posicao(3, destino.Coluna) : new Posicao(4, destino.Coluna); TabuleiroPartida.ColocarPeca(peao, posicaoPeao); } } TabuleiroPartida.ColocarPeca(peca, origem); }
public void RealizarJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); Peca pecaPeao = TabuleiroPartida.PecaPosition(destino); if (EstaEmXeque(JogadorAtual)) { DesfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } //#MovimentoEspecial Promover Peao if (pecaPeao is Peao) { if ((pecaPeao.Cor == Cor.Branca && destino.Linha == 0) || pecaPeao.Cor == Cor.Preta && destino.Linha == 7) { pecaPeao = TabuleiroPartida.RetirarPeca(destino); _pecas.Remove(pecaPeao); Peca dama = new Dama(TabuleiroPartida, pecaPeao.Cor); TabuleiroPartida.ColocarPeca(dama, destino); } } JogadorEmXeque = (EstaEmXeque(CorAdversaria(JogadorAtual))) ? true : false; if (TesteXequemate(CorAdversaria(JogadorAtual))) { Terminada = true; } else { Turno++; MudarCorJogador(); } // #MovimentoEspecial En Passant VulneravelEnPassant = (pecaPeao is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)) ? pecaPeao : null; }
public void ColocarNovaPeca(char coluna, int linha, Peca peca) { TabuleiroPartida.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosition()); _pecas.Add(peca); }