In der Session werden bereits geratene Buchstaben, die Zahl der getätigten und verbleibenden Spielzüge, und das Lösungswort gespeichert.
<?php
/**
* Galgenmaennchen (Hangman)
* =========================
*/
session_start();
$wordlist = array(
// Liste der möglichen Lösungsworte
'Affenbrotbaum',
'Autowerkstatt',
'Braumeister',
'Computer',
'Eckball',
'Fussballplatz',
'Fussballweltmeister',
'Hausmeisterkittel',
'Herzschrittmacher',
'Hexensabbat',
'Hubschrauber',
'Hundekuchen',
'Katzenklo',
'Katzenstreu',
'Kranwagen',
'Marmeladenbrot',
'Murmelbahn',
'Priesterweihe',
'Reisepass',
'Reisewecker',
'Reparaturwerkstatt',
'Salatschleuder',
'Salzstreuer',
'Spargelstecher',
'Spielplatz',
'Tanzschule',
'Tinktur',
'Umkleidekabine',
'Umtauschkasse',
'Unterseeboot',
);
$max_guess = 5;
if (isset($_GET['new'])) {
session_destroy();
unset($_SESSION);
session_start();
}
if (!isset($_SESSION['GUESSED'])) {
// Ein neues Spiel, Werte initialisieren ...
srand ((float) microtime() * 10000000);
$_SESSION['GUESSED'] = array();
$_SESSION['MOVES'] = 0;
$_SESSION['HITS'] = 0;
$_SESSION['WORD2GUESS'] = $wordlist[array_rand($wordlist)];
}
if (isset($_GET['c']) && $_SESSION['MISSED'] < $max_guess) {
// Ein Buchstabe wurde geraten ...
$_SESSION['GUESSED'][] = $_GET['c'];
$_SESSION['MOVES']++;
if (stristr($_SESSION['WORD2GUESS'], $_GET['c'])) {
$_SESSION['HITS']++;
}
}
$_SESSION['MISSED'] = $_SESSION['MOVES'] - $_SESSION['HITS'];
/*
* Buchstabenliste zeichnen
*/
function get_alpha_navigation()
{
$stack = '';
$tpl = '<a href="'.$_SERVER['PHP_SELF'].'?c=%s">%s</a> ';
for ($i=65; $i<91; $i++){
$l = chr($i);
$m = sprintf ($tpl, $l, $l);
if (in_array($l,$_SESSION['GUESSED'])) {
$m = $l.' ';
}
$stack .= '<li>'.$m.'</li>';
}
$result=<<< EOT
<ul id="hangman_navi">
$stack
</ul>
EOT;
return $result;
}
function get_result()
{
$word = $_SESSION['WORD2GUESS'];
$complete = true;
$msg = '';
$stack = '';
$l = strlen($word);
for ($i = 0; $i < $l;$i++) {
$cmp = strtoupper($word[$i]);
if (in_array($cmp, $_SESSION['GUESSED'])) {
$stack .= "<li>{$word[$i]}</li> ";
} else {
$complete = false;
$stack .= '<li>_</li> ';
}
}
if ($complete) {
$msg = '<h1>gewonnen</h1>';
}
$rv = <<< EOT
$msg
<ul id="wordtoguess">
$stack
</ul>
EOT;
return $rv;
}
$navi = get_alpha_navigation();
$word = get_result();
$msg = '';
$count_down = $max_guess - $_SESSION['MISSED'];
if ($_SESSION['MISSED'] >= $max_guess){
$msg = '<h2>leider verloren</h2>';
$msg .= 'das gesuchte Wort war <em>'.$_SESSION['WORD2GUESS'].'</em>';
}
echo <<< EOT
<style type="text/css">
#hangman_navi {
list-style-image:none;
}
#hangman_navi a{
text-decoration:none;
font-weight:bold;
color:#c00;
}
#hangman_navi li{
border:1px solid #c00;
padding:2px;
background-color:#ffc;
color:#ffc;
float:left;
width:18px;
height:16px;
list-style-type:none;
}
#wordtoguess{
list-style-image:none;
margin-top:60px;
clear:left;
}
#wordtoguess li{
border:1px solid #999;
padding:2px;
background-color:#D7FFD7;
color:#000;
float:left;
width:22px;
height:22px;
list-style-type:none;
}
</style>
$navi
$word
<br style="clear:left;" />
<h4>Versuche gesamt: {$_SESSION['MOVES']} verbleibend: $count_down </h4>
$msg
<a href="{$_SERVER['PHP_SELF']}?new=1">Neues Spiel beginnen</a>
EOT;
?>