Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 26 Jun 2007 06:47:37

phcorp
Membre
Lieu: Yvelines(78), France
Date d'inscription: 25 Nov 2004
Messages: 69
Site web

Problême dans la compilation d'un projet

Bonjour à tous,
un billard sur le g100, ça n'existe pas
alors je m'y suis mis
http://www.imagup.info/images/03/1182859724_PoolGame.PNG
mais, problême majeur : je ne peux pas dessiner la queue car pas de fonction de dessin de ligne autre qu'horizontale et verticale.
donc j'en ai trouvé une que j'ai adaptée
la fonction est correcte mais je ne saisis pas suffisamment bien les subtilités du compilateur (TC) pour comprendre mon erreur..
voici mon code :

Code:

#include <casio2.h>
#include <mkeys.h>

char boule[4][5][5] = {
{
0, 1, 1, 1, 0,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
1, 0, 0, 0, 1,
0, 1, 1, 1, 0
}, {
0, 1, 1, 1, 0,
1, 0, 1, 0, 1,
1, 1, 0, 1, 1,
1, 0, 1, 0, 1,
0, 1, 1, 1, 0
}, {
0, 1, 1, 1, 0,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
0, 1, 1, 1, 0
}, {
0, 1, 1, 1, 0,
1, 0, 0, 0, 1,
1, 1, 1, 1, 1,
1, 0, 0, 0, 1,
0, 1, 1, 1, 0
}
};

//fonction dessin d'une boule------------------------------
void dessinboule(unsigned char inix, unsigned char iniy, unsigned char nb){
int X, Y;
for(Y=0;Y<5;Y++){
for(X=0;X<5;X++){
if(boule[nb][Y][X]==1) setPix(inix + X, iniy + Y, 0, 1);
}}
}
//---------------------------------------------------------

//fonction dessin de la table------------------------------
void dessintable(void){
//dessin des trous
dessinboule(1,1,2);
dessinboule(1,29,2);
dessinboule(1,57,2);
dessinboule(61,1,2);
dessinboule(61,57,2);
dessinboule(121,1,2);
dessinboule(121,29,2);
dessinboule(121,57,2);
//dessin des bords
hline2(2, 124, 4, 0, 1);
hline2(2, 124, 58, 0, 1);
vline2(2, 60, 4, 0, 1);
vline2(2, 60, 122, 0, 1);
}
//---------------------------------------------------------

//fonction dessin de ligne---------------------------------
//la librairie casio2.h n'en possédant pas-----------------
void putcara(int x,int y){
    SetPix(x, y, 0, 1);
}
/*
   Pour une meilleure comprehension voici la formule,
   le code en est tres different car il utilise plein
   d'astuces pour avoir moins de calcul a faire, mais 
   en gros c'est ça :

   soit deux point A(a,b) et B(c,d)

   m=(d-b)/(c-a);

   tout point M(x,y) appartenant a [AB]
   verifie donc l'equation :

   y=mx-ma+b  
   x=(ma-b+y)/m

*/

/* 
firstx => position X du premier point de la ligne 
firsty => position Y du premier point de la ligne 
lastx  => position X du dernier point de la ligne 
lasty  => position Y du dernier point de la ligne 

*/

void    glbDrawLine(int firstx,int firsty,int lastx,int lasty)
{
    int         x1;        /* debut de la ligne => milieu de la ligne */
    int         y1;        /* debut de la ligne => milieu de la ligne */
    int         x2;        /* fin de la ligne => milieu de la ligne */
    int         y2;        /* fin de la ligne => milieu de la ligne */
    int         dx;        /* longueur X de la droite */ 
    int         dy;        /* longueur Y de la droite */ 
    int         sub;        /* utilise pour des soustractions */
    int         remain;        /* nombre de pixel restant */
    int         error;        /* erreur du trace, doit etre corrige si positif */
    int         inc1;        /* pour des incrementations/decrementations */
    int         inc2;        /* pour des incrementations/decrementations */

    /*
       x1 = premier point X 
       x2 = dernier point X
       y1 = premier point Y
       y2 = dernier point Y

       si firstx > lastx les premiers et les derniers sont inverses 
    */
    if (firstx>lastx)
    {
        x1=lastx;
        x2=firstx;
        y1=lasty;
        y2=firsty;
    }
    else
    {
        x1=firstx;
        x2=lastx;
        y1=firsty;
        y2=lasty;
    }
    dx=x2-x1;    /* longueur X de la droite */ 
    dy=y2-y1;    /* longueur Y de la droite */ 
    if ((!dx)&&(!dy)) return; /* quitte si aucun trace a effectuer */

    /* 
      si dy negatif, inverse dy et
      initialise les incrementation selon 
      le signe de dy (afin que les droites
      aillent dans le bon sens
    */

    if (dy<0) 
    {
        dy=-dy;
        inc1=-1;
        inc2=1;
    }
    else 
    {
        inc1=1;
        inc2=1;
    }

    /*
       pour augmenter la rapidite du code vous pouvez
       rajoutez ici des algos pour les droites 
       horizontales (dy==0), verticales (dx==0) et 
       diagonale (dx==dy) car ces droites ne necessitent
       pas d'algorythme complique, mais la taille du 
       code en souffrira
    */  

    /*
       pour aller plus vite on dessine la droite des 
       deux cotes a la fois, en meme temps a partir
       du premier point et du dernier
    */

    /* si la droite est plutot horizontale */
    if (dx>dy)
    {   
        sub=dx-dy;          
        error=dy-(dx>>1);       
        remain=(dx+1)>>1;    /* 
                                   dx+1 est le nombre de points
                                   a tracer, diviser par deux car
                                   on dessine des deux cotes a la fois 
                                */

        /*
           pour mieux comprendre sachez que
           la position x doit augmenter de 1
           a chaque tour et y de dy/dx
           a chaque tour (car sur la longueur
           dx y doit en tout augmenter de dy).
        */      

        do
        {
            putcara(x1,y1);    /* appelle la fonction de dessin avec en parametre */
            putcara(x2,y2);        /* les positions des points a dessiner */ 
            x1+=inc2;    /* la position x1 augmente */
            x2-=inc2;   /* et la position x2 diminue (on va vers le centre) */
            if (error>=0)    /* si l'erreur est assez grande pour etre corrigee */
            {
                y1+=inc1;    /* la position y1 augmente */
                y2-=inc1;    /* et la position y2 diminue (on va vers le centre) */
                error-=sub;    /* diminue l'erreur */
            }
            else error+=dy;    /* sinon augmente l'erreur */
        } while (--remain>0);    /* diminue remain et recommence s'il reste des points a tracer */
        if (!(dx&1)) putcara(x1,y1);    /* 
                                          si dx etait pair l'algo n'a pas pu tracer le point du milieu
                                          car il a fait une division entiere par deux sur dx pour
                                          connaitre le nombre de points a tracer et a ainsi perdu le 1
                                        */
        return;        /* fin de la fonction */
    }
    else
    {   
        sub=dy-dx;
        error=dx-(dy>>1);
        remain=(dy+1)>>1;    /* 
                                   dy+1 est le nombre de points
                                   a tracer, diviser par deux car
                                   on dessine des deux cotes a la fois 
                                */

        /*
           pour mieux comprendre sachez que
           la position y doit augmenter de 1
           a chaque tour et x de dx/dy
           a chaque tour (car sur la longueur
           dy x doit en tout augmenter de dx).
        */ 

        do
        {
            putcara(x1,y1);    /* appelle la fonction de dessin avec en parametre */
            putcara(x2,y2);        /* les positions des points a dessiner */ 
            y1+=inc2;    /* la position y1 augmente */
            y2-=inc2;   /* et la position y2 diminue (on va vers le centre) */
            if (error>=0)    /* si l'erreur est assez grande pour etre corrigee */
            {
                x1+=inc2;    /* la position x1 augmente */
                x2-=inc2;    /* et la position x2 diminue (on va vers le centre) */
                error-=sub;    /* diminue l'erreur */
            }
            else error+=dx;    /* sinon augmente l'erreur */
        } while (--remain>0);    /* diminue remain et recommence s'il reste des points a tracer */
        if (!(dy&1)) putcara(x1,y1);    /* 
                                          si dy etait pair l'algo n'a pas pu tracer le point du milieu
                                          car il a fait une division entiere par deux sur dy pour
                                          connaitre le nombre de points a tracer et a ainsi perdu le 1
                                        */
        return;        /* fin de la fonction */
    }
}

//---------------------------------------------------------


int main(void){
clrscr();
dessintable();
glbDrawLine(5,4,89,56);
getch();
return(0);
}

bon j'espère que c'est lisible :s

alors voici ce que me retourne le compilateur :

Linker Error : Undefined symbol _SetPix in module ..\PROJECTS\BILLARD.C

je ne comprends pas j'ai tout essayé
merci de m'aider

phcorp

Dernière modification par phcorp (26 Jun 2007 08:03:56)


http://www.imagup.info/images/04/1188234404_user.php.gif http://www.imagup.info/images/04/1188234372_user.mysql.gif http://www.imagup.info/images/04/1188234383_user.pando.gif http://www.imagup.info/images/04/1188234294_user.casio.gif

Hors ligne

 

#2 26 Jun 2007 15:48:33

tonton1664
Membre
Lieu: Somme (80)
Date d'inscription: 22 Jul 2002
Messages: 217
Site web

Re: Problême dans la compilation d'un projet

Tu utilises simplement une fonction (SetPix) que tu as oublié de définir.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr