Rechercher - Liste des utilisateurs
Version complète : A.A.A. (Aides Aux Apprentis)
Accueil » FunDelphi » A.A.A. (Aides Aux Apprentis)
1 2 3
DerF_44
sjrd
L'instruction “Square.Obstacle := nil;” n'est pas nécessaire, puisque l'obstacle est quand même remplacé par GoldenBlock juste après. Comme une case ne peut avoir deux obstacle, l'instruction “Square.Obstacle := GoldenBlock” seule remplacera l'obstacle par un bloc en or.

Arf.. C'est ce qui me semblait effectivement, du moins en théorie !.
En effet un jour j'ai rencontré un gros souci sur ce genre de manipulation,
avec une compilation nickelle, mais, en jouant, je me retrouvais avec un “Invalid pointer”…
Le hic c'est que je ne me souviens pas si cela concernait un obstacle seul ou un terrain+obstacle.
Du coup j'ai pris l'habitude de “nettoyer” le terrain avant d'y poser d'autres éléments !.
DerF_44
Voici le début d'une petite série d'obstacles personnages qui parlent, posent des questions,
et demandent au joueur de choisir une réponse (QCM) !.
Commençons par le plus simple, à savoir un gardien qui demande si il doit partir !.

unit AAA;

uses
FunLabyBase;

components
Guard: TGuard;

obstacle TGuard
name 'Gardien';
image 'Characters/Angel';

on Pushing do
var
Selected: Integer;
begin
inherited;
if not KeyPressed then
Exit;

Selected := Player.ShowSelectionMsg('Veux-tu que je te laisse passer ?',['Oui', 'Non']);
if Selected = 0 then
Square.Obstacle := nil;
if Selected = 1 then
Exit;

end;
end;

end.

On pose ici une variable, (Selected) qui va enregistrer la valeur de la réponse..
C'est la fonction Player.ShowSelectionMsg qui permet de poser la question et les réponses possibles.
Il suffit ensuite d'énumérer les différentes options en fonction de la valeur de Selected:
Si le joueur choisi “Oui” l'obstacle personnage disparaît,
si la réponse est “Non” l'obstacle reste en place..

Il est évidemment tout à fait possible d'ajouter une (ou plusieurs) possibilité de réponse :
Selected := Player.ShowSelectionMsg('Veux-tu que je te laisse passer ?',['Oui', 'Non', 'Peut-être']);
if Selected = 0 then
Square.Obstacle := nil;
if Selected = 1 then
Exit;
if Selected = 2 then
Player.ShowMessage('An ben faudrait savoir !');

Attention : Pour la première réponse (Oui) Selected aura pour valeur 0, pour la deuxième (Non) 1, la troisième (Peut-être) 2.
sjrd
Rien à redire ^^
DerF_44
Retrouvons notre gardien qui demande si il doit laisser passer le joueur..
Il est possible d'imbriquer des QCM en utilisant le même nom de variable (Selected) :

Selected := Player.ShowSelectionMsg('Veux-tu que je te laisse passer ?',['Oui', 'Non', 'Peut-être']);
if Selected = 0 then
Square.Obstacle := nil;
if Selected = 1 then
Exit;
if Selected = 2 then
Selected := Player.ShowSelectionMsg('An ben faudrait savoir,'+#10+
'c''est oui ou non ?!',['Oui', 'Non']);
if Selected = 0 then
Square.Obstacle := nil;
if Selected = 1 then
Exit;
Si le joueur répond “Peut-être” à la première question, le personnage pose une nouvelle question.
(le "+#10+" permet un retour à la ligne dans la fenêtre de jeu)



Dans le cas d'imbrications plus complexes il est toutefois conseillé d'utiliser plusieurs variables
avec des noms différents, afin de mieux s'y retrouver lors de l'écriture des différentes répliques,
ne serait-ce qu'avec une numérotation dans le genre “Selected01”, “Selected02”, etc…
Il faudra, bien sûr, ne pas oublier de les déclarer :

var
Selected01: Integer;
Selected02: Integer;
Selected03: Integer;
...
DerF_44
Il est tout à fait possible de ne prendre en considération que LA bonne réponse parmi une longue liste de propositions..
Cette fois-ci notre gardien a besoin d'une formule magique pour s'esquiver,
5 réponses sont proposées, une seule est valable, et on a droit qu'à une erreur..
En effet si le joueur se trompe de formule deux fois, l'obstacle se transforme en mur, immuable !.

On pose donc une property “NbOfFalse”, qui va s'incrémenter de 1 à chaque mauvaise réponse,
si sa valeur arrive à 2 on élimine l'obstacle et on pose un mur à la place.

unit AAA;

uses
FunLabyBase;

components
Guard: TGuard;

obstacle TGuard
name 'Gardien';
image 'Characters/Angel';

property NbOfFalse: Integer;

on Pushing do
var
Selected: Integer;
begin
inherited;
if not KeyPressed then
Exit;

Selected := Player.ShowSelectionMsg('Connais-tu la formule magique pour passer ?',['Oui', 'Non']);
if Selected = 0 then
begin
Selected := Player.ShowSelectionMsg('Quelle est la formule ?',
['Abracadabra','Barbatruc','Machin chose','Sésame, ouvre toi','Youpi youpla']);

if Selected = 3 then
begin
Player.ShowMessage('C''est bon, tu peux passer.');
Square.Obstacle := nil;
end else
begin
Player.ShowMessage('Désolé, ce n''est pas la bonne formule !');
NbOfFalse := NbOfFalse + 1;
if NbOfFalse = 2 then
begin
Player.ShowMessage('Cela fait 2 fois que tu te trompes de formule,'+#10+
'Désolé, tu ne pourras plus passer par ici !!');
Square.Obstacle := nil;
Square.Field := Wall;
NbOfFalse := 0;
end;
end;
end;

if Selected = 1 then
Exit;

end;
end;

end.

Comme on peut le constater, ici on ne prend en compte que la bonne réponse (if Selected = 3),
c'est l'instruction end else qui permet de décrire ce qui se passe si la valeur de Selected est différente de 3.
La ligne NbOfFalse := 0 permet de réinitialiser le compteur de mauvaise réponse,
au cas où un autre gardien se trouve sur le chemin du joueur.


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB