Posté le 13/04/2014 10:10
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 76 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
Citer : Posté le 13/04/2014 10:12 | #
Tu aurais ton code a nous passer ?
Citer : Posté le 13/04/2014 10:12 | #
envoie moi les codes sources stp
Citer : Posté le 13/04/2014 10:20 | #
#include "fxlib.h"
#include "stdio.h"
#include "stdlib.h"
#include"MonochromeLib.h"
void dessin();
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
dessin();
while(1){
GetKey(&key);
}
return 1;
}
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
void dessin()
{
int y=59,x=64,clef=0;
int saut=-1;
int s=0;
int i,p;
cls();
clsvram();
line(1,60,127,60,1);
horizontal(50,1,60,1);
horizontal(1,1,127,1);
vertical(70,5,63,1);
vertical(60,1,55,1);
while(1){
Sleep(40);
//commande de saut
if (IsKeyDown(KEY_CTRL_SHIFT)&&test(x+1,y-s)==1){y-=s;s=0;saut=0;clef=-1;}
if (IsKeyDown(KEY_CTRL_SHIFT)&&test(x-1,y-s)==1){y-=s;s=0;saut=0;clef=1;}
if (IsKeyDown(KEY_CTRL_SHIFT)&&test(x,y-s+1)==1&&saut==-1){saut=0;}
if(test(x,y-s+1)==0&&saut==-1){saut=6;y=y-s+10;}
//execution du saut
if(saut>=0){
if(clef!=0&&test(x+clef,y-s)==0){x+=clef;}
i=-0.25*(saut-8)*(saut-8)+16;saut++;
if(i<s-5){i=s-5;}
if(saut<6){for(p=s;p<=i;p++){if(test(x,y-p-1)==1){saut=6;i=p;break;}}}
if(test(x+1,y-s)==1||test(x-1,y-s)==1){if(saut>5){i=s-1;clef=0;}}
if(saut>6){for(p=s;p>=i;p--){if(test(x,y-p+1)==1){clef=0;saut=-1;i=0;y-=p;p=0;}}}
s=i;}
//affichage plot
plot(x,y-s,1);
vram();
plot(x,y-s,0);
//deplacement
if( IsKeyDown(KEY_CTRL_RIGHT)&&test(x+1,y-s)==0&&clef==0){x++;}
if( IsKeyDown(KEY_CTRL_LEFT)&&test(x-1,y-s)==0&&clef==0){x--;}
}
}
pour les line horizontale test et plot ce sont les fonctions de monochromeslib mais je les ai renomer pour que ce soit plus court et plus facile a retenir car sa ressemble a ceux du basic
c'est un test pour un mario
Citer : Posté le 13/04/2014 10:26 | #
Tu as effacé les dernieres lignes ?
Sinon t'as aussi des soucis d'optimisation et de presentation qui rendent ton code difficilement relisable:
if( IsKeyDown(KEY_CTRL_LEFT)&&test(x-1,y-s)==0&&clef==0){x--;} ⇒
if( IsKeyDown(KEY_CTRL_LEFT) && test(x-1,y-s)==0 && clef==0) x--;
Les dernieres lignes a ne jamais supprimer:
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum){ return INIT_ADDIN_APPLICATION(isAppli, OptionNum);}
#pragma section
Ajouté le 13/04/2014 à 10:27 :
Ok j'avais pas vu qu'elles y etaient ...
Mets les a la fin les séparent pas comme ça ...
Citer : Posté le 13/04/2014 10:28 | #
je l'ai dis je débute sur le C mais les dernière ligne ne sont pas supprime elle se trouve plus en haut mais est ce qu'il faut qu'elle se trouve a la fin ?
Citer : Posté le 13/04/2014 10:29 | #
je pense
Citer : Posté le 13/04/2014 10:29 | #
Oui, en fait tu ne les bouge jamais, quel que soit le programme
Citer : Posté le 13/04/2014 10:32 | #
sa ne marche toujours pas je crois que c'est une erreur de ma part en essayant de rendre compatible le SDK en SH4 car depuis a chaque nouveaux programme il lance monochrome lib en fichier .c mais pas celui que j'ai choisi au début et même quand je l'ouvre les premières lignes ne s'affiche plus et je dois tout réécrire
Citer : Posté le 13/04/2014 10:35 | #
Voila je te l'ai mis en version propre pour que tu vois a quoi ça doit ressembler
Ca te permet de pouvoir te relire plus facilement
N’édite pas tes codes avec le SDK mais fait le avec Notepad++ si tu le fais pas déjà comme ça t'auras la coloration des syntaxes et ça va t'aider
#include "stdio.h"
#include "stdlib.h"
#include "MonochromeLib.h"
void dessin();
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
dessin();
// Qu'est-ce que ca ?
while(1){
GetKey(&key);
}
return 1;
}
void dessin()
{
int y=59,x=64,clef=0;
int saut=-1;
int s=0;
int i,p;
cls();
clsvram();
line(1,60,127,60,1);
horizontal(50,1,60,1);
horizontal(1,1,127,1);
vertical(70,5,63,1);
vertical(60,1,55,1);
while(1){
Sleep(40);
//commande de saut
if (IsKeyDown(KEY_CTRL_SHIFT) && test(x+1,y-s)==1){
y-=s;
s=0;
saut=0;
clef=-1;
}
if (IsKeyDown(KEY_CTRL_SHIFT) && test(x-1,y-s)==1){
y-=s;
s=0;
saut=0;
clef=1;
}
if (IsKeyDown(KEY_CTRL_SHIFT) && test(x,y-s+1)==1 && saut==-1) saut=0;
if(test(x,y-s+1)==0&&saut==-1){saut=6;y=y-s+10;}
//execution du saut
if(saut>=0){
if(clef!=0&&test(x+clef,y-s)==0) x+=clef;
i=-0.25*(saut-8)*(saut-8)+16;
saut++;
if(i<s-5) i=s-5;
if(saut<6){
for(p=s;p<=i;p++){
if(test(x,y-p-1)==1){
saut=6;
i=p;
break;
}
}
}
if(( test(x+1,y-s)==1 || test(x-1,y-s)==1 ) && saut>5){
i=s-1;
clef=0;
}
if(saut>6){for(p=s;p>=i;p--){if(test(x,y-p+1)==1){clef=0;saut=-1;i=0;y-=p;p=0;}}}
s=i;
}
//affichage plot
plot(x,y-s,1);
vram();
plot(x,y-s,0);
//deplacement
if( IsKeyDown(KEY_CTRL_RIGHT) && test(x+1,y-s)==0 && clef==0) x++;
if( IsKeyDown(KEY_CTRL_LEFT) && test(x-1,y-s)==0 && clef==0) x--;
}
}
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum){ return INIT_ADDIN_APPLICATION(isAppli, OptionNum);}
#pragma section
Ajouté le 13/04/2014 à 10:35 :
et ne modifie pas plusieurs variables sur une ligne
Citer : Posté le 13/04/2014 10:36 | #
while(1){
GetKey(&key);
}
sa j'ai aucune idée de son utilité mais si je le retire sa ne fonctionne pas
Citer : Posté le 13/04/2014 10:37 | #
ça demande a l'utilisateur d'appuyer sur une touche, while (1) est une boucle infinie jusqu'a que la condition soit respectée
Citer : Posté le 13/04/2014 10:40 | #
oui sa je l'ai vu mais je ne sais pas si c'est utile de le laisser
et il ne fonctionne toujours pas avec la version de TheProg
Citer : Posté le 13/04/2014 10:41 | #
Oui mais en l'occurence si tu mets ca tu vas devoir faire un reset de ta calto quand la fonction dessin() va se terminer...
La condition de la boucle (actuellement 1) doit être 30004 (le code de la touche EXE) ou une autre touche mais c'est seulement un detail
Tu aurais tes fonctions plot, test, horizontal ...
Ajouté le 13/04/2014 à 10:41 :
Attention je n'ai pour le moment rien modifié j'ai seulement mis au propre
Citer : Posté le 13/04/2014 10:42 | #
tu veux les voir pour les utiliser ou pour voir si l'erreur ne vient pas de la ?
Citer : Posté le 13/04/2014 10:43 | #
vois si l'erreur ne viens pas de la mais a mon avis l'erreur viens des IsKeyDown qui ne sont pas compatibles
T'as fait quelle manip pour le rendre compatible ?
Ajouté le 13/04/2014 à 10:44 :
surtout ya des fonctions dont je ne vois pas l'utilité notamment vram(), plot() ...
Citer : Posté le 13/04/2014 10:46 | #
oui mais comme je n'ai pas trouver clairement le de topic pour utiliser les getkey avec leur code j'ai utilise sa mais merci de me le dire
#include "MonochromeLib.h"
#include "stdlib.h"
#define sgn(x) (x<0?-1:1)
#define rnd(x) ((int)(x+0.5))
typedef char*(*sc_cpv)(void);
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)
void cls()
{
char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000;
int i, j;
for(i=0 ; i<64 ; i++)
{
*LCD_register_selector = 4;
*LCD_data_register = i|192;
*LCD_register_selector = 4;
*LCD_data_register = 0;
*LCD_register_selector = 7;
for(j=0 ; j<16 ; j++) *LCD_data_register = 0;
}
}
void clsvram()
{
int i, end, *pointer_long, vram;
char *pointer_byte;
vram = (int)ML_vram_adress();
end = 4-vram&3;
pointer_byte = (char*)vram;
for(i=0 ; i<end ; i++) pointer_byte[i] = 0;
pointer_long = (int*) (vram+end);
for(i=0 ; i<255 ; i++) pointer_long[i] = 0;
pointer_byte += 1020+end;
end = vram&3;
for(i=0 ; i<end ; i++) pointer_byte[i] = 0;
}
void vram()
{
char *LCD_register_selector = (char*)0xB4000000, *LCD_data_register = (char*)0xB4010000, *vram;
int i, j;
vram = ML_vram_adress();
for(i=0 ; i<64 ; i++)
{
*LCD_register_selector = 4;
*LCD_data_register = i|192;
*LCD_register_selector = 4;
*LCD_data_register = 0;
*LCD_register_selector = 7;
for(j=0 ; j<16 ; j++) *LCD_data_register = *vram++;
}
}
void plot(int x, int y, int c)
{
char* vram = ML_vram_adress();
if(x&~127 || y&~63) return;
switch(c)
{
case 1:
vram[(y<<4)+(x>>3)] |= 128>>(x&7);
break;
case 0:
vram[(y<<4)+(x>>3)] &= ~(128>>(x&7));
break;
case 2:
vram[(y<<4)+(x>>3)] ^= 128>>(x&7);
break;
}
}
int test(int x, int y)
{
char *vram, byte;
if(x&~127 || y&~63) return 0;
vram = ML_vram_adress();
byte = 1<<(7-(x&7));
return (vram[(y<<4)+(x>>3)] & byte ?1:0);
}
void line(int x1, int y1, int x2, int y2,int c)
{
int i, x, y, dx, dy, sx, sy, cumul;
x = x1;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
sx = sgn(dx);
sy = sgn(dy);
dx = abs(dx);
dy = abs(dy);
plot(x, y,c);
if(dx > dy)
{
cumul = dx / 2;
for(i=1 ; i<dx ; i++)
{
x += sx;
cumul += dy;
if(cumul > dx)
{
cumul -= dx;
y += sy;
}
plot(x, y,c);
}
}
else
{
cumul = dy / 2;
for(i=1 ; i<dy ; i++)
{
y += sy;
cumul += dx;
if(cumul > dy)
{
cumul -= dy;
x += sx;
}
plot(x, y,c);
}
}
}
void horizontal(int y, int x1, int x2,int c)
{
int i;
char checker;
char* vram = ML_vram_adress();
if(y&~63 || (x1<0 && x2<0) || (x1>127 && x2>127)) return;
if(x1 > x2)
{
i = x1;
x1 = x2;
x2 = i;
}
if(x1 < 0) x1 = 0;
if(x2 > 127) x2 = 127;
switch(c)
{
case 1:
if(x1>>3 != x2>>3)
{
vram[(y<<4)+(x1>>3)] |= 255 >> (x1&7);
vram[(y<<4)+(x2>>3)] |= 255 << 7-(x2&7);
for(i=(x1>>3)+1 ; i<x2>>3 ; i++)
vram[(y<<4) + i] = 255;
}
else vram[(y<<4)+(x1>>3)] |= (255>>(x1%8 + 7-x2%8))<<(7-(x2&7));
break;
case 0:
if(x1>>3 != x2>>3)
{
vram[(y<<4)+(x1>>3)] &= 255 << 8-(x1&7);
vram[(y<<4)+(x2>>3)] &= 255 >> 1+(x2&7);
for(i=(x1>>3)+1 ; i<x2>>3 ; i++)
vram[(y<<4) + i] = 0;
}
else vram[(y<<4)+(x1>>3)] &= (255<<8-(x1&7)) | (255>>1+(x2&7));
break;
case 2:
if(x1>>3 != x2>>3)
{
vram[(y<<4)+(x1>>3)] ^= 255 >> (x1&7);
vram[(y<<4)+(x2>>3)] ^= 255 << 7-(x2&7);
for(i=(x1>>3)+1 ; i<(x2>>3) ; i++)
vram[(y<<4) + i] ^= 255;
}
else vram[(y<<4)+(x1>>3)] ^= (255>>((x1&7) + 7-(x2&7)))<<(7-(x2&7));
break;
}
}
void vertical(int x, int y1, int y2,int c)
{
int i, j;
char checker, byte, *vram = ML_vram_adress();
if(x&~127 || (y1<0 && y2<0) || (y1>63 && y2>63)) return;
if(y1 > y2)
{
int tmp = y1;
y1 = y2;
y2 = tmp;
}
if(y1 < 0) y1 = 0;
if(y2 > 63) y2 = 63;
i = (y1<<4)+(x>>3);
j = (y2<<4)+(x>>3);
switch(c)
{
case 1:
byte = 128>>(x&7);
for( ; i<=j ; i+=16)
vram[i] |= byte;
break;
case 0:
byte = ~(128>>(x&7));
for( ; i<=j ; i+=16)
vram[i] &= byte;
break;
case 2:
byte = 128>>(x&7);
for( ; i<=j ; i+=16)
vram[i] ^= byte;
break;
}
}
void circle(int x, int y, int radius,int c)
{
int plot_x, plot_y, d;
if(radius < 0) return;
plot_x = 0;
plot_y = radius;
d = 1 - radius;
plot(x, y+plot_y,c);
if(radius)
{
plot(x, y-plot_y,c);
plot(x+plot_y, y,c);
plot(x-plot_y, y,c);
}
while(plot_y > plot_x)
{
if(d < 0)
d += 2*plot_x+3;
else
{
d += 2*(plot_x-plot_y)+5;
plot_y--;
}
plot_x++;
if(plot_y >= plot_x)
{
plot(x+plot_x, y+plot_y,c);
plot(x-plot_x, y+plot_y,c);
plot(x+plot_x, y-plot_y,c);
plot(x-plot_x, y-plot_y,c);
}
if(plot_y > plot_x)
{
plot(x+plot_y, y+plot_x,c);
plot(x-plot_y, y+plot_x,c);
plot(x+plot_y, y-plot_x,c);
plot(x-plot_y, y-plot_x,c);
}
}
}
void circlep(int x, int y, int radius,int c)
{
int plot_x, plot_y, d;
if(radius < 0) return;
plot_x = 0;
plot_y = radius;
d = 1 - radius;
horizontal(y, x-plot_y, x+plot_y,c);
while(plot_y > plot_x)
{
if(d < 0)
d += 2*plot_x+3;
else {
d += 2*(plot_x-plot_y)+5;
plot_y--;
horizontal(y+plot_y+1, x-plot_x, x+plot_x,c);
horizontal(y-plot_y-1, x-plot_x, x+plot_x,c);
}
plot_x++;
if(plot_y >= plot_x)
{
horizontal(y+plot_x, x-plot_y, x+plot_y,c);
horizontal(y-plot_x, x-plot_y, x+plot_y,c);
}
}
}
void scrollh(int scroll)
{
int i, j;
char line[16], shift, *vram;
unsigned char next;
unsigned short word;
vram = ML_vram_adress();
scroll %= 128;
shift = 8-(scroll&7);
for(i=0 ; i<64 ; i++)
{
for(j=0 ; j<16 ; j++) line[j] = vram[(i<<4)+((j-(scroll>>3)+15)&15)];
next = line[15];
vram[(i<<4)+15] = 0;
for(j=15 ; j>0 ; j--)
{
word = next << shift;
next = line[j-1];
vram[(i<<4)+j] |= *((char*)&word+1);
vram[(i<<4)+j-1] = *((char*)&word);
}
word = next << shift;
vram[(i<<4)] |= *((char*)&word+1);
vram[(i<<4)+15] |= *((char*)&word);
}
}
void scrollv(int scroll)
{
int i, j;
char column[64], *vram = ML_vram_adress();
scroll %= 64;
for(i=0 ; i<16 ; i++)
{
for(j=0 ; j<64 ; j++) column[j] = vram[(j<<4)+i];
for(j=0 ; j<64 ; j++) vram[(j<<4)+i] = column[(j-scroll+64)&63];
}
}
ce sont les meme que monochrome lib j ai juste changer le nom et la couleur pas la variable c et j ai retirer les fonction pour dessiner comme en damier
Citer : Posté le 13/04/2014 10:48 | #
while(1){
GetKey(&key);
}
ce "truc" sert à quitter facilement le programme. ça demande à l'infini une touche à l'utilisateur mais,avec la fonction GetKey, quand tu fais menu, ça va dans le menu et si tu fais shift+AC ça éteint la calto.
!!!Attention!!! GetKey arrête le programme, c'est à dire qu'il ne peut rien se passer tant que tu n'a pas appuyer sur une touche
Citer : Posté le 13/04/2014 10:50 | #
oui mais vu que ma fonction dessin contient une boucle infini le code while(1){GetKey(&key);} ne sera jamais appliquer
Citer : Posté le 13/04/2014 10:52 | #
oui,mais laisse le au cas ou(je le laisse tout le temps).
Au fait, pourquoi "#include "stdio.h" et "#include "stdlib.h" ?
Citer : Posté le 13/04/2014 10:53 | # | Fichier joint
En fait tu ne l'as pas declaré ce fichier dans ton code. je suppose qu'il est dans un .c avec un .h ?
Si oui faut que tu mettes #include "LE_NOM_DU_FICHIER.h" au début de ton code
De toute façon, tu n'as pas besoin de ce code. Il te suffit d'utiliser les fonctions de ML_Lib (ML_line, ML_pixel_test, ML_clear_vram, ...)
Apres pour le code des touches, je suis un des seuls a le faire avec le code mais si tu veux tu fais KEY_CTRL_NOM-DE-LA-TOUCHE. Je te mets le fichier des codes en pièce jointe quand même.