Hangman

Umsetzung von Hangman oder Galgenmännchen als Beispiel für den Einsatz von Sessions

Das Skript ist auf das wesentliche beschränkt aber für ein kleines Spielchen zwischendurch reicht es.

Beispiel ausführen

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;

?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff