Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1950 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme avec mon serpent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme avec mon serpent

n°1380472
redrum261
Posté le 03-06-2006 à 15:25:13  profilanswer
 

j'ai un petit problème de programmation de mon serpent voici le code.... Si quelqu'un pouvait maider à comprndre pourquoi il n'avance pas ...
 
Merci d'avance
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
 
#define GAUCHE 75
#define DROITE 77
#define HAUT 72
#define BAS 80
#define ESC 27
/*============================================================================*/
/* Variables globales */
/*============================================================================*/
int vitesse = 90;
int Niv[80][23];
int score = 0; //score à 0
int taille = 3;
int nb_pomme=0;//nb de pommes mangées
int sens;  
/*============================================================================*/
/* Structure */
/*============================================================================*/
typedef struct {
    int x; //coordonnées en x
    int y; //coordonnées en y
}Coord;  
/*============================================================================*/
/* Affichage et interface */
/*============================================================================*/
  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();
}
 
 
void gameOver()
{  
    message("===== GAME OVER =====" );
}  

 

int affiche(int taille, Coord p, Coord snak[], int score,int nb_pomme, Coord s)
{
   
    int i, j, t, h;
 
               
        //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();
                exit(0);
                return 0;
            }
        }
     
     
         //teste les collisions avec des paroies
         for(i=2; 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();
                    exit(0);
                    return 0;
                }
            }
        }
        }
   
          //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
        }
        if(i !=0 && i<taille)
        {
                printf("\xf" ); //dessine le corps
        }
     }
     
    //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);  
    printf(" Pomme(s): %d|", nb_pomme);
     
return 1;
}
 
/*============================================================================*/
/* Moteur du jeu */
/*============================================================================*/
   
 
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=2; 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 ;
    }
    sens = DROITE;
}
 
 
//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
    char c;
    int exit = 0, v, m, i;
    message("===== PRET? =====" );
     
     initialisationJeu( snak, s, p, taille);
   
    //grande boucle du jeu
    do
    {  
    affiche( taille, p, snak, score, nb_pomme, s);
             
             //qd on frappe pas de touches
        if(!kbhit())
        {    
                       
        //si le snake mange la pomme
        if(snak[0].x == p.x && snak[0].y == p.y)
            {
                gotoxy(p.x, p.y);
                printf(" " );
                score = (score+5);
                taille = (taille+1);
                nb_pomme =(nb_pomme+1);
                cherche_pomme(snak, p, taille);
                affiche( taille, p, snak, score, nb_pomme, s);
            }
           
        //deplace le snake dans telle direction    
              switch(sens)
              {
              case HAUT:
                snak[0].x = s.x;
                snak[0].y = s.y--;
              case BAS:
                snak[0].x = s.x;
                snak[0].y = s.y++;
              case GAUCHE:
                snak[0].x = s.x--;
                snak[0].y = s.y;
              case DROITE:
                snak[0].x = s.x++;
                snak[0].y = s.y;
              }
              Sleep(120);          
               affiche( taille, p, snak, score, nb_pomme, s);
             }
 
                 //qd on frappe une touche
          if(kbhit())
             {                    
                   c=getch();
                   switch(c)
                   {
         case 'd' : if(sens!=GAUCHE){
                       s.x++ ;
                       sens=DROITE;
                       }else s.x-- ; break;
         case 'q' : if(sens!=DROITE){
                       s.x-- ;
                       sens=GAUCHE;
                       }else s.x++ ; break;
         case 's' : if(sens!=HAUT){
                       s.y++ ;
                       sens=BAS;
                       }else s.y-- ; break;
         case 'z' : if(sens!=BAS){
                       s.y-- ;
                       sens=HAUT;
                       }else s.y++ ; break;
         case 'p' : getch() ; break;
                        }
         }
         
         }    

 

    while(!exit);  
}  
 
 
/*============================================================================*/
/* FONCTION PRINCIPALE */
/*============================================================================*/
 
int main()
{  
    system("title SNAKE 2006 par redrum261" );  
     
    jeu();
 
    return 0;
}

mood
Publicité
Posté le 03-06-2006 à 15:25:13  profilanswer
 

n°1380475
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-06-2006 à 15:33:37  profilanswer
 

redrum261 a écrit :

j'ai un petit problème [avec] mon serpent


http://greensboring.com/pod/viagra.gif
 
A part ça, apprend à regler ton compilateur correctement, ça fait le ménage...  
 
Pour gcc  (au minimum) : -Wall -Wextra -O2
 
exit() est une fonction standard. Ne pas donner le nom 'exit' à une variable. Masquage (shadowing), risque de confusion...
 
Mise en ordre des données (suppression des globales, contexte, suppression des copies...).  
 
Mise au point de la détection correcte des fleches.
 
Le serpent s'est animé (ben oui, les variables changent, maintenant...). Par contre, il ne suit pas les regles. Il manque une fifo... Dans 2 directions, il ne bouge pas... Je te laisse mettre ton programme au point. J'espère que tu as compris que
 
1 - On n'utilise pas de globales mais un contexte.
2 - On ne passe pas de structure à une variable, mais son adresse.
3 - Si une variable doit être modifiée, on passe son adresse.
 
Nota... La donnée constante 'taille' pourrait être intégrée dans le contexte... Ca ferait un paramètre de moins...

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio2.h>
  4. #include <windows.h>
  5. #define GAUCHE 75
  6. #define DROITE 77
  7. #define HAUT 72
  8. #define BAS 80
  9. #define ESC 27
  10. /*============================================================================*/
  11. /* Variables globales */
  12. /*============================================================================*/
  13. /*============================================================================*/
  14. /* Structure */
  15. /*============================================================================*/
  16. typedef struct
  17. {
  18.    int x;                       //coordonnées en x
  19.    int y;                       //coordonnées en y
  20. }
  21. Coord;
  22. typedef struct
  23. {
  24.    int Niv[80][23];
  25.    int sens;
  26.    Coord p;
  27.    Coord s;
  28.    Coord snak[1000];            //coord du snake
  29. }
  30. game_s;
  31. /*============================================================================*/
  32. /* Affichage et interface */
  33. /*============================================================================*/
  34. #if 0
  35. static void efface_menu (void)
  36. {
  37.    int i;
  38.    gotoxy (1, 1);
  39.    for (i = 1; i < 79; i++)
  40.       putch (' ');
  41. }
  42. #endif
  43. static void message (char const *mess1)
  44. {
  45.    clrscr();
  46.    gotoxy (50, 1);
  47.    cprintf ("%s", mess1);
  48.    getch ();
  49. }
  50. static void gameOver (void)
  51. {
  52.    message ("===== GAME OVER =====" );
  53. }
  54. static int affiche (game_s *this
  55.                     , int const taille
  56.                     , int const score
  57.                     , int const nb_pomme)
  58. {
  59.    int i, j;
  60.    //si snake mange sa queue
  61.    for (i = 2; i < taille; i++)
  62.    {
  63.       if (this->snak[0].x == this->snak[i].x && this->snak[0].y == this->snak[i].y)
  64.       {
  65.          gameOver ();
  66.          exit (0);
  67.          return 0;
  68.       }
  69.    }
  70.    //teste les collisions avec des paroies
  71.    for (i = 2; i < 23; i++)
  72.    {
  73.       for (j = 0; j < 80; j++)
  74.       {
  75.          if (this->Niv[j][i] == 1)
  76.          {
  77.             if (this->snak[0].x == (j + 1) && this->snak[0].y == (i + 3))
  78.             {
  79.                gameOver ();
  80.                exit (0);
  81.                return 0;
  82.             }
  83.          }
  84.       }
  85.    }
  86.    //dessine le snake
  87.    for (i = 0; i < taille; i++)
  88.    {
  89.       gotoxy (this->snak[i].x, this->snak[i].y);
  90.       if (i == 0)
  91.       {
  92.          cprintf ("\x2" );        //dessine la tête
  93.       }
  94.       if (i != 0 && i < taille)
  95.       {
  96.          cprintf ("\xf" );        //dessine le corps
  97.       }
  98.    }
  99.    //dessine le score, le record, le nombre de pommes mangées
  100.    gotoxy (1, 2);
  101.    for (i = 0; i < 80; i++)
  102.       printf ("\xC4" );
  103.    gotoxy (2, 1);
  104.    printf (" Score: %d|", score);
  105.    printf (" Pomme(s): %d|", nb_pomme);
  106.    return 1;
  107. }
  108. /*============================================================================*/
  109. /* Moteur du jeu */
  110. /*============================================================================*/
  111. static void cherche_pomme (game_s *this, int const taille)
  112. {
  113.    int out;
  114.    int x;
  115.    int y;
  116.    do
  117.    {
  118.       int ind = 0;
  119.       out = 1;
  120.       x = (rand () % 79) + 1;
  121.       y = (rand () % 22) + 1;
  122.       //verifie si la pomme n'est pas ds le serpent
  123.       while (ind <= taille && out)
  124.       {
  125.          if (x == this->snak[ind].x && y == this->snak[ind].y)
  126.             out = 0;
  127.          ind++;
  128.       }
  129.       //verifie si la pomme n'est pas ds le mur
  130.       {
  131.          int i;
  132.          for (i = 2; i < 22; i++)
  133.          {
  134.             int j;
  135.             for (j = 0; j < 79; j++)
  136.             {
  137.                if (x == (j + 1) && y == (i + 3))
  138.                   out = 0;
  139.             }
  140.             if (!out)
  141.                break;
  142.          }
  143.          if (!out)
  144.             break;
  145.       }
  146.    }
  147.    while (!out)
  148.       ;
  149.    this->p.x = x;
  150.    this->p.y = y;
  151.    //dessine la pomme
  152.    gotoxy (this->p.x, this->p.y);
  153.    cprintf ("\x9d" );
  154. }
  155. static void initialisationJeu (game_s *this, int const taille)
  156. {
  157.    int i;
  158.    clrscr ();
  159.    cherche_pomme (this, taille);
  160.    //initialisation du snake
  161.    this->s.x = 10, this->s.y = 10;
  162.    this->snak[0].x = this->s.x;
  163.    this->snak[0].y = this->s.y;
  164.    for (i = 1; i < taille; i++)
  165.    {
  166.       this->snak[i].x = this->s.x - i;
  167.       this->snak[i].y = this->s.y;
  168.    }
  169.    this->sens = DROITE;
  170. }
  171. //fonction qui gere le jeu
  172. static void jeu (void)
  173. {
  174.    int taille = 3;
  175.    int score = 0;                  //score à 0
  176.    int nb_pomme = 0;               //nb de pommes mangées
  177.    int out = 0;
  178.    game_s game =
  179.       {
  180.          0
  181.       };
  182.    message ("===== PRET? =====" );
  183.    initialisationJeu (&game, taille);
  184.    //grande boucle du jeu
  185.    do
  186.    {
  187.       affiche (&game, taille, score, nb_pomme);
  188.       //qd on frappe pas de touches
  189.       //si le snake mange la pomme
  190.       if (game.snak[0].x == game.p.x && game.snak[0].y == game.p.y)
  191.       {
  192.          gotoxy (game.p.x, game.p.y);
  193.          printf (" " );
  194.          score = (score + 5);
  195.          taille = (taille + 1);
  196.          nb_pomme = (nb_pomme + 1);
  197.          cherche_pomme (&game, taille);
  198.          affiche (&game, taille, score, nb_pomme);
  199.       }
  200.       //deplace le snake dans telle direction
  201.       switch (game.sens)
  202.       {
  203.       case HAUT:
  204.          game.snak[0].x = game.s.x;
  205.          game.snak[0].y = game.s.y--;
  206.       case BAS:
  207.          game.snak[0].x = game.s.x;
  208.          game.snak[0].y = game.s.y++;
  209.       case GAUCHE:
  210.          game.snak[0].x = game.s.x--;
  211.          game.snak[0].y = game.s.y;
  212.       case DROITE:
  213.          game.snak[0].x = game.s.x++;
  214.          game.snak[0].y = game.s.y;
  215.       }
  216.       Sleep (120);
  217.       affiche (&game, taille, score, nb_pomme);
  218.       //qd on frappe une touche
  219.       if (kbhit ())
  220.       {
  221.          int c = getch ();
  222.          switch (c)
  223.          {
  224.          case 224:
  225.          case 0:
  226.             {
  227.                if (kbhit())
  228.                {
  229.                   c = getch();
  230.                   switch (c)
  231.                   {
  232.                   case DROITE:
  233.                      if (game.sens != GAUCHE)
  234.                      {
  235.                         game.s.x++;
  236.                         game.sens = DROITE;
  237.                      }
  238.                      else
  239.                         game.s.x--;
  240.                      break;
  241.                   case GAUCHE:
  242.                      if (game.sens != DROITE)
  243.                      {
  244.                         game.s.x--;
  245.                         game.sens = GAUCHE;
  246.                      }
  247.                      else
  248.                         game.s.x++;
  249.                      break;
  250.                   case BAS:
  251.                      if (game.sens != HAUT)
  252.                      {
  253.                         game.s.y++;
  254.                         game.sens = BAS;
  255.                      }
  256.                      else
  257.                         game.s.y--;
  258.                      break;
  259.                   case HAUT:
  260.                      if (game.sens != BAS)
  261.                      {
  262.                         game.s.y--;
  263.                         game.sens = HAUT;
  264.                      }
  265.                      else
  266.                         game.s.y++;
  267.                      break;
  268.                   }
  269.                }
  270.             }
  271.             break;
  272.          case 'p':
  273.             getch ();
  274.             break;
  275.          }
  276.       }
  277.    }
  278.    while (!out)
  279.       ;
  280. }
  281. /*============================================================================*/
  282. /* FONCTION PRINCIPALE */
  283. /*============================================================================*/
  284. int main ()
  285. {
  286.    puts ("title SNAKE 2006 par redrum261" );
  287.    jeu ();
  288.    return 0;
  289. }


Message édité par Emmanuel Delahaye le 03-06-2006 à 16:37:08

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1380487
red factio​n
Posté le 03-06-2006 à 16:19:00  profilanswer
 

une centaine de lignes de code pour un truc qui pourrait etre fait  en 10....

n°1380490
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-06-2006 à 16:37:56  profilanswer
 

red faction a écrit :

une centaine de lignes de code pour un truc qui pourrait etre fait  en 10....


En C? Je demande à voir...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1380535
red factio​n
Posté le 03-06-2006 à 18:55:08  profilanswer
 

ok cetait une facon de parler mais ya quand même beaucoup de code pour pas grand chose

n°1391269
max0072
Posté le 20-06-2006 à 11:21:08  profilanswer
 

salut.je voudrai savoir si vous pouvez mettre le code courigé svp.

n°1391270
_darkalt3_
Proctopathe
Posté le 20-06-2006 à 11:22:27  profilanswer
 

max0072 a écrit :

salut.je voudrai savoir si vous pouvez mettre le code courigé svp.


 

Citation :

[0C] On ne fait pas le boulot à votre place.
 
    * Les demandes du style "vous pouvez faire un programme faisant [...] pour moi ?" sont assez mal vues et n'obtiennent que très rarement de réponses.


Message édité par _darkalt3_ le 20-06-2006 à 11:22:50
n°1391322
max0072
Posté le 20-06-2006 à 11:54:09  profilanswer
 

je voudrai seulement voire la source ,et si tu sais pourquoi hhhhh.j'ai déja programmer un serpent il y a 3 ans quand j'avais 16 ans.toi t'étais en trai de jouer à cache cache.si j'ai demmandé qu'on me le donne je l'ai pas demmandé à toi.tu sais quand tu paurras programmer un rootkit sous unix viens me parler.tu sais rien de moi si tu veux en savoir va dans le site http://www.zone-h.org/index.php?op [...] 3&filter=1 et tu saurras à qui t'as affaire.et salut à tout les autres.
si je réspectais pas l'objectif de ce forum il ne sera plus disponible.dommage que les mec comme toi existe encore

n°1391327
_darkalt3_
Proctopathe
Posté le 20-06-2006 à 11:57:34  profilanswer
 

oho un warlordz [:totoz]
Apprend à écrire et reviens ensuite stp, tu me fais mal aux yeux.  
 

Citation :

dommage que les mec comme toi existe encore


 :pfff:  

n°1391355
max0072
Posté le 20-06-2006 à 12:14:51  profilanswer
 

tu te croix en train de me fouttre la rage hhhhh,tu viens de me prouver que t'es qu'un salop
tu sais que tu dis n’importe quoi et que tu me fais pitié, tu n’as aucun savoir en informatique un vrai nul comme toi ne peut rien faire dans cette vie que de dire n’importe quoi
je peux pas perdre du temps avec un idiot comme toi,j’ai autres choses à faire,
et en ce qui concerne mon écriture je ne suis pas en train d’écrire à quelqu’un que je respecte
je ne le fais qu’un à un idiot un seul idiot c’est toi,alors je m’en fou j’écris comme je veux
(tous mes respects aux autres)    

mood
Publicité
Posté le 20-06-2006 à 12:14:51  profilanswer
 

n°1391356
_darkalt3_
Proctopathe
Posté le 20-06-2006 à 12:17:19  profilanswer
 

Allez, va rendre le pécé de ton papa !
 
Au revoir [:ban]


Message édité par _darkalt3_ le 20-06-2006 à 12:19:17
n°1391378
Elmoricq
Modérateur
Posté le 20-06-2006 à 13:03:00  profilanswer
 

http://pix.nofrag.com/fa/70/64316e14c93d2445a28a7722ac16.jpeg


Message édité par Elmoricq le 20-06-2006 à 13:12:48
n°1391384
darklord
You're welcome
Posté le 20-06-2006 à 13:09:52  profilanswer
 

max0072 a écrit :

et en ce qui concerne mon écriture je ne suis pas en train d’écrire à quelqu’un que je respecte


 
[:rofl2] [:rofl2] [:rofl2]
[:rofl2] [:rofl2] [:rofl2]
[:rofl2] [:rofl2] [:rofl2]


---------------
Just because you feel good does not make you right
n°1391386
tholdan
Posté le 20-06-2006 à 13:11:51  profilanswer
 

Je dirais même plus : hhhhh


---------------
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
n°1391389
tholdan
Posté le 20-06-2006 à 13:13:47  profilanswer
 

Encore un qui a suivi tous les conseils de TroU du CUlz  
so

Spoiler :

http://tholdan.free.fr/4chan/1142851059604.gif



Message édité par tholdan le 20-06-2006 à 13:20:16

---------------
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
n°1391390
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-06-2006 à 13:16:46  profilanswer
 

allez hop, ban à durée indéterminée [:papatte]


Message édité par Harkonnen le 20-06-2006 à 13:18:58

---------------
J'ai un string dans l'array (Paris Hilton)
n°1391394
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-06-2006 à 13:18:30  profilanswer
 

je laisse ouvert pour que redrum261 puisse poser des questions, évitez de polluer svp :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1391397
toastbeman
L'amour c'est comme la bourse
Posté le 20-06-2006 à 13:29:52  profilanswer
 

MDR qu'est ce qu on rigole ici, j'adore le coup du salop, mais j'ai pas compris pouquoi l'avoir placé ici  ! Un fou ce gars !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme avec mon serpent

 

Sujets relatifs
Problème EasyPHP $_GET[param] sans guillemets (urgent svp)[Résolu] Problème MySQL 1&1 : plus de protection de chaine !
Problème excel... [RESOLU]Gros problème de liens dans mon site..
Probleme sur DataGridView sous VB DotNet[jsp] problème sur un useBean
Probleme validation xhtmlProblème en Access
Les iframes: problème pour le référencement!Fieldset: problème de centrage de la légende sous Opéra
Plus de sujets relatifs à : probleme avec mon serpent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR