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 ··· 30 ··· 32, 33, 34, 35, 36, 37, 38 ··· 40 ··· 46, 47, 48 Suivante
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 19/06/2014 18:55 | #


Je dois essayer ou c'est un constat ?
1337
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 19/06/2014 18:56 | #


Ni l'un ni l'autre, c'est une réalité.
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 19/06/2014 19:02 | #


Lephenixnoir a écrit :
void fonction(int **);

int main()
{
  int tab[10][10];
  fonction(tab);
}

void fonction(int **tab)
{
  int x = tab[0][0];
}


Ce code ne fonctionne pas.
Ou alors, c'est que ce que j'ai dis sur la propension à générer des System ERROR est encore plus vrai.
Disons que ce style de codes ne fonctionne pas.


Et maintenant tu *vois* pourquoi je ne jure que par des tableaux 1D?

En fait, si je ne plante pas, c'est parce qu'un tableau 2d initialisé comme ça [][] n'est pas un tableau de pointeurs mais un seul bloc uni. C'est pas vraiment la même chose dans le sens où quand tu initialises dynamiquement un tableau 2d tab[a], le tab[a] est juste un pointeur vers des pointeurs, pas ici. J'ai un peu de mal à expliquer, je pense que leffe sera peut-être plus doué à expliquer mais c'est une erreur que j'ai eu très tôt dans mon parcours et Pierrot m'a fortement suggéré de switcher en 1D.

Par contre,
void fonction(int tab[][10]) devrait marcher si je ne m'abuse car le compilo sait comment traiter les tableaux de tableaux de 10.
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 19/06/2014 19:10 | #


Là, ça devrait fonctionner en effet.

Explication un peu plus détaillée :

Un tableau 1D, c'est un pointeur (int *tab). Donc ce pointeur pointe sur le contenu du tableau.
Lorsqu'on déclare un tableau 2D, on a donc un pointeur au second niveau (int **tab), i.e. un pointeur sur... des pointeurs. En fait, un tableau 2D au sens propre du terme, c'est un tableau de pointeurs (ben oui, comme un tableau c'est un pointeur, un tableau de tableaux c'est un tableau de pointeurs).
Ainsi si on fait tab2d[1], on ne tombe par sur une valeur mais sur un pointeur. Ce pointeur, c'est celui qui représente le deuxième sous-tableau.
Sauf que lorsqu'on déclare un tableau 2D, ça ne se passe pas comme ça. Le compilateur alloue un bloc uni qui contient toutes les données. Si vous déclarez un tableau 2D de 3 par 4, vous aurez un bloc de 12 octets. Quant aux pointeurs sur lesquels on pensait tomber, ils n'existent même pas. Le seul qui existe, c'est le tableau 2D lui-même (int **tab).
Le compilateur lui, va donc traiter un tableau 2D "bloc" comme un tableau 1D, en utilisant le pointeur de second niveau comme un pointeur simple, d'où la source de l'erreur (en gros).

Ceci n'empêche, si dans un bloc vous déclarez un tableau 2D quelle qu'en soit la manière, vous devez utiliser deux paires de crochets à chaque fois. N'allez pas en utiliser une seule en disant "le compilo fait comme ça", ça ne fonctionner pas.
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 20/06/2014 10:16 | #


Le problème c'est que je ne comprends pas vraiment comment faire des maps avec un tableau 1D.
Je pensais avoir compris comment les codeurs s'y prenait pour faire les maps, mais apparemment non :/
Pour moi, il faut toujours, en quelques sortes, une abscisse et une ordonné ...
1337
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 20/06/2014 10:21 | #


Prenons un tableau 2D. Plutôt que d'utiliser
0;0 1;0 2;0 3;0
0;1 1;1 2;1 3;1
0;2 1;2 2;2 3;2

Tu mets tout dans un tableau à une dimension :
00 01 02 03 04 05 06 07 08 09 10 11

que tu choisis de voir comme ceci :
00 01 02 03
04 05 06 07
08 09 10 11

auquel cas map[x][y] devient map[largeur*y+x], soit tu le vois comme cela :
00 04 08
01 05 09
02 06 10
03 07 11

auquel cas map[x][y] devient map[hauteur*x+y], c'est selon ton choix.

La seul différence, c'est la manière d'utiliser le tableau.
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 20/06/2014 14:07 | #


Au fait, puisqu'on parle de ça, j'ai un petit accès de curiosité à satisfaire...
Comment faire pour créer des maps à cases hexagonales ?
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 20/06/2014 14:09 | #


Tu les alignes. En gros, une ligne monte et descend successivement.
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 20/06/2014 16:12 | #


Ou tu décales une ligne sur deux. T'as une bonne explication ici.
Kirafi Hors ligne Membre Points: 2179 Défis: 10 Message

Citer : Posté le 22/06/2014 20:20 | #


Alors, j'ai un tableau de short à copié dans un autre tableau de short vide, comment je fait ?
c'est des tableau 2D comme
ça
voila
const short Pattern1[3][6]={
    {10,5,15,5,15,10},
    {29,35,35,41,41,47},
    {6,0}};
à copier dans
ça
voila
short PatternAff[3][18];

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 22/06/2014 20:25 | #


int i,j;
for(i=0;i<3:i++) for(j=0;j<6;j++) PatternAff[i][j] = Pattern1[i][j];


Par contre ça ne remplira qu'un tiers du tableau.
Kirafi Hors ligne Membre Points: 2179 Défis: 10 Message

Citer : Posté le 22/06/2014 20:27 | #


Donc en fait on peut pas faire
PatternAff=Pattern1
ça aurait était tellement plus simple
En gros on copie une à une les valeurs ça me va, merci Lephénixnoir
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 22/06/2014 20:43 | #


Non, car (sans rentrer dans les détails), si tu fais PatternAff=Pattern1, tu vas perdre la mémoire de PatternAff (fuite de mémoire donc), et les deux tableaux vont avoir le même contenu. Pas les même valeurs, le même contenu identique, exactement la même mémoire, comme s'ils se la partagaient. Donc si tu modifies une case d'un des tableaux, ils va aussi la modifier pour l'autre, donc on n'est plus dans le cas d'une copie.
Kirafi Hors ligne Membre Points: 2179 Défis: 10 Message

Citer : Posté le 22/06/2014 21:07 | #


Oula d'accord, et comme j'avais un "const", ça buguait . Ok maintenant je le saurais
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 22/06/2014 21:14 | #


Il faut bien comprendre que le nom du tableau, PatternAff comme Pattern1, ce n'est pas les données. Pour la calculatrice, c'est comme une référence qui lui indique où sont stockées les données dans la mémoire. Donc si tu fais PatternAff=Pattern1, tu copies la référence, et du coup le contenu auquel on accède avec PatternAff est devenu le même que celui auquel on accède avec Pattern1.
Kirafi Hors ligne Membre Points: 2179 Défis: 10 Message

Citer : Posté le 22/06/2014 21:52 | #


Bon ben c'est encore moi .
Je veux ça
if(XPatternA==108-PatternAff[2][1])XPatternA=PatternAff[2][1];

Il y a -4 dans "PatternAff[2][1]",ça marchait pas donc j'ai tenté ça (au cas où)... Mais ça marche pas non plus .
Z=PatternAff[2][1];
if(XPatternA==108-Z)XPatternA=Z;

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 22/06/2014 21:56 | #


C'est correct. Ton tableau contient bien des int maintenant ?
Kirafi Hors ligne Membre Points: 2179 Défis: 10 Message

Citer : Posté le 22/06/2014 21:57 | #


Ben non, c'est des short ... ça a l'air de buguer sur ça "XPatternA=PatternAff[2][1];"
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 22/06/2014 21:58 | #


Même des short, ça n'a aucune raison de ne pas fonctionner.
On peut avoir plus de code ?
Kirafi Hors ligne Membre Points: 2179 Défis: 10 Message

Citer : Posté le 22/06/2014 22:00 | #


En fait je viens de modifier mais ça persiste, voila le bout de
code
Cliquer pour enrouler
if(PatternA==0){
    PatternA=rand()%2;
    switch(PatternA){
        case 0 : for(i=0;i<3;i++)for(j=0;j<6;j++)PatternAff[i][j]=Pattern1[i][j];
            break;
        case 1 : for(i=0;i<3;i++)for(j=0;j<4;j++)PatternAff[i][j]=Pattern2[i][j];
            break;
        }
    XPatternA=PatternAff[2][1];
    }
if(PatternA<3){
    for(Z=0;Z!=PatternAff[2][0];Z++)ML_bmp_or(Obstacles[Anim/8],PatternAff[0][Z]+XPatternA,PatternAff[1][Z],5,5);    //Dessin de chaque obstacle du Pattern
    XPatternA++;
    if(XPatternA==108-PatternAff[2][1]){
        PatternA=0;
        }
    }

Les tableaux sont des short et le reste des int.
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 22888 Défis: 149 Message

Citer : Posté le 22/06/2014 22:02 | #


Mais ce code, tu ne l'exécutes qu'une fois ? Parce que XPatternA==112, ça arrive pas souvent
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 32, 33, 34, 35, 36, 37, 38 ··· 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 54 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