<?php namespace App\Games; use App\Constants\Status; use App\Models\Game as GameModel; use App\Models\GuessBonus; use Illuminate\Support\Facades\Crypt; class NumberGuess extends Game { protected $alias = 'number_guess'; protected $hasCustomCompleteLogic = true; protected $extraEndValidationRule = [ 'number' => 'required|integer|between:0,100', ]; protected function gameResult() { $winLossData['result'] = Crypt::encrypt(mt_rand(1, 100)); return $winLossData; } protected function customCompleteLogic($gameLog) { if ($gameLog->user_select != null) { $userSelect = json_decode($gameLog->user_select); array_push($userSelect, $this->request->number); } else { $userSelect[] = $this->request->number; } $game = GameModel::find($gameLog->game_id); $data = GuessBonus::where('alias', $game->alias)->get(); $count = $data->count(); if ($gameLog->status == 1) { $res['gameSt'] = 1; $res['message'] = 'Time Over'; return ['should_return' => true, 'data' => $res]; } $gameLog->try = $gameLog->try + 1; $gameLog->user_select = json_encode($userSelect); if ($gameLog->try >= $count) { $gameLog->status = Status::ENABLE; } $gameLog->save(); $bonus = GuessBonus::where('alias', $game->alias)->where('chance', $gameLog->try)->first()->percent; $amount = $gameLog->invest * $bonus / 100; $result = $gameLog->result; if ($this->request->number < $result) { $mes['message'] = 'The Number is short'; $mes['type'] = 0; } if ($this->request->number > $result) { $mes['message'] = 'The Number is high'; $mes['type'] = 1; } if ($gameLog->status == 1) { $mes['gameSt'] = 1; $mes['message'] = 'The Number was ' . $result; $mes['win_status'] = 0; $mes['result'] = $result; } else { $nextBonus = GuessBonus::where('alias', $game->alias)->where('chance', $gameLog->try + 1)->first(); $mes['data'] = $nextBonus->percent . '%'; } if ($this->request->number == $result) { $gameLog->win_status = Status::WIN; $gameLog->status = Status::ENABLE; $gameLog->win_amo = $amount; $gameLog->result = $result; $gameLog->save(); $mes['gameSt'] = 1; $mes['win_status'] = 1; $this->extraResponseOnEnd = array_merge($this->extraResponseOnEnd, $mes); return ['should_return' => false]; } return ['should_return' => true, 'data' => $mes]; } }