**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 28/08/2014 11:48 | #
Tu nous donnes ton code parce que là on peut rien faire.
Si, je peux au moins te dire que tu as tenté d'accéder à des données supposées être en-dehors de la mémoire physique de la machine.
Citer : Posté le 28/08/2014 11:50 | #
Comme tout à l'heure :
ML_clear_vram();
while(IsKeyUp(KEY_CTRL_SHIFT)){
ML_bmp_or(Menu,1,1,127,63);
ML_display_vram();
}
Edit : "code", pas "quote".
♣ Jeu en BASIC CASIO ♣
♥ La Programmation ♥
♥ Les Jeux Vidéo ♥
♠ JAVASCRIPT ♠
♠ JAVA ♠
♠ C ♠
♠ C# ♠
♠ PHP/MY SQL ♠
♠ BASIC CASIO ♠
* Pour la plupart de
ces languages, je ne
possède que des bases...
La programmation ne fait pas exception
☺ La valeur n'attend pas le nombre des années. 8)
Citer : Posté le 28/08/2014 11:57 | #
Sans doute que t'utilises une version de ML non compatible SH4. Passe ton g1a à ça et essaie avec le nouveau fichier.
Citer : Posté le 28/08/2014 12:00 | #
A ok, j'avais déjà vu qu'il pouvait y avoir des problèmes de compatibilité avec les addins mais je ne savait pas comment ils se manifestaient.
Ajouté le 28/08/2014 à 12:03 :
Sa marche parfaitement, merci
♣ Jeu en BASIC CASIO ♣
♥ La Programmation ♥
♥ Les Jeux Vidéo ♥
♠ JAVASCRIPT ♠
♠ JAVA ♠
♠ C ♠
♠ C# ♠
♠ PHP/MY SQL ♠
♠ BASIC CASIO ♠
* Pour la plupart de
ces languages, je ne
possède que des bases...
La programmation ne fait pas exception
☺ La valeur n'attend pas le nombre des années. 8)
Citer : Posté le 28/08/2014 13:27 | #
J'en ai profité pour ajouter un bout sur l'utilisation des variables globales, vu que la question revient fréquemment.
C'est tiré de ce site : http://www.ltam.lu/cours-c/prg-c112.htm
Citer : Posté le 29/08/2014 19:29 | #
Est ce qu'on a une fonction pour overclocker les SH4 ?
Les Prizm ont des processeurs SH4 ou pas ?
Escape prison
Bloxorz
Free wheel
QR code
Nombre en or
RayCasting Engine
Mario Party
Zelda
et Planète Casio
Citer : Posté le 29/08/2014 19:34 | #
Oui, les Prizm ont des processeurs SH4-A, mais après, le modèle est peut-être différent de celui des monochromes (c'est un SH7305, enfin, c'est le modèle qui se rapproche le plus du proco de la calculatrice) ;).
Tu as quelques infos en plus sur l'overclocking de la Prizm, qui pourraient peut-être s'appliquer en partie aux monochromes, ici ;).
Citer : Posté le 29/08/2014 21:29 | #
J'ai un problème d'algorithmie, de tri plus particulièrement.
J'ai une liste de taille variable organisée de la manière suivante :
1 : 43
2 : 12
3 : 28
...
n : xx
Je souhaite créer une autre liste qui contienne l'indice des cellules triées dans l'ordre décroissant. Exemple de la liste 2 après le tri :
1 : 0 // 35
2 : 3 // 28
3 : 2 // 12
...
n : xx
Comment feriez-vous ? J'ai un algo, mais il est en O(n²), ce qui est pas top, ça servira à l'affichage...
Citer : Posté le 29/08/2014 21:31 | #
Utilise qsort(). Tu seras entre O(n^2) et O(n log n).
Et si ça te branche, j'ai une implémentation du tri fusion. Avec ça tu es en O(n log n) tout le temps.
Citer : Posté le 29/08/2014 21:35 | #
Le truc c'est que c'est pour FF3D, et j'ai pas trop envie d'inclure la stdlib dedans
Je veux bien voir ton tri fusion si ça te dérange pas
Citer : Posté le 29/08/2014 21:37 | # | Fichier joint
MP si tu as des questions, je pense pas que ce soit trop le lieu.
Citer : Posté le 29/08/2014 21:38 | #
Ok, merci
Citer : Posté le 31/08/2014 19:03 | #
Pour faire plaisir à Positon
J'ai "réussi" à faire un + ou - moins en C mais j'aimerais l'améliorer:
-Y'a t'il une fonction pour détecter pour savoir si on appuie sur une touche.
-La méthode pour détecter les touches me parait limite.
-Les constantes comme KEY_CHAR_3 sont de quel type. Peut on la mettre dans une variable.
-Je n'arrive pas a sortir de la boucle lorsque j'ai gagner(je ne comprends pas pourquoi et je suis donc obligé de mettre un break.
-Est-ce qu'on peut mettre la valeur d'une variable de type int dans une chaine de caractère?
Et pour finir qu'Est-ce que vous me conseillez à apprendre avant de réaliser de "gros jeu" (ml, les pointeurs (on sera 2 darkysun ),...).
Voila le code attention les yeux :
#include "fxlib.h"
#include "stdio.h"
static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
int AddIn_main(int isAppli, unsigned short OptionNum)
{
//Variable
unsigned int key;
int nbrAlea = 0;
int tailleChiffre;
char texte[1];
int nbrUser;
int nbrAffiche = 0;
//Nombre aléatoire
srand(RTC_getTicks());
nbrAlea = rand_int_ab(1,100);
//Menu
locate(5,2);
Print("Jeu du + ou -");
Bdisp_DrawLineVRAM(23,16,103,16);
PrintMini(11,40,"Appuyer sur EXE pour jouer",0);
do{
GetKey(&key);
}while(key != KEY_CTRL_EXE);
Bdisp_AllClr_DDVRAM();
//Jeu
do{
int nbrUser =0;
int tailleChiffre = 0;
PrintMini(1,1,"Choisi un nombre entre 10~99",0);
do{
GetKey(&key);
if (key == KEY_CHAR_0 || key == KEY_CHAR_1 || key == KEY_CHAR_2 ||key == KEY_CHAR_3 ||key == KEY_CHAR_4 ||key == KEY_CHAR_5 ||key == KEY_CHAR_6 ||key == KEY_CHAR_7 ||key == KEY_CHAR_8 ||key == KEY_CHAR_9)
{
if(key == KEY_CHAR_0)
nbrAffiche = 0;
if(key == KEY_CHAR_1)
nbrAffiche = 1;
if(key == KEY_CHAR_2)
nbrAffiche = 2;
if(key == KEY_CHAR_3)
nbrAffiche = 3;
if(key == KEY_CHAR_4)
nbrAffiche = 4;
if(key == KEY_CHAR_5)
nbrAffiche = 5;
if(key == KEY_CHAR_6)
nbrAffiche = 6;
if(key == KEY_CHAR_7)
nbrAffiche = 7;
if(key == KEY_CHAR_8)
nbrAffiche = 8;
if(key == KEY_CHAR_9)
nbrAffiche = 9;
sprintf(texte,"%d",nbrAffiche);
PrintXY(50+tailleChiffre,20,texte,0);
if(tailleChiffre == 0)
nbrUser = 10*nbrAffiche;
else
nbrUser = nbrUser+nbrAffiche;
tailleChiffre+=6;
}
}while(tailleChiffre < 12);
if(nbrUser > nbrAlea)
PrintMini(20,40,"Le nombre est + petit",0);
if(nbrUser < nbrAlea)
PrintMini(20,40,"Le nombre est + grand",0);
do{
GetKey(&key);
}while(key != KEY_CTRL_EXE);
Bdisp_AllClr_DDVRAM();
if(nbrUser == nbrAlea){
break;
}
}while(nbrUser != nbrAlea);
PrintMini(20,40,"Bravo! Vous avez gagner",0);
while(1){
GetKey(&key);
}
return 1;
}
int RTC_getTicks(){
return (*SysCall)(0, 0, 0, 0, 0x3B);
}
int rand_int_ab(int min, int max){
return rand() % (max - min) + min;
}
Merci d'avance pour vos réponse. Elles me sont d'un grand aide pour apprendre le C casio
Citer : Posté le 31/08/2014 19:10 | #
Bon, je vais te repondre dans l'ordre :
pour detecter si une touche est enfoncée, utilise IsKeyDown(KEY_CTRL_EXE), elle renvoye un si la touche est pressée, et 0 si elle ne l'est pas.
KEY_CHAR_3 sont des unsigned int (au maximum, je pense que c'est plus du simple int, a vérifier)
c'est un machin du style 30002, donc oui tu peux le mettre dans une variable
pour les int dans un char, utilise cette fonction, qui te met le nombre dans la chaine str
{
int i, length=0;
str[0] = '0';
if(nombre)
{
if(nombre<0)
{
length++;
str[0] = '-';
nombre = -nombre;
}
for(i=nombre ; i ; i/=10) length++;
str[length] = 0;
for( ; nombre ; nombre/=10) str[--length] = nombre%10+'0';
}
}
et oui, fait d'autre petits jeux et apprend a utiliser ML avant de faire quoi que ce soit de gros !
(et les pointeurs sont hyper utiles)
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 31/08/2014 19:16 | #
Merci de ta réponse très rapide
Mais est ce que en C on peut faire ça:
Do
Getkey
Lpwhile Ans =0
Est ce que isoler le Getkey est une bonne idée?
Citer : Posté le 31/08/2014 19:19 | #
Le getkey est bloquant : tant que l'utilisateur n’appuie pas, le programme ne continue pas. Le mieux est d'utiliser IsKeyDown : exemple :
if(IsKeyDown(KEY_CTRL_LEFT)
{
//déplacement vers la gauche
}
else if(IsKeyDown(KEY_CTRL_RIGHT)
{
//déplacement vers la droite
}
cela te donnera des programmes rapides et réactifs
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 31/08/2014 19:22 | #
Le GetKey en C est stoppant : le programme ne continue pas tant que tu n'as pas appuyé sur une touche. Ensuite, tu es obligé de faire GetKey(&key); sinon tu n'aura pas la valeur.
Quitte à me répéter, le C n'a presque rien à voir avec le Basic ! Donc lisez le tuto sur le C jusqu'à au moins la partie sur la SDL, on en reparle plus tard : vous ne pouvez pas programmer sans savoir ce qu'est un pointeur, à quoi ça sert et comment ça s'utilise. Et encore, y'a plein d'autres bases à connaître avant de se lancer dans un addin.
Citer : Posté le 31/08/2014 20:00 | #
Est-ce que toutes les libs non officielles comme Ml, textLib sont compatibles en C++?
Citer : Posté le 31/08/2014 20:13 | #
Oui, mais pour textlib il faut mettre l'include dans un extern "C"
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 31/08/2014 20:23 | #
Il faudrait que je le fasse à l'intérieur même du header, mais je me pose encore une question. Avec gcc, on teste avec
mais avec le compilo du SDK... ?
Citer : Posté le 31/08/2014 20:43 | #
Regarde dans ML, il me semble que c'est écrit dans le header et/ou le .c