Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi
Viewing all articles
Browse latest Browse all 83164

Ocena kodu gry snake w kosnoli

$
0
0

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. 


Viewing all articles
Browse latest Browse all 83164