-
Notifications
You must be signed in to change notification settings - Fork 0
/
tuto04-POO_tp1.php
176 lines (147 loc) · 4.62 KB
/
tuto04-POO_tp1.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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
<?php
// On enregistre notre autoload. (désactivé ici car j'ai pas respecté le nommage)
/*function chargerClasse($classname)
{
require $classname.'.class.php';
}
spl_autoload_register('chargerClasse');*/
require 'tuto04-POO_tp1_personnage.php';
require 'tuto04-POO_tp1_manager.php';
session_start(); // On appelle session_start() APRÈS avoir enregistré l'autoload.
if (isset($_GET['deconnexion']))
{
session_destroy();
header('Location: tuto04-POO_tp1.php');
exit();
}
$db = new PDO('mysql:host=localhost;dbname=tuto_sdz', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); // On émet une alerte à chaque fois qu'une requête a échoué.
$manager = new PersonnagesManager($db);
if (isset($_SESSION['perso'])) // Si la session perso existe, on restaure l'objet.
{
$perso = $_SESSION['perso'];
}
if (isset($_POST['creer']) && isset($_POST['nom'])) // Si on a voulu créer un personnage.
{
$perso = new Personnage(array('nom' => $_POST['nom'])); // On crée un nouveau personnage.
if (!$perso->nomValide())
{
$message = 'Le nom choisi est invalide.';
unset($perso);
}
elseif ($manager->exists($perso->getNom()))
{
$message = 'Le nom du personnage est déjà pris.';
unset($perso);
}
else
{
$manager->add($perso);
}
}
elseif (isset($_POST['utiliser']) && isset($_POST['nom'])) // Si on a voulu utiliser un personnage.
{
if ($manager->exists($_POST['nom'])) // Si celui-ci existe.
{
$perso = $manager->get($_POST['nom']);
}
else
{
$message = 'Ce personnage n\'existe pas !'; // S'il n'existe pas, on affichera ce message.
}
}
elseif (isset($_GET['frapper'])) // Si on a cliqué sur un personnage pour le frapper.
{
if (!isset($perso))
{
$message = 'Merci de créer un personnage ou de vous identifier.';
}
else
{
if (!$manager->exists((int) $_GET['frapper']))
{
$message = 'Le personnage que vous voulez frapper n\'existe pas !';
}
else
{
$persoAFrapper = $manager->get((int) $_GET['frapper']);
$retour = $perso->frapper($persoAFrapper); // On stocke dans $retour les éventuelles erreurs ou messages que renvoie la méthode frapper.
switch ($retour)
{
case Personnage::CEST_MOI :
$message = 'Mais... pourquoi voulez-vous vous frapper ???';
break;
case Personnage::PERSONNAGE_FRAPPE :
$message = 'Le personnage a bien été frappé !';
$manager->update($perso);
$manager->update($persoAFrapper);
//var_dump($perso); // pour débug
break;
case Personnage::PERSONNAGE_TUE :
$message = 'Vous avez tué ce personnage !';
$manager->update($perso);
$manager->delete($persoAFrapper);
break;
}
}
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<title>TP : Mini jeu de combat</title>
<meta charset="utf-8">
</head>
<body>
<p>Nombre de personnages créés : <?php echo $manager->count(); ?></p>
<?php
if (isset($message)) echo '<p>', $message, '</p>'; // Si a un message à afficher, on l'affiche.
if (isset($perso)) : // Si on utilise un personnage (nouveau ou pas).
?>
<p><a href="tuto04-POO_tp1.php?deconnexion=1">Déconnexion</a></p>
<fieldset>
<legend>Mes informations</legend>
<p>
Nom : <?php echo htmlspecialchars($perso->getNom()); ?><br />
Dégâts : <?php echo $perso->getDegats(); ?>
</p>
</fieldset>
<fieldset>
<legend>Qui frapper ?</legend>
<p>
<?php
$persos = $manager->getList($perso->getNom());
if (empty($persos))
{
echo 'Personne à frapper !';
}
else
{
foreach ($persos as $unPerso)
echo '<a href="?frapper=', $unPerso->getId(), '">', htmlspecialchars($unPerso->getNom()), '</a> (dégâts : ', $unPerso->getDegats(), ')<br />';
}
?>
</p>
</fieldset>
<?php
else :
?>
<form action="" method="post">
<p>
Nom : <input type="text" name="nom" maxlength="50" />
<input type="submit" value="Créer ce personnage" name="creer" />
<input type="submit" value="Utiliser ce personnage" name="utiliser" />
</p>
</form>
<?php
endif;
?>
</body>
</html>
<?php
if (isset($perso)) // Si on a créé un personnage, on le stocke dans une variable session afin d'économiser une requête SQL.
{
$_SESSION['perso'] = $perso;
}
?>