Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » **Le SDK pour fx-9860/Graph85** Topic officiel
Matronix Hors ligne Ancien administrateur Points: 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.


Précédente 1, 2, 3 ··· 5, 6, 7, 8, 9, 10, 11 ··· 20 ··· 30 ··· 40 ··· 46, 47, 48 Suivante
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

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...
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Ninestars Hors ligne Membre Points: 2451 Défis: 24 Message

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 :/
Dark storm Hors ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 02/07/2012 01:40 | #


Avec quoi as tu modifie l'icône ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

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é.
Dark storm Hors ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 02/07/2012 01:47 | #


..., je compile...

Mais tu as sans doute raison, sinon il y aurai une erreur à la compilation...
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

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.
Ninestars Hors ligne Membre Points: 2451 Défis: 24 Message

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é.
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 02/07/2012 13:33 | #


L'icone doit être un bitmap monochrome.
C'est dit dans la doc.
Ninestars Hors ligne Membre Points: 2451 Défis: 24 Message

Citer : Posté le 02/07/2012 13:41 | #


Dans ce cas comment faire pour qu'il soit monochrome ?
Dark storm Hors ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 02/07/2012 13:56 | #


dans Paint, tu fait "enregistrer sous" -> "bitmap monochrome"
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2451 Défis: 24 Message

Citer : Posté le 02/07/2012 14:40 | #


Merci

Ajouté le 02/07/2012 à 14:40 :
Merci
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 03/07/2012 01:14 | #


Je réussis pas à le trouver, pouvez vous me dire ce qui ne va pas?

#include "fxlib.h"
#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]

}

Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Dark storm Hors ligne Labélisateur Points: 11571 Défis: 176 Message

Citer : Posté le 03/07/2012 02:08 | #


À la compilation ou oncalc ?

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

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 :
void main() {
    int a, b;
    menu( &a, &b );
}
et ça c'est pas bon :
void main() {
    int *a, *b;
    menu( a, b );
}

Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

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.
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

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.
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

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
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

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.
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

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
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Kevkevvtt Hors ligne Membre Points: 819 Défis: 17 Message

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 :
    switch(mapchoisi)
    {
        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 :
        case 1:
            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 :
    switch(mapchoisi)
    {
        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.
Programmer et rouler, Je ne fais que ça
PRO CONVERT le meilleur programme de conversion sur casio !
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

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)
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Précédente 1, 2, 3 ··· 5, 6, 7, 8, 9, 10, 11 ··· 20 ··· 30 ··· 40 ··· 46, 47, 48 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 62 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