public void realizaJogada(Posicao origem, Posicao destino) { var p = tabuleiro.peca(origem); var pecaCapturada = ExecultaMovimento(origem, destino); //TODO jogada especial promocao if (p is Peao) { if ((p.cor == Cor.branco && destino.linha == 0) || (p.cor == Cor.preto && destino.linha == 7)) { p = tabuleiro.retirarPeca(destino); pecas.Remove(p); Peca rainha = new Rainha(tabuleiro, p.cor); tabuleiro.colocarPeca(rainha, destino); pecas.Add(rainha); } } if (estaEmXeque(_jogadorAtual)) { desfazMovimento(origem, destino, pecaCapturada); throw new ExceptionUtil("Você não pode se colocar em xeque!"); } if (estaEmXeque(adversaria(_jogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequeMate(adversaria(_jogadorAtual))) { terminada = true; } else { _turno++; mudarJogaodr(); } //TODO jogada especial En Passant if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vulnevaralEnPassant = p; } else { vulnevaralEnPassant = null; } }
public void RealizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutaMovimento(origem, destino); if (EstarEmXeque(JogadorAtual)) { DesfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em Xeque!"); } Peca peca = Tabuleiro.Peca(destino); // #jogadaespecial promocao 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 rainha = new Rainha(Tabuleiro, peca.Cor); Tabuleiro.ColocarPeca(rainha, destino); Pecas.Add(rainha); } } if (EstarEmXeque(Adversaria(JogadorAtual))) { Xeque = true; } else { Xeque = false; } if (TesteXequeMate(Adversaria(JogadorAtual))) { Terminada = true; } else { Turno++; MudaJogador(); } // #jogadaespecial en passant if (peca is Peao && destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2) { VulneravelEnPassant = peca; } else { VulneravelEnPassant = null; } }
public Peca PromoverPeao(Movimento m, int tipoNovaPeca) { int indicePeao = 0; Peca peaoAtual = m.destino.PecaAtual; //tipoNovaPeca = FUNÇÂOQUEUSAINTERFACEPARADEFINIR (TODO) // acha a posicao do peao no array de peças do jogador foreach (Peca p in peaoAtual.jDono.conjuntoPecas) { if (p == peaoAtual) { break; } indicePeao++; } Peca novaPeca; //se 1, então vira rainha //se 2, então vira torre //se 3, então vira cavalo //senao, então vira Bispo if (tipoNovaPeca == 1) { novaPeca = new Rainha(peaoAtual.jDono); } else if (tipoNovaPeca == 2) { novaPeca = new Torre(peaoAtual.jDono); } else if (tipoNovaPeca == 3) { novaPeca = new Cavalo(peaoAtual.jDono); } else { novaPeca = new Bispo(peaoAtual.jDono); } //define a posição e salva a peça na casa e no jogador novaPeca.jDono.conjuntoPecas[indicePeao] = novaPeca; m.destino.ColocarPeca(novaPeca); novaPeca.CasaAtual = m.destino; novaPeca.UltimoTurnoMovido = this.UltimoTurnoMovido; return(novaPeca); }
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 peca = Tabuleiro.GetPeca(destino); // Jogada especial // Promoção if (peca is Peao) { if ((peca.Cor == Cor.Branco && destino.Linha == 0) || (peca.Cor == Cor.Preto && destino.Linha == 7)) { peca = Tabuleiro.RetirarPeca(destino); _pecas.Remove(peca); Peca rainha = new Rainha(Tabuleiro, peca.Cor); Tabuleiro.ColocarPeca(rainha, destino); } } Xeque = EstaEmXeque(Adversário(JogadorAtual)); if (XequeMate(Adversário(JogadorAtual))) { Terminada = true; } else { Turno++; AlternaJogador(); } }