| | [tout langage] Conversion GML > fonctions | |
|
+6glcraft onilink_ Oculus Sekigo Le Magnifique Vivi blendman 10 participants | Auteur | Message |
---|
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 9:26 | |
| salut Voilà l'idée de ce sujet : Prendre une/des fonctions GML et les convertir dans un langage, pour pouvoir ensuite les utiliser dans ce langage comme on les utilise dans GM. exemple d'onilink_ La fonction max() de GM donne en c++ : - Code:
-
inline double max(double x, double y, double z) { if(x>y) { if(x>z) return x; else return z; } if(y>z) return y; return z; }
Si j'ai bien compris inline permet d'utiliser une fonction à l'intérieur d'une autre, c'est ça ? Autre exemple (de jbg77) : place_free(x,y) code c++ : - Code:
-
int place_free(int x,int y,int solid_zone_x,int solid_zone_y,int solid_zone_x_2,int solid_zone_y_2 ) { int retourne = 1; if (solid_zone_x < x && solid_zone_x_2 > x && solid_zone_y < y && solid_zone_y_2 > y) retourne = 0; return retourne; }
Bien sur, les codes comme ça sont incomplets pour certains, mais on a déjà une idée de la façon d'implémenter la fonction, ce qui peut aider . Si vous avez d'autres fonctions converties n'hésitez pas . |
| | | Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 10:52 | |
| inline c'est pour que le compilateur remplace directe le code de la fonction partout ou il est appelé, comme ça pas d'appel de fonction et c'est beaucoup plus rapide. |
| | | blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 11:13 | |
| - vivicool a écrit:
- inline c'est pour que le compilateur remplace directe le code de la fonction partout ou il est appelé, comme ça pas d'appel de fonction et c'est beaucoup plus rapide.
ah ok, c'est un peu l'équivalent d'une macro en purebasic alors . L'exe est un peu lourd du coup, j'imagine (enfin, pas de beaucoup non plus ) |
| | | Sekigo Le Magnifique Utilisateur confirmé: Rang *****
Messages : 1720
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 11:20 | |
| Ce topic est à la fois une bonne idée et une mauvaise idée. Elle part d'une bonne intention. Seulement, il est impossible d'avoir une méthode "unique" par langage. Parce qu'il va y avoir autant de méthode de programmer un truc que de programmeur. Bon, pour les fonctions type min() et max(), ça va, on prend deux valeurs à comparer et on retourne le résultat. Après, c'est de la récursivité pour appliquer ça à un ensemble de valeur. Mais même là, ça pose problème. Parce que si tu veux comparer deux valeurs entières, ok. Mais imagine que tu souhaites comparer les valeurs entières d'un tableau ? La méthode est la même dans le fond, mais la mise en application sera différente. En plus, en python, il y a plusieurs méthodes built-in pour comparer des trucs entre eux. Par exemple, pour deux valeurs : - Code:
-
cmp(x, y) Retourne une valeur positive si x>y, une valeur négative si x<y, et 0 si x=0 Pour une liste ou tout ce qui est itérable : - Code:
-
max(liste) Retourne la valeur la plus grande dans la liste Suivant que tu utilises l'un ou l'autre, ton programme sera grandement différent. Idem pour place_free : - Code:
-
# Méthode personelle pour vérifier si une position comporte un objet def place_free(x, y): if (x,y) in liste_instance.position: return liste_instance.position[x,y] else: return False
C'est la méthode strictement "Game Makerienne". Il y a deux attributs à donner à la méthode. Mais cela demande de programmer en amont les sprites, les masks de collisions, etc... L'exemple de place_free que tu as donné plus haut demande 6 attributs. Seulement, il utilise les int. Si tu souhaites utiliser des tableaux, faudra la modifier. Seulement, suivant les cas, on utilisera soit les int, soit les listes, soit d'autres types de structures. Et là, ça va devenir bordélique. Parce que si tu modifies une méthode, faudra modifier toutes les autres, si on fait un index de méthodes type strictement GM pour d'autres langages. Donc, en gros, pour avoir ce genre d'index, faudrait refaire TOUTE la structure de GM. Avec les instances d'objets, les attributs, etc... Et il y aura toujours untel qui préférera utiliser les dictionnaires, alors que bidule trouve que c'est des conneries et qu'il faut utiliser des nombres entiers. Et je ne parle même pas des différences entre langages, et surtout entre bibliothèques. Par exemple, sur Pygame, j'ai utilisé une méthode un peu comme GM. En testant SFML, je dois revoir tout le programme parce que la structure est totalement différentes. Donc, mes anciennes méthodes pour calculer les scrollings tombent à l'eau. |
| | | blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 11:28 | |
| - Sekigo Le Magnifique a écrit:
- Ce topic est à la fois une bonne idée et une mauvaise idée.
Elle part d'une bonne intention. Seulement, il est impossible d'avoir une méthode "unique" par langage. Parce qu'il va y avoir autant de méthode de programmer un truc que de programmeur. Je comprends ton raisonnement et tu as raison. Mais en fait, je ne voyais pas cela comme absolue, mais juste comme des pistes, des petites idées, si on ne sait pas comment faire telle chose . Il m'est arrivé de pouvoir récupérer des codes c++ que j'avais fait et de les convertir en purebasic. Je voyais plus cela comme une base, éventuellement une piste, pour éviter d'être dans le flou total lorsque l'on veut créer une fonction plus ou moins équivalente à GM |
| | | Sekigo Le Magnifique Utilisateur confirmé: Rang *****
Messages : 1720
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 11:38 | |
| Oui, ne t’inquiète pas, j'ai compris que tu voulais donner des pistes plutôt qu'une espèce de bible universelle et absolue. Mais je pense qu'il faudrait mieux le faire au cas par cas. Ou alors, encadrer strictement la piste, avec quels trucs à passer à la méthode et que renvoyer. Par exemple, pour le place_free vu ci-dessus : - Code:
-
# Documentation de la fonction : # return bool def place_free(int x, int y, int x_left, int y_top, int x_right, int y_bottom) # Vérifie si x et y sont inclus dans un carré. # Ceci dit, ce n'est pas un place_free réellement. On ne vérifie pas # si il y a une instance à tel endroit. # Je suis ******, hein ! def place_free(x, y, x_left, y_top, x_right, y_bottom): if (x_left <= x <= x_right) and (y_top <= y <= y_bottom): return True else: return False
|
| | | Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 12:11 | |
| |
| | | blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 12:18 | |
| [/quote]Oula t'as mis ma fonction place_free mais elle est super incomplète et ne sert a rien.[quote]je sais, ce n'était qu'un exemple. Cela dit, même incomplet, on peut y voir quelques psites (moi, c'est le cas ). - Citation :
- Ton topic est une bonne idée d'ailleurs j'ai trouvé ça :
http://gmc.yoyogames.com/index.php?showtopic=420970 OUi, c'est visiblement une bonne idée, puisque d'une certaine manière ça existe déjà en fait : http://rosettacode.org/mw/index.php?title=Category:PureBasic&until=Queue%2FDefinitionCela dit, les fonctions sont générales et pas liées à game maker, mais l'idée est un peu la même au final . Maintenant, si nous qui connaissons le GML arrivons à donner des exemples, plus ou moins concrets de certaines fonctions liés à GM, ce sera vraiment intéressant . En tout cas, pour purebasic, c'est une chose qui m'intéresserait vraiment . - Sekigo Le Magnifique a écrit:
- Oui, ne t’inquiète pas, j'ai compris que tu voulais donner des pistes plutôt qu'une espèce de bible universelle et absolue.
Mais je pense qu'il faudrait mieux le faire au cas par cas. Ou alors, encadrer strictement la piste, avec quels trucs à passer à la méthode et que renvoyer.
Par exemple, pour le place_free vu ci-dessus : - Code:
-
# Documentation de la fonction : # return bool def place_free(int x, int y, int x_left, int y_top, int x_right, int y_bottom) # Vérifie si x et y sont inclus dans un carré. # Ceci dit, ce n'est pas un place_free réellement. On ne vérifie pas # si il y a une instance à tel endroit. # Je suis ******, hein ! def place_free(x, y, x_left, y_top, x_right, y_bottom): if (x_left <= x <= x_right) and (y_top <= y <= y_bottom): return True else: return False
Ton exemple est intéressant, et plus représentatif de ce que je pensai. |
| | | Sekigo Le Magnifique Utilisateur confirmé: Rang *****
Messages : 1720
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 12:31 | |
| |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 9 Mar 2011 - 14:02 | |
| Vraiment excellent ce site. D'ailleurs c'est impressionnant le nombre de langages présentés. (Le connaissais déjà en fait, mais oublié dans les marques pages d'un vieux pc...)
Pour ton idée blendman je suis tout a fait d'accord avec Sekigo.
De plus je voudrais dire que ce qui fait vraiment la puissance de GM pour la création de jeux, mais aussi l'intérêt de la plupart de ces fonctions, c'est comme l'a dit Sekigo la structure de GM. Pour la plupart des fonctions de GM qui n'ont pas besoin de cette structure, il est extrêmement simple de les trouver en une recherche google. |
| | | blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: [tout langage] Conversion GML > fonctions Sam 19 Mar 2011 - 23:47 | |
| salut Voici quelques codes GMl "convertis" en purebasic, pour ceux que cela intéresseraient. il s'agit souvent de macros, mais on peut en faire des procédures si besoin, en les modifiant sans doute un peu : Merci à ceux qui m'ont aidé pour ces codes (la plupart se reconnaitront car ils sont sur le CBNA ) point_direction() - Code:
-
Macro point_direction(x1,y1,x2,y2) ATan2((y2- y1),(x2- x1)) EndMacro point_distance() - Code:
-
Macro point_distance(x1,y1,x2,y2) Sqr((x2 - x1)* (x2-x1) + (y2-y1)* (y2-y1)) EndMacro
Move_towards() - Code:
-
Macro move_toward(x1,y1,x2,y2,speed) x1 + Sin(ATan2((y2- y1),(x2- x1)))* speed y1 + Cos(ATan2((y2- y1),(x2- x1)))* speed
EndMacro autres codes : - ajout des fonctions keyboard_check_pressed() et mouse_check_pressed() ce code -ci est de G-rom, merci à lui, c'est très utile - Code:
-
Global NewMap KeyFlag.b() ; tout d'abord, on ajoute un map, par exemple, en même temps que les constantes.
;puis, on crée les procédures Procedure.b KeyboardPressed(Const.i) If KeyboardPushed(Const) And KeyFlag(Str(Const)) = 0 KeyFlag(Str(Const)) = 1 ProcedureReturn #True EndIf If KeyboardPushed(Const)=0 And KeyFlag(Str(Const)) = 1 KeyFlag(Str(Const)) = 0 EndIf ProcedureReturn #False EndProcedure
Procedure.b MousePressed(Const.i) If MouseButton(Const) And KeyFlag(Str(Const)) = 0 KeyFlag(Str(Const)) = 1 ProcedureReturn #True EndIf If MouseButton(Const)=0 And KeyFlag(Str(Const)) = 1 KeyFlag(Str(Const)) = 0 EndIf ProcedureReturn #False EndProcedure voiloutch, en espérant que cela pourra en aider certains . |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: [tout langage] Conversion GML > fonctions Dim 20 Mar 2011 - 0:45 | |
| c'est intérrésant a savoir ^^ |
| | | arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: [tout langage] Conversion GML > fonctions Mar 29 Mar 2011 - 0:53 | |
| en ocaml max: - Code:
-
let max a b= if a>b then a else b
en c: random - Code:
-
int random(max) { static int graine=946; graine=(graine+13)*99%79997; return graine%max; }
bon, c'est de l'aléatoire, mais il faudrait aussi pouvoir initialisé la graine en fonction d'un paramètre extérieur au programme, par exemple time();
Dernière édition par arthuro le Mar 29 Mar 2011 - 10:21, édité 1 fois |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [tout langage] Conversion GML > fonctions Mar 29 Mar 2011 - 9:27 | |
| Les vrai fonctions aléatoires sont quand même un peu plus complexes :p Aller y a qq qui code une fonction en brainfuck ? |
| | | Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: [tout langage] Conversion GML > fonctions Mar 29 Mar 2011 - 14:40 | |
| _________________ Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [tout langage] Conversion GML > fonctions Mar 29 Mar 2011 - 15:13 | |
| x)
Ils savent plus quoi inventer. |
| | | Super-Mouton *Excellent utilisateur*
Messages : 4916 Localisation : Cyberworld Projet Actuel :
| Sujet: Re: [tout langage] Conversion GML > fonctions Mar 29 Mar 2011 - 15:55 | |
| - Sekigo Le Magnifique a écrit:
- Ce topic est à la fois une bonne idée et une mauvaise idée.
Elle part d'une bonne intention. Seulement, il est impossible d'avoir une méthode "unique" par langage. Parce qu'il va y avoir autant de méthode de programmer un truc que de programmeur. Ditto. De plus, je me questionne un peu sur l'utilité tant les différents langages s'utilisent différemment même si les syntaxes se ressemblent. Pour coder des fonctions uniques à GM, il faut d'abord avoir un certain moteur de jeu... j'sais pas trop comment m'expliquer mais c'est dur de trouver une seule implémentation qui fonctionnerait dans tous les cas, disons, vu que ça serait dépendant du reste du jeu. J'imagine que c'est une bonne idée si certaines personne veulent comprendre la logique derrière certaines fonctions, mais au-delà de ça, bof. Sinon juste pour le bien de la cause je peux bien dumper ma classe avec des fonctions très similaires à celles de GM en Flash AS3. - Code:
-
package{ public class Maths{ public function Maths(){ } /* Distance entre deux "Objects" */ public static function dist(obj1:Object, obj2:Object):Number{ var a:Number=obj2.x-obj1.x; var b:Number=obj2.y-obj1.y; return Math.sqrt((a*a)+(b*b)); }
/* Angle entre deux "Objects" que l'on peut ensuite appliquer à la variable rotation de l'objet voulu */ public static function atan(obj1:Object, obj2:Object):Number{ var a:Number=obj2.x-obj1.x; var b:Number=obj2.y-obj1.y; return Math.atan2(b,a); } /* Random */ public static function rand(nbMin:int, nbMax:int):int{ return Math.floor(Math.random()*(nbMax-nbMin+1))+nbMin; } /* Convertir degrées en radians */ public static function toRad(deg:Number):Number{ return deg*Math.PI/180; } /* Convertir radians en degrées */ public static function toDeg(rad:Number):Number{ return rad*180/Math.PI; } } } _________________ Hey là tabarnak lâche ma sig sacha >=| |
| | | blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 30 Mar 2011 - 14:42 | |
| - Super-Mouton a écrit:
- je me questionne un peu sur l'utilité tant les différents langages s'utilisent différemment même si les syntaxes se ressemblent. Pour coder des fonctions uniques à GM, il faut d'abord avoir un certain moteur de jeu... j'sais pas trop comment m'expliquer mais c'est dur de trouver une seule implémentation qui fonctionnerait dans tous les cas, disons, vu que ça serait dépendant du reste du jeu. J'imagine que c'est une bonne idée si certaines personne veulent comprendre la logique derrière certaines fonctions, mais au-delà de ça, bof.
Le but de ce topic est multiple, mais ce n'est pas d'avoir une implémentation qui fonctionnerait dans tous les cas. - tout d'abord, avoir divers exemples dans différents langages afin de comprendre la logique de certaines fonctions. Ce n'est pas d'avoir la formule magique, mais d'avoir éventuellement une piste. - ensuite, cela permet d'avoir des exemples directement dans un langage qui nous intéresserait : purebasic, C++, python, etc.. Et là, c'est vraiment intéressant. Par exemple, les exemples en pb que j'ai posté sont directement et très facilement utilisables . - enfin, ça permet de faire des comparaisons entre langage et pourquoi d'aider à comprendre un peu leur logique (dune certaine manière). Ça n'empêche pas les développeurs de faire leur propre fonction s'ils le souhaitent de toute façon. Je pense que contrairement à ce que l'on croit certaines fonctions très simples sont très facilement adaptables en fonction de certains langages. Par exemple, grâce à l'exemple de Seikugo place_free(), j'ai pu l'adapter en purebasic assez facilement. Je ne l'ai pas encore testé, mais une fois qu'on a la fonction, on peut l'adapter si on le souhaite et rien n'empêche d'en faire une autre si ça ne nous convient pas. Autre exemple, grâce aux explications qui m'ont été données avec GM pour des fonctions comme point_distance() ou point_direction(), je n'ai même pas eu à les adapter, cela fonctionnait directement. Donc, j'estime que rien que pour ça, ce topic est vraiment super utile . Allez, au passage quelques nouvelles fonctions en purebasic : Changer la couleur d'un sprite3DEn 2 temps : - tout d'abord définir 2 structures : - Code:
-
Structure D3DTLVERTEX x.f y.f z.f rhw.f Color.l tu.f tv.f EndStructure
Structure PB_DX9Sprite3D TexRes.I ; TexRes Vertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite TmpVertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite Width.l ; width set with ZoomSprite3D() Height.l ; height set with ZoomSprite3D() RealWidth.l RealHeight.l Angle.f Transformed.l EndStructure puis la procedure (fonction) à utiliser : - Code:
-
Procedure SetColor(sprite3d, Color.l) Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(sprite3d) With *Sprite3D \Vertice[0]\Color = Color.l \Vertice[1]\Color = Color.l \Vertice[2]\Color = Color.l \Vertice[3]\Color = Color.l EndWith EndProcedure Cet exemple n'est bien entendant pas facilement adaptable avec un autre langage (quoique l'on retrouve des structures et des fonctions en c/c++ il me semble), mais pour ceux qui utilisent pb ça me semble très intéressant . |
| | | arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: [tout langage] Conversion GML > fonctions Mer 30 Mar 2011 - 16:43 | |
| Ce qu'il veut dire, c'est que l'ensemble des fonctions de GM, forme un tout. Il n'y a que peu de fonction qui sont indépendantes de ce système. C'est comme si le système était représenté par un pyramide, la tête vers le bas. Pour faire les multiples fonctions du haut que l'on utilise souvent, il faudrait faire toutes les fonctions plus bas, pour atteindre cette hauteur. Bref, il n'y a pas beaucoup de fonctions a mes yeux transcriptable sans développer derrière un système. ( il reste les fonctions mathématique (max,abs,...) , (conversion de couleur rbg) ( formules de distance entre objets 3d) ,.... Bon alors en c/c++ la fonction draw_line (algo de bressenham il me semble) (dépend de draw_pixel) - Code:
-
void draw_line(float x1,float y1, float x2, float y2) { int dx, dy, p, end; float x, y; dx = abs(x1 - x2); dy = abs(y1 - y2); p = 2 * dy - dx; if(x1 > x2) { x = x2; y = y2; end = x1; } else { x = x1; y = y1; end = x2; } draw_pixel(x, y); while(x < end) { x = x + 1; if(p < 0) { p = p + 2 * dy; } else { y = y + 1; p = p + 2 * (dy - dx); } draw_pixel(x, y); } }
Sinon, je suis tomber sur un site d'exemple de code en c, au moment ou j'écrit ces lignes. http://www.c.happycodings.com/Beginners_Lab_Assignments/index.html . Il ma l'air parfait pour apprendre plein de truc. |
| | | zebdal Utilisateur confirmé: Rang *****
Messages : 2874 Localisation : Chez Vanilla Projet Actuel : Shrapnel
Kanon
Sengoku Rance Online
Vanilla H
| Sujet: Re: [tout langage] Conversion GML > fonctions Jeu 31 Mar 2011 - 11:37 | |
| autant coder ton code directement dans le langage approprié, ca ira plus vite. |
| | | Contenu sponsorisé
| Sujet: Re: [tout langage] Conversion GML > fonctions | |
| |
| | | | [tout langage] Conversion GML > fonctions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |