public Peca ExecutarMovimento(Posicao origem, Posicao destino) { Peca pecaMovimentada = Tabuleiro.RetirarPeca(origem); pecaMovimentada.IncrementarQtdMovimentos(); Peca pecaCapturada = Tabuleiro.RetirarPeca(destino); Tabuleiro.InserirPeca(pecaMovimentada, destino); if (pecaCapturada != null) { PecasCapturadas.Add(pecaCapturada); } // #JogadaEspecial Roque Pequeno if (pecaMovimentada 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 tempTorre = Tabuleiro.RetirarPeca(origemTorre); tempTorre.IncrementarQtdMovimentos(); Tabuleiro.InserirPeca(tempTorre, destinoTorre); } // #JogadaEspecial Roque Grande if (pecaMovimentada 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 tempTorreT = Tabuleiro.RetirarPeca(origemTorre); tempTorreT.IncrementarQtdMovimentos(); Tabuleiro.InserirPeca(tempTorreT, destinoTorre); } // #JogadaEspecial En Passant if (pecaMovimentada is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == null) { Posicao tempPos; tempPos = (pecaMovimentada.Cor == Cor.branca)? new Posicao(destino.Linha + 1, destino.Coluna): new Posicao(destino.Linha - 1, destino.Coluna); pecaCapturada = Tabuleiro.RetirarPeca(tempPos); PecasCapturadas.Add(pecaCapturada); } } return(pecaCapturada); }
public void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca pecaMovimentada = Tabuleiro.RetirarPeca(destino); pecaMovimentada.DecrementarQtdMovimentos(); if (pecaCapturada != null) { Tabuleiro.InserirPeca(pecaCapturada, destino); PecasCapturadas.Remove(pecaCapturada); } Tabuleiro.InserirPeca(pecaMovimentada, origem); // #JogadaEspecial Roque Pequeno if (pecaMovimentada 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 tempTorre = Tabuleiro.RetirarPeca(destinoTorre); tempTorre.DecrementarQtdMovimentos(); Tabuleiro.InserirPeca(tempTorre, origemTorre); } // #JogadaEspecial Roque Grande if (pecaMovimentada 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 tempTorre = Tabuleiro.RetirarPeca(destinoTorre); tempTorre.DecrementarQtdMovimentos(); Tabuleiro.InserirPeca(tempTorre, origemTorre); } // #JogadaEspecial En Passant if (pecaMovimentada is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant) { Peca peao = Tabuleiro.RetirarPeca(destino); Posicao tempPos; tempPos = (pecaMovimentada.Cor == Cor.branca)? new Posicao(3, destino.Coluna): new Posicao(4, destino.Coluna); Tabuleiro.InserirPeca(peao, tempPos); } } }
public void RealizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); Peca temPeca = Tabuleiro.GetPeca(destino); if (EstaEmXeque(JogadorAtual)) { DesfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("\nPara de pensar com a bunda!!\nVocê não pode se colocar em Xeque!!"); } // #jogadaespecial promocao if (temPeca is Peao) { if ((temPeca.Cor == Cor.branca && destino.Linha == 0) || (temPeca.Cor == Cor.preta && destino.Linha == 7)) { temPeca = Tabuleiro.RetirarPeca(destino); Pecas.Remove(temPeca); Peca dama = new Queen(temPeca.Cor, Tabuleiro); Tabuleiro.InserirPeca(dama, destino); Pecas.Add(dama); } } Xeque = (EstaEmXeque(Adversario(JogadorAtual))) ? true : false; if (XequeMate(Adversario(JogadorAtual))) { Terminada = true; } else { Turno++; TrocaJogador(); } // #jogadaespecial en passant VulneravelEnPassant = (temPeca is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)) ? temPeca : null; }
public void ColocarNovaPeca(int linha, int coluna, Peca peca) { Tabuleiro.InserirPeca(peca, new Posicao(linha, coluna)); Pecas.Add(peca); }