Problème avec mon serpent

Signaler
Messages postés
4
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
30 mai 2006
-
Messages postés
4
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
30 mai 2006
-
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

Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
4
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
30 mai 2006

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;
}
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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.
Messages postés
4
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
30 mai 2006

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
Messages postés
8
Date d'inscription
samedi 27 mai 2006
Statut
Membre
Dernière intervention
30 mai 2006

Pas mal ton pragramme
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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.
Messages postés
4
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
30 mai 2006

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....