Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <queue>
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include <windows.h>
- #include <algorithm>
- #define MAX 15
- using namespace std;
- short int map[MAX+2][MAX+2],dir,scor,delay,scormax,punctajp;
- struct coord {short int x; short int y;};
- queue <coord> snake;
- coord food,depl[4],cap,tail;
- char rasp;
- vector <pair <int,string> >punctaje;
- string numej;
- void gotoxy(int x, int y)
- {
- static HANDLE h = NULL;
- if(!h)
- h = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD c = { x, y };
- SetConsoleCursorPosition(h,c);
- }
- void bordare()
- {
- for (int i=0;i<MAX+2;i++)
- {
- map[0][i]=-1;
- map[i][0]=-1;
- map[MAX+1][i]=-1;
- map[i][MAX+1]=-1;
- }
- }
- void citire_punctaje()
- {
- ifstream f("punctaje.txt");
- int poz,punctaj;
- string nume;
- cout<<"Introduceti un nume:";
- cin>>numej;
- cin.get();
- while (f>>poz)
- {
- f>>nume>>punctaj;
- if (nume!=numej)
- punctaje.push_back(make_pair(punctaj,nume));
- else
- punctajp=punctaj;
- }
- scormax=0;
- f.close();
- }
- void scriere_punctaje()
- {
- int poz=1;
- ofstream g("punctaje.txt");
- punctaje.push_back(make_pair(max(scormax,punctajp),numej));
- sort (punctaje.begin(),punctaje.end());
- for (int i=punctaje.size()-1;i>=0.;i--)
- g<<poz++<<' '<<punctaje[i].second<<' '<<punctaje[i].first<<'\n';
- }
- void afisare_cadru()
- {
- int i,j;
- system ("cls");
- gotoxy(0,0);
- cout<<(char)201;
- for (i=0;i<MAX;i++)
- cout<<(char)205;
- cout<<(char)187<<'\n';
- for (i=0;i<MAX;i++)
- {
- cout<<(char)186;
- for (j=0;j<MAX;j++)
- cout<<' ';
- cout<<(char)186<<'\n';
- }
- cout<<(char)200;
- for (i=0;i<MAX;i++)
- cout<<(char)205;
- cout<<(char)188;
- }
- void genfood()
- {
- food.x=rand()%MAX+1;
- food.y=rand()%MAX+1;
- while (map[food.x][food.y]==-1)
- {
- food.x=rand()%MAX+1;
- food.y=rand()%MAX+1;
- }
- map[food.x][food.y]=1;
- gotoxy(food.x,food.y);
- cout<<(char)254;
- }
- void dificultate()
- {
- cout<<"Alegeti dificultatea(U/M/G):";
- cin>>rasp;
- cin.get();
- if (rasp=='U' || rasp=='u')
- delay=25;
- else
- if (rasp=='m' || rasp=='M')
- delay=20;
- else
- if (rasp=='G' || rasp=='g')
- delay=15;
- else
- cout<<"Introduceti o valoare valida"<<'\n';
- while (rasp!='U' && rasp!='u' && rasp!='M' && rasp!='m' && rasp!='g' && rasp!='G')
- {
- cin>>rasp;
- cin.get();
- if (rasp=='U' || rasp=='u')
- delay=25;
- else
- if (rasp=='m' || rasp=='M')
- delay=20;
- else
- if (rasp=='G' || rasp=='g')
- delay=15;
- else
- cout<<"Introduceti o valoare valida"<<'\n';
- }
- }
- void initializare()
- {
- system ("cls");
- for (int i=0;i<MAX+2;i++)
- for (int j=0;j<MAX+2;j++)
- map[i][j]=0;
- dificultate();
- while (snake.empty()==false)
- snake.pop();
- bordare();
- srand(time(NULL));
- depl[0].x=0;
- depl[0].y=1;
- depl[1].x=1;
- depl[1].y=0;
- depl[2].x=0;
- depl[2].y=-1;
- depl[3].x=-1;
- depl[3].y=0;
- cap.x=2;
- cap.y=2;
- snake.push(cap);
- map[cap.x][cap.y]=-1;
- afisare_cadru();
- gotoxy(cap.x,cap.y);
- cout<<(char)219;
- dir=1;
- genfood();
- gotoxy(MAX+3,0);
- scor=0;
- cout<<"Scor:"<<scor;
- }
- void miscare()
- {
- cap.x+=depl[dir].x;
- cap.y+=depl[dir].y;
- }
- int main()
- {
- bool ok,joc=true;
- citire_punctaje();
- while (joc)
- {
- initializare();
- while (true)
- {
- miscare();
- if (map[cap.x][cap.y]==-1)
- break;
- else
- if (map[cap.x][cap.y]==1)
- {
- snake.push(cap);
- map[cap.x][cap.y]=-1;
- gotoxy(cap.x,cap.y);
- cout<<(char)219;
- scor++;
- gotoxy(MAX+8,0);
- cout<<scor;
- genfood();
- }
- else
- {
- tail=snake.front();
- map[tail.x][tail.y]=0;
- gotoxy(tail.x,tail.y);
- cout<<' ';
- snake.pop();
- snake.push(cap);
- map[cap.x][cap.y]=-1;
- gotoxy(cap.x,cap.y);
- cout<<(char)219;
- }
- gotoxy(MAX+3,1);
- ok=true;
- for (int i=0;i<10;i++)
- {
- if (GetAsyncKeyState(VK_DOWN) && (dir!=2 || snake.size()==1) && ok)
- dir=0,ok=false;
- if (GetAsyncKeyState(VK_RIGHT) && (dir!=3 || snake.size()==1) && ok)
- dir=1,ok=false;
- if (GetAsyncKeyState(VK_UP) && (dir!=0 || snake.size()==1) && ok)
- dir=2,ok=false;
- if (GetAsyncKeyState(VK_LEFT) && (dir!=1 || snake.size()==1) && ok)
- dir=3,ok=false;
- Sleep(delay);
- }
- }
- system("cls");
- cout<<"Scor:"<<scor<<'\n';
- cout<<"Jucati din nou?(D/N)"<<'\n';
- cin>>rasp;
- cin.get();
- if (rasp=='N' || rasp=='n')
- joc=false;
- else
- if (rasp!='D' && rasp!='d')
- cout<<"Introduceti o valoare valida"<<'\n';
- while (rasp!='D' && rasp!='d' && rasp!='N' && rasp!='n')
- {
- cin>>rasp;
- cin.get();
- if (rasp=='N' || rasp=='n')
- joc=false;
- else
- if (rasp!='D' && rasp!='d')
- cout<<"Introduceti o valoare valida"<<'\n';
- }
- if (scor>scormax)
- scormax=scor;
- }
- scriere_punctaje();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement