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

  FORUM HardWare.fr
  Programmation
  C++

  Le jeu du serpent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Le jeu du serpent

n°1996654
patton1942
Posté le 28-05-2010 à 09:05:27  profilanswer
 

Bonjour à tous,
 
Je suis débutant en C++ et je dois actuellement réaliser le jeu du serpent.
 
J'ai trouvé ceci sur internet :
 

Code :
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <cstdlib>
  4. #include <ctime>
  5. #include <windows.h>
  6. using namespace std;
  7. void gotoxy(int x, int y)
  8. {
  9.          COORD krd;
  10.          krd.X = x;
  11.          krd.Y = y;
  12.          SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),krd);
  13. }
  14. struct segment
  15. {
  16.        int x;
  17.        int y;
  18. }wall[240],food;
  19. int main()
  20. {
  21.     char press = ' ',direct = 77,counter = 75;
  22.     struct segment snake[500];
  23.     int touch = 0,isTrue = 0,wLong = 10,post = 1,score = 0,snBody = 2;
  24.     srand(time(0));
  25.     for(int i = 0; i < 10; i++)
  26.     {
  27.             wall[i].y = 1;      // fixe mur sur hauteur
  28.             wall[i].x = i+ 1;
  29.     }
  30.     for (int i = 0; i < snBody; i++)
  31.     {
  32.         snake[i].x = 40+i;
  33.         snake[i].y = 12;
  34.     }
  35.     system("cls" );
  36.    
  37.     do
  38.     {   
  39.     for(int i = 0; i < 240; i++)
  40.     {
  41.             touch = 0;
  42.             if((i % 40 == 0 && i != 0)|| touch == 1)
  43.             {
  44.                   if(touch != 1)
  45.                   {
  46.                            gotoxy(food.x, food.y);cout << " ";
  47.                   }
  48.                   do
  49.                   {
  50.                            food.x = (rand() % 77)+ 2;
  51.                            food.y = (rand() % 21)+ 2;
  52.                            for (int j = 0;j < wLong; j++)
  53.                                if (snake[j].x == food.x && snake[j].y == food.y)
  54.                                {
  55.                                   isTrue = 1;
  56.                                   touch = 1;
  57.                                }
  58.                   }
  59.                   while(isTrue == 1 && touch == 1);
  60.                   isTrue = 0;
  61.                   gotoxy(food.x, food.y);cout << "G";
  62.                   touch = 0;
  63.             }           
  64.             for(int j = 0; j < snBody; j++)
  65.             {
  66.                     gotoxy(snake[j].x, snake[j].y); cout << "A";
  67.             }
  68.             for(int j = 0; j < wLong; j++)
  69.             {
  70.                     gotoxy(wall[j].x, wall[j].y); cout << "O";
  71.             }
  72.             if (snake[snBody-1].x == food.x && snake[snBody-1].y == food.y) {score += 1; snBody++;}
  73.             for(int j = 0; j < wLong; j++)
  74.                     for (int k = 0; k < snBody; k++)
  75.                     {
  76.                       if(wall[j].x == snake[k].x && wall[j].y == snake[k].y)
  77.                       {
  78.                                    gotoxy(30,12);cout << "Game Over (score : "<< score <<" )";
  79.                                    press = 27; cin.get();
  80.                       }
  81.                     }
  82.                     gotoxy(wall[0].x, wall[0].y); cout << " ";
  83.                     gotoxy(snake[0].x, snake[0].y); cout << " ";
  84.             if (kbhit()) press = getch();
  85.             if ((press == 72 || press == 80 || press == 77 || press == 75) && press!=counter) direct = press;
  86.             switch (direct)
  87.             {
  88.                 case 72 :
  89.                          snake[snBody].x = snake[snBody-1].x;
  90.                          snake[snBody].y = snake[snBody-1].y-1;
  91.                          counter = 80;
  92.                          break;
  93.                 case 80 :
  94.                          snake[snBody].x = snake[snBody-1].x;
  95.                          snake[snBody].y = snake[snBody-1].y+1;
  96.                          counter = 72;
  97.                          break;
  98.                 case 77 :
  99.                          snake[snBody].x = snake[snBody-1].x+1;
  100.                          snake[snBody].y = snake[snBody-1].y;
  101.                          counter = 75;
  102.                          break;
  103.                 case 75:
  104.                          snake[snBody].x = snake[snBody-1].x-1;
  105.                          snake[snBody].y = snake[snBody-1].y;
  106.                          counter = 77;
  107.                          break;
  108.             }
  109.             if(press == 27) break; // si presse echap, quitte jeu
  110.             if (snake[snBody].x == 79) snake[snBody].x = 1;
  111.             if (snake[snBody].x == 0) snake[snBody].x = 79;
  112.             if (snake[snBody].y == 24) snake[snBody].y = 1;
  113.             if (snake[snBody].y == 0) snake[snBody].y = 23;
  114.             if (post == 1)
  115.             {
  116.                      wall[wLong].x = wall[wLong-1].x+1;
  117.                      wall[wLong].y = wall[wLong-1].y;
  118.                      if (wall[wLong].x == 79) post = 2;
  119.             }
  120.             else if (post == 2)
  121.             {
  122.                      wall[wLong].x = wall[wLong-1].x;
  123.                      wall[wLong].y = wall[wLong-1].y+1;
  124.                      if (wall[wLong].y == 23) post = 3;
  125.             }
  126.             else if (post == 3)
  127.             {
  128.                      wall[wLong].x = wall[wLong-1].x-1;
  129.                      wall[wLong].y = wall[wLong-1].y;
  130.                      if (wall[wLong].x == 1) post = 4;
  131.             }
  132.             else
  133.             {
  134.                 wall[wLong].x = wall[wLong-1].x;
  135.                 wall[wLong].y = wall[wLong-1].y-1;
  136.                 if (wall[wLong].y == 1) post = 1;
  137.             }
  138.             for (int j = 0; j < wLong; j++)wall[j] = wall[j+1];
  139.             for (int j = 0; j < snBody; j++)snake[j] = snake[j+1];
  140.             Sleep(100);
  141.     }
  142.     wLong++;
  143.     }while(press != 27);
  144.    
  145.     return 0;
  146. }


 
J'ai plusieurs questions à poser :  
1) Quelqu'un peut-il me commenter en gros les lignes de code ?
2) Comment enlève t-on le gros serpent qui fait le tour de la fenêtre ?
3) Comment régler la taille du jeu (la fenêtre dans laquelle le serpent se déplace) ?
4) Comment modifier les commandes de jeu (z pour avancer, q pour aller à gauche, s pour aller à droite, w pour  aller en bas) ?
5) Comment affiche t-on le score en haut de la fenêtre de jeu ?
6) Comment faire pour lorsque le serpent heurte les parois il meurt ?
7) Comment faire pour intégrer un 2ème joueur avec pour commande de déplacement (p pour avancer, l pour aller à gauche, m pour aller à droite, : pour aller en bas) ?
 
Merci à l'avance à ceux qui rependront à mon message

mood
Publicité
Posté le 28-05-2010 à 09:05:27  profilanswer
 

n°1996660
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-05-2010 à 09:14:52  profilanswer
 

Si on t'a demandé de faire ça par toi même, c'est pas pour que tu ailles repomper un source sur Internet :sarcastic:
Comment tu fais pour apprendre, si tu te contentes de recopier ? Et je te parle pas de l'autorisation de l'auteur pour utiliser son programme, etc...
Bref, au boulot !


---------------
J'ai un string dans l'array (Paris Hilton)
n°1996664
patton1942
Posté le 28-05-2010 à 09:20:27  profilanswer
 

Merci pour cette réponse intelligente

n°1996668
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-05-2010 à 09:39:53  profilanswer
 

patton1942 a écrit :


J'ai plusieurs questions à poser :  
1) Quelqu'un peut-il me commenter en gros les lignes de code ?
pas besoin, ça se lit tout seul
2) Comment enlève t-on le gros serpent qui fait le tour de la fenêtre ?
en supprimant tout code relatif au tableau snake[]
3) Comment régler la taille du jeu (la fenêtre dans laquelle le serpent se déplace) ?
en jouant avec le tableau wall[]
4) Comment modifier les commandes de jeu (z pour avancer, q pour aller à gauche, s pour aller à droite, w pour  aller en bas) ?
en testant les codes ASCII des touches que tu cites dans la variable "press" (cf ligne 209)
5) Comment affiche t-on le score en haut de la fenêtre de jeu ?
en l'imprimant à partir des coordonnées (0,0)
6) Comment faire pour lorsque le serpent heurte les parois il meurt ?
en plaçant un booléen à "true" lorsque les coordonnées du serpent sont identiques à celles du mur et en codant de telle sorte que le jeu se termine si ledit booléen est à "true"
7) Comment faire pour intégrer un 2ème joueur avec pour commande de déplacement (p pour avancer, l pour aller à gauche, m pour aller à droite, : pour aller en bas) ?
en créant un tableau de joueurs et en testant les touches (cf réponse 4)


Cette réponse te convient elle davantage ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1996673
el_barbone
too old for this shit ...
Posté le 28-05-2010 à 09:42:54  profilanswer
 

IWH


---------------
En théorie, la théorie et la pratique sont identiques, en pratique, non.
n°1996674
R3g
fonctionnaire certifié ITIL
Posté le 28-05-2010 à 09:44:14  profilanswer
 

Par contre c'est pas du C++, c'est du C :o

 

edit : ah non au temps pour moi y'a des cout [:petrus75]


Message édité par R3g le 28-05-2010 à 09:48:13

---------------
Au royaume des sourds, les borgnes sont sourds.
n°1996675
leo++
Chef de file indienne
Posté le 28-05-2010 à 09:47:58  profilanswer
 

Il utilise iostream, c'est du C++. C'est juste très mal codé :o

n°1996676
skeye
Posté le 28-05-2010 à 09:49:02  profilanswer
 

patton1942 a écrit :


Je suis débutant en C++ et je dois actuellement réaliser le jeu du serpent.
 
J'ai trouvé ceci sur internet :


 
Mauvaise pioche.


---------------
Can't buy what I want because it's free -
n°1996681
Mr Mala
Posté le 28-05-2010 à 10:02:32  profilanswer
 

Tu es obligé de faire ça en C++ ? ... Parce qu'en JAVA, ça serait beaucoup plus facile et plus rapide ! :o

n°1996682
leo++
Chef de file indienne
Posté le 28-05-2010 à 10:06:11  profilanswer
 

Méwééé [:dawak]
 
Déja qu'il comprend rien à du code super basique, je vois pas l'intérêt pour lui de le faire en java :o

mood
Publicité
Posté le 28-05-2010 à 10:06:11  profilanswer
 

n°1996684
kadreg
profil: Utilisateur
Posté le 28-05-2010 à 10:07:16  profilanswer
 

il y a des trucs sales :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1996685
leo++
Chef de file indienne
Posté le 28-05-2010 à 10:09:56  profilanswer
 

Code :
  1. isTrue = 0;


 
 [:coussin_magique]

n°1996687
Elmoricq
Modérateur
Posté le 28-05-2010 à 10:15:04  profilanswer
 

Bonjour,
 
J'essaie de compiler ton programme pour t'aider, mais mon compilateur ne trouve pas les sources de "conio.h". Tu peux nous les donner pour qu'on puisse regarder ce que fait le programme ?

n°1996691
R3g
fonctionnaire certifié ITIL
Posté le 28-05-2010 à 10:31:48  profilanswer
 

leo++ a écrit :

Méwééé [:dawak]
 
Déja qu'il comprend rien à du code super basique, je vois pas l'intérêt pour lui de le faire en java :o


Mais justement, JAVA c'est beaucoup plus simple, ça permet au développeur d'être plus productif, et en plus ça marche sur toutes les plateformes :o


---------------
Au royaume des sourds, les borgnes sont sourds.
n°1996692
Mr Mala
Posté le 28-05-2010 à 10:32:54  profilanswer
 

R3g a écrit :


Mais justement, JAVA c'est beaucoup plus simple, ça permet au développeur d'être plus productif, et en plus ça marche sur toutes les plateformes :o


 
Voilà exactement ! ... je ne voulais pas répondre tellement c'était obvious ! :o

n°1996695
theredled
● REC
Posté le 28-05-2010 à 10:35:11  profilanswer
 

Hé, les gars, peut-être que patton1942 n'était pas ironique quand il disait "Merci pour cette réponse intelligente" :o

Message cité 1 fois
Message édité par theredled le 28-05-2010 à 10:36:14

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1996702
drasche
Posté le 28-05-2010 à 10:42:43  profilanswer
 

Il aurait dû dire "je suis débutante", ça aurait attiré plus de monde, je trouve [:klem3i1]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1996712
Mr Mala
Posté le 28-05-2010 à 10:57:24  profilanswer
 

theredled a écrit :

Hé, les gars, peut-être que patton1942 n'était pas ironique quand il disait "Merci pour cette réponse intelligente" :o


 
Si c'est le cas, au temps pour moi !
 
D'un autre côté, tapé comme ça, pouf! , je le ressens comme profondément sarcastique ! [:airforceone]  
Une conclusion comme "Merci, je vais investiguer dans ce sens" aurait clairement adouci la chose !

n°1996713
leo++
Chef de file indienne
Posté le 28-05-2010 à 10:59:13  profilanswer
 

Je reste convaincu qu'il lui faut une version C++ en utilisant un moteur type Ogre3D. C'est vraiment indispensable pour faire un jeu du serpent qui tienne la route. :o
 
Quand je pense au nombre d'élèves que j'ai sous-noté parce qu'ils faisaient des implémentations foireuses de ce jeu, ca me désole [:sadnoir]
 
Par contre, pour utiliser Ogre, j'ai tendance à télécharger les sources et les recompiler moi-même: non seulement je peux m'assurer qu'il n'y a pas de virus ou de backdoor, mais en plus c'est beaucoup plus rapide et ca plante moins souvent !!! [:classe++]
 
Visiblement tu programmes sous Windows, tu devrais plutot utiliser linux, en installant un dual boot sur une distribution puissante et stable, comme Ubuntu.

n°1996722
Un Program​meur
Posté le 28-05-2010 à 11:29:39  profilanswer
 

leo++ a écrit :

Visiblement tu programmes sous Windows, tu devrais plutot utiliser linux, en installant un dual boot sur une distribution puissante et stable, comme Ubuntu.


 
Dual boot?  Pourquoi?  Wine fonctionne bien pour les pgm pour windows.  Si tu as rellement des problemes tu utilises une machine virtuelle ou un emulateur.  La derniere solution ayant l'avantage de fonctionner si tu abandonnes cette m... qu'est l'archi x86.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1996725
leo++
Chef de file indienne
Posté le 28-05-2010 à 11:37:06  profilanswer
 

Un Programmeur a écrit :


 
Dual boot?  Pourquoi?  Wine fonctionne bien pour les pgm pour windows.  Si tu as rellement des problemes tu utilises une machine virtuelle ou un emulateur.  La derniere solution ayant l'avantage de fonctionner si tu abandonnes cette m... qu'est l'archi x86.


 
Bon dans ce cas là ce qui serait pas mal, ce serait d'avoir une machine virtuelle sous linux faisant tourner qEmu pour simuler une architecture Arm7. C'est ce qui se fait de mieux en ce moment et c'est d'une simplicité enfantine à programmer en assembleur.
 
Sinon, le top reste de faire tourner le jeu en hard-codé sur un FPGA. Xilinx propose une suite assez légère pour programmer en VHDL et simuler le code. C'est vraiment un langage efficace: il associe l'expressivité du C avec la souplesse du PHP. Un duo gagnant en somme. Il y a même possibilité d'utiliser la console de l'IDE !!!  [:zcoold]

n°1996729
drasche
Posté le 28-05-2010 à 11:52:13  profilanswer
 

Moi je me rappelle d'un jeu du serpent programmé sur Atari 800XL [:klem3i1]
 
Et ptet même que si je cherche bien dans mes affaires, je le retrouverais :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1996732
Un Program​meur
Posté le 28-05-2010 à 12:08:03  profilanswer
 

leo++ a écrit :

le top reste de faire tourner le jeu en hard-codé sur un FPGA


 
FPGA, c'est bon pour le proto.  En production, j'admets les standard cells a la rigueur -- a la rigueur hein, ... car la qualite des libs de standard cells de nos jours, quand on les regarde, on a envie de les refaire :-( --, mais tant que tu ne dessines pas tous tes transistors toi-meme, t'es loin du top.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1996750
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-05-2010 à 13:40:27  profilanswer
 

Un Programmeur a écrit :


 
FPGA, c'est bon pour le proto.  En production, j'admets les standard cells a la rigueur -- a la rigueur hein, ... car la qualite des libs de standard cells de nos jours, quand on les regarde, on a envie de les refaire :-( --, mais tant que tu ne dessines pas tous tes transistors toi-meme, t'es loin du top.


putain j'ai trouvé mon maitre [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1996759
R3g
fonctionnaire certifié ITIL
Posté le 28-05-2010 à 13:51:02  profilanswer
 

pic related
http://imgs.xkcd.com/comics/real_programmers.png


Message édité par R3g le 28-05-2010 à 13:51:19

---------------
Au royaume des sourds, les borgnes sont sourds.
n°1996884
gilou
Modérateur
Modosaurus Rex
Posté le 28-05-2010 à 16:35:53  profilanswer
 

C'est tellement ça en plus! http://hfr.toyonos.info/generateurs/nazi/?t=emacs
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
mood
Publicité
Posté le   profilanswer
 


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

  Le jeu du serpent

 

Sujets relatifs
probleme avec mon serpentAvez-vous un Serpent (Nibbles) en Java ?
Cherche la source du jeu du serpent en C 
Plus de sujets relatifs à : Le jeu du serpent


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)