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 xeque!"); } Peca p = Tabuleiro.peca(destino); //#jogada especial promocao 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 (EstaEmCheque(Adversaria(JogadorAtual))) { Xeque = true; } else { Xeque = false; } if (TestaXequeMate(Adversaria(JogadorAtual))) { Terminada = true; } else { Turno++; MudaJogador(); } //#jogada especial en passant if (p is Peao && (destino.Linha == origem.Linha - 2) || destino.Linha == origem.Linha + 2) { VulneravelEnPassant = p; } else { VulneravelEnPassant = null; } }
static void Main(string[] args) { try { Tabuleiro tab = new Tabuleiro(8, 8); tab.ColocarPeca(new Torre(tab, Cor.Preta), new Posicao(0, 0)); tab.ColocarPeca(new Torre(tab, Cor.Preta), new Posicao(1, 3)); tab.ColocarPeca(new Rei(tab, Cor.Branca), new Posicao(0, 1)); Tela.imprimirTabuleiro(tab); } catch (TabuleiroException e) { Console.WriteLine(e.Message); } Console.ReadLine(); }
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); }
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); } //#jogada especial 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 T = Tabuleiro.RetirarPeca(OrigemT); T.IncrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, DestinoT); } //#jogada especial 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 T = Tabuleiro.RetirarPeca(OrigemT); T.IncrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, DestinoT); } //#jogada especial 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 = Tabuleiro.RetirarPeca(posP); Capturadas.Add(PecaCapturada); } } return(PecaCapturada); }
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); }
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); } // #Jogada especial 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 T = Tabuleiro.RetirarPeca(origemT); T.IncrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, destinoT); } // #Jogada especial 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 T = Tabuleiro.RetirarPeca(origemT); T.IncrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, destinoT); } if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == null) { Posicao posicaoP; if (p.Cor == Cor.Branca) { posicaoP = new Posicao(destino.Linha + 1, destino.Coluna); } else { posicaoP = new Posicao(destino.Linha - 1, destino.Coluna); } pecaCapturada = Tabuleiro.RetirarPeca(posicaoP); Capturadas.Add(pecaCapturada); } } return(pecaCapturada); }
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); // #Jogada especial 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 T = Tabuleiro.RetirarPeca(destinoT); T.DecrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, origemT); } // #Jogada especial 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 T = Tabuleiro.RetirarPeca(destinoT); T.DecrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, origemT); } // #Jogada especial En Passant if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant) { Peca peao = Tabuleiro.RetirarPeca(destino); Posicao posicaoP; if (peao.Cor == Cor.Branca) { posicaoP = new Posicao(3, destino.Coluna); } else { posicaoP = new Posicao(4, destino.Coluna); } Tabuleiro.ColocarPeca(peao, posicaoP); } } }
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); 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 T = Tabuleiro.RetirarPeca(DestinoT); T.DecrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, OrigemT); } //desfazendo #jogada especial 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 T = Tabuleiro.RetirarPeca(DestinoT); T.DecrementarQteMovimentos(); Tabuleiro.ColocarPeca(T, OrigemT); } //desfazendo #jogada especial en passant if (p is Peao) { if (origem.Coluna != destino.Coluna && PecaCapturada == null) { Peca peao = Tabuleiro.RetirarPeca(destino); Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(3, destino.Coluna); } else { posP = new Posicao(4, destino.Coluna); } Tabuleiro.ColocarPeca(peao, posP); } } }
public Peca ExecutarMovimento(Posicao origem, Posicao destino) { Peca pecaDoTurnoAtual = Tabuleiro.RetirarPeca(origem); pecaDoTurnoAtual.IncrementarQuantidadeDeMovimentos(); Peca pecaCapturada = Tabuleiro.RetirarPeca(destino); Tabuleiro.ColocarPeca(pecaDoTurnoAtual, destino); if (pecaCapturada != null) { PecasCapturadas.Add(pecaCapturada); } //#JogadaEspecial Roque Pequeno if (pecaDoTurnoAtual 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 = Tabuleiro.RetirarPeca(origemTorre); torre.IncrementarQuantidadeDeMovimentos(); Tabuleiro.ColocarPeca(torre, destinoTorre); } //#JogadaEspecial Roque Grande if (pecaDoTurnoAtual 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 = Tabuleiro.RetirarPeca(origemTorre); torre.IncrementarQuantidadeDeMovimentos(); Tabuleiro.ColocarPeca(torre, destinoTorre); } //#JogadaEspecial En Passant if (pecaDoTurnoAtual is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == null) { int complementoParaLinhaDestino = pecaDoTurnoAtual.Cor == Cor.Branca ? +1 : -1; Posicao posPeao = new Posicao(destino.Linha + complementoParaLinhaDestino, destino.Coluna); pecaCapturada = Tabuleiro.RetirarPeca(posPeao); PecasCapturadas.Add(pecaCapturada); } } return(pecaCapturada); }
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); }
private void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca pecaDoDestino = Tabuleiro.RetirarPeca(destino); pecaDoDestino.DecrementarQuantidadeDeMovimentos(); if (pecaCapturada != null) { Tabuleiro.ColocarPeca(pecaCapturada, destino); PecasCapturadas.Remove(pecaCapturada); } Tabuleiro.ColocarPeca(pecaDoDestino, origem); //#JogadaEspecial Roque Pequeno if (pecaDoDestino 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 = Tabuleiro.RetirarPeca(destinoTorre); torre.DecrementarQuantidadeDeMovimentos(); Tabuleiro.ColocarPeca(torre, origemTorre); } //#JogadaEspecial Roque Grande if (pecaDoDestino 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 = Tabuleiro.RetirarPeca(destinoTorre); torre.DecrementarQuantidadeDeMovimentos(); Tabuleiro.ColocarPeca(torre, origemTorre); } //#JogadaEspecial En Passant if (pecaDoDestino is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == PecaVuneravelAEnPassant) { Peca peao = Tabuleiro.RetirarPeca(destino); int linhaOriginal = pecaDoDestino.Cor == Cor.Branca ? 3 : 4; Posicao posPeao = new Posicao(linhaOriginal, destino.Coluna); Tabuleiro.ColocarPeca(peao, posPeao); } } }
public void RealizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); Peca pecaMovida = Tabuleiro.Peca(destino); if (EstaEmXeque(JogadorAtual)) { DesfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } //#JogadaEspecial Promoção if (pecaMovida is Peao) { if ((pecaMovida.Cor == Cor.Branca && destino.Linha == 0) || (pecaMovida.Cor == Cor.Preta && destino.Linha == 7)) { pecaMovida = Tabuleiro.RetirarPeca(destino); PecasEmJogo.Remove(pecaMovida); Peca dama = new Dama(Tabuleiro, pecaMovida.Cor); Tabuleiro.ColocarPeca(dama, destino); PecasEmJogo.Add(dama); } } EmXeque = EstaEmXeque(CorAdversariaACor(JogadorAtual)); if (TesteXequeMate(CorAdversariaACor(JogadorAtual))) { Terminada = true; } else { Turno++; MudaJogador(); } //#JogadaEspecial En Passant bool isVuneravelEnPassant = pecaMovida is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2); PecaVuneravelAEnPassant = isVuneravelEnPassant ? pecaMovida : null; }
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(); } }
public void ColocarNovaPeca(char coluna, int linha, Peca peca) { Tabuleiro.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosicao()); Pecas.Add(peca); }
private void InserirPecaPosicao(char coluna, int linha, Peca peca) { Tabuleiro.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosicao()); _pecasNaPartida.Add(peca); }