**Le SDK pour fx-9860/Graph85** Topic officiel
Posté le 18/07/2007 15:08
Vu la multitude de topics sur le SDK de la 85, j'ai décidé d'en faire un seul et unique, où l'on posera nos problèmes et explications sur ce même topic, et non pas sur 50, par souci de clareté et de facilité.
Des nouveautés ? Des problèmes ? Des idées ?
Exposez les ici !
Voici une liste de commandes commencées par Muelsaco. N'hésitez pas à rajouter vos commandes dans le topic je les rajouterai pour en faire profiter tout le monde. Merci.
// Locate X,Y,"Texte"
:arrow: locate(x,y); Print("Texte");
// Text X,Y,"Texte"
:arrow: PrintMini(x,y,"Texte",0);
// F-Line x1,y1,x2,y2
:arrow: Bdisp_DrawLineVRAM(x1,y1,x2,y2);
// Tracer une ligne blanche
:arrow: Bdisp_ClearLineVRAM(x1,y1,x2,y2);
// PxlOn x,y & PxlOff x,y
:arrow: Bdisp_SetPoint_VRAM(x,y,<couleur>)
<couleur> : 0 pour le blanc, 1 pour le noir
// Cls
:arrow: Bdisp_AllClr_DDVRAM();
// Actualiser l'écran
:arrow: Bdisp_PutDisp_DD();
Fonction très importante. Elle permet d'afficher une image tracée virtuellement dans la VRAM. Toute image doit d'abord être dessinée dans la VRAM puis affichée à l'écran. Vous ne verrez donc pas votre image s'afficher tant que vous n'aurez pas appelé Bdisp_PutDisp_DD(). À noter que les fonctions GetKey() et Print() l'appellent automatiquement.
While <exp1>
<code>
WhileEnd
:arrow:
while(<exp1>)
{
<code>
}
// StoPict x
:arrow: SaveDisp(x);
x variant de 1 à 3 uniquement.
// RclPict x
:arrow: RestoreDisp(x);
x variant de 1 à 3 uniquement.
// Ouvrir un popup (comme les erreurs syntaxe, etc)
:arrow: PopUpWin(<taille>);
<taille> : de 1 à 8.
Rappels sur les variables globales : Source
* Les variables globales sont à utiliser avec précaution, puisqu'elles créent des liens invisibles entre les fonctions. La modularité d'un programme peut en souffrir et le programmeur risque de perdre la vue d'ensemble.
* Il faut faire attention à ne pas cacher involontairement des variables globales par des variables locales du même nom.
* Le codex de la programmation défensive nous conseille d'écrire nos programmes aussi 'localement' que possible.
L'utilisation de variables globales est jusitifiée, si
* Plusieurs fonctions qui ne s'appellent pas ont besoin des mêmes variables, ou
* Plusieurs fonctions d'un programme ont besoin du même ensemble de variables. Ce serait alors trop encombrant de passer toutes les variables comme paramètres d'une fonction à l'autre.
Citer : Posté le 01/07/2012 23:01 | #
C'est que c'est le seul pointeur que j'ai trouvé qui aurait pu causer l'erreur, et à ce moment du programme aucun tableau y existe...
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 02/07/2012 00:57 | #
Bonjour, j'ai un soucis avec le SDK.
Quand je change MainIcon, je compile puis je teste(emulateur) et j'ai un message
"No program file could be found in this project!
You might need to build the project first."
Et impossible de continuer :/
Citer : Posté le 02/07/2012 01:40 | #
Avec quoi as tu modifie l'icône ?
Citer : Posté le 02/07/2012 01:40 | #
Ce qui signifie que tu ne peux pas émuler le programme car il n'a pas encore été compilé.
Citer : Posté le 02/07/2012 01:47 | #
Mais tu as sans doute raison, sinon il y aurai une erreur à la compilation...
Citer : Posté le 02/07/2012 10:55 | #
Un system error peut aussi intervenir lors d'erreurs mathématiques indétectables à la compilation, comme une division par 0.
Citer : Posté le 02/07/2012 13:22 | #
Je la modifie avec Paint.net, mais l'image est toujours noire et blanche bmp et bonnes dimensions, quand je compile, c'est correct mais le fichier .G1A est effacé.
Citer : Posté le 02/07/2012 13:33 | #
L'icone doit être un bitmap monochrome.
C'est dit dans la doc.
Citer : Posté le 02/07/2012 13:41 | #
Dans ce cas comment faire pour qu'il soit monochrome ?
Citer : Posté le 02/07/2012 13:56 | #
dans Paint, tu fait "enregistrer sous" -> "bitmap monochrome"
Citer : Posté le 02/07/2012 14:40 | #
Merci
Ajouté le 02/07/2012 à 14:40 :
Merci
Citer : Posté le 03/07/2012 01:14 | #
Je réussis pas à le trouver, pouvez vous me dire ce qui ne va pas?
#include "MonochromeLib.h"
#include "spritesandmaps.h"
void menu(int* nombrejoueurs, int* mapchoisi)
{unsigned int a;
PrintMini(34, 2, (unsigned char*)"WORMS BY JAVIERXD", 0);
ML_filled_circle(63, 31, 15, 1);
cargar_lombriz(80, 31);
cargar_lombriz(46, 31);
ML_display_vram();
while (IsKeyDown(KEY_CTRL_EXE)) {}
while (IsKeyUp(KEY_CTRL_EXE)) {}
ML_clear_vram();
ML_clear_screen();
locate(1, 1);
Print((unsigned char*)"NOMBRE DE JOUEURS 2-4");
while (a != KEY_CHAR_2 && a != KEY_CHAR_3 && a != KEY_CHAR_4)
{GetKey(&a);
}
switch(a)
{
case KEY_CHAR_2:
*nombrejoueurs=2;
break;
case KEY_CHAR_3:
*nombrejoueurs=3;
break;
case KEY_CHAR_4:
*nombrejoueurs=4;
break;
}
ML_clear_vram();
ML_clear_screen();
while(IsKeyDown(a)) {} [b]//Ça plante juste après ça[/b]
locate(1, 1);
Print((unsigned char*)"CHOISIS UNE MAP(1-3)");
while (a != KEY_CHAR_1 && a != KEY_CHAR_2 && a != KEY_CHAR_3)
{GetKey(&a);}
switch(a)
{
case KEY_CHAR_1:
*mapchoisi=1;
break;
case KEY_CHAR_2:
*mapchoisi=2;
break;
case KEY_CHAR_3:
*mapchoisi=3;
break;
}
ML_clear_vram();
ML_clear_screen();
while(IsKeyDown(a)) {} [b]//si tu choisis 4 joueurs, le programme marche jusqu'ici[/b]
}
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 03/07/2012 02:08 | #
À la compilation ou oncalc ?
Citer : Posté le 03/07/2012 02:45 | #
- indente le code
- while(condition) {} while(condition);
- inutile d'appeler ML_clear_screen
- c'est très bizarre de bloquer le prog avec un écran vierge tant que la touche est enfoncée, surtout que c'est inutile avec GetKey.
- Tu peux vraiment simplifier tes switch. KEY_CHAR_1 == '1' == '0'+1, soit : *mapchoisi = a-'0';
A part ça, il n'y a pas d'erreur dans le code. Mais ça plantera si nombrejoueurs ou mapchoisi ne pointent pas vers de vrais int.
En gros, ça c'est bon :
int a, b;
menu( &a, &b );
}
int *a, *b;
menu( a, b );
}
Citer : Posté le 03/07/2012 13:36 | #
1) qu'est ce qu'indenter le code?
2) ok
3) oubli bête, merci de me le rappeler
4) C'est pour que, en ayant choisi le nombre de joueurs, le joueur soit obligé de relâcher la touche avant de choisir la map, ce qui éviterai par exemple de choisir sans faire exprès 2 joueurs et 2e map car tu as laissé enfoncée la touche 2.
5) Je ne connaissais pas les valeurs des constantes KEY. Merci pour cette astuce
Pour les pointeurs, je crois que je l'ai fait avec la première méthode, mais je vérifierai.
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 03/07/2012 14:21 | #
1) Indenter = mettre des espace pour améliorer la lisibilité. Notion de base, essentielle pour un codeur.
5) Ils donnent dans la doc anglaise les headers dans lesquels sont définies les constantes.
Citer : Posté le 03/07/2012 16:07 | #
Ok, j'ai tout mis sauf l'indentation, dont je m'en chargerai plus tard. Pour les pointeurs, j'avais déjà pris la bonne méthode. Merci pour m'aider avec l'optimisation, mais je ne me suis pas encore débarrassé du system error
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 03/07/2012 16:26 | #
Alors donne le code complet. J'ai testé la fonction telle quelle et je n'ai rencontré aucun problème.
Citer : Posté le 03/07/2012 16:50 | # | Fichier joint
Ok, les voici, pour le moment seulement le system error m'intéresse, je m'en chargerai plus tard de l'optimisation
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 03/07/2012 19:46 | #
J'ai résolu ton problème Javierxd. Ça ne venait pas du code de la fonction menu, main bien de la fonction principale :
{
case 1:
{gravedad Gravedad[1];
planetas=1;
break;
}
case 2:
{gravedad Gravedad[4];
planetas=4;
break;
}
case 3:
{gravedad Gravedad[5];
planetas=5;
break;
}
}
Ce bout de code n'est pas bon. Tout d'abord, la structure du switch est fausse : On ne doit jamais mettre d'accolades dans un switch.En fait, lors d'un switch, le programme execute un saut (comme un goto) jusqu’au 'case' correspondant. C'est donc pour ça qu'il faut mettre un 'break;' avant un autre case : pour pouvoir quitter le switch proprement et pour ne pas executer du code correspondant à un autre 'case'.
Ensuite, je te rappelle que la norme du compilateur est le C89. C'est à dire que TOUTES les variables doivent êtres déclarées au début de la fonction.
Or là, tu déclares des variables dans le switch, alors qu'elles sont déjà déclarées au début de la fonction. Et vu que tu as utilisé un pointeur de 'gravedad' en début de fonction, j'ai corrigé le code pour qu'il soit cohérent :
Gravedad = malloc(sizeof(gravedad)*1);
planetas=1;
break;
case 2:
Gravedad = malloc(sizeof(gravedad)*4);
planetas=4;
break;
case 3:
Gravedad = malloc(sizeof(gravedad)*5);
planetas=5;
break;
et en optimisant :
{
case 1:
planetas=1;
break;
case 2:
planetas=4;
break;
case 3:
planetas=5;
break;
}
Gravedad = malloc(sizeof(gravedad)*planetas);
Attention tout de même, le retour de la fonction malloc n'est pas vérifié !
Et puis quelques conseils :
- Généralement, on définit une structure avec une 1ère lettre en majuscule, et son nom en tant que variable est tout en minuscule, pas l'inverse
- Indente ton code, pour les autres mais aussi pour toi : c'est beaucoup plus facile de réperer les bugs/erreurs avec un code indenté. Et puis, ça fait plus propre et plus sérieux.
PRO CONVERT le meilleur programme de conversion sur casio !
Citer : Posté le 03/07/2012 19:53 | #
Bon, comme je l'avais dit, de l'optimisation je m'en chargerai plus tard, je vais tester ce que tu dis, merci
Ajouté le 03/07/2012 à 20:10 :
Oui, ça marche, merci beaucoup (maintenant il ne me reste qu\'à me charger du débuggage, optimisation, etc :-*, mais j\'essaierai de le faire moi meme)
My program is not working, I have no idea why.
My program is working, I have no idea why.