Het spel galgje met PHP
woorden kan je toevoegen/bewerken/verwijderen in het bestand woorden.txt
Op regel 6 in index.php kan je zelf kiezen waardoor de letters moeten vervangen worden, in dit geval zal het dus een dash (streepje) zijn.
De opmaak en de afbeelding kan je zelf kiezen.
woorden.txt, galgje.css, index.php en de afbeelding behoren allemaal in 1 map (bijvoorbeeld galgje)

index.php
<?php
// Start een sessie
session_start();

// Geef een vervangsteken voor het gezochte woord
$replace = '-';

// Controleer op vezenden van een letter
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['letter'])){
	$len = strlen($_SESSION['woord']);
	$check = '';
	$guess = false;
	// Controleer letter in woord
	for ($i=0; $i<$len; $i++){
		if (substr($_SESSION['woord'], $i, 1) == $_POST['letter']){
			$guess = true;
			$check .= $_POST['letter'];
		} else {
			$check .= substr($_SESSION['geraden'], $i, 1);
		}
	}
	// Verberg gekozen letter
	$_SESSION['hidden'] .= $_POST['letter'];
	$_SESSION['geraden'] = $check;
	// Letter is niet geraden
	if ($guess === false){
		$_SESSION['step']++;
	}
	// Woord is geraden of beurten zijn voorbij toon opnieuw spelen knop
	if ($_SESSION['geraden'] == $_SESSION['woord'] || $_SESSION['step'] >= 5){
		if ($_SESSION['step'] > 5){ $_SESSION['step'] = 5; }
		$playAgain = '			<p>';
		if ($_SESSION['geraden'] == $_SESSION['woord']){
			if ($_SESSION['step'] == 1){ $fouten = 'fout'; } else { $fouten = 'fouten'; }
			$congratulations = array('Goed zo', 'Goed geraden', 'Proficiat', 'Super');
			shuffle($congratulations);
			$playAgain .= $congratulations[0].' !! Je hebt '.$_SESSION['step'].' '.$fouten.' gemaakt.';
		} elseif ($_SESSION['step'] >= 5){
			$playAgain .= 'Je hebt het niet geraden !!';
		}
		$playAgain .= '</p>'.PHP_EOL;
		$_SESSION['hidden'] = 'abcdefghijklmnopqrstuvwxyz';
		$_SESSION['hidden'] = strtoupper($_SESSION['hidden']);
		$_SESSION['geraden'] = $_SESSION['woord'];
		$playAgain .= '			<p><input type="submit" name="playagain" id="playagain" value="Speel opnieuw"></p>'.PHP_EOL;
	}
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['playagain'])){
	session_destroy();
	header('Location: '.$_SERVER['PHP_SELF']);
	exit;
}

// Definieren van variablen
$_SESSION['step']		= isset($_SESSION['step'])		? $_SESSION['step']		: 0;
$_SESSION['hint']		= isset($_SESSION['hint'])		? $_SESSION['hint']		: NULL;
$_SESSION['woord']		= isset($_SESSION['woord'])		? $_SESSION['woord']	: NULL;
$_SESSION['geraden']	= isset($_SESSION['geraden'])	? $_SESSION['geraden']	: NULL;
$_POST['letter']		= isset($_POST['letter']) 		? $_POST['letter']		: '&nbsp;';
$_SESSION['hidden']		= isset($_SESSION['hidden'])	? $_SESSION['hidden']	: NULL;
$playAgain				= isset($playAgain)				? $playAgain			: NULL;

// Ophalen van woorden
$content = file('woorden.txt');
$woorden = array();
$keys = array();
foreach($content as $line){
	$exp = explode('|', $line);
	if (count($exp) == 2){ // Bestaat uit 2 delen, hint een het te raden woord
		$exp = array_map('trim', $exp);
		if (empty($keys)){
			$keys = $exp;
		} else {
			$exp = array_map('strtoupper', $exp);
			$woorden[] = array_combine($keys, $exp);
		}
	}
}

// Alfabet
$alfabet = 'abcdefghijklmnopqrstuvwxyz';
$alfabet = strtoupper($alfabet);

// Letters
$letters = str_split($alfabet);

// Random woord en gezocht woord vervangen door dashes
if (empty($_SESSION['woord']) && empty($_SESSION['geraden']) && empty($_SESSION['hint'])){
	shuffle($woorden);
	$_SESSION['hint']		= $woorden[0]['hint'];
	$_SESSION['woord']		= $woorden[0]['zoeken'];
	$_SESSION['geraden']	= preg_replace('/[A-Z]/', $replace, $_SESSION['woord']);
}

// Maak de knoppen met de letters
$letterBalk = '';
foreach ($letters as $letter){
	if (strpos($_SESSION['hidden'], $letter) !== false){ $disabled = ' disabled'; } else { $disabled = ''; }
	$letterBalk .= '				<input type="submit" id="letter'.$letter.'" name="letter" value="'.$letter.'"'.$disabled.'>'.PHP_EOL;
}

print '<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Galgje</title>
<link type="text/css" rel="stylesheet" href="galgje.css">
</head>

<body>
<header>
	<hgroup>
		<h1>Hangman</h1>
	</hgroup>
</header>
<section>
	<article>
		<header>
			<h3>'.$_SESSION['geraden'].'</h3>
		</header>
		<p class="image stap'.$_SESSION['step'].'"></p>
		<p class="letter">'.$_POST['letter'].'</p>
		<p class="hint">'.$_SESSION['hint'].'</p>
		<form action="" enctype="multipart/form-data" method="post">
			<p>
'.$letterBalk.'			</p>
'.$playAgain.'		</form>
	</article>
</section>
</body>
</html>';

?>
galgje.css
/* CSS Document */

html, body
{
	font-family: Verdana, Geneva, sans-serif;
	font-size: 1em;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
}

header,
hgroup,
section,
article
{
	display: block;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
}

/* Titel */
header hgroup h1
{
	color: #FFF;
	background: none #333;
	font-size: 3em;
	text-align: center;
	display: block;
	margin: 0 0 0 0;
	padding: 0.3em 0 0.3em 0;
}

/* Raad het woord */
section article header h3
{
	color: #000;
	background: none #FFF;
	font-size: 3em;
	font-weight: 100;
	text-align: center;
	display: block;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
}

/* image */
section p.image
{
	color: transparent;
	background-image: url(leroy_the_unlucky_hangman_images_by_shinysparks-d4nxeim.png);
	background-repeat: no-repeat;
	display: block;
	width: 150px;
	height: 201px;
	margin: 0 auto 0 auto;
	padding: 0 0 0 0;
}

section p.stap0
{
	background-position: 150px -40px;
}

section p.stap1
{
	background-position: -37px -40px;
}

section p.stap2
{
	background-position: -206px -40px;
}

section p.stap3
{
	background-position: -375px -40px;
}

section p.stap4
{
	background-position: -544px -40px;
}

section p.stap5
{
	background-position: -713px -40px;
}

/* Gekozen letter */
section p.letter
{
	border: solid 1px #333;
	border-radius: 0.2em;
	font-size: 6em;
	text-align: center;
	text-shadow: 0 0.1em 0.2em #333;
	margin: 0.1em auto 0.1em auto;
	padding: 0.1em 0.2em 0.1em 0.2em;
	display: block;
	width: 1em;
}

/* Hint */
section p.hint
{
	color: #000;
	background: none #FFF;
	border: dashed 1px #333;
	border-radius: 0.5em;
	box-shadow: 0.2em 0.2em 0.5em #999;
	font-size: 1em;
	text-align: center;
	margin: 1em auto 1em auto;
	padding: 0.5em 1em 0.5em 1em;
	width: 80%;
}

/* Letterbox */
section form
{
	display: block;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
}

section form p
{
	text-align: center;
	display: block;
	margin: 0 0 0 0;
	padding: 0 0 0 0;
}

section form p input
{
	color: #060;
	background: none #CFC;
	text-transform: uppercase;
	border: solid 1px #333;
	border-radius: 0.3em;
	box-shadow: 0.2em 0.2em 0.5em #999;
	display: inline-block;
	margin: 0.5em 0.2em 0.5em 0.2em;
	padding: 0.5em 1em 0.5em 1em;
}

section form p input:hover,
section form p input:focus
{
	border-color: #0F0;
	box-shadow: 0.2em 0.2em 0.5em #0F0;
}

section form p input[disabled]
{
	color: #900;
	background: none #FCC;
	box-shadow: none;
}
woorden.txt
hint|zoeken
beste nederlandse hulp voor php|phphulp
fictief persoon|suske en wiske
spreekwoord|wie een put graaft voor een ander valt er zelf in
bekend persoon|lady gaga
spreekwoord|Advocaat van de duivel spelen
artiest|justin bieber
spreekwoord|Baat het niet, dan schaadt het niet
bekend persoon|wesley snipes
film|Het Bombardement
De afbeelding:[img]http://fc05.deviantart.net/fs71/i/2012/028/8/c/leroy_the_unlucky_hangman_images_by_shinysparks-d4nxeim.png[/img]
Ik heb het even getest, leuk script en werkt prima.

Reageren