Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » [Résolu] Génération de nombres aléatoires
Palra Hors ligne Membre Points: 276 Défis: 0 Message

[Résolu] Génération de nombres aléatoires

Posté le 05/11/2013 21:02

Bonjour,

J'ai trouvé sur le forum une fonction permettant de générer un nombre aléatoire entre deux réels :
float randFloat_a_b(float a, [purple]float[/purple] b)
{
    static [purple]int[/purple] ini = [maroon]123456789[/maroon];
    [purple]float[/purple] nb, val;
    srand(ini);
    
    val = (float)(rand()) / RAND_MAX);
    
    nb = a*val+b;
    ini = rand();
    
    [b][blue]return[/blue][/b] nb;
}


Ce code est censé générer des nombres aléatoires dans des délais inférieurs à la 1/120e de seconde, car le RTC de la calculatrice subdivise chaque seconde en 120 sous-divisions, ou 180, enfin peu importe. Dans le jeu que je développe, il s'avère que la génération de deux nombres aléatoires consécutifs se font dans un délai inférieur à 1/120e de seconde, d'où la nécessité d'ajouter une sorte de grain de sel pour corriger le tir, cependant, ce code ne semble pas faire autre chose que de stocker le nombre aléatoire dans l'int ini. Quelqu'un pourrait donc me guider pour faire une fonction de génération aléatoire répondant aux critères cités précédemment ? Merci de votre aide


Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 05/11/2013 21:06 | #


cadeau

tu l’initialise au début et une seule fois avec -get_ticks(), et puis a chaque fois que tu l’appellera, elle te sortira un nombre différent entre 0 et max-1

int random(int max)
{
static unsigned int seed = 0x12345678;
if(max<1)seed=-max;
seed = (0x41C64E6D * seed) + 0x3039;
if(max>0)return ((seed >> 16) % max);

}

Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Palra Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 05/11/2013 21:19 | #


Merci pour la fonction, j'ai bien initialisé srand() une seule fois, au début du main, mais par contre cette fonction ne retourne que des entiers, comment adapter cette fonction pour retourner des flottants ? Parce qu'il n'y a pas d'opérateur modulo pour les flottants si je ne me trompe pas. Ou alors faut il que je demande des nombres par exemple 10 fois plus grands pour que je divise ensuite par 10, si la fonction analogue n'est pas faisable ?
Calculatrice : Graph 35+ modée
Système d'exploitations : Apricity OS - Windows 10
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 05/11/2013 21:28 | #


la fonction que je t'ai donné n'utilise pas srand, tu doit faire au début de ton programme random(-get_ticks());
pour les flottant, il te suffit juste de diviser par le nombre que tu veux pour avoir un simili-flottant (mais c'est pour quel usage?)
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Palra Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 05/11/2013 21:33 | #


Je fais un side-scroller, un vaisseau qui navigue dans l'espace et qui doit éviter les météorites et différents ennemis sur son passage (quelle originalité tiens), l'utilité de cette fonction est de donner une vélocité aléatoire aux météorites.
Calculatrice : Graph 35+ modée
Système d'exploitations : Apricity OS - Windows 10
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 05/11/2013 21:37 | #


dans ce cas la effectivement, utilise une virgule fixe
les nombres flottants sont très lent a utiliser, et ne doivent être utiliser que dans les cas extrêmes.
simplement, génère un nombre 100 fois plus grand que ce que tu voudrais comme vitesse, et quand tu additionne la vitesse et la position de la météorite, tu divise par 100


Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Palra Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 05/11/2013 21:42 | #


D'accord, merci du conseil alors
Calculatrice : Graph 35+ modée
Système d'exploitations : Apricity OS - Windows 10
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 05/11/2013 21:43 | #


de rien
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 23/02/2014 21:22 | #


Pour revenir sur le sujet je comprens pas trop ce que renvoie cette fonction...
Si on lui donne en argument 2, elle va nous renvoyer laquelle de ces combinaisons:
0,1 ou 2
1,2
0,1
Merci d'avance

Ajouté le 23/02/2014 à 21:30 :
C'est bon j'ai trouvé (3 eme proposition) mais mais je comprends pas comment ca fonctionne...
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 24/02/2014 17:19 | #


Si tu parle de la mienne, la voila commentée


//cette fonction renvoie un nombre aléatoire entre 0 et max-1
int random(int max)//si on envoie un nombre négatif, cela l'initialise, sinon cela défini le nombre max
{
static unsigned int seed = 0x12345678;//on retient le dernier nombre
if(max<1)seed=-max;//si on initialise, on remplace le dernier nombre
seed = (0x41C64E6D * seed) + 0x3039;//pour qu'il soit différent a chaque appel
if(max>0)return ((seed >> 16) % max);//on renvoye le nombre %max

}


Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 24/02/2014 23:23 | #


Pfiou... Un peu trop dur pour moi
Je comprend pas la dexieme ligne ... Comment ça peut générer un nombre aléatoire
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 25/02/2014 16:02 | #


En fait le static indique que la variable reste identique au prochain appel de la fonction. Et avec cela, le retour de la fonction sera différent a chaque appel. Mais pour qu'il soit différent a chaque lancement du programme, il faut initialiser la fonction, avec par exemple l'heure
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 25/02/2014 17:20 | #


Heu, pourquoi ne pas utiliser rand() ?

La même fonction que Dodormeur mais avec Rand() :

int randint(int min, int max)
{
    return rand()%max + min;
}


Randint(5, 9); retourne alors soit 5, 6, 7 ou 8.

Il faut juste penser à appeler srand(RTC_getTicks()); au tout début du programme
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 25/02/2014 17:22 | #


Quelle est cette fonction RTC_getTicks() ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 25/02/2014 17:23 | #


Au passage, j'ai supprimé mon message puisque je me suis aperçu qu'il y avait une boulette monstrueuse

Ajouté le 25/02/2014 à 17:26 :
RTC_getTicks() est un syscall qui retourne le nombre de frames (1/128ème de seconde) depuis une certaine date.
La calto possède une horloge qui tourne en permanence, même lorsqu'elle est éteinte, on peut donc accéder à ses valeurs

static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;

int RTC_getTicks()
{
     return (*SysCall)(0, 0, 0, 0, 0x3B);
}

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 25/02/2014 17:29 | #


Une fonction qui permet de connaitre le nombre de 1/128eme de seconde écoulée depuis minuit (selon le processeur)

Elle se trouve la dedans


#define SCA 0xD201D002
#define SCB 0x422B0009
#define SCE 0x80010070

typedef int(*sc_i2cp2sip) (char*, char*, short int*, short int*);
typedef int(*sc_iv) (void);
typedef int(*sc_4i) (int, int, int);

const unsigned int sc003b[] = {SCA, SCB, SCE, 0x3B};
const unsigned int sc0015[] = {SCA, SCB, SCE, 0x15};
const unsigned int sc0248[] = {SCA, SCB, SCE, 0x248};

#define RTC_GetTicks (*(sc_iv)sc003b)
#define PutKey (*(sc_4i)sc0248)
#define GlibGetOSVersionInfo (*(sc_i2cp2sip)sc0015)

int OSVersionAsInt(void)
{
    unsigned char mainversion;
    unsigned char minorversion;
    unsigned short release;
    unsigned short build;
    GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build );
    return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( release & 0x0000FFFF );
}
#define isOS2 (OSVersionAsInt() >= 0x02020000)
#define OS2(x,y) ((OSVersionAsInt() >= 0x02020000)?y:x)
static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;

void key_inject1(int keycode)
{
    (*SysCall)(keycode, 0, 0, 0, 0x248);
}

int time_getTicks()
{
    return RTC_GetTicks();
}

Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 25/02/2014 17:33 | #


C'est donc là-dessus qu'est basé l'add-in horloge ?

Ajouté le 25/02/2014 à 17:46 :
Je crois que je viens de comprendre comment vous maniez les syscalls...
En fait vous mettez du code asm (compilé ?) dans la mémoire, en l'allouant soi-disant pour un tableau d'int, et vous créez une fonction que vous faites pointer à l'adresse du tableau.
Ainsi, quand vous appelez (*SysCall), la fonction executée est celle définie dans le premier tableau.
Et je suppose que pour le code assembleur vous placez un id dans un registre puis vous appelez le système ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 25/02/2014 17:47 | #


En partie, oui
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 25/02/2014 17:50 | #


C'est-à-dire ?
Eh oui je suis très collant quand je m'y mets
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 25/02/2014 18:22 | #


Le "en partie" portait sur la première partie du message

Pour les syscalls, c'est l'abréviation de "system call". En gros, cents une fonction que l'on retrouve de base dan l'OS, et que l'on appelle via les pointeurs ci-dessus
Ca permet une plus grande rapidité pour une taille plus faible, puisqu'il n'y a rien a compiler
Finir est souvent bien plus difficile que commencer. — Jack Beauregard

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 191 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd