-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli-hangman.php
More file actions
85 lines (69 loc) · 1.72 KB
/
cli-hangman.php
File metadata and controls
85 lines (69 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
require "vendor/autoload.php";
use League\CLImate\CLImate as Console;
use mstroink\Hangman\Hangman;
/** @var \League\CLImate\CLImate $Console sds */
$console = new Console();
$console->addArt(__DIR__ . '/data/art/');
do {
runGame();
} while (playAgain());
function runGame()
{
global $console;
$game = new Hangman();
while (!($game->isOver())) {
drawStage($game, $console);
$input = $console->input('Guess a letter');
$input->accept(function($letter) {
return (!empty($letter));
});
$letters = $input->prompt();
$game->guess($letters);
}
drawStage($game, $console);
if ($game->hasWon()) {
$console
->green()
->out("CONGRATULATIONS! You win!");
} else {
$console
->red()
->out("Sorry, the word was: " . $game->getSecretWord());
}
}
function playAgain()
{
global $console;
$input = $console->confirm('Would you like to play again?');
return $input->confirmed();
}
function drawStage($game, $console)
{
$console
->clear()
->draw('title')
->br();
$padding = $console
->padding(20)
->char(' ');
$padding
->label('Guesses Left')
->result($game->getAttemptsLeft() . "/7");
$padding
->label('Missed Guesses')
->result($game->getGuessedLetters());
$console->br();
foreach (str_split($game->getMaskedWord()) as $letter) {
$console
->backgroundBlack()
->white()
->inline(sprintf(" %s ", $letter))
->inline(" ");
}
$console
->br()
->br()
->draw('stage' . $game->getAttempts())
->br();
}