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 ··· 10 ··· 20 ··· 22, 23, 24, 25, 26, 27, 28 ··· 30 ··· 40 ··· 46, 47, 48 Suivante
Fabcvlr Hors ligne Membre Points: 2261 Défis: 41 Message

Citer : Posté le 20/03/2014 13:37 | #


Merci pour vos réponses. et les astuces.
J'aurais aimé avoir un tout petit bout de code où on tape 2 nombres décimaux après une invite sur l'écran de la graph et qui affiche la somme.
style:
a?
12.7
b?
5
la somme est 17.7
Mon problème c'est que je ne connais pas encore la philosophie du C et je ne sais pas si il faut utiliser sscanf qui n'est pas évident à comprendre par rapport à scanf ; ou si je devrais passer par un GET et utiliser les commandes stro... ?

L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 22/03/2014 14:34 | #


La doc officielle du SDK (second fichier ici) contient une liste des fonctions standards non supportées. scanf en fait partie (ainsi que toutes les fonctions relatives aux flux d'entrée-sortie).

On est donc obligé d'écrire soi-même une fonction d'input, mais c'est pas bien compliqué, en voici un exemple utilisable tel quel : http://pastebin.com/MCrSEzJ8
(il faudra la modifier si tu veux pouvoir entrer des caractères spéciaux comme '+' ou '-')

Ensuite, il ne te reste plus qu'à analyser la chaîne de caractères entrée pour y lire ton nombre. Tu peux utiliser sscanf (qui elle est implémentée dans le SDK), mais c'est pas non plus compliqué d'écrire sa propre fonction pour ça, et ce sera beaucoup plus léger.
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 22/03/2014 14:37 | #


[hs] Tu pense pouvoir adapter ton Gravity duck en SH4 [\hs]
il n'y a pas juste une fonction d'input genre ? en Basic ?
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1241 Défis: 54 Message

Citer : Posté le 22/03/2014 14:40 | #


Pierrotll a écrit :

On est donc obligé d'écrire soi-même une fonction d'input

C'est relativement explicite gollum non ?
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 22/03/2014 14:42 | #


dsl, je lis un peu en diagonale.
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 22/03/2014 14:48 | #


@gollum il existe déjà un Gravity Duck SH4.
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 22/03/2014 17:17 | #


J'ai un problème:
J'utilise un tableau 2D en variable locale, je veux le réutiliser dans une autre fonction, pour cela j'utilise les pointeurs mais j'ai un "System error" chaque fois que je veux accéder à une case:
int game(){
   unsigned int plate[4][4]={{0,0,0,0},
                                       {0,0,0,0},
                                       {0,0,0,0},
                                       {0,0,0,0}} ; //mon tableau 2D
   int dep[4]={0,0,0,0}; //un autre tableau
   getDep(&plate, &dep);
}

int getDep(unsigned int* pplate[4][4], int* possDep[4]){ //fonction qui utilise plate et dep
   PrintV(1,1,* pplate[3][3],1); //là j'ai un System error
}
Bref, j'ai pas l'habitude d'utiliser les pointeurs et j'aimerai me débarrasser de mes quelques variables globales qui restent
Lephenixnoir Hors ligne Administrateur Points: 22899 Défis: 149 Message

Citer : Posté le 22/03/2014 17:19 | #


Si tu veux passer le tableau de deux dimensions, tu peux faire
int getDep(unsigned int **pplate, int *possDep)

mais je crains que tu aies, là aussi, une System Error.

Par contre, tu devrais essayer
int getDep(unsigned unt pplate[4][4], int possDep[4])

parce que sinon, tu passes des tableaux de pointeurs.
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 22/03/2014 17:22 | #


essaie avec ça

int game(){
   unsigned int plate[4][4]={0} ; //mon tableau 2D
   int dep[4]={0}; //un autre tableau
   getDep(plate, dep);
   return;
}

int getDep(unsigned int* pplate, int* possDep){ //fonction qui utilise plate et dep
   PrintV(1,1, pplate[3+3*4],1); //là j'ai un System error
   return;
}
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 22/03/2014 17:22 | #


Effectivement, la deuxième solution de Lephenix marche, merci
int game(){
   unsigned int plate[4][4]={0} ; //mon tableau 2D
   int dep[4]={0}; //un autre tableau
   getDep(&plate, &dep);
}

int getDep(unsigned int pplate[4][4], int possDep[4]){ //fonction qui utilise plate et dep
   PrintV(1,1, pplate[3][3],1);
}
Là ça marche, et merci Intelligide pour le plate[][]={0}, je ne savais pas qu'on pouvait faire comme ça
Lephenixnoir Hors ligne Administrateur Points: 22899 Défis: 149 Message

Citer : Posté le 22/03/2014 17:24 | #


Intelligide, justement je pense que ça ne marche pas
C'est pour ça qu'en général, je préfère privilégier les tableaux à une dimension.
Dark storm Hors ligne Labélisateur Points: 11579 Défis: 176 Message

Citer : Posté le 23/03/2014 00:21 | #


Au pire, vous pouvez toujours utiliser l'astuce du
int tableau[12] = {0};
tableau[i + j*nbColonnes] = 1;

Après, je sais plus si c'est j*nbColonnes ou i*nbLignes
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 23/03/2014 00:42 | #


Je pense que ça marcherait aussi en allouant dynamiquement le tableau (avec un malloc() )
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 23/03/2014 01:34 | #


Je vous conseille d'allouer dynamiquement vos tableaux à deux dimensions, un tableau à deux dimensions est un tableau de pointeur :

int** tab = (int**) malloc ( sizeof (int*) * hauteur);
for ( int i=0; i <hauteur ; i++)
       tab [i] = (int*) malloc (sizeof (int) * largeur);

(j'ai fait ça de tête,  il y a peut être des erreurs)


et pour libérer un tableau à deux dimensions :
for ( int i=0; i <hauteur ; i++)
       free (tab [i] );
free (tab);



maintenant pour envoyer un tableau à deux dimensions à une fonction :

int main (int argc, char** argv){
      ...
      fonction (tab);
      ...
}

void fonction ( int** tab ) {
          ...
}

Voilà, normalement il n'y aurait plus de problème avec ça.
Lephenixnoir Hors ligne Administrateur Points: 22899 Défis: 149 Message

Citer : Posté le 23/03/2014 07:33 | #


@Dark Storm
Ça n'a pas d'importance. À partir du moment où tu considère que ton tableau de x*y contient les lignes unes à unes, alors tu mettras x + y*largeur, mais tu peux aussi faire l'inverse, tant que tu gardes tout le temps la même notation.

@Smashmaster
int** tab = (int**) malloc ( sizeof (int*) * hauteur);

C'est pas souvent qu'on voit un malloc casté en **
C'est vrai que là du coup, c'est alloué totalement dynamiquement.

Par contre, je crois que le même problème à l'exécution se pose. Pour ma part, je ne passe jamais de pointeur **, car je me souviens avoir eu des problèmes de lecture (System Errors...).
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 23/03/2014 12:38 | #


@Lephenixnoir : Perso je caste toujours mes mallocs, car la fonction malloc() retourne un (void*), ça permet d'éviter des "warning" voir même des erreurs de compilations avec certains compilateurs.
Lephenixnoir Hors ligne Administrateur Points: 22899 Défis: 149 Message

Citer : Posté le 23/03/2014 12:46 | #


Oui, mais souvent on caste un malloc en (type *) puisque l'on alloue un tableau
Ce que je voulais dire, c'est que je ne vois jamais de cast en (type **), c.a.d d'allocation dynamique de tableau de pointeurs.
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 23/03/2014 16:18 | #


Je ne posait une question : lorsqu'on lit un fichier, est ce que son contenu est copié dans la RAM ?
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Lephenixnoir Hors ligne Administrateur Points: 22899 Défis: 149 Message

Citer : Posté le 23/03/2014 16:22 | #


Je ne pense pas, d'autant plus que Bfile_OpenFile ne renvoie qu'un entier.
De toute manière, je ne pense pas que le système puisse se permettre de dupliquer des gros fichiers comme ça.
Dark storm Hors ligne Labélisateur Points: 11579 Défis: 176 Message

Citer : Posté le 06/04/2014 16:43 | #


Je sais pas si quelqu'un pourra me répondre ici (le niveau commence à être élevé ), mais bon, autant essayer :

J'ai une fonction basique qui permet de modifier un point 3D :
void FF_place_point_3D(Point_3D* point, int x, int y, int z, int color)
{
    point->x = x;
    point->y = y;
    point->z = z;
    point->color = color;
}


J'en ai une autre qui place les points d'un cube :
void initCube(Object_3D* objet, Face_3D* faces[], Line_3D* lignes[], Point_3D* points[])
{
    // sommets
    FF_place_point_3D(points[0], 15, 15, 20, ML_BLACK);
    FF_place_point_3D(points[1], 15, -15, 20, ML_BLACK);
    FF_place_point_3D(points[2], -15, 15, 20, ML_BLACK);
    FF_place_point_3D(points[3], -15, -15, 20, ML_BLACK);
    FF_place_point_3D(points[4], 15, 15, 50, ML_BLACK);
    FF_place_point_3D(points[5], 15, -15, 50, ML_BLACK);
    FF_place_point_3D(points[6], -15, 15, 50, ML_BLACK);
    FF_place_point_3D(points[7], -15, -15, 50, ML_BLACK);
        ...
}


Et qui s'utilise comme ceci :
Object_3D cube;
Face_3D faces_cube[12];
Line_3D arretes_cube[18];
Point_3D sommets_cube[8];

initCube(&cube, faces_cube, arretes_cube, sommets_cube);


Or, bien que ça compile, j'ai un syster dès l'instruction point->x = x;

Comment passer en paramètre, pour pouvoir y accéder, un tableau de pointeurs de structures ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 22899 Défis: 149 Message

Citer : Posté le 06/04/2014 17:18 | #


Tu veux passer un pointeur, soit un tableau de pointeurs sur des structures ?

Ce sera un paramètre de type Structure **, et pour l'envoyer, tu peux mettre
Structure *tab[...];
fonction(tab);


Ajouté le 06/04/2014 à 17:20 :
Ton erreur est que tu envoies face_cube, qui est de type Face_3D *, et tu le reçois en Face_3D *[] = Face_3D **.
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 22, 23, 24, 25, 26, 27, 28 ··· 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 - 2023 | Il y a 61 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