Rechercher - Liste des utilisateurs
Version complète : Débutants
Accueil » FunDelphi » Débutants
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
DerF_44
Je cherche le moyen de pouvoir diviser par 2 un Integer en arrondissant le résultat pour qu'il reste entier…
J'ai cherché sur le Net, mais p… c'est super pénible de chopper une réponse simple !. (Si quelqu'un connait des sites genre tuto pour débutants en Delphi, je suis preneur de liens !… ).
Donc, imaginons qu'un joueur possède un certain nombre de points de vie et qu'il subisse un effet qui divise par 2 son capital points de vie :

Player.LifePoints := Player.LifePoints /2;
Si le joueur possédait 100 pts, aucun blèm, mais si il en avait 99 ça le fait pas !..
Une soluce magique ?…
(Du genre int(Player.LifePoints) ?!.)
sjrd
Il paraît que celui-là est bien :
http://fbeaulieu.developpez.com/guide/ [fbeaulieu.developpez.com]
(il faut sauter la page 4, qui parle uniquement de l'EDI Delphi, pas du langage, et qui est donc inutile dans FunLabyrinthe).
En fait après un rapide coup d’œil ce devraient être les pages 5 à 8 qui t'intéresseront.

Sinon il faut utiliser div au lieu de / car / c'est la division flottante, alors que div c'est la division entière (euclidienne). Donc 5 div 2 = 2.
DerF_44
Super !.. (Encore) Merci sjrd !.
Impec' le coup du div !.
Quant au lien, oui ça a l'air de pas mal m'intéresser !.. Je te confirmerais lorsque j'y aurais passé quelques nuits dessus !..
Merci !
DerF_44
Deux petites questions (car je suis un peu perdu là !) :
Sur un projet multi-cartes, je cherche le moyen de poser un effet sur une carte précise, (en fonction d'une certaine condition) mais pas forcément la carte où se trouve le joueur.. Comment écrire ça en FunDelphi !!??..
Comment désigner la carte en question et en même temps les coordonnées de la case !!!?

De la même manière je voudrais pouvoir tester si un point précis d'une carte (précise !) contient un effet (précis !) !!?..

Merci d'avance !.

sjrd
Tu peux faire référence à une coordonnées précise d'une carte précise avec
Master.Map['IDDeLaMap'].Map[Point3D(5, 4, 2)]
et donc à son effet en ajoutant .Effect, comme d'habitude.
DerF_44
Houlà là !!!.. Je suis impressionné de la simplicité de la réponse !!! Excellent !.
Dire que j'ai trituré dans tous les sens des var, des Pos: T3DPoint, et autres TQualifiedPos en passant par des Master.Map !!!!!!!
J'ai bien fait de demander !!!
Merci BEAUCOUP !!!
Je vais tester la chose ce soir, cool !!
DerF_44
Bon, ça se gâte !… Je suis sur un truc qui me semble un peu coton et dont je pourrais me passer mais bon…
Avant d'expliquer plus en détail ma problématique, je bloque sur 2 fonctionnements de base tout “bêtes” :
Le premier :
Master.Map['MaCartePerso'].Map[Point3D(5, 5, 3)].Effect := MonEffet;
Ok, et si je veux poser une clé d'or à la place de MonEffet !!??..
C'est pas (encore) très clair ces histoires de ObjectDef ou ObjectTool !..
Le second :
Dès que je souhaite utiliser des else ça se passe pas bien !!..
if Player.Tag = 666 then
Player.Lose;
else
Player.ShowMessage('Tu es vivant !');
end;
Est-ce correct ???.. Et si j'ai plusieurs lignes d'instructions dois-je poser "begin“ et ”end else" ?!.

Ok, passons à beaucoup + balaise !!!
J'ai une salle carrée avec 4 angles…(si si !) Je voudrais poser une clé d'or dans un seul des 4 angles de manière aléatoire !!!!
Et je ne sais comment m'y prendre !.. Dois-je contruire un plugin qui gèrera une property “EmplacementDeLaCle” ?.. Un effet ?.. des var ?????
Dans le cas d'un plugin, et de sa property EmplacementDeLaCle := Random(4)+1 j'aurais un truc du genre :
if Player.Tag = 123 then
if PluginAleatoire.EmplacementDeLaCle = 1 then
Master.Map['MaCartePerso'].Map[Point3D(1, 1, 1)].OBJECTmachin := GOLDENKEY(S);
if PluginAleatoire.EmplacementDeLaCle = 2 then
Master.Map['MaCartePerso'].Map[Point3D(10, 1, 1)].OBJECTmachin := GOLDENKEY(S);
............etc
end;
end;
????… (MàJ du post : L'avant-dernier end; n'est-il pas de trop !!?)
Est-ce “propre” comme façon de faire !??… (en dehors de ces p… d'objectdef mystérieux !!)

(J'avais l'ambition d'écrire mon projet le + correctement possible, mais je suis trop débutant et mon projet est trop lourd pour ce faire, la bidouille-brouillonne revenant à grands pas, j'essaye dans la mesure du possible de la tenir à distance, aussi je te remercie d'y participer grandement !)




sjrd
DerF_44
Ok, et si je veux poser une clé d'or à la place de MonEffet !!??..
C'est pas (encore) très clair ces histoires de ObjectDef ou ObjectTool !..
.Tool := GoldenKey;
DerF_44
Est-ce correct ???.. Et si j'ai plusieurs lignes d'instructions dois-je poser “begin“ et ”end else” ?!.
Non ce n'est pas correct. Il ne faut pas de ; avant le else. Et il n'y a pas de end; à la fin. Les end vont avec les begin.
Donc ce doit être :
if Player.Tag = 666 then
Player.Lose
else
Player.ShowMessage('Tu es vivant !');
En fait les then et else doivent être suivis d'exactement une instruction. Tu peux grouper plusieurs instructions (ou une seule d'ailleurs) en une avec begin..end. Ce qui te permet de faire :
if Player.Tag = 666 then
begin
Player.Lose;
end else
begin
Player.ShowMessage('Tu es vivant !');
end;
Et alors d'ajouter d'autres choses si tu veux. Note que ; est réapparu à la fin de Lose, car là où il n'est pas c'est entre le end et le else.
Dans ce nouveau code, l'unique instruction du then est :
begin
Player.Lose;
end
et celle du else est :
begin
Player.ShowMessage('Tu es vivant !');
end
DerF_44
J'ai une salle carrée avec 4 angles…(si si !) Je voudrais poser une clé d'or dans un seul des 4 angles de manière aléatoire !!!!
Et je ne sais comment m'y prendre !.. Dois-je contruire un plugin qui gèrera une property “EmplacementDeLaCle” ?.. Un effet ?.. des var ?????
Dans le cas d'un plugin, et de sa property EmplacementDeLaCle := Random(4)+1 j'aurais un truc du genre :
Une var avec un Random est le plus approprié. Pour chaîner des if tu mets else if à partir du second :
var
EmplacementDeLaCle: Integer;
[...]
EmplacementDeLaCle := Random(4) + 1;
if EmplacementDeLaCle = 1 then
Master.Map['MaCartePerso'].Map[Point3D(1, 1, 1)].Tool := GoldenKey
else if EmplacementDeLaCle = 2 then
Master.Map['MaCartePerso'].Map[Point3D(10, 1, 1)].Tool := GoldenKey
else if EmplacementDeLaCle = 3 then
Master.Map['MaCartePerso'].Map[Point3D(1, 10, 1)].Tool := GoldenKey
else
Master.Map['MaCartePerso'].Map[Point3D(10, 10, 1)].Tool := GoldenKey;
Note l'absence de ; avant chaque else, mais il y en a bien un à la toute fin.
Dans ce cas l'unique instruction du else de if EmplacementDeLaCle = 2 then est tout ceci :
if EmplacementDeLaCle = 3 then
Master.Map['MaCartePerso'].Map[Point3D(1, 10, 1)].Tool := GoldenKey
else
Master.Map['MaCartePerso'].Map[Point3D(10, 10, 1)].Tool := GoldenKey
En l'occurrence, tu peux simplifier grandement ceci avec un case :
case EmplacementDeLaCle of
1: Master.Map['MaCartePerso'].Map[Point3D(1, 1, 1)].Tool := GoldenKey;
2: Master.Map['MaCartePerso'].Map[Point3D(10, 1, 1)].Tool := GoldenKey;
3: Master.Map['MaCartePerso'].Map[Point3D(1, 10, 1)].Tool := GoldenKey;
4: Master.Map['MaCartePerso'].Map[Point3D(10, 10, 1)].Tool := GoldenKey;
end;
DerF_44
Trop super extra !!.. Comme réponse !!
Tu ne peux imaginer à quel point je me sens soulagé d'avoir une fois pour toutes les explications claires et concises de ces histoires de if, then, begin, end, et autres else !!!
(Je pense que là c'est bon, c'est “imprimé” !!) Mille fois merci !!!

.Tool := GoldenKey;
Of course !!! Quel boulet je fais !!!.. Tu serais MDR de voir tout ce que j'ai pu tester sur ce sujet !!!
(Ce qui est + inquiétant, pour ma santé mentale, c'est que je suis passé à côté même en explorant des .fnd de la Library !!!!)

Une var avec un Random est le plus approprié. Pour chaîner des if tu mets else if à partir du second :
Alors là, puisque nous sommes dans une rubrique "Débutants" je me permets une remarque qui a tout son intérêt ici : Amis développeurs en FunDelphi :
Respectez bien les retraits et les espaces en début de ligne afin de bien repérer la hiérarchie des différents composants et des boucles conditionnelles !!!!!
Ne l'ayant pas fait correctement je n'ai pu imaginer insérer une var après un if (!), ayant zappé que ce if provenait d'un effet déclaré quelques dizaines de lignes + haut !!!

En l'occurrence, tu peux simplifier grandement ceci avec un case :
Ça me plaît beaucoup ce case !. Je l'ai déjà utilisé, sur tes conseils, dans une procedure (CompartmentDestination(Player:TPlayer)) mais la méthode me paraissait complexe pour oser la réutiliser.. Tandis que là, c'est clair, net et précis !.. Géant !!

Encore merci sjrd, vraiment !

DerF_44
Broutilles de détails sur les retours de lignes des messages…
Si le code suivant :
Player.ShowMessage('Ligne 1'+#10+'Ligne 2'+#10+'Ligne3');
Affiche d'un seul coup les 3 lignes :

Ligne 1
Ligne 2
Ligne 3


Et le code :
Player.ShowMessage('Ligne 1'+#11+'Ligne 2'+#11+'Ligne3');
Affiche une à une chaque ligne :

Ligne 1 (Appui sur Enter) puis
Ligne 2 (Appui sur Enter) puis
Ligne 3

En utilisant #13 on obtient le même résultat qu'en utilisant #10 (affichage d'un seul coup des 3 lignes) !..
Quelle est alors la différence entre #10 et #13 ??..
J'ai effectué des recherches sur le Net, mais je n'ai rien trouvé de concis !

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