Bonjour j'aimerais savoir comment faire apparaitre un objet aleatoirement dans game maker car j'ai fait le casse brique qui a pour base celui du site du zero mais modifier et j'aimerais rajouter des bonus quand on casse une brique mais pas sur toute les briques j'aimerais que sa soit aleatoire
++
![]()
Utilise la fonction random(1), et puis dépendant de si elle retourne 1 ou 0 elle crée le bonus ou non.
Ca date de 2 ans je sais mais wtf la réponse de dragone169 est incompréhensible
Sérieux quand je lis ça, ça ne m'avance absolument pas. C'est bien qu'il veuille aider mais c'est chiant ce genre de réponse où rien n'est expliqué ![]()
Ouais enfin ça explique pas le déterrage...
Et bien sûr que si, c'est tout à fait compréhensible ![]()
Effectivement je comprends la solution proposer ... tu peut nous indiquer ques ce que tu ne comprends pas ?
(Pour le déterrage c'est très facile a comprendre, il a le même soucis que cette personne et a fait une recherche sur google et à atterri ici (enfin c'est ce qu'il me semble le plus logique(voila pourquoi j'aime pas quand un certain modérateur force les gens à poster les question sur un seul topic, ça laisse des post avec des question sans réponse qui serons frustrante pour les personnes qui, pour une fois, recherche sur le forum au lieu de flooder bêtement)))
C'est tout à fait compréhensible pour des personnes qui connaissent un minimum le logiciel. Mais quand tu apprends et que tu ne connais pas trop, c'est pas Français.. R2MI390 -> Faudrait savoir, les gens s'en prennent plein la gueule quand ils postent de nouveaux topics et ils s'en prennent plein la gueule quand ils recherchent d'eux même... "Oui mais il y a un topic GM" avec plein de pages, plein de personnes différentes ayant plein de problèmes, là le topic est focalisé sur un problème, c'est plus pratique.
scorpionnocrag -> Oui c'est ça, les gens te disent de rechercher, mais souvent les topics ne sont pas complets. Par contre mon problème n'est pas tout à fait le même que l'auteur, mais j'ai aussi besoin de faire apparaître des ennemis aléatoirement, certains avec une probabilité plus élevée que d'autres, mais je ne sais aps du tout comment ça fonctionne.
"Utilise la fonction random(1)" ça c'est Français mais je ne sais pas où, comment l'utiliser etc... J'essaie d'apprendre le logiciel sur le site officiel mais j'ai l'impression de ne pas avancer, c'est un peu comme si tu cherches une définition d'un mot sur wikipedia, il y a tellement de choses que tu es perdu et au final ça ne t'avance pas. C'est très intéressant mais pour une personne comme quoi qui apprend et qui ne connait pas trop, c'est pas évident. Même en ayant lu les bases.
"et puis dépendant de si elle retourne 1 ou 0"
Je pense voir et identifier la chose, mais je ne sais pas du tout comment procéder à ça.. Random = aléatoire, on est d'accord.
Mais 1 = ?
0 = ?
Je ne sais pas ce que ça signifie.
"Dépendant de si elle retourne" ... Je pense qu'il voulait dire "dépendamment", mais je suis pas plus avancé ![]()
J'avais trouvé ce lien http://fr.openclassrooms.com/forum/sujet/aide-pour-game-maker-1#.U45u4PnV-Gc qui correspond un peu plus à ce que je voudrais.
"La fonction random_range(a, b) génère un nombre décimal aléatoire entre a et b. Crée un objet qui fait apparaître les météorites avec x = random_range(0, <taille de ta room – longueur d'une météorite>) et y = – hauteur d'une météorite. Pour gérer le délai entre les apparition, tu peux utiliser des alarms."
Donc une fonction random c'est juste le fait de mettre le mot random dans un code ?
Mais pourquoi doit on mettre la taille de la room, la longueur et la hauteur de l'objet ?
Puis le 0 = ?
Quand je crée l'objet avec ce code, c'est un objet placé dans la map qui aura une influence sur d'autres objets où je dois directement placer ce code dans l'objet en question ? Fin bref un débutant peut se poser des tas de questions dont les plus confirmés ne se soucient pas forcément car ils ont compris la logique de Game Maker.
En faite random c'est juste pour avoir quelque chose d’aléatoire (un nombre) souvent de 0 a 1 (avec plein d'intermédiaire hein ! 0.2 / 0.548 / 0.84215)
C'est à toi de l'utiliser après comme tu le veut. Je vais prendre un exemple (mais je ne connais pas du tout gamemaker donc à toi d'adapté, je te donne juste la logique)
Donc exemple, je souhaite placer un carré (dans un monde en 2d) au hazzard sur l'écran, j'ai donc besoin de hazard => donc de random. Je vais donc demander a random de me donner un nombre entre 0 et 1, admetons qu'il me donne 0.6
J'ai donc un nombre "aléatoire", admetons que c'est le nombre aléatoire de la hauteur, il doit donc être a 0.6 de hauteur (le 0 c'est le bas, le 1 c'est le haut) maintenant si tu as une hauteur max (la taille de l'air de jeu) de 1000 pixel, tu as juste à multiplier ta hauteur max, par ton chiffre random => 0.6 * 1000 = 600.
Il faut recommencer cette logique pour la largeur, et ainsi avoir un positionnement "aléatoire". Tu as donc enfin les coordonné X et les cordonner Y (cordonné vertical / horizontale). Il ne te reste plus qu'a créer ce que tu souhaite créer à cette endroit.
Tu peut avoir aussi des fonctions comme tu l'a indiquer : randomrange(A,B). c'est le même fonctionnement que plus haut, admettons tu as une hauteur de 1000, tu veut le placer aléatoirement, ça fait randomrange(0,1000). Cette fonction permet d’affiner le chiffre obtenu, admettons que tu veuille que ce ne soit que dans la parti supérieur de l'écran, c'est donc entre 500 et 1000 que tu veut créer l'objet, donc tu fais : randomrange(500,1000).
Bref, à toi d'adapté à ton projet. C'est normalement suffisamment détaillé.
Tu sembles très débutant donc je vais rajouter mon grains de sel à l'explication.
Dans game maker t'as des fonctions répertoriées dans une liste consultable dans la documentation (F1 pour l'ouvrir, onglet index)
Une fonction c'est comme par exemple sur ta calculatrice. Tu veux connaitre le cosinus de 5 tu vas appuyer sur "cos" (la fonction) puis sur 5.
Cos est une fonction qui permet de retourner (retourner veux dire renvoyer le résultat) le cosinus du nombre voulu.
Dans game maker il existe des centaines de fonctions servant à diverse choses.
Par exemple pour cos il suffit d'écrire cos(5) pour avoir le cosinus de 5.
Tu pourras quand tu seras un peut plus expérimenté en créer des nouvelles avec les scripts. Script=fonction en réalité
Toutes les icônes que tu déplaces dans des évènements sont en fait une représentation graphique des ces fonctions. Derrière chaque icône se cache une ou plusieurs fonction. L’intérêt d'utiliser le gml c'est que déjà tu as 100 fois plus de fonctions disponible et puis pour faire des algorithmes c'est le gros bordel avec les icônes (un algorithme c'est une succession de conditions qui mène à un résultat).
Dans ton cas tu veux obtenir un résultat aléatoire qui déterminera si on crée le bonus ou pas.
la fonction random() renvoie des valeurs décimal aléatoire donc des valeurs avec plein de chiffres après la virgule. Ce n'est pas ce qu'il te faut.
Toi tu as besoin de nombres entiers. Tu as 2 solutions pour ça, la 1er la plus logique utiliser une autre fonction qui elle ne renvoie que des nombres entiers et elle s'appelle irandom(). L'autre solution que tu n'as pas besoin de te servir ici mais qui pourra t'être utile plus tard c'est d'utiliser une autre fonction "round()" qui arrondie les valeurs à l'unité et de la combiner avec random()
exemple: round(random(10))
Ces fonctions comme je l'ai dit renvoient un résultat mais ce résultat se volatilise si il n'y a pas une variable pour le contenir.
La variable n'est rien de plus qu'un nom (sans espaces ni accents ou caractères spéciaux) associer à une valeur.
Tu peux dire par exemple:
test_aleatoire=irandom(1)
test_aleatoire renfermera alors 0 ou 1 suivant le résultat.
Une fois que le programme connais la valeur de cette variable tu peux effectuer une condition avec un "if" (si) qui posera une question pour effectuer un résultat en fonction de cette réponse (c'est un mini algorithme) entre des " { } "
test_aleatoire=irandom(1) // calcul du test aléatoire
if test_aleatoire==1 // si la valeur de cette variable est = à 1
{
instance_create(x,y,obj_bonus) // alors la fonction instance_create()
// créer l'objet bonus au position x y
}
Ce code doit être lu lors de la destruction de l'objet.
Si tu veux réduire les chances d'avoir un bonus au lieu de une chance sur deux avoir une chance sur trois il te suffit d'augmenter la valeur de irandom()
exemple pour irandom(2)
le résultat pourra être 0 , 1 ou 2
Si dans une autre utilisation tu ne veux pas que le test parte de 0 mais de 20 par exemple tu écriras:
irandom(2)+20
les résultats possible seront 20, 21 ou 22
Merci à vous pour ces explications détaillées !
J'en avais grandement besoin! J'ai compris un peu la base. Ca va beaucoup m'aider.
Pour être sûr d'avoir compris, si je veux par exemple 2 ennemis dont un qui apparait moins souvent, je vais devoir mettre quelque chose du style
apparition_aleatoire=irandom(1)+0
if apparition_aleatoire==1
{
instance_create(8,7,ennemi_aléatoire1)
}
apparition_aleatoire1=irandom(5)+1
if apparition_aleatoire==5
{
instance_create(9,7,ennemi_aléatoire2)
}
C'est un code à mettre dès le début de la room.
Je me trompe ? (Juste un truc, ce code n'est pas à mettre sur l'objet en question, j'ai juste à créer un objet invisible qui s'activera dès le début, et c'est dans cet objet que le code sera écrit ?)
J'ai mis de la gravité à l'objet, l'objet apparaît et tombe, normalement il devrait réapparaître souvent non ? Hors là il n’apparaît plus.
Je précise que j'ai placé le code en faisant clique droit sur la zone de la room et j'ai fait "creation code".
Il faut effectivement que tu ais un objet invisible qui contrôle ce genre de chose et qui servira pour d'autre trucs.
Du coup ton code est fonctionnel y'a pas d'erreurs (à part le +0 qui sert à rien ^^)
Mais en fait je viens de regarder le lien que tu as mis et du coup il faut s'y prendre autrement.
Dans l'évènement create de cette objet tu vas lancer une alarme:
alarm[0]=1
(Les alarmes lisent le code qu'elles contiennent tous les x steps (step = frame).
Exemple je veux que dans 90 steps mon objet soit détruit je vais dire dans l'event create: alarm[0]=90 et dans l'event alarme 0 je vais dire instance_destroy() )
Dans l’évènement alarme 0:
c'est ici que tu va créer tes ennemis. Donc tes ennemis vont se créer tous les x step et il serrait bien aussi qu'ils se crée à des positions aléatoire:
test_aleatoire=irandom(4)
if test_aleatoire==0
{
instance_create(random(view_xview),0,obj_ennemi1)
}
test_aleatoire=irandom(1)
if test_aleatoire==0
{
instance_create(random(view_wview),0,obj_ennemi2)
}
etc... pour tous les ennemis
Et tu relance l'alarme d'une valeur aléatoire :
alarm[0]=random(130) par exemple
Dans la fonction instance_create() je n'ai pas mis de valeur à l'emplacement de "x" à la place j'y ais placé la fonction qui permet d'obtenir une valeur aléatoire.
view_xview est une variable de game maker elle fait partie du moteur du logiciel comme x et y image_speed direction image_angle... cette variable renvoie la taille de la view (la caméra) en x. Si par exemple ton affichage est de 800 pixels en x alors l'ennemi sera crée à une position aléatoire comprise entre 0 et 800 et à 0 en y.
D'accord merci de ta part de prendre le temps de m'aider ! Je vais tester ça plus tard ! Mais je sais déjà que je vais devoir changer certaines choses car j'ai besoin que les ennemis se créent tous en haut à des positions aléatoires (ou bien à une certaines hauteur de l’écran)et qu'ils "tombent". Je ne pense pas que ce soit compliqué à faire. Je dois simplement changer les valeurs.
Par contre
test_aleatoire=irandom(4)
if test_aleatoire==0
{
instance_create(random(view_xview),0,obj_ennemi1)
}
test_aleatoire=irandom(1)
if test_aleatoire==0
{
instance_create(random(view_wview),0,obj_ennemi2)
}
Si je comprends bien, la zone des nombres entiers sont bien distincts entre les deux ennemis ? L'ennemi 1 c'est entre 0 et 4 qu'il apparaît.
L'ennemi 2 entre 0 et 1. Il ne se créera pas de conflits alors ? Ce sont deux réglages différents non ? Je ne sais pas si tu vois ce que je veux dire.
Bon eh bien ça fonctionne partiellement. Je remarque que les objets se créent toujours aux mêmes endroits de la même façon. J'ai lancé plusieurs fois le jeu, ils se créent tous dans une position définie et d'une certaine façon qui ne change pas et parfois il y a des blancs. Rien ne se crée pendant 5 sec et d'un coup 2 ou 3 se créent d'un coup..
Peut on créer de vraies fonctions aléatoires ?
Je ne suis absolument pas sur de ce que je vais dire donc si c'est totalement faux désolé:
Déjà pour ta question: Non, c'est impossible, dans la mesure où l'aléatoire est généralement représenté, dans notre vie courante, comme les évènements dont l'issue dépend de tellement de facteurs que l'on a pas les moyens de les calculer avant qu'ils se terminent (comme quand on lance un dé).
Le problème est que dans le cas d'un PC, tout est programmé, et il n'y a pas de facteur "chance", tout est prédéfini, et contrairement à la main humaine qui lance un dé de façon toujours différente, l'ordinateur, lui, n'en est pas capable:
il tombera toujours sur le même nombre.
C'est pour cela que l'aléatoire sur un PC n'est jamais vraiment présent.
Pour palier à ce problème, la solution la plus simple consiste à prendre un nombre qui change constamment (comme le nombre de millisecondes depuis une date donnée), puis d'effectuer une série d'opérations sur celui-çi, le transformant en un nombre d'aspect aléatoire situé entre 0 et 1.
Ce principe est souvent utilisé dans ce qui ne demande pas une fiabilité maximale (comme un jeu), car il ne demande pas trop de performances.
Donc en imaginant que tu aies bien codé ton jeu, voici ma théorie sur ce bug:
Le random du GameMaker se base peut être sur le temps de départ du jeu, donc les random ayant lieu durant la même milliseconde depuis que le jeu a commencé donneront le même résultat.
Il suffit ensuite que 2 ou 3 tests se passent dans cette milliseconde pour que 2 ou 3 objets se créent d'un coup.
Si éventuellement j'avais raison (peu probable), il faudrait que le temps pris comme base par le random soit le temps depuis une certaine date et non le début du jeu. Il faudrait également que, dans ton code, le nombre requis pour faire spawner un objet soit toujours différent.
Bref je sais pas pourquoi j'écris tout ça sans avoir jamais touché a GameMaker, c'est probablement pas du tout la cause du problème, mais bon on sait jamais...
Le random de GM fonctionne très bien et il n'est pas calculé comme tu l'a décrit.
J'ai juste fait une petite erreur dans le code:
instance_create(random(view_xview),0,obj_ennemi1)
c'est pas view_xview mais view_wview[0]