Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » **Le SDK pour fx-9860/Graph85** Topic officiel
MatronixHors ligneAncien administrateurPoints: 6058 Défis: 82 Message

**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.


Pages : Précédente1 ... , 41, 42, 43, 44, 45, 46, 47, 48Suivante
-florian66-Hors ligneAncien rédacteurPoints: 2300 Défis: 19 Message

Citer : Posté le 16/02/2016 19:56 | #


Tu castes par double ou float
In Arch, I trust ! And you ?
LephenixnoirHors ligneAdministrateurPoints: 15487 Défis: 136 Message

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 :
atan2(dy, dx) = atan(dy / dx)

Cela t'évite une division et permet d'augmenter la précision.
angle = atan2(y0i - yObj, x0i - xObj)
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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 [gray]"fxlib.h"[/gray][/brown]
[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;
}

Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
Dark stormHors ligneMembre d'honneurPoints: 10821 Défis: 176 Message

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 ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
AragornHors ligneMembrePoints: 807 Défis: 5 Message

Citer : Posté le 16/02/2016 20:55 | #


Non, j'y ai pensé, dans la fonction d'affichage, j'ai mis "63-yObj".

Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
LephenixnoirHors ligneAdministrateurPoints: 15487 Défis: 136 Message

Citer : Posté le 16/02/2016 20:58 | #


yObj=-0,5*9,81*temps*temps+sin(angle)*v0F*temps+y0F;

C'est moi ou t'as osé noter des flottants avec des virgules ?
Dark stormHors ligneMembre d'honneurPoints: 10821 Défis: 176 Message

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
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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.
Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
LephenixnoirHors ligneAdministrateurPoints: 15487 Défis: 136 Message

Citer : Posté le 16/02/2016 21:05 | #


Aragorn a écrit :
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.
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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 ?
Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
LephenixnoirHors ligneAdministrateurPoints: 15487 Défis: 136 Message

Citer : Posté le 17/02/2016 19:26 | #


Ben...
angle = atan2(y0F - yObjF, x0F - yObjF);

T'as bien pensé que tout est en radians ?
-florian66-Hors ligneAncien rédacteurPoints: 2300 Défis: 19 Message

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
In Arch, I trust ! And you ?
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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é.
Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
NinestarsHors ligneMembrePoints: 2247 Défis: 22 Message

Citer : Posté le 17/02/2016 20:13 | #


Aragorn a écrit :
Je faisais VarInt = VarFloat; au lieu de VarInt = (int) VarFloat;
Ça résoud le problème ?
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
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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 !

Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
NinestarsHors ligneMembrePoints: 2247 Défis: 22 Message

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 :/
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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é.
Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
LephenixnoirHors ligneAdministrateurPoints: 15487 Défis: 136 Message

Citer : Posté le 17/02/2016 21:00 | #


Aragorn a écrit :
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.

Ninestars a écrit :
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).
EsuHors ligneMembrePoints: 3 Défis: 0 Message

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
Dark stormHors ligneMembre d'honneurPoints: 10821 Défis: 176 Message

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
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
EsuHors ligneMembrePoints: 3 Défis: 0 Message

Citer : Posté le 31/03/2016 13:10 | #


D'accord merci
Pages : Précédente1 ... , 41, 42, 43, 44, 45, 46, 47, 48Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 47 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd