-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Gissa | ||
=========================== | ||
|
||
Gissa mitt nummer. | ||
|
||
* [Gissa GET (utanför ramverket)](guess) | ||
* [Gissa GET (inanför ramverket)](gissa/get) | ||
* [Gissa POST (inanför ramverket)](gissa/post) | ||
* [Gissa SESSION (inanför ramverket)](gissa/session) |
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
<?php | ||
namespace Thba17\Guess; | ||
|
||
/** | ||
* Guess my number, a class supporting the game through GET, POST and SESSION. | ||
* The game will randomize a secret number. The player will get 6 chances | ||
* to guess the corect number. The game will reply stating if the guess was low, | ||
* high or correct. The player has the option of restarting the game with a new | ||
* number and 6 new tries or ask the game to reveal the secret number. | ||
*/ | ||
class Guess | ||
{ | ||
/** | ||
* @var int $number The current secret number. | ||
* @var int $tries Number of times a guess has been made. | ||
*/ | ||
private $number; | ||
private $tries; | ||
|
||
|
||
|
||
/** | ||
* Randomize the secret number between 1 and 100 to initiate a new game. | ||
* | ||
* @param int $tries Number of tries a guess has been made, | ||
* default 6. | ||
* | ||
* @return void | ||
*/ | ||
public function random(int $tries = 6) | ||
{ | ||
$this->number = rand(1, 100); | ||
$this->tries = $tries; | ||
} | ||
|
||
|
||
|
||
/** | ||
* Get number of tries left. | ||
* | ||
* @return int as number of tries made. | ||
*/ | ||
public function tries() | ||
{ | ||
return $this->tries; | ||
} | ||
|
||
|
||
|
||
/** | ||
* Get the secret number. | ||
* | ||
* @return int as the secret number. | ||
*/ | ||
public function number() | ||
{ | ||
return $this->number; | ||
} | ||
|
||
|
||
|
||
/** | ||
* Make a guess, decrease remaining guesses and return a string stating | ||
* if the guess was correct, too low or too high or if no guesses remain. | ||
* | ||
* @throws GuessException when guessed number is out of bounds. | ||
* | ||
* @return string to show the status of the guess made. | ||
*/ | ||
public function makeGuess($number) | ||
{ | ||
if (($number < 1) || ($number > 100)) { | ||
throw new GuessException("Only numbers between 1 - 100"); | ||
} | ||
|
||
if (($this->tries) > 0) { | ||
$this->tries--; | ||
} else { | ||
return 'No more tries. Start a new game.'; | ||
} | ||
if ($number == $this->number) { | ||
return 'Correct'; | ||
} elseif ($number < $this->number) { | ||
return "Too low"; | ||
} elseif ($number > $this->number) { | ||
return "Too high"; | ||
} else { | ||
return 'Imaginary numbers not allowed'; | ||
} | ||
} | ||
|
||
|
||
|
||
/** | ||
* Constructor to initiate the object. A running game will use current values | ||
* for secret number and remaining guesses. A new game will use default values | ||
* or requested values if available. | ||
* | ||
* @param int $number The current secret number, default -1 to initiate | ||
* (randomize) the number from start. | ||
* @param int $tries Number of tries a guess has been made, | ||
* default 6. | ||
*/ | ||
public function __construct(int $number = -1, int $tries = 6) | ||
{ | ||
if ($number > 0) { | ||
$this->number = $number; | ||
} else { | ||
$this->random(); | ||
} | ||
|
||
$this->tries = $tries; | ||
} | ||
|
||
|
||
|
||
/** | ||
* Destroy game. | ||
*/ | ||
public function __destruct() | ||
{ | ||
// echo __METHOD__; | ||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?php | ||
namespace Thba17\Guess; | ||
|
||
/** | ||
* Exception class for game "Guess my number". | ||
*/ | ||
class GuessException extends \Exception | ||
{ | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
<?php | ||
/** | ||
* App specific routes. | ||
*/ | ||
|
||
/** | ||
* This route is for the guessing game "Gissa mitt nummer" using GET | ||
*/ | ||
$app->router->get("gissa/get", function () use ($app) { | ||
$data = [ | ||
"title" => "Gissa mitt nummer med GET", | ||
]; | ||
|
||
// Get incoming | ||
$tries = $_GET["tries"] ?? 6; | ||
$guess = $_GET["guess"] ?? null; | ||
$number = $_GET["number"] ?? -1; | ||
if (is_null($number)) { | ||
$number = -1; | ||
} | ||
|
||
// Start new game | ||
$game = new \Thba17\Guess\Guess($number, $tries); | ||
|
||
// Check if user made a guess | ||
$res = null; | ||
if (isset($_GET['doGuess'])) { | ||
$res = $game->makeGuess($guess); | ||
} | ||
|
||
// Check if user requests a new game | ||
if (isset($_GET['doRestart'])) { | ||
$game->random(); | ||
} | ||
|
||
// Add to $data array | ||
$data += [ | ||
// "title" => "Spela Gissa mitt nummer med GET | oophp", | ||
"game" => $game, | ||
"res" => $res, | ||
]; | ||
|
||
// Add view and render page | ||
$app->view->add("guess/get", $data); | ||
$app->page->render($data); | ||
}); | ||
|
||
|
||
/** | ||
* This route is for the guessing game "Gissa mitt nummer" using POST | ||
*/ | ||
$app->router->any(["GET", "POST"], "gissa/post", function () use ($app) { | ||
$data = [ | ||
"title" => "Gissa mitt nummer med POST", | ||
]; | ||
|
||
// Get incoming | ||
$tries = $_POST["tries"] ?? 6; | ||
$guess = $_POST["guess"] ?? null; | ||
$number = $_POST["number"] ?? -1; | ||
if (is_null($number)) { | ||
$number = -1; | ||
} | ||
|
||
// Start new game | ||
$game = new \Thba17\Guess\Guess($number, $tries); | ||
|
||
// Check if user made a guess | ||
$res = null; | ||
if (isset($_POST['doGuess'])) { | ||
$res = $game->makeGuess($guess); | ||
} | ||
|
||
// Check if user requests a new game | ||
if (isset($_POST['doRestart'])) { | ||
$game->random(); | ||
} | ||
|
||
// Add to $data array | ||
$data += [ | ||
// "title" => "Spela Gissa mitt nummer med GET | oophp", | ||
"game" => $game, | ||
"res" => $res, | ||
]; | ||
|
||
// Add view and render page | ||
$app->view->add("guess/post", $data); | ||
$app->page->render($data); | ||
}); | ||
|
||
|
||
|
||
/** | ||
* This route is for the guessing game "Gissa mitt nummer" using SESSION | ||
*/ | ||
$app->router->any(["GET", "POST"], "gissa/session", function () use ($app) { | ||
$data = [ | ||
"title" => "Gissa mitt nummer med SESSION", | ||
]; | ||
|
||
// Get incoming | ||
$guess = isset($_POST["guess"]) ? $_POST["guess"] : null; | ||
$number = isset($_SESSION['number']) ? $_SESSION['number'] : -1; | ||
$tries = isset($_SESSION['tries']) ? $_SESSION['tries'] : 6; | ||
|
||
// Start new game | ||
$game = new \Thba17\Guess\Guess($number, $tries); | ||
|
||
// Check if user made a guess | ||
$res = null; | ||
if (isset($_POST['doGuess'])) { | ||
$res = $game->makeGuess($guess); | ||
} | ||
|
||
// Check if user requests a new game | ||
if (isset($_POST['doRestart'])) { | ||
$game->random(); | ||
} | ||
|
||
// Add to $data array | ||
$data += [ | ||
// "title" => "Spela Gissa mitt nummer med GET | oophp", | ||
"game" => $game, | ||
"res" => $res, | ||
]; | ||
|
||
// Add view and render page | ||
$app->view->add("guess/session", $data); | ||
$app->page->render($data); | ||
}); | ||
|
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.