public void realizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = executarMovimento(origem, destino); if (estaEmCheque(jogadorAtual)) { desfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em cheque !"); } Peca p = tab.peca(destino); // #jogada especial promoção if (p is Peao) { if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7)) { p = tab.retirarPeca(destino); pecas.Remove(p); Peca rainha = new Rainha(tab, p.cor); tab.colocarPeca(rainha, destino); pecas.Add(rainha); } } if (estaEmCheque(pecaAdversaria(jogadorAtual))) { xeque = true; } else { xeque = false; } if (testarChequeMate(pecaAdversaria(jogadorAtual))) { terminada = true; } else { turno++; mudaJogador(); } p = tab.peca(destino); // #jogada especial en passant if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vulneravelEnPassant = p; } else { vulneravelEnPassant = null; } }
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 se colocar em XEQUE!"); } Peca p = Tab.Peca(destino); //#JogadaEspecial Promocao if (p is Peao) { if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7)) { p = Tab.RetirarPeca(destino); _pecas.Remove(p); Peca dama = new Rainha(Tab, p.Cor); Tab.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)) { VuneravelEnPassant = p; } else { VuneravelEnPassant = null; } }
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 se colocar em xeque!"); } Peca p = tab.peca(destino); //jogadaEspecial: promocao if (p is Peao) { if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7)) { p = tab.retirarPeca(destino); pecas.Remove(p); //verificar todas as outras opções possiveis depois Peca dama = new Rainha(tab, p.cor); tab.colocarPeca(dama, destino); pecas.Add(dama); } } if (estaEmXeque(adversario(jogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequeMate(adversario(jogadorAtual))) { terminada = true; } else { turno++; mudaJogador(); } //jogadaEspecial: em passant if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vuneravelEmPassant = p; } else { vuneravelEmPassant = null; } }
public void RelizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutaMovimento(origem, destino); if (EstahEmXeque(JogadorAtual)) { DesfazerMoviemnto(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } PartidaEmXeque = EstahEmXeque(Adversaria(JogadorAtual)); Peca peca = Tabuleiro.Peca(destino); if (peca is Peao) { if ((peca.Cor == Cor.Branca && destino.Linha == 0) || (peca.Cor == Cor.Preta && destino.Linha == 7)) { peca = Tabuleiro.RetirarPeca(destino); Pecas.Remove(peca); Peca dama = new Rainha(Tabuleiro, peca.Cor); Tabuleiro.ColocarPeca(dama, destino); Pecas.Add(dama); } } if (TestarXequeMate(Adversaria(JogadorAtual))) { PartidaTerminada = true; } else { Turno++; MudarJogador(); } //teste en passant VulneravelEmPassant = (peca is Peao && ((destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2))) ? peca : null; }
// private void colocarPecas() // { // colocarNovaPeca('c', 1, new Torre(tabuleiro, Cor.Branca)); // colocarNovaPeca('h', 7, new Torre(tabuleiro, Cor.Branca)); // colocarNovaPeca('d', 2, new Bispo(tabuleiro, Cor.Branca)); // colocarNovaPeca('e', 2, new Bispo(tabuleiro, Cor.Branca)); // colocarNovaPeca('e', 1, new Cavalo(tabuleiro, Cor.Branca)); // colocarNovaPeca('d', 1, new Rei(tabuleiro, Cor.Branca)); // colocarNovaPeca('a', 8, new Rei(tabuleiro, Cor.Preta)); // colocarNovaPeca('b', 8, new Torre(tabuleiro, Cor.Preta)); // } /// <summary> /// Metodo que executa um movimento dada um posicao de origem e destino /// Este metodo tbm valida se o movimento ti levou a uma situacao de xeque /// </summary> /// <param name="origem"></param> /// <param name="destino"></param> public void realizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutaMovimento(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 if (pecaMovida is Peao) { if ((pecaMovida.cor == Cor.Branca && destino.linha == 0) || (pecaMovida.cor == Cor.Preta && destino.linha == 8)) { pecaMovida = tabuleiro.removerPeca(destino); pecas.Remove(pecaMovida); Peca dama = new Rainha(tabuleiro, pecaMovida.cor); tabuleiro.adicionarPeca(dama, destino); pecas.Add(dama); } } if (estaEmXeque(adversario(jogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequeMate(adversario(jogadorAtual))) { terminada = true; } else { turno++; mudaJoador(); } // #jogadaEspecial = en passant if (pecaMovida is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vuneralvelEnPassant = pecaMovida; } else { vuneralvelEnPassant = null; } // jogadaEspecial en passant if (pecaMovida is Peao) { if (origem.coluna != destino.coluna && pecaCapturada == null) { Posicao posP; if (pecaMovida.cor == Cor.Branca) { posP = new Posicao(destino.linha + 1, destino.coluna); } else { posP = new Posicao(destino.linha - 1, destino.coluna); } pecaCapturada = tabuleiro.removerPeca(posP); capturadas.Add(pecaCapturada); } } }