@Terroris337

Как реализовать здачку в ООП?

Есть задача:
Две команды, А и Б, играют в футбол. Некто делает свою ставку на результат матча, например, 1:2.
По результату матча становится известен настоящий счёт, и нам надо выдать тот или иной приз. Если некто угадал точный счёт, он получает большой приз. Если некто угадал исход матча (выигрыш той или иной команды, или же ничью) - он получает маленький приз. Если же он не угадал, он получает нулевой приз.
Необходимо написать функцию которая принимает в качестве аргументов предполагаемый и реальный счёт, и возвращает целое число 0, 1 или 2 (нулевой, маленький или большой приз).

Подскажите как сделать в ООП, как лучше сделать, саму суть.
  • Вопрос задан
  • 233 просмотра
Решения вопроса 2
@m1rvi
$points = //здесь счет
//сюда суй все что нужно;
$user_points = //что предсказал пользователь;

if( $points == $user_points) {
//здесь если юзер точно предсказал 
}
if( ! $points == $user_points) {
//здесь если юзер не предсказал
}

В чем подвох ?
Ответ написан
@Vitsliputsli
Необходимо написать функцию которая принимает в качестве аргументов предполагаемый и реальный счёт, и возвращает целое число 0, 1 или 2 (нулевой, маленький или большой приз)

Подскажите как сделать в ООП, как лучше сделать, саму суть.

class Rewarding
{
    const BIG_PRIZE = 2;
    const SMALL_PRIZE = 1;
    const ZERO_PRIZE = 0;

    private $bets;
    private $matches;

    public function __construct(BetsCollection $bets, Matches $matches)
    {
        $this->bets = $bets;
        $this->matches = $matches;
    }

    public function run() : void
    {
        /** @var Bet $bet */
        foreach ($this->bets as $bet) {
            /** @var Match $match */
            $match = $this->matches->getMatchById($bet->getMatchId());
            /** @var Score $score */
            $score = $match->getScore();
            $bet->setPrize($this->scoreBetCompare($bet->getScore(),$score));
        }
    }

    public function getBetsPrizes() : BetsCollection
    {
        return $this->bets;
    }

    private function scoreBetCompare(Score $betScore, Score $matchScore) : int
    {
        $bet1 = $betScore->getFirstCommandResult();
        $bet2 = $betScore->getSecondCommandResult();
        $match1 = $matchScore->getFirstCommandResult();
        $match2 = $matchScore->getSecondCommandResult();
        if ($bet1 === $match1 && $bet2 === $match2)
        {
            return self::BIG_PRIZE;
        }
        if (($bet1 > $bet2 && $match1 > $match2)
            ||
            ($bet1 < $bet2 && $match1 < $match2)
            ||
            ($bet1 === $bet2 && $match1 === $match2)
            )
        {
            return self::SMALL_PRIZE;
        }
        return self::ZERO_PRIZE;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы