2012-05-24 2 views
0

Le problème que j'essaie de résoudre est d'avoir 16 animaux différents et j'ai besoin d'écrire un script PHP qui demande à l'utilisateur 4 questions oui/non et chaque question rétrécit les animaux disponibles jusqu'à ce que la réponse soit finalement affichée. Cela signifie que la question suivante dépendra de ce que l'utilisateur a répondu à la question précédente. Avez-vous une idée de comment je peux faire cela sans utiliser beaucoup de déclarations if else. Ci-dessous est ce que j'ai fait jusqu'à présent, pas fini, mais si je continue en utilisant des déclarations if je vais finir avec trop, il doit y avoir une meilleure façon de le faire. Quelqu'un m'a suggéré d'utiliser des tableaux dans des tableaux, mais cela ne m'aide pas. Toute aide serait très appréciée.Construire un système expert/une décision basée sur PHP

<?php 
session_set_cookie_params(2592000); 
session_start(); 
?> 

<html> 
<head> 
<title>Creature Guessing Game</title> 
</head> 
<body> 
<h1>Creature Guessing Game</h1> 
<p> Welcome to the creature guessing game! </p> 
<p>Click the button 

below to start or restart the game </p> 

<form method="post" action="Creatures.php"> 
<input type='submit' name='start' value='Start Game' /> 
</form> 
<?php 
//If form not submitted, display form. 
if (!isset($_POST['start'])){ 
?> 
<?php 
} //If form is submitted, process input 

else{ //Question 1 
echo "<p>Does the creature live mainly on the land?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes1' value='Yes' /> 
<input type='submit' name='no1' value='No' /> 
</form>"; 
} 
if ($_POST['yes1']){ //Q1 - Yes 
echo "<p>Does the creature have wings?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes2' value='Yes' /> 
<input type='submit' name='no2' value='No' /> 
</form>"; 
} 
elseif($_POST['no1']){ //Q1 - No 
echo "<p>Does the creature live in the water?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes3' value='Yes' /> 
<input type='submit' name='no3' value='No' /> 
</form>"; 
} 
if ($_POST['yes2']){ //Q1 - Yes and Q2 - Yes 
echo "<p>Can the creature fly?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes4' value='Yes' /> 
<input type='submit' name='no4' value='No' /> 
</form>"; 
} 
elseif($_POST['no2']){ //Q1 - Yes and Q2 - No 
echo "<p>Is the creature an insect?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes5' value='Yes' /> 
<input type='submit' name='no5' value='No' /> 
</form>"; 
} 
if ($_POST['yes3']){ //Q1 - No and Q2 - Yes 
echo "<p>Is the creature a reptile?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes6' value='Yes' /> 
<input type='submit' name='no6' value='No' /> 
</form>"; 
} 
if ($_POST['no3']){ //Q1 - No and Q2 - No 
echo "<p>Does the creature have feathers?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes7' value='Yes' /> 
<input type='submit' name='no7' value='No' /> 
</form>"; 
} 
if ($_POST['yes4']){ //Q1 - Yes and Q2 - Yes and Q3 - Yes 
echo "<p>Is the creature your thinking of white?</p>"; 
echo "<form method='post' action='Creatures.php'> 
<input type='submit' name='yes8' value='Yes' /> 
<input type='submit' name='no8' value='No' /> 
</form>"; 
} 
if ($_POST['yes8']){ //Answer 1: Q1 - Yes and Q2 - Yes and Q3 - Yes and Q4 - Yes 
echo "<p>Its a goose!</p>"; 
} 
if ($_POST['no8']){ //Answer 2: Q1 - Yes and Q2 - Yes and Q3 - Yes and Q4 - No 
echo "<p>Its a hawk!</p>"; 
} 
?> 
</body> 
</html> 

Répondre

1

Vous n'êtes pas développeur php ici, mais ce que vous devez faire est d'avoir une classe Animal ou objet qui a un ensemble de propriétés. Ces propriétés doivent être Boolean (true/false) valeurs qui correspondent directement aux questions que vous posez. Ces objets Animal doivent être placés dans un Collection (un List ou un Set). Après avoir traité chaque question, appelez une fonction qui supprime tous les animaux dont la propriété booléenne ne correspond pas à la valeur fournie par l'utilisateur. Par exemple:

Animal cat = new Animal(); 
cat.canWalkOnLand = true; 

userDoesAnimalWalkOnLand = false; 
for(Animal in AnimalCollection) 
{ 
    if(Animal.canWalkOnLand != userDoesAnimalWalkOnLand) 
    { 
     AnimalCollection.remove(Animal); 
    } 
} 

Cela devrait être plus que suffisant pour vous aider à démarrer. (Noms de variables verbeux pour vous aider à comprendre)

+0

Je vais essayer cela et voir comment je m'entends, pourrait également se pencher sur l'utilisation de tableaux et une déclaration de commutateur comme suggéré par l'autre gars. – Harry12345

+0

de cette façon est la meilleure façon de faire, permet une expansion dynamique (en ajoutant plus d'animaux) ou ayant plusieurs animaux comme la réponse «correcte». Cette approche est la plus dynamique et donc, à mon avis, la meilleure solution au problème. –

0

Vous pouvez créer un tableau de questions, et utiliser une instruction switch et une petite fonction qui répète encore et encore la même connerie qui accepte simplement votre question en tant que paramètre - il serait Nettoyez votre code beaucoup.

En ce qui concerne l'expansion de ce jeu entre les deux animaux que vous avez énumérés, la suggestion de Woot4Moo serait fortement recommandée en plus de la mienne.

+0

J'ai ajouté un tableau de questions et j'ai fait une fonction pour répéter l'echo "

..." truc et j'utilise une instruction switch avec $ _POST comme variable mais ça ne marche pas? – Harry12345

Questions connexes