Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » [Aide SDK] Les erreurs de compilation
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

[Aide SDK] Les erreurs de compilation

Posté le 15/05/2011 00:10

Suite aux nombreuses demande d'aide que je reçois concernant des messages d'erreur lors de compilation avec le SDK, je décide de créer ce topic qui aura pour but de recenser tous les messages d'erreur, de les expliquer, et de donner leur solution.

Premièrement, qu'est ce qu'une erreur de compilation ?

Ici, ce sont les 4 lignes qui commencent par le chemin de mon fichier source contenant les erreurs (Z:\home\pierre\a\a.c) suivi du numéro de la ligne contenant l'erreur.

Liste des erreurs

Illegal token ''<mot>''
Description : Une erreur de syntaxe a été rencontrée avant <mot> (un point virgule manquant, une parenthèse en trop ...)
Solution : Arrêter de coder avec les pieds.

Undeclared name ''<nom>''
Description : Une variable est utilisée sans avoir été déclarée au préalable.
Solution : Déclarer la variable au début de la fonction.

Cannot convert parameter ''X''
Description : Le paramètre n°X envoyé à la fonction n'est pas du bon type, et ne peut pas être converti.
Solution : Vérifier quel type de variable demande la fonction, et lui envoyer une variable du bon type.

Illegal initializer type
Description : Une variable est initialisée avec un type incorrecte (exemple, un entier initialisé avec une chaîne de caractère)
Solution : Initialiser la variable avec une valeur CONSTANTE correcte.
Le compilateur Renesas utilisé par le SDK respecte la norme C89, qui spécifie qu'une variable doit être initialisée avec une valeur constante, et non une valeur de retour de fonction, ou un paramètre de la fonction.

Multiple variable declarations
Description : Une variable a déjà le même nom et la même portée que celle déclarée à la ligne de l'erreur.
(Deux variables peuvent avoir le même nom si elles n'ont pas la même portée)
Solution : Nommer la variable différemment.

Type not compatible for ''=''
Description : L'affectation d'une valeur à une variable a échouée car la valeur n'est pas d'un type compatible avec celui de la variable.
Solution : Si la valeur affectée est un retour de fonction, vérifier quel type de variable retourne la fonction.

Modifiable lvalue required for ''=''
Description : Un élément non modifiable (comme une fonction où une constante) est suivi d'un signe égal.
Solution : Seule les variables peuvent se voir affecter une valeur avec ''=''.

Index not integer
Description : utilisation d'un float ou d'un double dans l'index d'une case de tableau.
Solution : Caster en int, tableau[double] devient tableau[(int)double]

Number of parameters mismatch
Description : Trop ou pas assez de paramètres sont envoyés à la fonction.
Solution : Regarder ce que demande la fonction, et le respecter.

Undefined external symbol ''_<nom de fonction>''
Description : Une fonction est appelée, mais son implémentation n'a pas été compilée.
Solution : Vérifier l'orthographe du nom, vérifier si le fichier contenant la fonction est bien dans la fenêtre ''Files in project''. Si tout ça est bon, essayez d'éditer le fichier contenant l'implémentation de la fonction (ajouter un espace, le supprimer, sauvegarder), ça permettra au compilateur de re-compiler le fichier.

couldn't open ''<nom de fichier>''
Description : Un fichier inclu avec #include n'existe pas.
Solution : Lors de l'inclusion d'un fichier, il faut donner son chemin relatif depuis le fichier contenant la directive #include

Empty source program
Description : Le fichier source est vide, et aucun compilateur n'aime ça.

Cannot open source file ''<nom de fichier>''
Description : Le fichier source présent dans la fenêtre ''Files in project'' du SDK n'existe pas.

Unrecognized preprocessing directive
Description : Une directive de préprocesseur (lignes commençant pas #) n'est pas correctement orthographiée.

Illegal preprocessor syntax
Description : Erreur de syntaxe dans une directive de préprocesseur.

Expected a file name
Description : Un nom de fichier est attendu (généralement une erreur de syntaxe dans une directive include)

Expected an identifier
Description : Un identifiant est attendu (généralement une erreur de syntaxe dans une directive define ou ifdef)

Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
Description : Ne jamais installer le SDK dans un dossier dont le chemin comporte des parenthèses ! Mettez-le dans C:\Programmes\CASIO par exemple.

Cette liste est incomplète, si vous rencontrez d'autres erreurs, vous pouvez les poster ici, elles seront ajoutées.

Voici une liste en anglais de toutes les erreurs possibles et imaginables. Cela ne vous donne pas forcément une bonne solution, mais ça peut vous aiguiller sur une piste


Dernière modification : 26/09/2013 (Dark Storm)

Fichier joint


Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ··· 20 ··· 24, 25, 26 Suivante
Smashmaster Hors ligne Membre d'honneur Points: 4561 Défis: 253 Message

Citer : Posté le 13/09/2012 18:20 | #


@Javierxd : exemple de cast

int * pvariable = [green](int*)[/green] malloc (sizeof(int));
a = [green](double)[/green] sqrt(20);
les bouts de codes en vert sont des cast.
floor(...) ne retourne pas un int, mais un double ( réel), donc il faut rajouter "(int)" juste avant floor(...) pour que le résultat soit un entier de type int.
if( ( IsKeyDown( KEY_CHAR_6 ) &&
        ( ( mat_niveau[perso.y_mat * largeur + [green](int)[/green]  floor( ( perso.x_pointcontact[0] +1 ) / 8 )]  0 ) ) || //ici
        ( mat_niveau[perso.y_mat * largeur +  [green](int)[/green] floor( ( perso.x_pointcontact[1] +1 ) / 8 )]  0 ) ) - //ici
        ( IsKeyDown( KEY_CHAR_4 ) && ( ( mat_niveau[perso.y_mat * largeur +  [green](int)[/green]  floor( ( perso.x_bmp -1 ) / 8 )]  0 ) ) || //ici
        ( mat_niveau[perso.y_mat * largeur + [green](int)[/green] floor( ( perso.x_pointcontact[2] -1 ) / 8 )]  0 ) ) )  deplacement( &perso );

Binary_man Hors ligne Rédacteur Points: 1344 Défis: 19 Message

Citer : Posté le 13/09/2012 18:33 | #


LoL Dodormeur.
Calculettes : Graph 75, Graph 95, classpad 330 et FX-CG20 !!
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 13/09/2012 18:54 | #


Alors en faisant ça on peut choisir le type de variable que retourne une fonction?
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 13/09/2012 23:58 | #


Non, c'est une conversion explicite.

Dans ce code, la conversion est implicite :
int i;
double d = 0.5;
i = d;
Mais parfois, il faut la forcer, l'écrire explicitement, comme c'est le cas dans ton code.
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 16/09/2012 01:53 | #


J'ai un problème, quoi que je fasse, aucun sprite s'affiche. Je mets le fichier complet en spoiler:
fichier
Cliquer pour enrouler
#include "fxlib.h"
#include "MonochromeLib.h"
#include "gameplay.h"
#include "stdlib.h"
#include "math.h"

void jouer( int* mat_niveau, int niveauchoisi, int largeur, int hauteur )
{
//déclaration des sprites du personnage et des portaux
unsigned char perso_droite[] = {0x18, 0x18, 0x33, 0x3E, 0x30, 0x38, 0x68, 0x4C};
unsigned char perso_gauche[] = {0x18, 0x18, 0xCC, 0x7C, 0x0C, 0x1C, 0x16, 0x32};
unsigned char viseur[] = {0x70, 0xA8, 0xF8, 0xA8, 0x70};
jinfo perso;
pinfo portal[2] = {0};
int vecteur_x = 0;
int vecteur_y = 0;

initperso( &perso );
ML_bmp_8_xor( perso_droite, perso.x_bmp, perso.y_bmp );
ML_bmp_8_xor( viseur, perso.x +8, perso.y );
ML_display_vram();
//boucle principale de la partie

do
{
Sleep( 200 );
if( portal[0].compteur > 0 ) portal[0].compteur--;
if( portal[1].compteur > 0 ) portal[1].compteur--;
perso.x_mat = floor( perso.x/8 );
perso.y_mat = floor( perso.x/8 );

if( ( IsKeyDown( KEY_CHAR_6 ) &&
( ( mat_niveau[perso.y_mat * largeur + (int) floor( ( perso.x_pointcontact[0] +1 ) / 8 )] <= 0 ) ) ||
( mat_niveau[perso.y_mat * largeur + (int) floor( ( perso.x_pointcontact[1] +1 ) / 8 )] <= 0 ) ) -
( IsKeyDown( KEY_CHAR_4 ) && ( ( mat_niveau[perso.y_mat * largeur + (int) floor( ( perso.x_bmp -1 ) / 8 )] <= 0 ) ) ||
( mat_niveau[perso.y_mat * largeur + (int) floor( ( perso.x_pointcontact[2] -1 ) / 8 )] <= 0 ) ) ) deplacement( &perso ); //le signe "-" est un Xor (je sais pas le faire autrement :-º)

if( IsKeyDown( KEY_CHAR_8 ) && mat_niveau[(perso.y_mat+1) * largeur + perso.x_mat] > 0 && mat_niveau[(perso.y_mat-1) * largeur + perso.x_mat] <= 0 ) vecteur_y = -5; //tous les mouvements à l'exception du déplacement avec 4 ou 6 marche par addition vectorielle

if(mat_niveau[largeur * (int) floor( ( perso.y_pointcontact[2] + 1 ) / 8 ) + perso.x_mat] > 0 || mat_niveau[largeur * (int) floor( ( perso.y_pointcontact[1] + 1 ) / 8 ) + perso.x_mat] > 0 )
{
vecteur_x = 0;
vecteur_y = 0;
} //si le joueur est en train de toucher le sol, tous les vecteurs de mouvement sont mis à zéro
else
{
if( vecteur_y <= 10 ) vecteur_y += 2;
} //si le joueur ne touche pas le sol (il est dans l'air), les effets de la gravité se font sentir sur les vecteurs

if( vecteur_x || vecteur_y ) influencevecteur( &perso, &vecteur_x, &vecteur_y, mat_niveau, largeur ); //cette fonction applique les vecteurs affectés par les lignes précédentes au mouvement du personnage

if( IsKeyDown( KEY_CTRL_UP ) || IsKeyDown( KEY_CTRL_RIGHT ) || IsKeyDown( KEY_CTRL_DOWN ) || IsKeyDown( KEY_CTRL_LEFT ) ) bougerviseur( &perso ); //les flèches permettent de déplacer le viseur

if( IsKeyDown( KEY_CTRL_SHIFT ) || IsKeyDown( KEY_CTRL_ALPHA ) ) tirerpg( portal, &perso, largeur, mat_niveau ); //en touchant shift ou alpha tu utilises ta portal gun

if( ( perso.x_mat == portal[0].x && perso.y_mat == portal[0].y && !portal[0].compteur ) || ( perso.x_mat == portal[1].x && perso.y_mat == portal[1].y && !portal[1].compteur ) && portal[0].x > 0 && portal[0].y > 0 && portal[1].x > 0 && portal[1].y > 0 ) traverserportal( &perso, portal, &vecteur_x, &vecteur_y ); //Pour pouvoir traverser le portal, il faut que tu sois près de lui, qu'il se soit passé un certain temps depuis sa dernière utilisation et que les deux portaux soient ouverts

} while ( mat_niveau[perso.y_mat * largeur + perso.x_mat] != -1 ); //le joueur passe le niveau si il touche la sortie

free (mat_niveau);
}

void initperso( jinfo *perso )
{
perso->orientation = 1;
perso->x = 14;
perso->y = 115;
perso->x_bmp = 10;
perso->y_bmp = 111;
perso->x_mat = 1;
perso->y_mat = 6;
perso->x_viseur = 22;
perso->y_viseur = 115;
perso->x_pointcontact[0] = perso->x_bmp + 7;
perso->x_pointcontact[1] = perso->x_bmp + 7;
perso->x_pointcontact[2] = perso->x_bmp;
perso->y_pointcontact[0] = perso->y_bmp;
perso->y_pointcontact[1] = perso->y_bmp + 7;
perso->y_pointcontact[2] = perso->y_bmp + 7;
}

void deplacement( jinfo *perso )
{
unsigned char perso_droite[] = {0x18, 0x18, 0x33, 0x3E, 0x30, 0x38, 0x68, 0x4C};
unsigned char perso_gauche[] = {0x18, 0x18, 0xCC, 0x7C, 0x0C, 0x1C, 0x16, 0x32};
unsigned char viseur[] = {0x70, 0xA8, 0xF8, 0xA8, 0x70};

if( perso->orientation ) //le bmp utilisé pour effacer le perso dépend de s'il regarde vers la gauche ou vers la droite
ML_bmp_8_xor_cl( perso_droite, perso->x_bmp, perso->y_bmp );
else
ML_bmp_8_xor_cl( perso_gauche, perso->x_bmp, perso->y_bmp );

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );

if( IsKeyDown( KEY_CHAR_6 ) )
{
perso->x++;
perso->x_bmp++;
perso->x_pointcontact[0]++;
perso->x_pointcontact[1]++;
perso->x_pointcontact[2]++;

if( perso->x_viseur < 127 ) perso->x_viseur++;

perso->orientation = 1;
ML_bmp_8_xor_cl( perso_droite, perso->x_bmp, perso->y_bmp );
}

if( IsKeyDown( KEY_CHAR_4 ) )
{
perso->x--;
perso->x_bmp--;
perso->x_pointcontact[0]--;
perso->x_pointcontact[1]--;
perso->x_pointcontact[2]--;

if( perso->x_viseur>0 ) perso->x_viseur--;

perso->orientation = 0;
ML_bmp_8_xor_cl( perso_gauche, perso->x_bmp, perso->y_bmp );
}

perso->x_mat = floor( perso->x/8 );
ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );
ML_display_vram();

}

void influencevecteur( jinfo *perso, int *vecteur_x, int *vecteur_y, int *mat_niveau, int largeur )
{
unsigned char perso_droite[] = {0x18, 0x18, 0x33, 0x3E, 0x30, 0x38, 0x68, 0x4C};
unsigned char perso_gauche[] = {0x18, 0x18, 0xCC, 0x7C, 0x0C, 0x1C, 0x16, 0x32};
unsigned char viseur[] = {0x70, 0xA8, 0xF8, 0xA8, 0x70};
int a;

if( perso->orientation ) //cette condition est expliquée dans la fonction deplacement
ML_bmp_8_xor_cl( perso_droite, perso->x_bmp, perso->y_bmp );
else
ML_bmp_8_xor_cl( perso_gauche, perso->x_bmp, perso->y_bmp );

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );

if( *vecteur_x > 0 )
{
for( a = 1; a <= *vecteur_x; a++ ) //l'utilisation d'une boucle for permet que le perso se déplace moins de pixels que ce qui indique le vecteur s'il rencontre un obstacle
{
if( mat_niveau[perso->y_mat * largeur + (int) floor( ( perso->x_pointcontact[0] + 1 ) / 8 )] <= 0 && mat_niveau[perso->y_mat * largeur + (int) floor( ( perso->x_pointcontact[1] + 1 ) / 8 )] <= 0 )
{
perso->x++;
perso->x_viseur++;
perso->x_bmp++;
perso->x_pointcontact[0]++;
perso->x_pointcontact[1]++;
perso->x_pointcontact[2]++;
}
else //s'il trouve un mur, le vecteur se met à zéro
{
*vecteur_x = 0;
}
}
}
else
{
for( a = -1; a >= *vecteur_x; a-- ) //même boucle qu'avant, mais si le vecteur va vers la gauche
{
if( mat_niveau[perso->y_mat * largeur + (int) floor( ( perso->x_bmp - 1 ) / 8 )] <= 0 && mat_niveau[perso->y_mat * largeur + (int) floor( ( perso->x_pointcontact[2] - 1 ) / 8 )] <= 0 )
{
perso->x--;
perso->x_viseur--;
perso->x_bmp--;
perso->x_pointcontact[0]--;
perso->x_pointcontact[1]--;
perso->x_pointcontact[2]--;
}
else
{
*vecteur_x = 0;
}
}
}

if( *vecteur_y > 0 ) //même condition, mais pour l'axe des ordonnées
{
for( a = 1; a <= *vecteur_y; a++ )
{
if( mat_niveau[(int) floor( ( perso->y_pointcontact[1] + 1 ) / 8 ) * largeur + perso->x_mat] < 0 && mat_niveau[(int) floor( ( perso->y_pointcontact[2] + 1 ) / 8 ) * largeur + perso->x_mat] <= 0 )
{
perso->y++;
perso->y_viseur++;
perso->y_bmp++;
perso->y_pointcontact[0]++;
perso->y_pointcontact[1]++;
perso->y_pointcontact[2]++;
}
else
{
*vecteur_y = 0;
}
}
}
else
{
for( a = -1; a >= *vecteur_y; a-- )
{
if( mat_niveau[(int) floor( ( perso->y_bmp - 1 ) / 8 ) * largeur + perso->x_mat] < 0 && mat_niveau[(int) floor( ( perso->y_pointcontact[0] - 1 ) / 8 ) * largeur + perso->x_mat] <= 0 )
{
perso->y--;
perso->y_viseur--;
perso->y_bmp--;
perso->y_pointcontact[0]--;
perso->y_pointcontact[1]--;
perso->y_pointcontact[2]--;
}
else
{
*vecteur_y = 0;
}
}
}

perso->x_mat = floor( perso->x / 8 );
perso->y_mat = floor( perso->y / 8 );

if( perso->orientation )
ML_bmp_8_xor_cl( perso_droite, perso->x_bmp, perso->y_bmp );
else
ML_bmp_8_xor_cl( perso_gauche, perso->x_bmp, perso->y_bmp );

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );
ML_display_vram();
}

void bougerviseur( jinfo *perso )
{
unsigned char viseur[] = {0x70, 0xA8, 0xF8, 0xA8, 0x70};

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );
//le viseur se déplacera tant qu'il soit à une distance d'entre 4 et 8 pixels du perso
if( IsKeyDown( KEY_CTRL_UP ) && ( ( perso->x_viseur - perso->x ) * ( perso->x_viseur - perso->x ) + ( perso->y_viseur-- - perso->y ) * ( perso->y_viseur-- - perso->y ) < 64 && ( ( perso->x_viseur - perso->x ) * ( perso->x_viseur - perso->x ) + ( perso->y_viseur-- - perso->y ) * ( perso->y_viseur-- - perso->y ) > 16 ) ) ) perso->y_viseur--;

if( IsKeyDown( KEY_CTRL_RIGHT ) && ( ( perso->x_viseur++ - perso->x ) * ( perso->x_viseur++ - perso->x ) + ( perso->y_viseur - perso->y ) * ( perso->y_viseur - perso->y ) < 64 && ( ( perso->x_viseur++ - perso->x ) * ( perso->x_viseur++ - perso->x ) + ( perso->y_viseur - perso->y ) * ( perso->y_viseur - perso->y ) > 16 ) ) ) perso->x_viseur++;

if( IsKeyDown( KEY_CTRL_DOWN ) && ( ( perso->x_viseur - perso->x ) * ( perso->x_viseur - perso->x ) + ( perso->y_viseur++ - perso->y ) * ( perso->y_viseur++ - perso->y ) < 64 && ( ( perso->x_viseur - perso->x ) * ( perso->x_viseur - perso->x ) + ( perso->y_viseur++ - perso->y ) * ( perso->y_viseur++ - perso->y ) > 16 ) ) ) perso->y_viseur++;

if( IsKeyDown( KEY_CTRL_LEFT ) && ( ( perso->x_viseur-- - perso->x ) * ( perso->x_viseur-- - perso->x ) + ( perso->y_viseur - perso->y ) * ( perso->y_viseur - perso->y ) < 64 && ( ( perso->x_viseur-- - perso->x ) * ( perso->x_viseur-- - perso->x ) + ( perso->y_viseur - perso->y ) * ( perso->y_viseur - perso->y ) > 16 ) ) ) perso->x_viseur--;

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );
ML_display_vram();
}

void tirerpg( pinfo *portal, jinfo *perso, int largeur, int *mat_niveau )
{
unsigned char portal_gauche[] = {0x18, 0x2C, 0x76, 0x5A, 0x5A, 0x6E, 0x34, 0x18};
unsigned char portal_droite[] = {0x18, 0x34, 0x6E, 0x5A, 0x5A, 0x76, 0x2C, 0x18};
double coordtir_x = perso->x;
double coordtir_y = perso->y;
double coordtirmat_x;
double coordtirmat_y;
double vecteur_x = perso->x_viseur - perso->x;
double vecteur_y = perso->y_viseur - perso->y;
double distance = sqrt( vecteur_x * vecteur_x + vecteur_y * vecteur_y );

vecteur_x /= distance; //on normalise les vecteurs pour obtenir des vecteurs unitaires
vecteur_y /= distance;

if( IsKeyDown( KEY_CTRL_SHIFT ) ) //shift et alpha te permettent de choisir le portail que tu veux utiliser
{
//le tir suivra une ligne droite jusqu'à ce qu'il trouve un bloc solide ou le bord de l'écran
while( mat_niveau[ (int) floor( ( coordtir_y + vecteur_y ) / 8 ) * largeur + (int) floor( ( coordtir_x + vecteur_x ) / 8 )] <= 0 && (coordtir_x + vecteur_x ) < 127 && (coordtir_x + vecteur_x ) > 1 && (coordtir_y + vecteur_y ) < 63 && (coordtir_y + vecteur_y ) > 1 )
{
coordtir_x += vecteur_x;
coordtir_y += vecteur_y;
}

coordtirmat_x = (int) floor( coordtir_x / 8 );
coordtirmat_y = (int) floor( coordtir_y / 8 );
//Pour que le portail s'ouvre il faut que le tir touche un bloc normal et que sa place dans la matrice ne soit pas déjà occupée ni par le décor ni par le perso
if( mat_niveau[ (int) floor( ( coordtir_y + vecteur_y ) / 8 ) * largeur + (int) floor( ( coordtir_x + vecteur_x ) / 8 )] == 1 && mat_niveau[ (int) coordtirmat_y * largeur + (int) coordtirmat_x] == 0 && (coordtir_x + vecteur_x ) < 127 && (coordtir_x + vecteur_x ) > 1 && (coordtir_y + vecteur_y ) < 63 && (coordtir_y + vecteur_y ) > 1 && (coordtirmat_x != perso->x_mat || coordtirmat_y != perso->y_mat ) )
{

if( portal[0].x )
{
ML_bmp_8_xor( portal_gauche, portal[0].x * 8, portal[0].y * 8 );
mat_niveau[portal[0].y * largeur + portal[0].x] = 0;
}

portal[0].x = coordtirmat_x;
portal[0].y = coordtirmat_y;
mat_niveau[portal[0].y * largeur + portal[0].x] = -2;
ML_bmp_8_xor( portal_gauche, portal[0].x * 8, portal[0].y * 8 );

if( floor( ( coordtir_x + vecteur_x ) / 8 ) == coordtirmat_x + 1 ) portal[0].orientation = 1;

if( floor( ( coordtir_x + vecteur_x ) / 8 ) == coordtirmat_x - 1 ) portal[0].orientation = 3;

if( floor( ( coordtir_y + vecteur_y ) / 8 ) == coordtirmat_y + 1 ) portal[0].orientation = 2;

if( floor( ( coordtir_y + vecteur_y ) / 8 ) == coordtirmat_y - 1 ) portal[0].orientation = 0;

}

}

if( IsKeyDown( KEY_CTRL_ALPHA ) )
{

while( mat_niveau[ (int) floor( ( coordtir_y + vecteur_y ) * largeur + (int) floor( ( coordtir_x + vecteur_x ) ) )] <= 0 && (coordtir_x + vecteur_x ) < 127 && (coordtir_x + vecteur_x ) > 1 && (coordtir_y + vecteur_y ) < 63 && (coordtir_y + vecteur_y ) > 1 )
{
coordtir_x += vecteur_x;
coordtir_y += vecteur_y;
}

coordtirmat_x = (int) floor( coordtir_x / 8 );
coordtirmat_y = (int) floor( coordtir_y / 8 );

if( mat_niveau[ (int) floor( ( coordtir_y + vecteur_y ) / 8 ) * largeur + (int) floor( ( coordtir_x + vecteur_x ) / 8 )] == 1 && mat_niveau[ (int) coordtirmat_y * largeur + (int) coordtirmat_x] == 0 && (coordtir_x + vecteur_x ) < 127 && (coordtir_x + vecteur_x ) > 1 && (coordtir_y + vecteur_y ) < 63 && (coordtir_y + vecteur_y ) > 1 )
{

if( portal[1].x )
{
ML_bmp_8_xor( portal_droite, portal[1].x * 8, portal[1].y * 8 );
mat_niveau[portal[1].y * largeur + portal[1].x] = 0;
}

portal[1].x = coordtirmat_x;
portal[1].y = coordtirmat_y;
mat_niveau[portal[1].y * largeur + portal[1].x] = -2;
ML_bmp_8_xor( portal_droite, portal[1].x * 8, portal[1].y * 8 );

if( floor( ( coordtir_x + vecteur_x ) / 8 ) == coordtirmat_x + 1 ) portal[1].orientation = 1;

if( floor( ( coordtir_x + vecteur_x ) / 8 ) == coordtirmat_x - 1 ) portal[1].orientation = 3;

if( floor( ( coordtir_y + vecteur_y ) / 8 ) == coordtirmat_y + 1 ) portal[1].orientation = 2;

if( floor( ( coordtir_y + vecteur_y ) / 8 ) == coordtirmat_y - 1 ) portal[1].orientation = 0;

}

}

ML_display_vram();
}

void traverserportal( jinfo *perso, pinfo *portal, int *vecteur_x, int *vecteur_y)
{
unsigned char perso_droite[] = {0x18, 0x18, 0x33, 0x3E, 0x30, 0x38, 0x68, 0x4C};
unsigned char perso_gauche[] = {0x18, 0x18, 0xCC, 0x7C, 0x0C, 0x1C, 0x16, 0x32};
unsigned char viseur[] = {0x70, 0xA8, 0xF8, 0xA8, 0x70};

if( perso->orientation )
ML_bmp_8_xor_cl( perso_droite, perso->x_bmp, perso->y_bmp );
else
ML_bmp_8_xor_cl( perso_gauche, perso->x_bmp, perso->y_bmp );

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );

if( perso->x_mat == portal[0].x && perso->y_mat == portal[0].y )
{
perso->x_mat = portal[1].x;
perso->y_mat = portal[1].y;
perso->x = portal[1].x * 8 + 4;
perso->y = portal[1].y * 8 + 4;
perso->x_bmp = portal[1].x * 8;
perso->y_bmp = portal[1].y * 8;
perso->x_pointcontact[0] = perso->x_bmp + 7;
perso->y_pointcontact[0] = perso->y_bmp;
perso->x_pointcontact[1] = perso->x_bmp + 7;
perso->y_pointcontact[1] = perso->y_bmp + 7;
perso->x_pointcontact[2] = perso->x_bmp;
perso->y_pointcontact[2] = perso->y_bmp + 7;
perso->x_viseur = perso->x + 8;
perso->y_viseur = perso->y;

if( portal[1].orientation == 1 )
{
*vecteur_x += fabs( *vecteur_y );
*vecteur_y = 0;
}

if( portal[1].orientation == 3 )
{
*vecteur_x -= fabs( *vecteur_y );
*vecteur_y = 0;
}

if( portal[1].orientation == 2 )
{
*vecteur_y = fabs( *vecteur_y ) * -1;
*vecteur_y -= fabs( *vecteur_x );
*vecteur_x = 0;
}

}

if( perso->x_mat == portal[1].x && perso->y_mat == portal[1].y )
{
perso->x_mat = portal[0].x;
perso->y_mat = portal[0].y;
perso->x = portal[0].x * 8 + 4;
perso->y = portal[0].y * 8 + 4;
perso->x_bmp = portal[0].x * 8;
perso->y_bmp = portal[0].y * 8;
perso->x_pointcontact[0] = perso->x_bmp + 7;
perso->y_pointcontact[0] = perso->y_bmp;
perso->x_pointcontact[1] = perso->x_bmp + 7;
perso->y_pointcontact[1] = perso->y_bmp + 7;
perso->x_pointcontact[2] = perso->x_bmp;
perso->y_pointcontact[2] = perso->y_bmp + 7;
perso->x_viseur = perso->x + 8;
perso->y_viseur = perso->y;

if( portal[0].orientation == 1 )
{
*vecteur_x += fabs( *vecteur_y );
*vecteur_y = 0;
}

if( portal[0].orientation == 3 )
{
*vecteur_x -= fabs( *vecteur_y );
*vecteur_y = 0;
}

if( portal[0].orientation == 2 )
{
*vecteur_y = fabs( *vecteur_y ) * -1;
*vecteur_y -= fabs( *vecteur_x );
*vecteur_x = 0;
}
}

if( perso->orientation )
ML_bmp_8_xor_cl( perso_droite, perso->x_bmp, perso->y_bmp );
else
ML_bmp_8_xor_cl( perso_gauche, perso->x_bmp, perso->y_bmp );

ML_bmp_8_xor_cl( viseur, perso->x_viseur, perso->y_viseur );

ML_display_vram();
}

Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 16/09/2012 10:27 | #


C'est le bordel ton code
Il y a de l'affichage et de la gestion d'input dans toutes les fonctions, et du coups les mêmes sprites sont déclarés à 3/4 endroits, pas pratique si tu veux les modifier.
Faut structurer ça, ta boucle principale ça doit juste être [ input, déplacement, collisions, affichage, sleep ]

Si un sprite est affiché 2 fois en xor au même endroit, alors il n'est plus visible, c'est peut-être ça ton soucis.
Et puis le perso commence aux coordonnées (10, 111) donc hors de l'écran. Idem pour le viseur.
perso->x_bmp = 10;
perso->y_bmp = 111;

Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 16/09/2012 12:28 | #


Pierrotll a écrit :
Il y a de l'affichage et de la gestion d'input dans toutes les fonctions

J'essaierai de changer ça
Pierrotll a écrit :
les mêmes sprites sont déclarés à 3/4 endroits, pas pratique si tu veux les modifier.

Ça irait si je les mets comme variables globales?
Pierrotll a écrit :
Faut structurer ça, ta boucle principale ça doit juste être [ input, déplacement, collisions, affichage, sleep ]

Je ne suis pas sûr si je réussirai à le faire avec cette structure, mais j'essaierai...
Pierrotll a écrit :
Et puis le perso commence aux coordonnées (10, 111) donc hors de l'écran. Idem pour le viseur.

Comment ça en dehors de l'écran? Les coordonnées de l'écran vont de 0 à 127 et de 0 à 63, donc il commencerait en bas à gauche, non?
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 16/09/2012 12:44 | #


(0, 0) est en haut à gauche !!
Et tu as mis Y à 111
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 16/09/2012 14:38 | #



Je devrais abandonner la programmation juste pour ça --'
Ok, je corrige
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 16/09/2012 15:26 | #


Javierxd a écrit :
Je ne suis pas sûr si je réussirai à le faire avec cette structure, mais j'essaierai...

Tu peux aussi faire : [ affichage, sleep, input, déplacement, collisions ]
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 16/09/2012 21:31 | #


Je préfère celle de Pirrotll, mais merci
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 16/09/2012 23:01 | #


Je trouve plus logique l'ordre "entrée -> traitement -> sortie"
Dark storm En ligne Membre d'honneur Points: 10963 Défis: 176 Message

Citer : Posté le 17/09/2012 18:20 | #


c'est le principe même d'un algo, non ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 17/09/2012 18:43 | #


Oui, c'est vrai
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 18/09/2012 23:27 | # | Fichier joint


J'ai un bug avec un bmp, au lieu d'afficher tout le bmp, il affiche la moitié supéieure deux fois:

déclaration du sprite
dsl de la taille
const unsigned char principal[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x4A, 0xBB, 0x2B, 0x01, 0x92, 0x2E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xAA, 0xA2, 0xAA, 0x82, 0x2B, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xEA, 0xB3, 0x12, 0x82, 0xBA, 0xAC, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xAA, 0xA2, 0xAA, 0x82, 0xAA, 0x28, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0xA4, 0xBA, 0xAB, 0x01, 0x2A, 0x2E, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x01, 0x1E, 0x01, 0xE0, 0xF0, 0x7F, 0x87, 0x86, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0x83, 0xF0, 0xFC, 0x7F, 0x87, 0x86, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0x19, 0x83, 0x30, 0xCC, 0x0C, 0x0C, 0xC6, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0x18, 0xC6, 0x18, 0xC6, 0x0C, 0x0C, 0xC6, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0xCE, 0x1C, 0xC6, 0x0C, 0x0C, 0xC6, 0x01, 0xEC, 0x00, 0x00,
0x00, 0x00, 0x0F, 0x19, 0x8C, 0x0C, 0xCC, 0x0C, 0x0F, 0xC6, 0x01, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x8C, 0x0C, 0xFC, 0x0C, 0x1F, 0xE6, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1E, 0x0E, 0x1C, 0xF8, 0x0C, 0x18, 0x66, 0x01, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x06, 0x18, 0xDC, 0x0C, 0x18, 0x66, 0x01, 0x80, 0xE0, 0x00, 0x00, 0x00, 0x3B, 0x18, 0x03, 0x30, 0xCE, 0x0C, 0x18, 0x66, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x0C, 0x71, 0x18, 0x03, 0xF0, 0xC6, 0x0C, 0x18, 0x67, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x01, 0x1E, 0x01, 0xE0, 0xF0, 0x7F, 0x87, 0x86, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0x83, 0xF0, 0xFC, 0x7F, 0x87, 0x86, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01,
0x19, 0x83, 0x30, 0xCC, 0x0C, 0x0C, 0xC6, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0x18, 0xC6, 0x18, 0xC6, 0x0C, 0x0C, 0xC6, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0xCE, 0x1C, 0xC6, 0x0C, 0x0C, 0xC6, 0x01, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x19, 0x8C, 0x0C, 0xCC, 0x0C, 0x0F, 0xC6, 0x01, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x8C, 0x0C, 0xFC, 0x0C, 0x1F, 0xE6, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1E, 0x0E, 0x1C, 0xF8, 0x0C, 0x18, 0x66, 0x01, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x06, 0x18, 0xDC, 0x0C, 0x18, 0x66, 0x01, 0x80, 0xE0, 0x00, 0x00, 0x00, 0x3B, 0x18, 0x03, 0x30, 0xCE, 0x0C, 0x18, 0x66, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x0C, 0x71, 0x18, 0x03, 0xF0, 0xC6, 0x0C, 0x18, 0x67,0x00, 0x00, 0x0E, 0xE1, 0x18, 0x01, 0xE0, 0xC6, 0x0C,
0x18, 0x67, 0xF1, 0x70, 0x00, 0x00, 0x00, 0x07, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x7C, 0x78, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x7C, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC6, 0x66, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC6, 0x67, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x63, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x63, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x66, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x70, 0x66, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x7C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00};

Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 19/09/2012 04:29 | #


Déjà ton tableau fait 669 octets, donc il y a un problème.
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 19/09/2012 22:49 | #


Je comprends pas ce que tu veux dire...
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 20/09/2012 03:00 | #


Ton tableau fait 669 octets. La décomposition de produits de facteurs premiers de 669 est 3*223. Donc il y a deux possibilités : soit ton image a pour dimensions 24*223 (ou 3*1784) soit ton tableau ne fait pas la bonne taille par rapport aux dimensions de l'image, et donc l'image a été mal encodée.
Je parierais plutôt pour la seconde proposition.
Pigeonv Hors ligne Membre Points: 105 Défis: 8 Message

Citer : Posté le 20/09/2012 21:10 | #


Vraiment une bonne idée de tout mettre en vrac dans un seul topic ? Pas mieux de mettre [SDK] devant le sujet ? Là c'est pas vraiment évident de retrouver le début du problème
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 20/09/2012 21:16 | #


Mon image a pour dimensions 107 * 36, et pour l'encodage, j'ai copié le code qui m'avait retourné Tiles Creator
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 20/09/2012 21:34 | #


Une image de 107*36 pixel ça fait un bitmap de 504 octets. TileCreator a peut-être un problème pour gérer les largeurs non multiples de 8.

@Pigeonv: Je suis d'accord. Ce topic sert juste à parler des erreurs de compilations normalement, mais bon, quand une question y est posée, autant y répondre.
Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ··· 20 ··· 24, 25, 26 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
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
: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 - 2020 | Il y a 69 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