GCC et execution pour un snake

Résolu
laurnaduj Messages postés 4 Statut Membre -  
laurnaduj Messages postés 4 Statut Membre -
Bonjour,

Voila je débute et j'essaie de coder un snake.
Donc j'ai fais mon code et dans le terminal j'ai taper : gcc -Wall -o monsnake.c
il m'indique que ma compilation à reussi mais quand je veux l'éxécuter je note ./monsnake.c et il m'indique ./monsnake.c: Permission non accordée

Quelqu'un pourrait t-il m'aider ?

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    l'option -o attend le nom du futur exécutable, donc
    gcc -Wall -o monsnake monsnake.c
    ./monsnake
    1
    1. laurnaduj Messages postés 4 Statut Membre
       
      merci
      0
  2. laurnaduj Messages postés 4 Statut Membre
     
    En fait j'ai réussi en changeant les droits en utilisant la commande chmod a+rwxX monsnake.c
    mais maintenant un autre problème apparaît : quand j'exécute il me met :

    ./monsnake.c: ligne 7: typedef : commande introuvable
    ./monsnake.c: ligne 9: typedef : commande introuvable
    ./monsnake.c: ligne 10: struct : commande introuvable
    ./monsnake.c: ligne 11: struct : commande introuvable
    ./monsnake.c: ligne 12: int : commande introuvable
    ./monsnake.c: ligne 13: int : commande introuvable
    ./monsnake.c: ligne 14: ORDRE : commande introuvable
    ./monsnake.c: ligne 15: Erreur de syntaxe près du symbole inattendu « } »
    ./monsnake.c: ligne 15: '} ELT ;'

    et je ne comprends pas pourquoi !!

    mon code
    ->

    #include <stdio.h>
    #include <sys/select.h>
    #define SIZEX 40
    #define SIZEY 10

    typedef enum { HAUT , BAS, GAUCHE, DROITE, SANS , EXIT, PAUSE } ORDRE ;

    typedef struct elt{
    struct elt *next ;
    struct elt *prev ;
    int posx;
    int posy;
    ORDRE dir;
    } ELT ;

    ELT *snake;
    ELT *snakeQ;

    // ------- GETCH ----------
    #include <termios.h>
    #include <unistd.h>

    int kbhit (void)
    {
    struct timeval tv;
    fd_set rdfs;

    tv.tv_sec = 0;
    tv.tv_usec = 0;

    FD_ZERO(&rdfs);
    FD_SET (STDIN_FILENO, &rdfs);

    select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
    return FD_ISSET(STDIN_FILENO, &rdfs);
    }

    int mygetch(void) // TODO non bloquant
    {
    struct termios oldt, newt;
    int ch = -1;
    tcgetattr( STDIN_FILENO, &oldt );
    newt = oldt;
    newt.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newt );
    if( kbhit() > 0 )
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
    return ch;
    }

    ORDRE getOrder(){
    ORDRE ret = SANS;
    int ch;

    ch = mygetch() ;

    // printf("%x --> \n", ch);

    if (ch < 0)
    ret = SANS ;

    if ( ch == 0x1B )
    ret = EXIT ;

    if ( ch == 0x20 )
    ret = PAUSE ;

    if ( ch == 'y')
    ret = HAUT ;

    if ( ch == 'h')
    ret = BAS ;

    if ( ch == 'g')
    ret = GAUCHE ;

    if ( ch == 'j')
    ret = DROITE ;

    return ret;
    }

    // ------- GOTOXY ----------
    #include <unistd.h>

    void gotoxy(int x,int y)
    {
    printf("%c[%d;%df",0x1B,y,x);
    }

    // -------------------------
    void drawBorders(){
    int i, j;
    for(i = 0; i < SIZEY; i++){
    for( j = 0 ; j < SIZEX ; j++){
    if(( i == 0 ) || (i == SIZEY-1))
    printf("-");
    else {
    if(( j == 0 ) || (j == SIZEX-1))
    printf("|");
    else
    printf(" ");
    };
    }
    printf("\n");
    }
    }

    //TODO init ELT en HORIZONTAL au milieu Tete a gauche
    void createSnake(){
    // tête
    snake = (ELT*)malloc(sizeof(ELT));
    snake->posx = size x/2 ; //Au milieu du plan de jeu en x
    snake->posy = size y/2 ; //Au milieu du plan de jeu en y
    snake->dir = GAUCHE ; //oriente vers gauche
    snake->prev = NULL ; //pas de d'element avant

    // corps
    snake->next = (ELT*)malloc(sizeof(ELT));
    snake-> = snake->next->posx=SIZEX/2+1 ; //Au milieu du plan de jeu en x + 1
    snake-> = snake->next->posy=SIZEY/2 ; //Au milieu du plan de jeu en y
    snake-> = snake->next->dir=GAUCHE ;
    snake->next->prev=snake ; //corps pointe sur la tete

    // queue
    snakeQ = (ELT*)malloc(sizeof(ELT));

    snakeQ->posx = SIZEX/2-1 ;
    snakeQ->posy = SIZEY/2-1 ;
    snakeQ->dir = DROITE ;
    snakeQ->prev = snake->next; // Avant la Queue, on a le corps du serpent !!!
    snakeQ->next = NULL ; //pas element derriere
    }

    int moveSnake(int dir){

    if(dir == EXIT)
    return -1 ;

    // affiche ordre en bas à gauche
    gotoxy(0,31);
    if(dir == HAUT)
    printf("HAUT ");
    if(dir == BAS)
    printf("BAS ");
    if(dir == GAUCHE)
    printf("GAUCHE");
    if(dir == DROITE)
    printf("DROITE");
    fflush(stdout);

    return 0;
    }

    int main(){
    int result = 0 ;
    int direction = 0 ;
    int delayVal = 100000; // Latence de la boucle de jeu
    drawBorders(); // Trace du cadre de jeu
    // TO DO createSnake(); // Initialisation de la liste chainée
    do
    {
    direction = getOrder(); // Recherche de la direction (clavier)
    printf("direction %x\n",direction);
    result = moveSnake(direction); // Déplacer le serpent dans la direction.
    usleep(delayVal);
    } while (result == 0); // Tant qu'on a pas perdu.
    return 0 ;
    }

    Si quelqu'un pouvait m'aider ce serait vraiment sympa !
    0