Forum FunLabyrinthe

Le jeu de labyrinthe fun et gratuit - Retour au site

  • Vous n'êtes pas connecté.

#1 oct. 2, 2013 21:43:50

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

A.A.A. (Aides Aux Apprentis)

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

Hors-ligne

#2 oct. 28, 2013 11:21:03

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

A.A.A. (Aides Aux Apprentis)

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.


(°!°) DerF

Modifié DerF_44 (nov. 5, 2013 12:17:47)

Hors-ligne

#3 oct. 28, 2013 20:35:01

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

A.A.A. (Aides Aux Apprentis)

Rien à redire ^^


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#4 oct. 29, 2013 14:46:26

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

A.A.A. (Aides Aux Apprentis)

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

Modifié DerF_44 (oct. 29, 2013 15:07:03)

Hors-ligne

#5 nov. 11, 2013 11:50:37

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

A.A.A. (Aides Aux Apprentis)

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.




(°!°) DerF

Modifié DerF_44 (nov. 11, 2013 11:51:45)

Hors-ligne

Pied de page

Modération

Powered by DjangoBB

Lo-Fi Version