function canMove($x, $y) { $direcoes = diagonalMove($this->getPosX() - $x, $this->getPosY() - $y); if ($this->getCor() && $direcoes[1] < 0 || !$this->getCor() && $direcoes[1] > 0) { return True; } }
public function jogaPeca($prevX, $prevY, $aftX, $aftY) { //Testa a condicao de se o campo de antes possui uma peca dentro dele. if (!PecaAbstrata::isValidPosition($prevX, $prevY) || $this->getPeca($prevX, $prevY) == NULL) { throw new TabuleiroException("O campo de origem nao tem peca nenhuma."); } if (!PecaAbstrata::isValidPosition($aftX, $aftY) || $this->getPeca($aftX, $aftY) !== NULL) { throw new TabuleiroException("O campo de destino ja esta ocupado."); } $direcoes = $this->isComivel($this->getPeca($prevX, $prevY)); /** * testa se a direcao do movimento � possivel , de acordo com a peca que tem que ser * comida */ $hasMove = False; $condicao1 = is_array($direcoes[0]) && PecaAbstrata::isValidPosition($direcoes[0][0], $direcoes[0][1]); $condicao2 = is_array($direcoes[1]) && PecaAbstrata::isValidPosition($direcoes[1][0], $direcoes[1][1]); $condicao3 = is_array($direcoes[2]) && PecaAbstrata::isValidPosition($direcoes[2][0], $direcoes[2][1]); $condicao4 = is_array($direcoes[3]) && PecaAbstrata::isValidPosition($direcoes[3][0], $direcoes[3][1]); if ($condicao1 && !$hasMove) { if ($direcoes[0][0] == $aftX && $direcoes[0][1] == $aftY) { $hasMove = True; $this->movePeca($prevX, $prevY, $aftX, $aftY); $this->decrementaPecas($aftX - 1, $aftY - 1); $PecaMorta = $this->getPeca($aftX - 1, $aftY - 1); $this->delPeca($aftX - 1, $aftY - 1); unset($PecaMorta); } } if ($condicao2 && !$hasMove) { if ($direcoes[1][0] == $aftX && $direcoes[1][1] == $aftY) { $hasMove = True; $this->movePeca($prevX, $prevY, $aftX, $aftY); $this->decrementaPecas($aftX + 1, $aftY - 1); $PecaMorta = $this->getPeca($aftX + 1, $aftY - 1); $this->delPeca($aftX + 1, $aftY - 1); unset($PecaMorta); } } if ($condicao3 && !$hasMove) { if ($direcoes[2][0] == $aftX && $direcoes[2][1] == $aftY) { $hasMove = True; $this->movePeca($prevX, $prevY, $aftX, $aftY); $PecaMorta = $this->getPeca($aftX - 1, $aftY + 1); $this->decrementaPecas($aftX - 1, $aftY + 1); $this->delPeca($aftX - 1, $aftY + 1); unset($PecaMorta); } } if ($condicao4 && !$hasMove) { if ($direcoes[3][0] == $aftX && $direcoes[3][1] == $aftY) { $hasMove = True; $this->movePeca($prevX, $prevY, $aftX, $aftY); $this->decrementaPecas($aftX + 1, $aftY + 1); $PecaMorta = $this->getPeca($aftX + 1, $aftY + 1); $this->delPeca($aftX + 1, $aftY + 1); unset($PecaMorta); } } if (($condicao1 || $condicao2 || $condicao3 || $condicao4) && !$hasMove) { throw new Exception("Erro , Deve comer a peca"); } elseif (!$hasMove) { // Testa se o movimento eh possivel pelo numero de casas movidas $direcao_move = diagonalMove($aftX - $prevX, $aftY - $prevY); if ($this->canMove($prevX, $prevY, $aftX, $aftY)) { //Testa se o movimento esta na direcao que a peca pode ir echo "WOWOWOWWO\n"; if ($this->getPeca($prevX, $prevY)->getCor() == BLACK && $direcao_move[1] > 0 || $this->getPeca($prevX, $prevY)->isDama()) { $this->movePeca($prevX, $prevY, $aftX, $aftY); } else { if ($this->getPeca($prevX, $prevY)->getCor() == WHITE && $direcao_move[1] < 0 || $this->getPeca($prevX, $prevY)->isDama()) { $this->movePeca($prevX, $prevY, $aftX, $aftY); } else { throw new Exception("Erro , Mova a peca apenas para frente"); } } } else { throw new Exception("Erro , Nao pode mover tantas casas"); } } }