[Script Review] 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
Code (php)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?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'] : ' ';
$_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>';
?>
// 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'] : ' ';
$_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>';
?>
Code (php)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* 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;
}
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;
}
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
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
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
Gewijzigd op 26/10/2014 00:06:54 door G P
Ik heb het even getest, leuk script en werkt prima.