**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 16/02/2016 19:56 | #
Tu castes par double ou float
Citer : Posté le 16/02/2016 20:07 | #
En effet, il faut caster en double (et il faut caster les opérandes de la division, pas le résultat). Mais au lieu de ça, je te conseille d'utiliser atan2 :
Cela t'évite une division et permet d'augmenter la précision.
Citer : Posté le 16/02/2016 20:51 | #
Cela ne marche toujours pas.
Je suis bloqué depuis ce matin sur le même bug, l'oiseau part vers le bas, au lieu de monter en l'air :aie2:
Si vous pouviez m'indiquer où j'ai fait une erreur, je vous en serais très reconnaissant.
Voici mon code, seules les fonctions d'affichage ne sont pas présentes. J'affiche l'oiseau en fonction de xObj et yObj qui sont des int.
[brown]#include<stdio.h>[/brown]
[brown]#include<math.h> [/brown]
[purple]int[/purple] birds, x0i, y0i, v0, xObj, yObj;
[purple]float[/purple] temps;
[purple]float[/purple] angle;
[purple]float[/purple] xObjF, yObjF, x0F, y0F, v0F;
[purple]char[/purple] Fps=[maroon]20[/maroon];
[purple]float[/purple] PI=[maroon]3[/maroon].14;
[purple]int[/purple] AddIn_main(int isAppli, unsigned short OptionNum)
{
[purple]unsigned int[/purple] key;
[purple]int[/purple] score[10]={[maroon]1[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon],[maroon]0[/maroon]};
[purple]char[/purple] menu=[maroon]0[/maroon];
[purple]char[/purple] map=[maroon]1[/maroon];
[purple]char[/purple] VarA=[maroon]0[/maroon];
[purple]char[/purple] key_time=[maroon]10[/maroon];
[purple]char[/purple] VarB=[maroon]0[/maroon];
[purple]char[/purple] etape=[maroon]0[/maroon];
[purple]float[/purple] VarTest=[maroon]0[/maroon];
readFile([gray]"angryb","sav"[/gray],score,[maroon]40[/maroon]);
ML_clear_vram();
[b][blue]if[/blue][/b](!score[0]){score[0]=[maroon]1[/maroon];}
score[1]=[maroon]2[/maroon];
score[2]=[maroon]1[/maroon];
[b][blue]while[/blue][/b](menu!=-1){
ML_clear_vram();
switch(menu) {
case 0:
[b][blue]if[/blue][/b](map!=[maroon]1[/maroon]){PrintMini(52,[maroon]30[/maroon],(unsigned char*)[gray]"<"[/gray],[maroon]1[/maroon]);}
[b][blue]if[/blue][/b](map<=[maroon]9[/maroon]){PrintMini(60,[maroon]30[/maroon],(unsigned char*)[gray]"0"[/gray],[maroon]1[/maroon]); PrintV(64,[maroon]30[/maroon],map);}else{PrintV(60,[maroon]30[/maroon],map);}
[b][blue]if[/blue][/b](score[map]!=[maroon]0[/maroon]){PrintMini(72,[maroon]30[/maroon],(unsigned char*)[gray]">"[/gray],[maroon]1[/maroon]);}
[b][blue]break[/blue][/b];
case 1:
afficherNiveau(map);
afficherPerso();
switch(etape){
case 0:
v0=sqrt((x0i-xObj)*(x0i-xObj)+(y0i-yObj)*(y0i-yObj));
[b][blue]if[/blue][/b](!VarB){
[b][blue]if[/blue][/b](key_down(27)&& xObj<x0i)
{
xObj++; VarA=key_time;
}
[b][blue]if[/blue][/b](key_down(28)&& yObj<y0i)
{
yObj++; VarA=key_time;
}
[b][blue]if[/blue][/b](key_down(37)&& v0<10)
{
yObj--; VarA=key_time;
}
[b][blue]if[/blue][/b](key_down(38)&& v0<10)
{
xObj--; VarA=key_time;
}
[b][blue]if[/blue][/b](key_down(37)&& v0>=[maroon]10[/maroon] && xObj+5<x0i)
{
yObj--; xObj++; VarA=key_time;
}
[b][blue]if[/blue][/b](key_down(38)&& v0>=[maroon]10[/maroon] && yObj+5<y0i)
{
xObj--; yObj++; VarA=key_time;
}
}else{VarB--;}
ML_line(xObj, [maroon]63[/maroon]-yObj, x0i, [maroon]63[/maroon]-y0i, [maroon]1[/maroon]);
[b][blue]if[/blue][/b](key_down(78)){
etape++; temps=[maroon]0[/maroon]; x0F=x0i; y0F=y0i; xObjF=xObj; yObjF=yObj;
angle=atan2(y0F-yObjF , x0F-xObjF);
[b][blue]if[/blue][/b](x0i==xObj){angle=PI/2;}
v0F=sqrt((x0F-xObjF)*(x0F-xObjF)+(y0F-yObjF)*(y0F-yObjF));
}
[b][blue]break[/blue][/b];
case 1:
xObj=cos(angle)*v0F*temps+x0F;
yObj=-0,[maroon]5[/maroon]*9,[maroon]81[/maroon]*temps*temps+sin(angle)*v0F*temps+y0F;
[b][blue]if[/blue][/b](!test()){etape++;}
temps++;
xObj=xObjF;
yObj=yObjF;
[b][blue]break[/blue][/b];
case 2:
[b][blue]if[/blue][/b](!descente()){etape++;}
[b][blue]break[/blue][/b];
case 3:
[b][blue]break[/blue][/b];
}
[b][blue]break[/blue][/b];
}
[b][blue]if[/blue][/b](!VarA){
[b][blue]if[/blue][/b]((key_down(47) || key_down(48))&& !VarA){menu--; VarA=key_time;}
[b][blue]if[/blue][/b](key_down(27)&& !VarA){
[b][blue]if[/blue][/b](menu==[maroon]0[/maroon] && score[map]!=[maroon]0[/maroon]){map++; VarA=key_time;}
}
[b][blue]if[/blue][/b](key_down(38) && !VarA){
[b][blue]if[/blue][/b](menu==[maroon]0[/maroon] && map!=[maroon]1[/maroon]){map--; VarA=key_time;}
}
[b][blue]if[/blue][/b]((key_down(31) || key_down(78)) && !VarA && !menu){menu++; VarA=key_time; temps=[maroon]0[/maroon];
x0i=[maroon]15[/maroon]; xObj=[maroon]15[/maroon]; y0i=[maroon]20[/maroon]; yObj=[maroon]20[/maroon]; birds=[maroon]1[/maroon];
}
}else{VarA--;}
ML_display_vram();
setFps(Fps);
}
writeFile([gray]"angryb","sav"[/gray],score,[maroon]40[/maroon]);
[b][blue]return[/blue][/b] 1;
}
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 16/02/2016 20:53 | #
Laisse moi deviner : tu bosse en repère classique alors que celui de l'écran est inversé sur les Y ?
Citer : Posté le 16/02/2016 20:55 | #
Non, j'y ai pensé, dans la fonction d'affichage, j'ai mis "63-yObj".
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 16/02/2016 20:58 | #
C'est moi ou t'as osé noter des flottants avec des virgules ?
Citer : Posté le 16/02/2016 20:58 | #
En effet. T'as pas de quoi debugguer ? T'affiches toutes les variables et tu regarde où ça plante.
Ajouté le 16/02/2016 à 20:59 :
+1 pour Lephe
Citer : Posté le 16/02/2016 21:03 | #
@Lephe
Merci, c'est corrigé.
Par contre, maintenant l'oiseau ne bouge plus.
@DS
Si, mais j'utilise PrintV pour afficher les variables et malheureusement cette fonction arrondie à l'unité. Et, comme je pense que mon problème vient de mauvais arrondies, j'ai du mal à débugger.
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 16/02/2016 21:05 | #
Si, mais j'utilise PrintV pour afficher les variables et malheureusement cette fonction arrondie à l'unité. Et, comme je pense que mon problème vient de mauvais arrondies, j'ai du mal à débugger.
T'as qu'à afficher 100 fois la valeur de ton flottant.
Citer : Posté le 16/02/2016 21:10 | #
Merci Lephe,
c'était tellement bête que je n'y avais même pas penser.
Je me relance dans une séance de débogage.
Ajouté le 17/02/2016 à 19:21 :
J'ai trouvé l'origine du problème : c'est la ligne suivante : "angle=atan2(y0F-yObjF , x0F-xObjF); ".
Elle ne donne pas du tout les valeurs espérées.
J'ai 2 points de cordonnées (xObj, yObj) et (x0i, y0i).
J'aimerais trouver l'angle entre la droite reliant ces 2 points ainsi que la droite horizontale passant par le point (xObj, yObj).
Sauriez-vous comment faire ?
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 17/02/2016 19:26 | #
Ben...
T'as bien pensé que tout est en radians ?
Citer : Posté le 17/02/2016 19:29 | #
@Aragorn : regarde le dernier jeu que j'ai fais (worms war), je fais pas mal de mécanique dedans
Citer : Posté le 17/02/2016 19:30 | #
@Lephe Oui
Ça y est ! Je viens enfin de trouver.
Je faisais VarInt = VarFloat; au lieu de VarInt = (int) VarFloat;
C'est bon maintenant !
Désolé de vous avoir dérangé.
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 17/02/2016 20:13 | #
Je faisais VarInt = VarFloat; au lieu de VarInt = (int) VarFloat;
Si VarInt est de type int et VarFloat de type float, pas besoin de caster manuellement avec (int)
atan2 est dangereux, il croît dans le sens anti-trigo et entre -π/ et π/2
Citer : Posté le 17/02/2016 20:31 | #
@Ninestars
Je dois t'avouer ne plus rien y comprendre.
Avant ça ne marchait pas. Après je rajoute le (int) et ça marche. Mais maintenant, quand je retire le (int) (suite à ton message), ça marche toujours.
Je pense que j'ai dû, en réécrivant le code avec les (int), réécrire les fonctions sans une faute de frappe que j'avais sans doute fait précédemment ...
C'est la seule explication que je vois.
Sinon, la fonction atan2 fonctionne à la perfection dans mon cas.
Au fait, que deviens ton prometteur age of empire ? Je l'attend avec la plus grande impatience !
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 17/02/2016 20:53 | #
Quand tu modifies des fichiers .h, pense à faire Rebuild All, sinon il peut ne pas compiler les changements. Des erreurs du style "j'ai changé un truc ça marche pas, je le réécrit ça marche" viennent souvent de là
J'ai eu un bug de mise à jour avec windows, ma partition n'était plus lisible, j'ai pas pu récuperer tous les fichiers, il me manque quelques fichiers du jeu, "impossible" de reprendre surtout que ça date pas mal :/
Citer : Posté le 17/02/2016 20:57 | #
Zut, tu as dû être en colère sur le coup, plusieurs journées de travail perdues ! En plus, tu avais déjà bien avancé.
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 17/02/2016 21:00 | #
Je faisais VarInt = VarFloat; au lieu de VarInt = (int) VarFloat;
Ça ne peut pas être la solution. Il n'y a aucune différence.
Et puis quand allez-vous adopter des conventions décentes ? Les noms de variables ne prennent jamais de majuscules, je ne sais pas pourquoi tout le monde fait ça.
Quand tu modifies des fichiers .h, pense à faire Rebuild All, sinon il peut ne pas compiler les changements. Des erreurs du style "j'ai changé un truc ça marche pas, je le réécrit ça marche" viennent souvent de là
Oui parce que ça pousse à recompiler.
Personnellement je crois que tous mes programmes subissent des Rebuild All tout le temps, sauf ceux développés avec Qt (parce que du coup c'est lui qui gère la compilation).
Citer : Posté le 31/03/2016 11:32 | #
Bonjour, j'aimerais bien savoir comment est-ce qu'on fait pour implémenter ces sortes d'onglets (ex:http://www.planet-casio.com/files/program_images/3035-Eigenmath.gif , "calc", "trig", "cplx", "alge", "poly", "arit"...). Je ne trouve pas de fonction spécifique à cela. Merci d'avance pour vos réponses
Citer : Posté le 31/03/2016 12:56 | #
Tout à la main
Il faut afficher les icônes de menu, puis associer à chaque touche F* une procédure affichant le menu correspondant
Citer : Posté le 31/03/2016 13:10 | #
D'accord merci