#include "fxlib.h"
#include "stdio.h"
unsigned int key;
int caractere, caractere2;
char chaine[21];
char ident[21];
char domaine[30];
char mdp[30];
char destinataire[40];
char sujet[30];
char corps[50];
int AddIn_main(int isAppli, unsigned short OptionNum){
Bdisp_AllClr_DDVRAM();
demmarage();
identif();
return 1;
}
demmarage(){
int key;
Bdisp_AllClr_DDVRAM();
PrintMini(80,58,"Version 1.0",0);
Bdisp_DrawLineVRAM(10,10,10,50);
Bdisp_DrawLineVRAM(10,50,117,50);
Bdisp_DrawLineVRAM(117,50,117,10);
Bdisp_DrawLineVRAM(10,10,117,10);
Bdisp_DrawLineVRAM(10,10,63,25);
Bdisp_DrawLineVRAM(117,10,63,25);
locate(7,5);
Print("Messagerie");
do{
GetKey(&key);
} while(key != 30004);
Bdisp_AllClr_DDVRAM();
}
identif(){
Bdisp_AllClr_DDVRAM();
locate(1,1);
Print("Identifiant:");
locate(1,2);
Print("+------------------+");
locate(1,3);
Print("| |");
locate(1,4);
Print("+------------------+");
remplichaine();
caractere2=0;
do{
caractere2++;
ident[caractere2] = chaine[caractere2];
} while(caractere2+1 != caractere);
========================== > ICI < ========
locate(2,3);
Print(ident);
do{
GetKey(&key);
} while(key != 30004);
}
remplichaine(){
caractere=0;
do{
caractere++;
======================= > ET ICI < ========
locate(2,3);
Print(chaine);
GetKey(&key);
//==========Conversion==========
if (key==48)key= 71;
if (key==46)key= 61;
if (key==15)key= 51;
if (key==135)key= 41;
if (key==30004)key= 31;
if (key==49)key= 72;
if (key==50)key= 62;
if (key==51)key= 52;
if (key==137)key= 42;
if (key==153)key= 32;
if (key==52)key= 73;
if (key==53)key= 63;
if (key==54)key= 53;
if (key==169)key= 43;
if (key==185)key= 33;
if (key==55)key= 74;
if (key==56)key= 64;
if (key==57)key= 54;
if (key==30025)key= 44;
if (key==30015)key= 34;
if (key==187)key= 75;
if (key==30046)key= 65;
if (key==40)key= 55;
if (key==41)key= 45;
if (key==44)key= 35;
if (key==14)key= 25;
if (key==30001)key= 76;
if (key==149)key= 66;
if (key==133)key= 56;
if (key==129)key= 46;
if (key==130)key= 36;
if (key==131)key= 26;
if (key==30007)key= 77;
if (key==205)key= 67;
if (key==168)key= 57;
if (key==30002)key= 47;
if (key==30023)key= 37;
if (key==30021)key= 27;
if (key==30006)key= 78;
if (key==30008)key= 68;
if (key==30016)key= 58;
if (key==30020)key= 38;
if (key==30018)key= 28;
if (key==30009)key= 79;
if (key==30010)key= 69;
if (key==30011)key= 59;
if (key==30012)key= 49;
if (key==30013)key= 39;
if (key==30014)key= 29;
//==============================
if(key==31)caractere=19;
if(key==76)chaine[caractere]='a';
if(key==66)chaine[caractere]='b';
if(key==56)chaine[caractere]='c';
if(key==46)chaine[caractere]='d';
if(key==36)chaine[caractere]='e';
if(key==26)chaine[caractere]='f';
if(key==75)chaine[caractere]='g';
if(key==65)chaine[caractere]='h';
if(key==55)chaine[caractere]='i';
if(key==45)chaine[caractere]='j';
if(key==35)chaine[caractere]='k';
if(key==25)chaine[caractere]='l';
if(key==74)chaine[caractere]='m';
if(key==64)chaine[caractere]='n';
if(key==54)chaine[caractere]='o';
if(key==73)chaine[caractere]='p';
if(key==63)chaine[caractere]='q';
if(key==53)chaine[caractere]='r';
if(key==43)chaine[caractere]='s';
if(key==33)chaine[caractere]='t';
if(key==72)chaine[caractere]='u';
if(key==62)chaine[caractere]='v';
if(key==52)chaine[caractere]='w';
if(key==42)chaine[caractere]='x';
if(key==32)chaine[caractere]='y';
if(key==71)chaine[caractere]='z';
if(key==61)chaine[caractere]='.';
if(key==57)chaine[caractere]='@';
} while(caractere!=19);
if(key==31)chaine[caractere]='\0';
if(key!=31)chaine[caractere+1]='\0';
}
#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
Citer : Posté le 11/05/2014 14:55 | #
À quel niveau est-ce que ça bugge ?
Au pire, teste avec des commentaires pour repérer que fonction plante.
Citer : Posté le 11/05/2014 14:57 | #
donc:
là:
cible.x = 120;
cible.y = 64;
cible.rayon = 5;
cible.gmm = 3.;
ou la:
x = vaisseau.x;
y = vaisseau.y;
de toute facon je pense que j'ai un probleme avec les valeurs vu que les cercles ne se tracent pas ...
Citer : Posté le 11/05/2014 15:02 | #
Lorsque tu est sûr que tu vas modifier toutes tes valeurs, déjà n'initialise pas ta structure avec "=".
Ensuite dans affiche_piaf(), pourquoi ne pas passer le pointeur plutôt que de t'embêter ?
Citer : Posté le 11/05/2014 15:22 | #
Alors voila le nouveau code:
#include "MonochromeLib.h"
#include "memory.h"
#include "jeu.h"
#include "AGBS.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void level(int monde, int niveau)
{
int victoire = 0;
Vaisseau vaisseau={5.,32.,0.,0.,1};
Corps corps_1={0,0,0,0};
Corps corps_2={0,0,0,0};
Corps corps_3={0,0,0,0};
Corps cible={0,32,0,0};
lecture_piaf(&(vaisseau.type));
if(monde == 1){
// faire tuto !
if(niveau == 2){
// POS INITIALE vaisseau
vaisseau.x = 5.;
vaisseau.y = 32.;
vaisseau.vx = 2.;
vaisseau.vy = 0.;
// POS CIBLE
cible.x = 120;
cible.y = 64;
cible.rayon = 5;
cible.gmm = 3.;
// POS CORPS
corps_1.x = 64;
corps_1.y = 32;
corps_1.rayon = 5;
corps_1.gmm = 3.;
victoire = jeu_1C(&vaisseau ,cible, corps_1);
}
}
}
int jeu_1C(Vaisseau *vaisseau, Corps cible, Corps corps)
{
char buf[21];
while(1){
sprintf(buf,"%f - %f",(*vaisseau).x, (*vaisseau).y);
PrintXY(1,1,buf,0);
ML_display_vram();
Sleep(1000);
Bdisp_AllClr_DDVRAM();
ML_filled_circle(corps.x, corps.y, corps.rayon, ML_BLACK);
ML_circle(cible.x, cible.y, cible.rayon, ML_BLACK);
affiche_piaf(&vaisseau);
Bdisp_PutDisp_DD();
integre_2C(&vaisseau, cible, corps);
}
}
void integre_2C(Vaisseau *vaisseau, Corps cible, Corps corps)
{
double fx, fy;
double bfx, bfy;
forceSubie(*vaisseau, cible, &fx, &fy);
bfx = fx;
bfy = fy;
forceSubie(*vaisseau, corps, &fx, &fy);
fx+=bfx;
fy+=bfy;
vaisseau->x += fx/2;
vaisseau->y += fy/2;
vaisseau->vx += vaisseau->vx+fx/2;
vaisseau->vy += vaisseau->vy+fy/2;
}
void forceSubie(Vaisseau vaisseau, Corps corps, double *fx, double *fy)
{
double xSatCorps = (double)(corps.x)-vaisseau.x;
double ySatCorps = (double)(corps.y)-vaisseau.y;
double r = sqrt(xSatCorps*xSatCorps+ySatCorps*ySatCorps);
*fx = xSatCorps*(corps.gmm)/r/r/r;
*fy = ySatCorps*(corps.gmm)/r/r/r;
}
void affiche_piaf(Vaisseau *vaisseau)
{
double x, y;
x = vaisseau->x;
y = vaisseau->y;
if (x <1) x = 1.;
if (x >128) x = 128.;
if (y <1) y = 1.;
if (y >64) y = 64.;
Bdisp_SetPoint_VRAM((int)(x+0.5)+1,(int)(y+0.5),1);
Bdisp_SetPoint_VRAM((int)(x+0.5)-1,(int)(y+0.5),1);
Bdisp_SetPoint_VRAM((int)(x+0.5),(int)(y+0.5)+1,1);
Bdisp_SetPoint_VRAM((int)(x+0.5),(int)(y+0.5)-1,1);
}
Mais quand je veux faire mon debug (sprintf(buf,"%f - %f",(*vaisseau).x, (*vaisseau).y);) j'ai droit a un SE. Pourtant je vois pas d'erreur
Citer : Posté le 11/05/2014 15:23 | #
Pourquoi tu ne mets pas simplement
?
Citer : Posté le 11/05/2014 15:24 | #
Ca revient en meme j'ai le SE. Justement j'avait mis ca, ca a buggé alors j'ai testé l'autre
J'ai pas compris ...
Citer : Posté le 11/05/2014 15:27 | #
Encore une fois, je ne vois pas pourquoi tu t'embêtes.
Et un conseil, laisse toujours les flèches pour déférencer des structures, c'est bien plus lisible.
Ajouté le 11/05/2014 à 15:28 :
Tu es sûr que ton buffer est assez grand ? Vu qu'il faut compter 6 décimales... je ne pense pas.
Citer : Posté le 11/05/2014 15:37 | #
Oui le buffer est assez grand (je l'ai mis a 50).
t'as trouvé ca ou ?
Citer : Posté le 11/05/2014 15:40 | #
Justement, c'est que je te conseille de mettre car ça évite d'initialiser pour rien (au début de la fonction jeu()).
Et !
vaisseau est déjà un pointeur.
Citer : Posté le 11/05/2014 16:17 | #
C'est bon ca marche
Encore encore encore ... merci
Ajouté le 11/05/2014 à 16:41 :
Encore une question:
{
Bdisp_AllClr_DDVRAM();
ML_filled_circle(corps.x, corps.y, corps.rayon, ML_BLACK);
ML_circle(cible.x, cible.y, cible.rayon, ML_BLACK);
SaveDisp(1);
lancer(vaisseau);
while(1){
RestoreDisp(1);
affiche_piaf(vaisseau);
ML_display_vram();
integre_2C(vaisseau, cible, corps);
}
}
void lancer(Vaisseau *vaisseau)
{
unsigned int key;
while(1){
RestoreDisp(1);
affiche_piaf(vaisseau);
ML_line((int) vaisseau->x, (int) vaisseau->y, (int)(vaisseau->x + vaisseau->vx), (int)(vaisseau->y + vaisseau->vy), ML_BLACK);
ML_display_vram();
GetKey(&key);
if(key == KEY_CTRL_UP) (vaisseau->vy)--;
if(key == KEY_CTRL_DOWN) (vaisseau->vy)++;
if(key == KEY_CTRL_LEFT) (vaisseau->vx)--;
if(key == KEY_CTRL_RIGHT) (vaisseau->vx)++;
if(key == KEY_CTRL_EXE || key == KEY_CTRL_EXIT) break;
}
}
Pourquoi les valeurs de vaisseau.vy et vaisseau.vx ne sont pas changé lors du retour dans jeu_1C() ?
Citer : Posté le 11/05/2014 16:50 | #
Tu es sûr que tu peux incrémenter ou décrémenter un double ?
Citer : Posté le 11/05/2014 16:53 | #
Non mais meme si je fais "-= 1." ca ne change rien...
Citer : Posté le 11/05/2014 17:09 | #
C'est peut-être une histoire de déférencement, mais je ne pense pas... essaie quand même
if(key == KEY_CTRL_DOWN) *((double *)(vaisseau)+3)++;
if(key == KEY_CTRL_LEFT) *((double *)(vaisseau)+2)--;
if(key == KEY_CTRL_RIGHT) *((double *)(vaisseau)+2)++;
Citer : Posté le 11/05/2014 17:12 | #
C:\Documents and Settings\Casio\AGBS\jeu.c(150) : C2206 (E) Modifiable lvalue required for "++"
C:\Documents and Settings\Casio\AGBS\jeu.c(151) : C2206 (E) Modifiable lvalue required for "--"
C:\Documents and Settings\Casio\AGBS\jeu.c(152) : C2206 (E) Modifiable lvalue required for "++"
Citer : Posté le 11/05/2014 17:15 | #
Je ne vois pas.
Citer : Posté le 18/05/2014 13:26 | #
Bonjour,
J'aurais besoin d'un peu d'aide.
J'ai déjlà expliquer mon problème à certains et il semble qu'il y ai une solution efficace ...
Int Bouger = 128;
While (1){
PrintMini(Bouger,58,"Un très long texte qui prend plus de 128 Pixel de large",1);
If (Bouger = -100) {Bouger = 128;}
}
Bon alors voilà, maintenant le problème c'est que quand la première lettre, soit "U" arrive a l'abscisse 1 ben toute la chaine de caractère s'efface. Moi je voudrais donc que le reste continue de défiler !
On m'a parler de pointeur etc ... Donc j'ai lu pas mal de tutoriel sur les pointeurs ... Mais je n'ai pas vraiment compris comment ça peux m'aider.
Merci.
Citer : Posté le 18/05/2014 13:54 | #
En gros, si la chaîne commence en-dehors de l'écran, elle ne s'affiche pas.
La solution la plus simple est d'utiliser PrintXY qui gère le clipping.
Sinon, voilà.
Une chaîne de caractères en fait un pointeur sur de la mémoire (qui contient la chaîne), comme tous les tableaux.
Lorsque dans un programme, tu fais
c'est automatiquement transformé en
tab c'est le pointeur. Lorsqu'on "augmente" un pointeur, on le décale dans la mémoire. Par défaut, le pointeur pointe sur le premier élément du tableau, donc lorsqu'on augmente sa valeur, il pointe plus loin. Ici, tab+i pointe sur le i-ème élément.
Ensuite, on le "déférence" (c'est le terme), avec l'opérateur "*". C'est-à-dire que l'on accède à la valeur sur laquelle il pointe.
Pour les chaînes, c'est pareil, sauf qu'avec PrintMini, il ne faut pas déférencer (la fonction prend un pointeur). Donc par exemple, si tu fais
tu affiches à partir du deuxième caractère.
Donc lorsque ta chaîne commencer à sortir de l'écran, tu affiches à partir du caractère suivant. Pour cela, tu mémorises une variable qui contient le carcatère à partir duquel afficher.
Ça fonctionne, mais il y a un problème majeur. Il faut que tu conserves bouger à l'intérieur de l'écran, donc lorsqu'une lettre en sort, tu l'augmentes de la largeur de la lettre, ce qui permet de simuler un déplacement fluide.
Sauf que les lettres n'ont pas toutes la même largeur.
Tu peux utiliser une petite formule pour ça. Voilà (en gros) le code complet.
int temp; // abscisse actuelle
int i; // index à partir duquel on écrit
for(temp=absolu,i=0;absolu>-100;temp--,absolu--)
{
PrintMini(temp,58,"Un très long texte qui prend plus de 128 Pixel de large"+i,1);
if(temp<0) {
temp += largeur_lettre+1;
i++; }
}
Citer : Posté le 18/05/2014 13:55 | #
J'allais répondre, tu m'a devancé
Citer : Posté le 18/05/2014 17:11 | #
Merci !
J'ai réussi et plus ou moins compris !
Citer : Posté le 18/05/2014 20:41 | #
Ce que je t'ai dit est valable pour tous les tableaux, c'est là l'intérêt.
Ça permet aussi de comprendre le passage des tableaux par pointeurs (justement celui sur le premier élément), et le problème des faux tableaux de pointeurs.
D'ailleurs, tu as réussi avec la formule de la largeur ? Il n'y a que quelques execeptions. Je l'avais faite vite fait, mais impossible de la retrouver.
Citer : Posté le 10/06/2014 17:50 | # | Fichier joint
Pour ElTo:
Extrait tout et remet le dossier dans le dossier racine du SDK...
Ajouté le 14/06/2014 à 18:16 :
{
int handle, nbr;
char buffer[NBR_AMELIO], buf[3];
unsigned char debug[50];
FONTCHARACTER magasin[]={'\\', '\\', 'f', 'l', 's', '0', '\\', 'E', 'v', 'o', 'F', 'i', 'l', 'e', 's', '\\', 'M', 'a', 'g', 'a', 's', 'i', 'n', '.', 'e', 'v', 0};
handle = Bfile_OpenFile(magasin, _OPENMODE_READ);
Bfile_ReadFile(handle, buffer, NBR_AMELIO, 0);
Bfile_CloseFile(handle);
sprintf(debug,"%d",Bfile_DeleteFile(magasin));
PrintXY(0,0,debug,0);
ML_display_vram();
Sleep(5000);
for(nbr=0;nbr<3;nbr++) buf[nbr] = buffer[3+nbr];
nbr = atoi(buf);
if(nbr != 999) nbr+=sous;
sprintf(buf,"%d",nbr);
for(nbr=0;nbr<3;nbr++) buffer[3+nbr] = buf[nbr];
Bfile_CreateFile(magasin,(NBR_JEUX)*2+1);
handle = Bfile_OpenFile(magasin, _OPENMODE_WRITE);
Bfile_WriteFile(handle, buffer, (NBR_JEUX)*2);
Bfile_CloseFile(handle);
return nbr;
}
Voila une petite fonction qui me permet de gérer le fichier des sous...
Le problème c'est que Bfile_DeleteFile() me renvoi -8 soit "IML_FILEERR_ACCESSDENYED". Pourtant, Bfile_CloseFile() renvoie 0 ...