[bibliotheque C]usefull.h : plein de fonctions utiles !
Posté le 04/09/2014 20:04
Bonjour à tous !
Ne vous est-il jamais arrivé de vous dire, en commençant un projet en C(++), qu'il vous manquait plein de fonctions, que vous devrez piocher a droite a gauche, inclure 14 libraires externes pour 2 fonctions simples, pour un total d'une heure de boulot inutile?
Et bien maintenant, vous n'aurez plus a faire cela, grâce a usefull, une bibliothèque qui contient toutes les fonctions hyper-utilisée dans les jeux !
voici une liste de toutes les fonctions :
unsigned char key_down(unsigned char code); // fonction plus rapide et compatible SH4 de IsKeyDown()
int time_getTicks(); //renvoye le nombre de ticks (1/128 de seconde) depuis minuit selon le processeur de la calto
int getFps(); //renvoye le nombre de FPS
void setFps(int fpsWish); //regle le nombre de fps : 1 pour 128 FPS,2 pour 64, 4 pour 32, 5 pour 25 => 128/fpsWish
void PrintV(int X,int Y , int variable); // affiche un nombre en X et Y en pixels
int max(int a,int b); //renvoye le max
int writeFile(unsigned char* name,unsigned char* extension,unsigned char* source,int taille);
/*
fonction de sauvegarde
ecrit taille octets du tableau source dans le fichier name.extension
Pour ecrire un tableau d'int, castez simplement le tableau (unsigned char*)tableauDInt
Pour ecrire un int simple, faites writeFile(name,extension,(unsigned char*)&variable,4);
*/
int readFile(unsigned char* name,unsigned char* extension,unsigned char* reception);
/*
fonction de chargement de sauvegarde
ecrit le contenu du fichier name.extension dans le tableau reception
pour lui passer un tableau d'int, castez simplement le tableau (unsigned char*)tableauDInt
Pour ecrire dans un int simple, faites writeFile(name,extension,(unsigned char*)&variable); mais faites attention a ce que le fichier ne soit pas >4 octets
*/
Avec toutes ces fonctions très utiles, vous pourrez démarrer un projet sans avoir a recoder des choses que vous connaissez par cœur !
PS : je tiens également a préciser que je suis l'auteur de toutes ces fonctions (sauf PrintV, qui est la propriété de PierrotLL et key_down qui est l’œuvre de casimo), mais comme la bibliothèque existe depuis longtemps sans que je prenne le temps de la partager, certaines fonctions se sont répandues dans divers tutoriels
PS2 : Si vous l'utilisez dans un projet, vous n’êtes pas obligé de me créditer, ne vous inquiétez pas de ce coté la
Fichier joint
Citer : Posté le 31/12/2014 14:33 | #
Le probleme c'est que le mappage change selon SH3/SH4 je crois, donc j'ai fait comme ca
Le mappage au niveau matériel ! mais vu que la lib ne change pas, les #define dans les .h ne changent (normalement) pas non plus...
Coïncidence ? Je ne pense pas.
Citer : Posté le 31/12/2014 14:35 | #
Oups LePhe j'avais oublié de les virer au debut
Ca cahnge avec le "patch" de compatibilité je crois (je suis pas sur de moi).
Citer : Posté le 31/12/2014 14:41 | #
@Drac0300
Oui mais si les valeurs changent tu peux rien faire... tout simplement parce que t'es pas sûr que les define se suivent.
Citer : Posté le 31/12/2014 19:36 | #
[bibliotheque C]usefull.h : plein de fonctions utiles !:
Citer : Posté le 01/01/2015 11:37 | #
Oui, Lephénixnoir l'a déjà fait remarqué Mais bon, vu que la lib est déjà distribuée, j'ai pas envie de changer et d'avoir la même lib sous deux nom différents qui se ballade dans la nature
Sinon, @theprog : vire moi tous ces switch/case et met moi deux tableaux !
C'est beaucoup plus propre, lisible et même plus rapide a écrire (et cela évite d'avoir une fonction de 30 lignes )
Et je sais ce qu'on va me dire, que les tableaux utilisent plus de RAM que le switch/label, mais dans les projets classiques, la RAM on s'en fout un peu, donc il vaut mieux optimiser au niveau de la taille de l'add-in.
Un petit exemple de fonction corrigée :
unsigned char name[][] = {"[0]","[1]","[2]","[3]"};
unsigned int keys[] = {KEY_CHAR_0,KEY_CHAR_1,KEY_CHAR_2,KEY_CHAR_3};
int i = 0;
for(;i<4;i++)if(key == keys[i])return name[i]
Certes, la complexité passe de O(ln i) en O(i), mais je ne pense pas que cela fasse une énorme différence
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
merci a tout le monde pour son soutien
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 !Citer : Posté le 14/01/2015 11:13 | #
const static unsigned char name[][] = {"[0]","[1]","[2]","[3]"};
const static unsigned int keys[] = {KEY_CHAR_0,KEY_CHAR_1,KEY_CHAR_2,KEY_CHAR_3};
int i = 0;
for(;i<4;i++)if(key == keys[i])return name[i]
Ajout des const static pour être sur que ça soit stocké dans la ROM.
Citer : Posté le 14/01/2015 11:57 | #
const static unsigned char name[][] = {"[0]","[1]","[2]","[3]"};
const static unsigned int keys[] = {KEY_CHAR_0,KEY_CHAR_1,KEY_CHAR_2,KEY_CHAR_3};
int i = 0;
for(;i<4;i++)if(key == keys[i])return name[i]
Ajout des const static pour être sur que ça soit stocké dans la ROM.
C'est standardisé ça ?
Citer : Posté le 14/01/2015 11:59 | #
Astuce de PierrotLL, le coup du const static.
Ajouté le 14/01/2015 à 12:03 :
En fait, const fait le truc et static est en c a deux utilités :
- en dehors d'une fonction, ça fait une fonction/variable qui ne peut être appelée en dehors de son fichier
- dans une fonction cela créé une variable unique et initialisée qu'une fois. Du coup ça aide pour éviter d'avoir le tableau stocké en RAM.
Citer : Posté le 05/03/2015 19:31 | #
J'aurais 3 questions à te poser :
- writefile() fonctionne avec un tableau d'int, fonctionne-t-il aussi avec un tableau de char ?
- comment sauvegarder dans un dossier ?
- Peut-on mettre une variable en nom de fichier ? exemple : "readFile(NbMap,"zel",Map,128);"
Si ce n'est pas possible, est-ce qu'on peut résoudre ces erreurs en modifiant la librairie ?
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 05/03/2015 22:16 | #
writefile fonctionne justement avec un tableau de char mais sinon il suffit de caster le tableau, cela donnera la même chose (par contre faut penser à quadrupler la taille du tableau que tu passes en argument)
Pour sauvegarder dans un dossier, je sais pas Il me semble qu'il devrait y avoir moyen, il suffirait de modifier la fonction et de faire joujou avec Bfile (elle est pas compliquée )
Si c'est un tableau de char, sans problème (faudra peut-être le caster si il est pas unsigned )
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
merci a tout le monde pour son soutien
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 !Citer : Posté le 05/03/2015 22:24 | #
Merci pour ta réponse rapide.
Comment fait-on pour caster en unsigned ?
J'ai un system error à cette ligne de code :
NumMap est un char
Map est un tableau : char[16][8]
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 05/03/2015 22:48 | #
C'est un peu bizarre d'essayer de passer un double tableau de char, tu veux sans doute spécifier la première case
et il ne faut pas spécifier la taille du fichier pour la lecture, c'est déduis automatiquement.
Le tableau qui reçoit les données est a la fin aussi (par contre fait gaffe, si le fichier fait plus qu'un octet et que tu ne passe qu'un char, il se peut que d'autres variables soient affectées, donc fait attention)(et pour passer une variable qui n'est pas un tableau, faut rajouter & pour passer l'adresse de la variable (ce qui n'est pas nécessaire avec un tableau, vu que le nom du tableau est aussi son adresse )
readFile("zel",(unsigned char*)Map[0],(unsigned char* )&NumMap);
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
merci a tout le monde pour son soutien
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 !Citer : Posté le 05/03/2015 23:37 | #
Va falloir finir par comprendre que char et char* sont deux entités totalement différentes !
On te demande une chaîne, tu envoie un char. Normal que ça ne marche pas
Bref, pour convertir un char en chaîne de caractère, je te laisse chercher (au choix) du côté de sprintf, itoa, ou PrintV (cf ci dessus pour ce dernier).
Citer : Posté le 06/03/2015 19:59 | #
Merci, je vais essayer de me débrouiller avec vos réponses.
Je pense en effet qu'une erreur vient du fait que j'ai inversé char et char*. Maintenant je ne ferais plus l'erreur.
En fait, ce que j'aimerais faire, c'est un éditeur de niveau. Les niveaux s’appelleront #.zel ou zelda.# (# est le numéro du niveau). Chacune des cases du niveau sont stockées dans le tableau "char Map[16][8];". Ce que j'aimerais faire, c'est stocker l'intégralité du niveau (tableau) dans un fichier de sauvegarde. Puis pouvoir recharger l'intégralité du niveau dans char Map[16][8], à partir du fichier de sauvegarde.
Comme tu l'as fait dans pokemon editor.
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 06/03/2015 20:44 | #
Tu peux faire ça alors.
unsigned char map[16][8];
const int lvl_id = 14;
sprintf(filename,"%d",lvl_id);
readfile(filename,"zel",128,map);
Citer : Posté le 26/01/2016 21:25 | #
J'ai inclus usefull.h au projet, bien add le .c sur le côté et lorsque j'essaie de build le compilateur ne veut pas et m'indique ceci :
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(25) : C1016 (W) Argument mismatch
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(25) : C1016 (W) Argument mismatch
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(25) : C1016 (W) Argument mismatch
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2225 (E) Undeclared name "FONTCHARACTER"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2500 (E) Illegal token "filename"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2225 (E) Undeclared name "filename"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2500 (E) Illegal token "{"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2500 (E) Illegal token "{"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(184) : C2500 (E) Illegal token "}"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(185) : C2500 (E) Illegal token "int"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(185) : C2225 (E) Undeclared name "a"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(185) : C2220 (E) Modifiable lvalue required for "="
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(186) : C2500 (E) Illegal token "int"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(186) : C2225 (E) Undeclared name "handle"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(189) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(192) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(193) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(194) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(195) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(196) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(200) : C2225 (E) Undeclared name "_OPENMODE_WRITE"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(215) : C2500 (E) Illegal token "filename"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(215) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(215) : C2500 (E) Illegal token "{"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(215) : C2500 (E) Illegal token "{"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(215) : C2500 (E) Illegal token "}"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(216) : C2500 (E) Illegal token "int"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(217) : C2500 (E) Illegal token "int"
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(220) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(223) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(224) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(225) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(226) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(227) : C2233 (E) Illegal array reference
G:\Programmation\Moteur de déplacement d'un personnage\usefull.c(230) : C2225 (E) Undeclared name "_OPENMODE_READ"
Comment ce fait-ce ?
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 28/01/2016 15:39 | #
Argument mismatch ca veut dire que ta oublie de preciser un argument dans une fonction :
Ex si ta fonction cest pow (int X, int puissance) et que tu lappelle par pow (2) ca va donner ca
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 28/01/2016 18:46 | #
C'est pas trop ça le problème, c'est surtout le reste car je ne peux pas utiliser la lib
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 30/01/2016 13:38 | #
Je suis prêt à parier que usefull.c oublie d'inclure fxlib.h. Ajoute un include au début du fichier, ça résoudra certaines erreurs.
Citer : Posté le 30/01/2016 13:42 | #
Bah moi il n'y a pas le include de fxlib.h et ça fonctionne très bien .
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 30/01/2016 13:43 | #
Si les include sont placés de manière fortuite (notamment fxlib d'abord), le compilateur pour trouver les symboles par magie...