public bool testeXequemate(cor cor) { if (!estaEmXeque(cor)) { return(false); } foreach (peca x in pecasEmJogo(cor)) { bool[,] mat = x.movimentosPossiveis(); for (int i = 0; i < tab.linhas; i++) { for (int j = 0; j < tab.colunas; j++) { if (mat[i, j]) { Posicao origem = x.posicao; Posicao destino = new Posicao(i, j); peca pecaCapturada = executaMovimento(origem, destino); bool testeXeque = estaEmXeque(cor); desfazMovimento(origem, destino, pecaCapturada); if (!testeXeque) { return(false); } } } } } return(true); }
public void colocarPeca(peca p, Posicao pos) { if (existePeca(pos)) { throw new tabuleiroException("Já existe uma peça nessa posição!"); } pecas[pos.linha, pos.coluna] = p; p.posicao = pos; }
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 dama(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)) { vulneravelEnPassant = p; } else { vulneravelEnPassant = null; } }
public void Update(Guid Idpeca, peca pecaNew) { peca peca = examregisterContext.peca.Where(a => a.idpeca == Idpeca).FirstOrDefault(); peca.nome_ = pecaNew.nome_; peca.inativo = pecaNew.inativo; peca.idexterno = pecaNew.idexterno; examregisterContext.SaveChanges(); }
public peca executaMovimento(Posicao origem, Posicao destino) { peca p = tab.retirarPeca(origem); p.incrementarQteMovimentos(); peca pecaCapturada = tab.retirarPeca(destino); tab.colocarPeca(p, destino); if (pecaCapturada != null) { capturadas.Add(pecaCapturada); } // #jogadaespecial 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 = tab.retirarPeca(origemT); T.incrementarQteMovimentos(); tab.colocarPeca(T, destinoT); } // #jogadaespecial 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 = tab.retirarPeca(origemT); T.incrementarQteMovimentos(); tab.colocarPeca(T, destinoT); } // #jogadaespecial 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 = tab.retirarPeca(posP); capturadas.Add(pecaCapturada); } } return(pecaCapturada); }
public peca retirarPeca(Posicao pos) { if (peca(pos) == null) { return(null); } peca aux = peca(pos); aux.posicao = null; pecas[pos.linha, pos.coluna] = null; return(aux); }
public PartidaDeXadrez() { tab = new Tabuleiro(8, 8); turno = 1; jogadorAtual = cor.Branca; terminada = false; xeque = false; vulneravelEnPassant = null; pecas = new HashSet <peca>(); capturadas = new HashSet <peca>(); colocarPecas(); }
public void desfazMovimento(Posicao origem, Posicao destino, peca pecaCapturada) { peca p = tab.retirarPeca(destino); p.decrementarQteMovimentos(); if (pecaCapturada != null) { tab.colocarPeca(pecaCapturada, destino); capturadas.Remove(pecaCapturada); } tab.colocarPeca(p, origem); // #jogadaespecial 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 = tab.retirarPeca(destinoT); T.decrementarQteMovimentos(); tab.colocarPeca(T, origemT); } // #jogadaespecial 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 = tab.retirarPeca(destinoT); T.decrementarQteMovimentos(); tab.colocarPeca(T, origemT); } // #jogadaespecial en passant if (p is peao) { if (origem.coluna != destino.coluna && pecaCapturada == vulneravelEnPassant) { peca peao = tab.retirarPeca(destino); Posicao posP; if (p.cor == cor.Branca) { posP = new Posicao(3, destino.coluna); } else { posP = new Posicao(4, destino.coluna); } tab.colocarPeca(peao, posP); } } }
public void ExecutaMovimento(Posicao origem, Posicao destino) { peca p = tab.retirarPeca(origem); p.IncrementarQteMovimentos(); peca pecaCapturada = tab.retirarPeca(destino); tab.colocarPeca(p, destino); //PEGA AS PEÇAS CAPTURADAS if (pecaCapturada != null) { capturadas.Add(pecaCapturada); } }
public bool estaEmXeque(cor cor) { peca R = rei(cor); if (R == null) { throw new tabuleiroException("Não tem rei da cor" + cor + "no tabuleiro!"); } foreach (peca x in pecasEmJogo(adversaria(cor))) { bool[,] mat = x.movimentosPossiveis(); if (mat[R.posicao.linha, R.posicao.coluna]) { return(true); } } return(false); }
public static void imprimirPeca(peca peca) { if (peca == null) { Console.Write("- "); } else { if (peca.cor == cor.Branca) { Console.Write(peca); } else { ConsoleColor aux = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(peca); Console.ForegroundColor = aux; } Console.Write(" "); } }
private bool podeMover(Posicao pos) { peca p = tab.peca(pos); return(p == null || p.cor != cor); }
public void colocarNovaPeca(char coluna, int linha, peca peza) { tab.colocarPeca(peza, new PosicaoXadrez(coluna, linha).toPosicao()); pecas.Add(peza); }
private bool existeInimigo(Posicao pos) { peca p = tab.peca(pos); return(p != null && p.cor != cor); }
private bool testeTorreParaRoque(Posicao pos) { peca p = tab.peca(pos); return(p != null && p is torre && p.cor == cor && p.qteMovimentos == 0); }
public void Insert(peca peca) { examregisterContext.peca.Add(peca); examregisterContext.SaveChanges(); }