public override bool movimentospossiveis(tabuleiro tab, Posicao origem, Posicao destino) { if (origem.Linha == destino.Linha || origem.Coluna == destino.Coluna) { return(false); } Posicao pos = new Posicao(origem.Linha, origem.Coluna); while (pos.Linha != destino.Linha && pos.Coluna != destino.Coluna) { if (destino.Linha > origem.Linha) { pos.Linha++; } else { pos.Linha--; } if (destino.Coluna > origem.Coluna) { pos.Coluna++; } else { pos.Coluna--; } if (!tab.PosicaoValida(pos)) { return(false); } if (tab.peca(pos.Linha, pos.Coluna) == null) { if (pos.Linha == destino.Linha && pos.Coluna == destino.Coluna) { return(true); } else { continue; } } if (tab.peca(pos.Linha, pos.Coluna).cor != tab.peca(origem.Linha, origem.Coluna).cor&& pos.Linha == destino.Linha && pos.Coluna == destino.Coluna) { return(true); } else { return(false); } } return(false); }
public override bool movimentospossiveis(tabuleiro tab, Posicao origem, Posicao destino) { Posicao pos = new Posicao(tab.linhas, tab.colunas); /* Testar Rock Pequeno */ if (!partida.emcheque && destino.Linha == origem.Linha && destino.Coluna == origem.Coluna + 2 && tab.pecas[origem.Linha, origem.Coluna].qteMovimentos == 0 && tab.pecas[origem.Linha, origem.Coluna + 3] is Torre && tab.pecas[origem.Linha, origem.Coluna + 3].qteMovimentos == 0 && tab.pecas[origem.Linha, origem.Coluna + 1] == null && tab.pecas[origem.Linha, origem.Coluna + 2] == null) { return(true); } /* Testar Roque Grande */ if (!partida.emcheque && destino.Linha == origem.Linha && destino.Coluna == origem.Coluna - 2 && tab.pecas[origem.Linha, origem.Coluna].qteMovimentos == 0 && tab.pecas[origem.Linha, origem.Coluna - 4] is Torre && tab.pecas[origem.Linha, origem.Coluna - 4].qteMovimentos == 0 && tab.pecas[origem.Linha, origem.Coluna - 1] == null && tab.pecas[origem.Linha, origem.Coluna - 2] == null && tab.pecas[origem.Linha, origem.Coluna - 3] == null) { return(true); } /* Logica Geral */ for (int i = origem.Linha - 1; i < origem.Linha + 2; i++) { for (int j = origem.Coluna - 1; j < origem.Coluna + 2; j++) { pos.Linha = i; pos.Coluna = j; if (!tab.PosicaoValida(pos)) { continue; } if (i == destino.Linha && j == destino.Coluna) { if (tab.pecas[i, j] == null || tab.pecas[i, j].cor != tab.pecas[origem.Linha, origem.Coluna].cor) { return(true); } else { return(false); } } } } return(false); }
public override bool movimentospossiveis(tabuleiro tab, Posicao origem, Posicao destino) { if (origem.Linha != destino.Linha && origem.Coluna != destino.Coluna) { return(false); } Posicao pos = new Posicao(tab.linhas, tab.colunas); if (origem.Linha == destino.Linha) { /* * Pesquisa Horizontal */ pos.Linha = origem.Linha; pos.Coluna = origem.Coluna; while (pos.Coluna != destino.Coluna) { if (destino.Coluna > origem.Coluna) { pos.Coluna = pos.Coluna + 1; } else { pos.Coluna = pos.Coluna - 1; } if (!tab.PosicaoValida(pos)) { continue; } if (tab.peca(pos.Linha, pos.Coluna) == null) { continue; } if (tab.peca(pos.Linha, pos.Coluna).cor != tab.peca(origem.Linha, origem.Coluna).cor&& pos.Coluna == destino.Coluna) { return(true); } else { return(false); } } return(true); } /* * Pesquisa Vertical */ pos.Linha = origem.Linha; pos.Coluna = origem.Coluna; while (pos.Linha != destino.Linha) { if (destino.Linha > origem.Linha) { pos.Linha = pos.Linha + 1; } else { pos.Linha = pos.Linha - 1; } if (!tab.PosicaoValida(pos)) { continue; } if (tab.peca(pos.Linha, pos.Coluna) == null) { continue; } if (tab.peca(pos.Linha, pos.Coluna).cor != tab.peca(origem.Linha, origem.Coluna).cor&& pos.Linha == destino.Linha) { return(true); } else { return(false); } } return(true); }