Advertisement
andreisophie

Snake

Jun 3rd, 2018
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.13 KB | None | 0 0
  1. #include <queue>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <time.h>
  7. #include <windows.h>
  8. #include <algorithm>
  9. #define MAX 15
  10.  
  11. using namespace std;
  12.  
  13. short int map[MAX+2][MAX+2],dir,scor,delay,scormax,punctajp;
  14. struct coord {short int x; short int y;};
  15. queue <coord> snake;
  16. coord food,depl[4],cap,tail;
  17. char rasp;
  18. vector <pair <int,string> >punctaje;
  19. string numej;
  20.  
  21. void gotoxy(int x, int y)
  22. {
  23.     static HANDLE h = NULL;
  24.     if(!h)
  25.     h = GetStdHandle(STD_OUTPUT_HANDLE);
  26.     COORD c = { x, y };
  27.     SetConsoleCursorPosition(h,c);
  28. }
  29.  
  30. void bordare()
  31. {
  32.     for (int i=0;i<MAX+2;i++)
  33.     {
  34.         map[0][i]=-1;
  35.         map[i][0]=-1;
  36.         map[MAX+1][i]=-1;
  37.         map[i][MAX+1]=-1;
  38.     }
  39. }
  40.  
  41. void citire_punctaje()
  42. {
  43.     ifstream f("punctaje.txt");
  44.     int poz,punctaj;
  45.     string nume;
  46.     cout<<"Introduceti un nume:";
  47.     cin>>numej;
  48.     cin.get();
  49.     while (f>>poz)
  50.     {
  51.         f>>nume>>punctaj;
  52.         if (nume!=numej)
  53.             punctaje.push_back(make_pair(punctaj,nume));
  54.         else
  55.             punctajp=punctaj;
  56.     }
  57.     scormax=0;
  58.     f.close();
  59. }
  60.  
  61. void scriere_punctaje()
  62. {
  63.     int poz=1;
  64.     ofstream g("punctaje.txt");
  65.     punctaje.push_back(make_pair(max(scormax,punctajp),numej));
  66.     sort (punctaje.begin(),punctaje.end());
  67.     for (int i=punctaje.size()-1;i>=0.;i--)
  68.         g<<poz++<<' '<<punctaje[i].second<<' '<<punctaje[i].first<<'\n';
  69. }
  70.  
  71. void afisare_cadru()
  72. {
  73.     int i,j;
  74.     system ("cls");
  75.     gotoxy(0,0);
  76.     cout<<(char)201;
  77.     for (i=0;i<MAX;i++)
  78.         cout<<(char)205;
  79.     cout<<(char)187<<'\n';
  80.     for (i=0;i<MAX;i++)
  81.     {
  82.         cout<<(char)186;
  83.         for (j=0;j<MAX;j++)
  84.             cout<<' ';
  85.         cout<<(char)186<<'\n';
  86.     }
  87.     cout<<(char)200;
  88.     for (i=0;i<MAX;i++)
  89.         cout<<(char)205;
  90.     cout<<(char)188;
  91. }
  92.  
  93. void genfood()
  94. {
  95.     food.x=rand()%MAX+1;
  96.     food.y=rand()%MAX+1;
  97.     while (map[food.x][food.y]==-1)
  98.     {
  99.         food.x=rand()%MAX+1;
  100.         food.y=rand()%MAX+1;
  101.     }
  102.     map[food.x][food.y]=1;
  103.     gotoxy(food.x,food.y);
  104.     cout<<(char)254;
  105. }
  106.  
  107. void dificultate()
  108. {
  109.     cout<<"Alegeti dificultatea(U/M/G):";
  110.     cin>>rasp;
  111.     cin.get();
  112.     if (rasp=='U' || rasp=='u')
  113.             delay=25;
  114.         else
  115.             if (rasp=='m' || rasp=='M')
  116.                 delay=20;
  117.             else
  118.                 if (rasp=='G' || rasp=='g')
  119.                     delay=15;
  120.                 else
  121.                     cout<<"Introduceti o valoare valida"<<'\n';
  122.     while (rasp!='U' && rasp!='u' && rasp!='M' && rasp!='m' && rasp!='g' && rasp!='G')
  123.     {
  124.         cin>>rasp;
  125.         cin.get();
  126.         if (rasp=='U' || rasp=='u')
  127.             delay=25;
  128.         else
  129.             if (rasp=='m' || rasp=='M')
  130.                 delay=20;
  131.             else
  132.                 if (rasp=='G' || rasp=='g')
  133.                     delay=15;
  134.                 else
  135.                     cout<<"Introduceti o valoare valida"<<'\n';
  136.  
  137.     }
  138. }
  139.  
  140. void initializare()
  141. {
  142.     system ("cls");
  143.     for (int i=0;i<MAX+2;i++)
  144.         for (int j=0;j<MAX+2;j++)
  145.         map[i][j]=0;
  146.     dificultate();
  147.     while (snake.empty()==false)
  148.         snake.pop();
  149.     bordare();
  150.     srand(time(NULL));
  151.     depl[0].x=0;
  152.     depl[0].y=1;
  153.     depl[1].x=1;
  154.     depl[1].y=0;
  155.     depl[2].x=0;
  156.     depl[2].y=-1;
  157.     depl[3].x=-1;
  158.     depl[3].y=0;
  159.     cap.x=2;
  160.     cap.y=2;
  161.     snake.push(cap);
  162.     map[cap.x][cap.y]=-1;
  163.     afisare_cadru();
  164.     gotoxy(cap.x,cap.y);
  165.     cout<<(char)219;
  166.     dir=1;
  167.     genfood();
  168.     gotoxy(MAX+3,0);
  169.     scor=0;
  170.     cout<<"Scor:"<<scor;
  171. }
  172.  
  173. void miscare()
  174. {
  175.     cap.x+=depl[dir].x;
  176.     cap.y+=depl[dir].y;
  177. }
  178.  
  179. int main()
  180. {
  181.     bool ok,joc=true;
  182.     citire_punctaje();
  183.     while (joc)
  184.     {
  185.         initializare();
  186.         while (true)
  187.         {
  188.             miscare();
  189.             if (map[cap.x][cap.y]==-1)
  190.                 break;
  191.             else
  192.                 if (map[cap.x][cap.y]==1)
  193.                 {
  194.                     snake.push(cap);
  195.                     map[cap.x][cap.y]=-1;
  196.                     gotoxy(cap.x,cap.y);
  197.                     cout<<(char)219;
  198.                     scor++;
  199.                     gotoxy(MAX+8,0);
  200.                     cout<<scor;
  201.                     genfood();
  202.                 }
  203.                 else
  204.                 {
  205.                     tail=snake.front();
  206.                     map[tail.x][tail.y]=0;
  207.                     gotoxy(tail.x,tail.y);
  208.                     cout<<' ';
  209.                     snake.pop();
  210.                     snake.push(cap);
  211.                     map[cap.x][cap.y]=-1;
  212.                     gotoxy(cap.x,cap.y);
  213.                     cout<<(char)219;
  214.                 }
  215.                 gotoxy(MAX+3,1);
  216.                 ok=true;
  217.                 for (int i=0;i<10;i++)
  218.                 {
  219.                     if (GetAsyncKeyState(VK_DOWN) && (dir!=2 || snake.size()==1) && ok)
  220.                         dir=0,ok=false;
  221.                     if (GetAsyncKeyState(VK_RIGHT) && (dir!=3 || snake.size()==1) && ok)
  222.                         dir=1,ok=false;
  223.                     if (GetAsyncKeyState(VK_UP) && (dir!=0 || snake.size()==1) && ok)
  224.                         dir=2,ok=false;
  225.                     if (GetAsyncKeyState(VK_LEFT) && (dir!=1 || snake.size()==1) && ok)
  226.                         dir=3,ok=false;
  227.                     Sleep(delay);
  228.                 }
  229.         }
  230.         system("cls");
  231.         cout<<"Scor:"<<scor<<'\n';
  232.         cout<<"Jucati din nou?(D/N)"<<'\n';
  233.         cin>>rasp;
  234.         cin.get();
  235.         if (rasp=='N' || rasp=='n')
  236.             joc=false;
  237.         else
  238.             if (rasp!='D' && rasp!='d')
  239.                 cout<<"Introduceti o valoare valida"<<'\n';
  240.         while (rasp!='D' && rasp!='d' && rasp!='N' && rasp!='n')
  241.         {
  242.             cin>>rasp;
  243.             cin.get();
  244.             if (rasp=='N' || rasp=='n')
  245.                 joc=false;
  246.             else
  247.                 if (rasp!='D' && rasp!='d')
  248.                     cout<<"Introduceti o valoare valida"<<'\n';
  249.         }
  250.         if (scor>scormax)
  251.             scormax=scor;
  252.     }
  253.     scriere_punctaje();
  254.     return 0;
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement