Le jeu du serpent

Le jeu du serpent - C++ - Programmation

Marsh Posté le 28-05-2010 à 09:05:27    

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

Reply

Marsh Posté le 28-05-2010 à 09:05:27   

Reply

Marsh Posté le 28-05-2010 à 09:14:52    

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)
Reply

Marsh Posté le 28-05-2010 à 09:20:27    

Merci pour cette réponse intelligente

Reply

Marsh Posté le 28-05-2010 à 09:39:53    

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)
Reply

Marsh Posté le 28-05-2010 à 09:42:54    

IWH


---------------
En théorie, la théorie et la pratique sont identiques, en pratique, non.
Reply

Marsh Posté le 28-05-2010 à 09:44:14    

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

Marsh Posté le 28-05-2010 à 09:47:58    

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

Reply

Marsh Posté le 28-05-2010 à 09:49:02    

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

Marsh Posté le 28-05-2010 à 10:02:32    

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

Reply

Marsh Posté le 28-05-2010 à 10:06:11    

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

Reply

Marsh Posté le 28-05-2010 à 10:06:11   

Reply

Marsh Posté le 28-05-2010 à 10:07:16    

il y a des trucs sales :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 28-05-2010 à 10:09:56    

Code :
  1. isTrue = 0;


 
 [:coussin_magique]

Reply

Marsh Posté le 28-05-2010 à 10:15:04    

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 ?

Reply

Marsh Posté le 28-05-2010 à 10:31:48    

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

Marsh Posté le 28-05-2010 à 10:32:54    

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

Reply

Marsh Posté le 28-05-2010 à 10:35:11    

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
Reply

Marsh Posté le 28-05-2010 à 10:42:43    

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)
Reply

Marsh Posté le 28-05-2010 à 10:57:24    

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 !

Reply

Marsh Posté le 28-05-2010 à 10:59:13    

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.

Reply

Marsh Posté le 28-05-2010 à 11:29:39    

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)
Reply

Marsh Posté le 28-05-2010 à 11:37:06    

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]

Reply

Marsh Posté le 28-05-2010 à 11:52:13    

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)
Reply

Marsh Posté le 28-05-2010 à 12:08:03    

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)
Reply

Marsh Posté le 28-05-2010 à 13:40:27    

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)
Reply

Marsh Posté le 28-05-2010 à 13:51:02    

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

Marsh Posté le 28-05-2010 à 16:35:53    

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


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed