Просмотр файла Game/Controllers/SafeController.php

Размер файла: 4.63Kb
<?php

declare(strict_types=1);

namespace Modules\Game\Controllers;

use App\Classes\Validator;
use App\Controllers\BaseController;
use App\Models\User;
use Illuminate\Http\Request;

class SafeController extends BaseController
{
    /**
     * @var User
     */
    private $user;

    /**
     * Controller constructor.
     */
    public function __construct()
    {
        parent::__construct();

        if (! $this->user = getUser()) {
            abort(403, __('main.not_authorized'));
        }
    }

    /**
     * Взлом сейфа
     *
     * @return string
     */
    public function index(): string
    {
        return view('Game::safe/index', ['user' => $this->user]);
    }

    /**
     * Игра
     *
     * @param Request   $request
     * @param Validator $validator
     * @return string
     */
    public function go(Request $request, Validator $validator): string
    {
        $token = check($request->input('token'));
        $code0 = int($request->input('code0'));
        $code1 = int($request->input('code1'));
        $code2 = int($request->input('code2'));
        $code3 = int($request->input('code3'));
        $code4 = int($request->input('code4'));

        $validator->equal($token, $_SESSION['token'], __('validator.token'))
            ->gte($this->user->money, 100, ['guess' => 'У вас недостаточно денег для игры!']);

        if (! $validator->isValid()) {
            setInput($request->all());
            setFlash('danger', $validator->getErrors());
            redirect('/games/safe');
        }

        if (empty($_SESSION['safe']['cipher'])) {
            $_SESSION['safe']['cipher'] = [mt_rand(0, 9), mt_rand(0, 9), mt_rand(0, 9), mt_rand(0, 9), mt_rand(0, 9)];
            $_SESSION['safe']['try'] = 5;
            $this->user->decrement('money', 100);
        }

        $_SESSION['safe']['try']--;

        $safe = $_SESSION['safe'];
        $hack = ['-', '-', '-', '-', '-'];

        if ($code0 === $safe['cipher'][1] || $code0 === $safe['cipher'][2] || $code0 === $safe['cipher'][3] || $code0 === $safe['cipher'][4]) {$hack[0] = '*';}
        if ($code1 === $safe['cipher'][0] || $code1 === $safe['cipher'][2] || $code1 === $safe['cipher'][3] || $code1 === $safe['cipher'][4]) {$hack[1] = '*';}
        if ($code2 === $safe['cipher'][0] || $code2 === $safe['cipher'][1] || $code2 === $safe['cipher'][3] || $code2 === $safe['cipher'][4]) {$hack[2] = '*';}
        if ($code3 === $safe['cipher'][0] || $code3 === $safe['cipher'][1] || $code3 === $safe['cipher'][2] || $code3 === $safe['cipher'][4]) {$hack[3] = '*';}
        if ($code4 === $safe['cipher'][0] || $code4 === $safe['cipher'][1] || $code4 === $safe['cipher'][2] || $code3 === $safe['cipher'][3]) {$hack[3] = '*';}

        if ($code0 === $safe['cipher'][1]) {$hack[1] = 'x';}
        if ($code0 === $safe['cipher'][2]) {$hack[2] = 'x';}
        if ($code0 === $safe['cipher'][3]) {$hack[3] = 'x';}
        if ($code0 === $safe['cipher'][4]) {$hack[4] = 'x';}

        if ($code1 === $safe['cipher'][0]) {$hack[0] = 'x';}
        if ($code1 === $safe['cipher'][2]) {$hack[2] = 'x';}
        if ($code1 === $safe['cipher'][3]) {$hack[3] = 'x';}
        if ($code1 === $safe['cipher'][4]) {$hack[4] = 'x';}

        if ($code2 === $safe['cipher'][0]) {$hack[0] = 'x';}
        if ($code2 === $safe['cipher'][1]) {$hack[1] = 'x';}
        if ($code2 === $safe['cipher'][3]) {$hack[3] = 'x';}
        if ($code2 === $safe['cipher'][4]) {$hack[4] = 'x';}

        if ($code3 === $safe['cipher'][0]) {$hack[0] = 'x';}
        if ($code3 === $safe['cipher'][1]) {$hack[1] = 'x';}
        if ($code3 === $safe['cipher'][2]) {$hack[2] = 'x';}
        if ($code3 === $safe['cipher'][4]) {$hack[4] = 'x';}

        if ($code4 === $safe['cipher'][0]) {$hack[0] = 'x';}
        if ($code4 === $safe['cipher'][1]) {$hack[1] = 'x';}
        if ($code4 === $safe['cipher'][2]) {$hack[2] = 'x';}
        if ($code4 === $safe['cipher'][3]) {$hack[3] = 'x';}

        if ($code0 === $safe['cipher'][0]) {$hack[0] = $safe['cipher'][0];}
        if ($code1 === $safe['cipher'][1]) {$hack[1] = $safe['cipher'][1];}
        if ($code2 === $safe['cipher'][2]) {$hack[2] = $safe['cipher'][2];}
        if ($code3 === $safe['cipher'][3]) {$hack[3] = $safe['cipher'][3];}
        if ($code4 === $safe['cipher'][4]) {$hack[4] = $safe['cipher'][4];}

        if (implode($safe['cipher']) === implode($hack)) {
            unset($_SESSION['safe']);
            $this->user->increment('money', 1000);
        }

        if (empty($_SESSION['safe']['try'])) {
            unset($_SESSION['safe']);
        }

        $user = $this->user;

        return view('Game::safe/go', compact('hack', 'safe', 'user'));
    }

}