Problème avec mon serpent

redrum261 Messages postés 4 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 30 mai 2006 - 30 mai 2006 à 17:13
redrum261 Messages postés 4 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 30 mai 2006 - 30 mai 2006 à 19:40
Je ne comprens pas pourquoi le snake que j'ai programmé n'est pas en mouvement
si vous aviez des suggestions, des conseils je suis à votre écoute.
merci d'avance

8 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
30 mai 2006 à 17:49
Peus-tu dévelloper plus ton problème? montre un bout de code? quelque chose, car la c'est un peu dure de t'aider.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
30 mai 2006 à 17:55
Mais enfin deck_bsd, tu n'est pas bien réveillé?
Il est évident que redrum261 s'est trompé à la ligne 123, il faut remplacer if(!x) par if(!y), enfin je crois
0
redrum261 Messages postés 4 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 30 mai 2006
30 mai 2006 à 18:16
oui c'est sur cela sera surment plus facile come ca lol
voici mon code :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


#define GAUCHE 75
#define DROITE 77
#define HAUT 72
#define BAS 80
#define ESC 27




int Niv[80][23];
int score = 0; //score à 0
int taille = 3;
int nb_pomme=0;//nb de pommes mangées
int sens = DROITE;


typedef struct {
    int x; //coordonnées en x
    int y; //coordonnées en y
}Coord;


  void efface_menu() 
{
    int i;
    gotoxy(1,1);
    for(i=1; i<79; i++)
        printf(" ");
}
 
void message(char* mess1)
{
    gotoxy(50,1);
    printf("%s",mess1);
    getch();
    efface_menu();
}
 
 
void gameOver()
{      message("GAME OVER");
}




int affiche(int taille, Coord p, Coord snak[],int score,int nb_pomme)
{
   
    int i, j, MAX_SCORE;
     
        //si snake mange sa queue
        for(i = 2; i < taille; i++)
        {
            if(snak[0].x == snak[i].x && snak[0].y == snak[i].y)
            {
                gameOver();
                return 0;
            }
        }
    
    
         //teste les collisions avec des paroies
         for(i=0; i<23; i++)
         {
         for(j=0; j<80; j++)
         {
            if(Niv[j][i]==1)
            {
                if(snak[0].x==(j+1) && snak[0].y==(i+3))
                {
                    gameOver();
                    return 0;
                }
            }
        }
        }
   
    //dessine le score, le record, le nombre de pommes mangées
    gotoxy(1, 2);
    for(i = 0; i < 80; i++)
    printf("\xC4");
    gotoxy(2,1);    
    printf(" Score: %d|", score);
    if(score >= MAX_SCORE)
    MAX_SCORE = score;
    printf(" Record: %d|", MAX_SCORE); 
    printf(" Pomme(s): %d|", nb_pomme);
   
             
        //dessine le snake
    for(i = 0; i < taille; i++)
    {
        gotoxy(snak[i].x, snak[i].y);
        if(i == 0)
        { 
                printf("\x2"); //dessine la tête
        }
        else
        {
                printf("\xf"); //dessine le corps
        }
    }
      
return 0;
}
 
/*============================================================================*/
/* Affichage */
/*============================================================================*/
 


 
void cherche_pomme(Coord snak[], Coord p, int taille)
{
    int x, y, i, j;
    int exit, ind;
    do
    {
        exit = 1;
        x = (rand() % 79) + 1;
        y = (rand() % 22) + 1;
        ind = 0;
                //verifie si la pomme n'est pas ds le serpent
            while(ind <= taille && exit)
                    {                 if(x snak[ind].x && y snak[ind].y)      
                exit = 0;
                ind++;
                    }
                //verifie si la pomme n'est pas ds le mur
                        for(i=1; i<22; i++)
                                {
                                            for(j=0; j<79; j++)
                                            {
                                            if(x==(j+1) && y==(i+3))
                                            exit=0;
                                            }
                                            if(!exit) break;
                                }
                        if(!exit) break;
                        }


    while(! exit);
    p.x = x;
    p.y = y;


    //dessine la pomme
    gotoxy(p.x, p.y);
    printf("\x9d");
}
 
 
void initialisationJeu(Coord snak[], Coord s, Coord p, int taille)
{
    int i;
    clrscr();
    //cherche_pomme(snak, p, taille);
    //initialisation du snake     s.x 10, s.y 10;
    snak[0].x = s.x;
    snak[0].y = s.y;
    for(i = 1; i < taille; i++)
    {
        snak[i].x = s.x - i;
        snak[i].y = s.y;
    }
}
 
 
//fonction qui gere le jeu
void jeu()
{
    Coord snak[1000];//coord du snake
    Coord p;//coord de la pomme
    Coord s;//coord de la tete du snake
    int exit = 0, v;
        message("PRET?");
    
 
    initialisationJeu( snak, s, p, taille);
    affiche( taille, p, snak, score, nb_pomme);


    //grande boucle du jeu
    while(!exit)
    {
        //qd on frappe une touche
        while(kbhit())
        {
        switch(getch())
                {
                case 'z':
                    if(sens != BAS)
                    {
                    sens = HAUT;
                    break;
                    }   
                case 's':
                    if(sens != HAUT)
                    {
                    sens = BAS;
                    break;
                    }    
                case 'q':
                    if(sens != DROITE)
                    {
                    sens = GAUCHE;
                    break;
                    }    
                case 'd':
                    if(sens != GAUCHE)
                    {
                    sens = DROITE;
                    break;
                    }    
                case ESC:
                    exit = 1;
                    break;
                }
        }   
        
         //qd on frappe pas de touches
        while(!kbhit())
        {   
                  //si snake bouffe la pomme
            if(snak[0].x == p.x && snak[0].y == p.y)
            {
                score = (score+5);
                taille = (score+1);
                nb_pomme=(nb_pomme+1);
                cherche_pomme(snak, p, taille);
            }


          
            //deplace le snake dans telle direction
            switch(sens)
            {
            case HAUT:
                snak[0].x = s.x;
                snak[0].y = (s.y)-1;
                break;
               
            case BAS:
                snak[0].x = s.x;
                snak[0].y = (s.y)+1;
                break;
               
            case GAUCHE:
                snak[0].x = (s.x)-1;
                snak[0].y = s.y;
                break;
               
            case DROITE:
                snak[0].x = (s.x)+1;
                snak[0].y = s.y;
                break;
               
            }
        }   
    }
 
 

 
 
/*============================================================================*/
/* FONCTION PRINCIPALE */
/*============================================================================*/
 
int main()
{


    system("title SNAKE 2006 par nini"); 
    
    jeu();
 
    return 0;
}
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
30 mai 2006 à 18:41
Ha en mode console en plus. Sauf erreur de ma part, dans ta grand
boucle du jeu tu ne fait null part appel a ta fonction afficher :s donc
comment veus-tu qu'il bouge.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
redrum261 Messages postés 4 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 30 mai 2006
30 mai 2006 à 19:09
je me rend bien compte mais je ne sais pas où la placer.
Elle me crée des choses bizarre... elle me place la tete du serpent dans la fenetre de score
Si quelqu'un a une idée de l'enplacement de la fonction affiche ou sur le programme en général je suis tout ouïe.

merci d'avance
0
daumen Messages postés 8 Date d'inscription samedi 27 mai 2006 Statut Membre Dernière intervention 30 mai 2006
30 mai 2006 à 19:26
Pas mal ton pragramme
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
30 mai 2006 à 19:33
Pour l'affichage, ben ça il faut voir tes coordonée, par exemple pour
pas qu'il aie dans la fenetre sco prévoir des limites de déplacement.
0
redrum261 Messages postés 4 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 30 mai 2006
30 mai 2006 à 19:40
oki ca c fait mais le probleme c'est que mon serpent se coupe en 2 bouts et un de ces bouts arrive dans la fenetre de score ce qui provoque le game over....
0