Witam, chciałbym aby ktoś z większym doświadczeniem ode mnie ocenił kod gry, którą napisałem. Prosiłbym również o rady, w miarę możliwości, jak się poprawić w danym zagadnieniu. Z góry dziękuje za komentarze.
KOD GRY
#include <iostream> #include <windows.h> #include <conio.h> #include <ctime> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ char tab[50][15]; int n=3; //dlugość węża int m=5; //ilość jedzenia struct pkt { int x,y; }; bool polozenia(pkt point[],int i,int j, int ilosc) //sprawdzanie położenia węża i "jedzenia" w tabeli { bool t=false; for(int a=0;a<ilosc;a++) { if(i==point[a].y&&j==point[a].x) { t=true; break; } } return t; } void plansza(pkt point[], pkt jedzenie[]) //wyświetlanie planszy { cout<<"----------------------------------------------------"<<endl; for(int i=0;i<15;i++) { cout<<"|"; for(int j=0;j<50;j++) { if(polozenia(jedzenie,i,j,m)==true) tab[j][i]=231; if(polozenia(point,i,j,n)==true) { if(point[0].x==j&&point[0].y==i) tab[j][i]=254; else tab[j][i]=219; } cout<<tab[j][i]; } cout<<"|"<<endl; } cout<<"----------------------------------------------------"<<endl; } void czysc() //czyszczenie planszy { system("CLS"); for(int i=0;i<15;i++) { for(int j=0;j<50;j++) tab[j][i]=' '; } } pkt ruch(pkt point, char znak) // ruch glowa węża { if(znak==-32) { znak=getch(); switch(znak) { case 72: { if(point.y>0) point.y=point.y-1; break; } case 75: { if(point.x>0) point.x=point.x-1; break; } case 77: { if(point.x<100) point.x=point.x+1; break; } case 80: { if(point.y<30) point.y=point.y+1; break; } default: return point; break; } } return point; } void uzup(pkt point[], int i) //ustawianie węża na początku gry { point[i].x=point[i-1].x-1; point[i].y=point[i-1].y; } void uzup1(pkt point[],pkt point1[], int i) //uzupełnienie tabeli ze współrzędnymi w poprzednim ruchu { point[i].x=point1[i-1].x; point[i].y=point1[i-1].y; } void swap(pkt point[],pkt point1[],int i) //funkcja pomocznica { point1[i].x=point[i].x; point1[i].y=point[i].y; } void pokaz(pkt point[],pkt point1[]) //funkcja pomocnicza { for(int i=0;i<n;i++) { cout<<point[i].x<<""<<point[i].y<<endl; cout<<point1[i].x<<""<<point1[i].y<<endl<<endl; } } void jedz(pkt jedzenie[], int a) //losowanie { jedzenie[a].x=(rand() % 48 ) + 1; jedzenie[a].y=(rand() % 13 ) + 1; } bool dotyk(pkt point,pkt point1[]) //sprawdzenie czy waż nie zjada się lub nie dotyka ściany { bool t=false; for(int i=1;i<n;i++) { if(point.x==point1[i].x&&point.y==point1[i].y) // waz { t=true; break; } } if(t==false) //sciany { if(point.x<0||point.x>49||point.y<0||point.y>14) t=true; } return t; } bool czyzjadl(pkt point, pkt jedzenie[]) //sprawdzanie czy wąż "zjadł" { bool t=false; for(int i=0;i<m;i++) { if(point.x==jedzenie[i].x&&point.y==jedzenie[i].y) { t=true; } } return t; } void usunjedz(pkt point,pkt jedztab[], pkt point1[]) //usuwanie zjedzonego jedzenia { int pomx,pomy; for(int i=0;i<m;i++) { if(point.x==jedztab[i].x&&point.y==jedztab[i].y) { do { jedztab[i].x=(rand() % 48 ) + 1; jedztab[i].y=(rand() % 13 ) + 1; }while(polozenia(point1,jedztab[i].x,jedztab[i].y,n)==true); } } } void dod(pkt point[], pkt pointpom[], pkt point1[]) //przedłużanie węża { int pomx=2*point[n-2].x-point[n-3].x,pomy=2*point[n-2].y-point[n-3].y; pointpom[n-1].x=pomx;//2*point[n-2].x-point[n-3].x; pointpom[n-1].y=pomy;//2*point[n-2].y-point[n-3].y; } pkt symuluj(pkt point[]) //symulowanie ruchu węża { pkt point1=point[0]; if(point[0].x>point[1].x) point1.x=point1.x+1; else if(point[0].x<point[1].x) point1.x=point1.x-1; else if(point[0].y>point[1].y) point1.y=point1.y+1; else if(point[0].y<point[1].y) point1.y=point1.y-1; return point1; } int main(int argc, char** argv) { srand( time( NULL ) ); char a; pkt *point; pkt *point1; point = new pkt [n]; point1 = new pkt [n]; pkt jedzenie [m]; point[0].x=5;point[0].y=1;// początkowa pozycja głowy węża for(int i=1;i<n;i++) uzup(point,i); for(int i=0;i<m;i++) jedz(jedzenie,i); plansza(point, jedzenie); while(true) { for(int i=0;i<n;i++) swap(point,point1,i); for(int i=1;i<n;i++) uzup1(point,point1,i); Sleep(25); if(kbhit()==true) { a=getch(); if(a==-32) point[0]=ruch(point[0],a); else point[0]=symuluj(point1); } else point[0]=symuluj(point1); czysc(); if(dotyk(point[0],point)) { cout<<"Przegrales"<<endl; break; } if(czyzjadl(point[0],jedzenie)==true) { n++; pkt * pointpom = new pkt[ n ]; //tabela pomocnicza przed dodaniem pkt pkt * pointpom1 = new pkt[ n ]; //tabela pomocnicza przed dodaniem pkt for(int i=0;i<n-1;i++) swap(point,pointpom,i); for(int i=0;i<n-1;i++) swap(point1,pointpom1,i); if(n>2) dod(point,pointpom,point1); pointpom1[n-1].x=0; pointpom1[n-1].y=0; delete []point; delete []point1; point = new pkt[ n ]; point1 = new pkt[ n ]; for(int i=0;i<n;i++) swap(pointpom,point,i); for(int i=0;i<n;i++) swap(pointpom1,point1,i); delete []pointpom; delete []pointpom1; usunjedz(point[0],jedzenie,point); } plansza(point,jedzenie); } Sleep(500); return 0; }
Ps. Uargumentowana krytyka mile widziana.