Accueil > Forum > > > > Problème d'aléatoire
Problème d'aléatoire
mercredi 14 mai 2008 à 17:44:41 |
Problème d'aléatoire

artmonchrie2
|
Bonjour à tous, Je crée un générateur de jeu de role et dans celui-ci je suis souvent amené à faire des jets de dé. Le jeu demandant différents types de dés j'ai créé la procédure suivante function DE(nombre : integer):integer; var Nb : integer; begin randomize; if nombre = 100 then Nb := random(100) //On considère que le dé 100 va de 00 à 99 else Nb := random(nombre)+1;
DE := Nb; end;En plus du générateur j'ai voulu créer une petite fonction qui permet juste de lancé des dés. Sur une fiche je lis le nombre de dés et les types à lancer et j'appelle "n" fois la précédure de lancer de dé. ça compile, mais lorsque je demande de lancer 3 dés 3 (par exemple) le score des dés est toujours le même... Pourtant je ne fait pas 3 DE(3), j'appelle bien 3 fois de suite ma procédure. Ce serait plutôt DE(3) + DE(3) + DE(3) Et pourtant il semblerait que le résultat affiché soit à chaque fois le meme. (2+ 2+ 2 ou 1+ 1+1 etc...) Fait encore plus étrange, quand j'utilise le mode pas à pas, je n'ai plus ce soucis. a croire qu'avec le mode pas à pas, il "n'oublie" pas de refaire des jets aléatoires. Voila la procédure qui lance les dés procedure JETER_DES(nbDes : string; numero : integer; var score : integer; var LBResultat : TListBox); var cpt , defaut: integer; scoreint : integer; //Score intermédiaire ligne : string; //contient les résultats intermédiaires
begin
if StrtointDef(nbDes, defaut) >= 1 then begin for cpt := 1 to strtoInt(nbDes) do begin scoreint := DE(numero); score := score + scoreint; AFFICHE_RESULT(scoreint, ligne); end; LBResultat.items.add(ligne); end;
end;
Est ce qu'il y aurait une faille dans le code que je ne vois pas ? Ou peut -être une feinte ? Merci d'avance
|
|
mercredi 14 mai 2008 à 20:32:46 |
Re : Problème d'aléatoire

f0xi
|
// couper ici --8<---------------------------------------------------- // // et copier dans un fichier.pas vide a renomer en "JDRDes" unit JDRDes;
interface
uses Windows, SysUtils;
type TDes = record faces: byte; min : Shortint; max : Shortint; end;
TDesType = ( dtD2, dtD3, dtD4, dtD5, dtD6, dtD7, dtD8, dtD10, dtD12, dtD16, dtD20, dtD24, dtD30, dtD34, dtD50, dtD100 );
function LaunchDe(const DT : TDesType; const ND: byte = 1): integer;
implementation
const DesDatas : array[TDesType] of TDes = ( (faces: 2; min: 1; max: 2), (faces: 3; min: 1; max: 3), (faces: 4; min: 1; max: 4), (faces: 5; min: 1; max: 5), (faces: 6; min: 1; max: 6), (faces: 7; min: 1; max: 7), (faces: 8; min: 1; max: 8), (faces: 10; min: 1; max: 10), (faces: 12; min: 1; max: 12), (faces: 16; min: 1; max: 16), (faces: 20; min: 1; max: 20), (faces: 24; min: 1; max: 24), (faces: 30; min: 1; max: 30), (faces: 34; min: 1; max: 34), (faces: 50; min: 1; max: 50), (faces: 100; min: 1; max: 100) );
function RandRange(const AFrom, ATo: Integer): Integer; begin if AFrom > ATo then Result := Random(AFrom - ATo + 1) + ATo else Result := Random(ATo - AFrom + 1) + AFrom; end;
function LaunchDe(const DT : TDesType; const ND: byte = 1): integer; begin result := RandRange(DesDatas[DT].min*ND, DesDatas[DT].max*ND); end;
initialization Randomize;
end. // couper ici --8<---------------------------------------------------- // contient tout les des (ou presque) standards et speciaux a utiliser comme suit : Lc := LaunchDe(dtD6); // 1D6 [1..6] Lc := LaunchDe(dtD20, 2); // 2D20 [2..40] Lc := LaunchDe(dtD8, 2)+6; // 2D8+6 [8..22] Lc := LaunchDe(dtD100, 3); // 3D100 [3..300] Lc := LaunchDe(dtD10,2)-2; // 2D10-2 [0..18]
ou encore :
case LaunchDe(dtD20) of 1..10 : ActEchec; 11..17 : ActNormal; 18..19 : ActPerfect; 20 : ActMaladresse; end;
case LaunchDe(dtD6,3) of 3 : PeonDestiny; 9 : RoyalDestiny; 12 : KnightDestiny; 15 : DivineDestiny; 18 : EvilDestiny; else NormalDestiny; end;
|
|
mercredi 14 mai 2008 à 22:21:15 |
Re : Problème d'aléatoire

JulioDelphi
|
Excellent foxi :) Mais artmonchrie2 (sans vouloir être vexant) a t-il le niveau pour comprendre sans explications ? Art: Tu peux modifier ça : function DE(nombre : integer):integer; var Nb : integer; begin randomize; if nombre = 100 then Nb := random(100) //On considère que le dé 100 va de 00 à 99 else Nb := random(nombre)+1;
DE := Nb; end;
en ça : Function De(const Nombre: integer): integer; begin if Nombre=100 then Result := Random(100) else Result := Random(Nombre)+1; end; Pour la deuxième fonction, efface là et recommence là depuis 0 :p ... ou utiliser les dés de foxi =)
|
|
jeudi 15 mai 2008 à 14:49:30 |
Re : Problème d'aléatoire

f0xi
|
"sans vouloir être vexant) a t-il le niveau pour comprendre sans explications ? " le code, pas forcement, mais il verra vite de quoi il s'agit si il s'y connait en JDR. moi quand je vois 1D6 ou 3D4 je pense JDR tout de suite, épée d'elfe rouge+8 et jets critique. huhuhu donc la, 1 fonction, 2 parametres (1 facultatif) ... y'a pas plus simple.
|
|
jeudi 15 mai 2008 à 15:06:18 |
Re : Problème d'aléatoire
|
jeudi 15 mai 2008 à 18:37:42 |
Re : Problème d'aléatoire

artmonchrie2
|
Merci pour ton code Foxi, mais ça ne réponds pas vraiment à ma question. Je vois que ton générateur de dé est plus puissant (déjà il lance plusieurs dés à la fois ^^) mais le mien marche quand même. En plus je m'en sers déjà bcp dans le reste du générateur et il marche trés bien! Donc si je pouvais éviter de tout reprendre ! J'ai fait quelques nouveaux tests dont voici les résultats : si je rajoute pas mal d'opérations entres les différents appels de dé (ex rendre visible puis invisible moultes fois un composant) y a de l'amélioration, le D3 n'a plus toujours la même valeur, par contre il n'en prends que deux différentes à chaque fois... (j'ai jamais eu de 1, 2 et 3 ... etc en un tirage...) louche.. et par contre si aprés chaque résultat j'affiche le résultat avec un showmessage, ça passe impec... trés louche j'ai a chaque fois un résultat qui semble vraiment aléatoire.
D'où ça peut venir ?
Ptite question en plus, ça sert à quoi de mettre "const" dans l'entete de la fonction avant "Nombre : integer"
|
|
jeudi 15 mai 2008 à 18:47:28 |
Re : Problème d'aléatoire

artmonchrie2
|
J'ai trouvé...
Trop pourrie la solution,
j'ai changé le randomize de place, je l'ai appelé une seule fois dans le programme principal et plus du tout dans la fonction DE. Je ne sais pas pourquoi, mais depuis ça marche, même sans intercaller la moindre action intermédiaire..
En tout cas merci à vous deux pour votre aide
|
|
Cette discussion est classée dans : nombre, var, integer, dés, score
Répondre à ce message
Sujets en rapport avec ce message
Convertissent une source [ par tairodel ]
TAIROdel Qui je convertissent une source de DOS de Delphi en source de GUI de Delphi program SMTPserver; {$DEFINE Debug} {$IFDEF Debug} &nb
[TP7] Concaténér une chaîne [ par ghuysmans99 ]
Bonjour à tous.Je suis en train de faire une fonction de cryptage xor en Turbo Pascal 7.Seul petit problème : il ne veut pas ajouter le caractère cryp
Afficher un nombre aléatoire [ par Dagnir ]
Salut, Bon voila mon but :Quand on clic sur mon bouton il y a un nombre (aléatoire) qui s'affiche dans un champ.Dans l'aide j'ai trouvé :function Rand
besoin d'aide sur arbre et récursivité SVP [ par garcimore ]
Je débute sur la récursivité, les pointeurs et les arbres.J'avoue que je trouve ça hard. J'utilise le pas à pas pour bien me représenter ce que cela d
probleme quand je creer ma procedure [ par damomospike ]
bonjour a tous!voila je voulais apprendre à creer ma propre procedure, en cherchant j'ai a peut prés trouvé se qu'il falait faire mais y me manque que
i++ ++i i-- --i aide svp [ par FFCAST ]
bonjour je voudrai savoir si on peut ameliorer ceci function PPI(var i: integer; const n: integer): integer; inline; overload;// ++I function IPP(va
caption et labels [ par Marion0904 ]
Bonsoir,Je voudrais faire des sauts de ligne dans des labels...En fait, j'écris le résultat d'un tableau par ligne et le nombre de ligne est choisi pa
compter nombre d'occurence [ par architect ]
Bonjour, Je suis tout nouveau et surtout tout débutant sous delphi. J'ai une question qui me tracasse et que je ne trouve pas sur le net : Imaginons
valeur hexadecimal d'un nombre [ par fabiin ]
Salut !Comment faut-il fairepour connaite la valeur hexadecimal d'un nombre ???Merci par avance@+Fabs
Nombre Impair et pair [ par Delphimaneu ]
salutje voudrai savoir si quelqu'un c'est comment faire en delphi pour savoir si un nombre donné est impaire ou paire ?Merci d'avance @+
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|