public void Promocao(Peca peca) { Posicao posicao = peca.Posicao; Tabuleiro.RemoverPeca(posicao); _pecasNaPartida.Remove(peca); Peca dama = new Dama(peca.Cor, Tabuleiro); Tabuleiro.ColocarPeca(dama, posicao); _pecasNaPartida.Add(dama); }
private void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca peca = Tabuleiro.RemoverPeca(destino); peca.DecrementarQtdMovimentos(); if (pecaCapturada != null) { Tabuleiro.ColocarPeca(pecaCapturada, destino); _pecasCapturadas.Remove(pecaCapturada); } Tabuleiro.ColocarPeca(peca, origem); }
private Peca ExecutarMovimento(Posicao origem, Posicao destino) { Peca peca = Tabuleiro.RemoverPeca(origem); peca.IncrementarQtdMovimentos(); Peca pecaCapturada = Tabuleiro.RemoverPeca(destino); Tabuleiro.ColocarPeca(peca, destino); if (pecaCapturada != null) { _pecasCapturadas.Add(pecaCapturada); } return(pecaCapturada); }
public void NovaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); if (EstaEmXeque()) { DesfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("UM JOGADOR NÃO PODE SE COLOCAR EM XEQUE!"); } Peca peca = Tabuleiro.ObterPeca(destino); //Teste Jogada Especial "Promoção" (trocar peão por dama se chegar ao outro lado do tabuleiro) if (peca is Peao) { if ((peca.Cor == Cor.Azul && destino.Linha == 7) || (peca.Cor == Cor.Vermelho && destino.Linha == 0)) { peca = Tabuleiro.RemoverPeca(destino); _pecasNaPartida.Remove(peca); Peca dama = new Dama(peca.Cor, Tabuleiro); Tabuleiro.ColocarPeca(dama, destino); _pecasNaPartida.Add(dama); Tela.JogadaEspecialPromocao(); } } AlteraJogador(); if (EstaXequeMate()) { Terminada = true; } else { IncrementaTurno(); } }