我正在做一个子手游戏。
一切正常,直到最后一部分。 我想展示他设法正确猜出的字母。 这有点奏效,但只有在第二次猜测之后。 但这不是我苦苦挣扎的主要问题。
当用户实际猜出正确的字母时,会在密码中显示该字母。 (秘密词表示用户必须猜测但以虚线表示的词)
但是,当用户再次猜测时,上一个字母将从秘密单词中消失。
我要苦苦挣扎的最后一件事是,当同一个单词中有多个字母时,循环会在找到的第一个字母处停止。 (对不起,我的脚本不好。我对此非常陌生!) (还请原谅我的荷兰人)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hangman Back end php</title>
<h1> Hangman </h1>
<h3>Raad een letter van het te raden woord</h3>
</head>
<body>
<?php
$hang[0] =
' -------
|/ |
|
|
|
|
|
/|\
-------------';
$hang[1] =
' -------
|/ |
| o
|
|
|
|
/|\
-------------';
$hang[2] =
' -------
|/ |
| o
| |
| |
|
|
/|\
-------------';
$hang[3] =
' -------
|/ |
| o
| |
| |
| /
|
/|\
-------------';
$hang[4] =
' -------
|/ |
| o
| |
| |
| / \
|
/|\
-------------';
$hang[5] =
' -------
|/ |
| o
| --|
| |
| / \
|
/|\
-------------';
$hang[6] =
' -------
|/ |
| o
| --|--
| |
| / \
|
/|\
-------------';
function HasBeenUsed($allLettersGuessed, $letter){
if ($allLettersGuessed =="") {
#No letter guessed yet
return false;
}
else {
$hasLetter = false;
#$length = strlen($allLettersGuessed);
$hasLetter = strpos($allLettersGuessed, $letter) !== false;
if ($hasLetter) {
$hasLetter = true;
return $hasLetter;
}
else {
$hasLetter = false;
return $hasLetter;
}
}
}
function Restart()
{
$wrongGuess = 0;
return array($oldLetterGuessed, $wrongGuess);
}
$solution = "DANSEN";
if (isset($_GET['letterGuessed'])) {
$currentGuess = $_GET['letterGuessed'];
# Check the letter
if (HasBeenUsed($solution, $currentGuess) == false) {
echo "<b> Wrong </b>";
$wrongGuess = $_GET['wrongGuess'] + 1;
echo "<pre>" . $hang[$wrongGuess] . "</pre>";
}
else {
$wrongGuess = $_GET['wrongGuess'];
echo "<pre>" . $hang[$wrongGuess] . "</pre>";
}
}
else {
$wrongGuess = 0;
$currentGuess = "";
}
echo "<form name = 'myForm' method='get' action='hangman.php'>";
# Alle geraden letters in een veriabele steken
if (isset($_GET['oldLetterGuessed'])) {
$oldLetterGuessed = $_GET ['oldLetterGuessed'];
$allLettersGuessed = $oldLetterGuessed . $currentGuess;
$allLettersGuessed;
echo "<input type = 'hidden' name = 'oldLetterGuessed' value ='". $allLettersGuessed ."'>";
echo $allLettersGuessed;
echo "<p> The number of wrong guesses so far is $wrongGuess </p>";
}
else {
echo "<input type = 'hidden' name = 'oldLetterGuessed' value = '' >";
}
echo "<input type = 'hidden' name = 'wrongGuess' value= '$wrongGuess'>";
if ($wrongGuess < 6) {
$alphas = range('A', 'Z');
# display letter buttons
for ($i=0; $i < count($alphas) ; $i++) {
echo "<input type = 'submit' name = 'letterGuessed' value = '" . $alphas[$i] . "' >";
}
}
else {
#The Screen when you're lost
echo nl2br("Oops looks like you've lost ");
echo nl2br("\n");
echo "The word you had to guess was ". $solution;
echo nl2br("\n");
echo "<form method = 'post' action = 'Restart()'>";
echo "<input type = 'submit' value = Restart'>";
echo "</form>";
}
echo "</form>";
#Display omzetten naar lijnen
$display = $solution;
$length = strlen($display);
for ($i=0; $i < $length ; $i++) {
$display[$i] = "-";
}
if (isset($oldLetterGuessed)) {
if ($oldLetterGuessed == "") {
$display = "_ _ _ _ _ _";
}
else
{
$currentGuess = $_GET['letterGuessed'];
# Looks at every letter and checks if it's the same
if (HasBeenUsed($solution, $currentGuess) == true ) {
# Positie zoeken $currentGuess in $solution
$posLetter = strpos($solution, $currentGuess);
# _ omzetten in de gegokte letter
if ($posLetter !== NULL) {
$display[$posLetter] = $currentGuess;
}
}
}
if ($display != $solution) {
echo $display;
}
else {
echo "You guessed the word";
}
}
?>
</body>
</html>
答案 0 :(得分:0)
每次您猜数字时都会有一个服务器呼叫,并且先前猜出的字母不再存在!
所以,您需要做的是使用$ _SESSION :) 我将在这里演示:
在您的PHP代码中:
<?php
session_start();
$_SESSION[word]=array();
// if a letter is correct just push it to your session array:
array_push($_SESSION[word],$letter);
// then you iterate the session array and according to the letters that resides there
// you revile the correct letters
答案 1 :(得分:0)
您可以使用会话来存储正确的答案及其位置,这是基于您的代码的示例:
首先启动会话:
session_start();
然后,您可以通过以下方式存储正确的猜测及其位置:
$_SESSION['guessed'][$posLetter] = $currentGuess;
在上面我创建了一个名为 guessed 的会话,向其中添加了职位和当前正确的猜字母。
然后,当您的页面重新加载时,它需要在正确的位置显示所有正确的猜测字母,因此您需要循环我们上面创建的会话:
if(isset($_SESSION['guessed'] )) { // Check if this session already exist
foreach ($_SESSION['guessed'] as $position=>$guessed ) {
$display[$position]=$guessed; // Assign the correct answer to the right position
}
}
此外,我建议您在表单中使用 post 方法而不是 get ,对于这种游戏,您最好使用JavaScript,这样速度更快,页面不会不必重新加载每个猜出的字母。
祝你好运!