public Peca executaMovimento(Posicao origem, Posicao destino) { Peca p = Tabuleiro.retirarPeca(origem); p.incrementarQteMovimentos(); Peca pecaCapturada = Tabuleiro.retirarPeca(destino); Tabuleiro.colocarPeca(p, destino); if (pecaCapturada != null) { Capturadas.Add(pecaCapturada); } // #JogadaEspecial Roque pequeno if (p is Rei && destino.Coluna == origem.Coluna + 2) { Posicao origemT = new Posicao(origem.Linha, origem.Coluna + 3); Posicao destinoT = new Posicao(origem.Linha, origem.Coluna + 1); Peca Torre = Tabuleiro.retirarPeca(origemT); Torre.incrementarQteMovimentos(); Tabuleiro.colocarPeca(Torre, destinoT); } // #JogadaEspecial Roque grande if (p is Rei && destino.Coluna == origem.Coluna - 2) { Posicao origemT = new Posicao(origem.Linha, origem.Coluna - 4); Posicao destinoT = new Posicao(origem.Linha, origem.Coluna - 1); Peca Torre = Tabuleiro.retirarPeca(origemT); Torre.incrementarQteMovimentos(); Tabuleiro.colocarPeca(Torre, destinoT); } // Jogadaespecial en passant if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == null) { Posicao posPeao; if (p.Cor == Cor.Branca) { posPeao = new Posicao(destino.Linha + 1, destino.Coluna); } else { posPeao = new Posicao(destino.Linha - 1, destino.Coluna); } pecaCapturada = Tabuleiro.retirarPeca(posPeao); Capturadas.Add(pecaCapturada); } } return(pecaCapturada); }
public void realizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = executaMovimento(origem, destino); if (estaEmXeque(JogadorAtual)) { desfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode ser por em Xeque!"); } Peca p = Tabuleiro.peca(destino); // #JogadaEspecial Promoção if (p is Peao) { if (p.Cor == Cor.Branca && destino.Linha == 0 || p.Cor == Cor.Preta && destino.Linha == 7) { p = Tabuleiro.retirarPeca(destino); Pecas.Remove(p); Peca dama = new Dama(Tabuleiro, p.Cor); Tabuleiro.colocarPeca(dama, destino); Pecas.Add(dama); } } if (estaEmXeque(adversaria(JogadorAtual))) { Xeque = true; } else { Xeque = 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)) { VulneravelEnPassant = p; } else { VulneravelEnPassant = null; } }
public void desfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca p = Tabuleiro.retirarPeca(destino); p.decrementarQteMovimentos(); if (pecaCapturada != null) { Tabuleiro.colocarPeca(pecaCapturada, destino); Capturadas.Remove(pecaCapturada); } Tabuleiro.colocarPeca(p, origem); // #JogadaEspecial Roque pequeno if (p is Rei && destino.Coluna == origem.Coluna + 2) { Posicao origemT = new Posicao(origem.Linha, origem.Coluna + 3); Posicao destinoT = new Posicao(origem.Linha, origem.Coluna + 1); Peca Torre = Tabuleiro.retirarPeca(destinoT); Torre.decrementarQteMovimentos(); Tabuleiro.colocarPeca(Torre, origemT); } // #JogadaEspecial Roque grande if (p is Rei && destino.Coluna == origem.Coluna - 2) { Posicao origemT = new Posicao(origem.Linha, origem.Coluna - 4); Posicao destinoT = new Posicao(origem.Linha, origem.Coluna - 1); Peca Torre = Tabuleiro.retirarPeca(destinoT); Torre.decrementarQteMovimentos(); Tabuleiro.colocarPeca(Torre, origemT); } // Jogadaespecial en passant if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant) { Peca peao = Tabuleiro.retirarPeca(destino); Posicao posPeao; if (p.Cor == Cor.Branca) { posPeao = new Posicao(3, destino.Coluna); } else { posPeao = new Posicao(4, destino.Coluna); } Tabuleiro.colocarPeca(peao, posPeao); } } }
public void colocarNovaPeca(char coluna, int linha, Peca peca) { Tabuleiro.colocarPeca(peca, new PosicaoXadrez(coluna, linha).toPosicao()); Pecas.Add(peca); }