Jak maina rozbić na funkcje?

0

Dobry wieczór, zwracam się do Was z problemem, z którym nie mogę sobie poradzić- otóż napisałem "projekt" na studia, mowa tu o programie udającym snake'a. Po zaprezentowaniu go prowadzącemu ćwiczenia usłyszałem, iż powinienem rozbić maina na funkcje aby main był jak najkrótszy. Jako że bardzo mi zależy, aby moja praca została wysoko oceniona, podjąłem się tego zadania. Problem w tym, że nie mam kompletnie pomysłu jak sobie z tym poradzić. Jestem początkujący w tych sprawach i przy próbie rozbicia tego na funkcje co chwile wywala mi jakiś błąd. Gdyby ktoś byłby w stanie wskazać mi drogę do rozwiązania, jakąkolwiek wskazówkę, byłbym bardzo wdzięczny. Pozdrawiam cieplutko :)

PS zamieszczam kod, aby było wiadomo o co chodzi :)

 // Snake podejscie pierwsze 21.11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <cstdio>

using namespace std;

void idzdoxy(int x, int y)
{
	HANDLE hCon;
	COORD dwPos;

	dwPos.X = x;
	dwPos.Y = y;

	hCon = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hCon, dwPos);
}

char *tr(char *str)																												//funkcja na polskie znaki
{
	static char buff[256];
	char cp[] = "\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
	if (strlen(str) >= sizeof(buff)) return str;
	char *bf = buff;
	while (*str)
	{
		char *pos = strchr(cp + 18, *str);
		*(bf++) = pos ? *(pos - 18) : *str;
		++str;
	}
	*bf = 0;
	return buff;
}

void poprawnosc(int *x, int z1, int z2)
{
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	while (*x < z1 || *x > z2)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Niestety Twoja liczba nie znajduje się w przedziale, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin >> *x;
	}
}


void poczatek(int pole[][])
{
	for (int i = 0; i < wys; i++)
	{
		for (int j = 0; j < szer; j++)
		{
			pole[j][i] = 0;																											//wypelnianie tablicy zerami
		}
	}

	do {
		Xj = rand() % szer;																											//pozycja poczatkowa jedzenia			
		Yj = rand() % wys;
	} while (pole[Xj][Yj] != 0);

	pole[Xj][Yj] = 2;

	if (wybor == 0)
	{
		Xw = rand() % szer;																												//pozycja poczatkowa dla 0		
		Yw = rand() % wys;
	}
	else
	{
		Xw = 1;
		Yw = 1;
	}
	pole[Xw][Yw] = 1;
}

int main()
{
	int szer, wys, dl = 0, speed, gracdalej;
	int gora, dol, lewo, prawo;
	char pole[50][50];
	int hX[10000]; int hY[10000]; int ruchy = 0;
	int Xw, Yw, Xj, Yj;
	int klawisz, punkty = 0, wybor;
	char zwrot = 'p';

	srand(time(NULL));
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);

	cout << "Witam w programie Snake autorstwa Daniela Kalety" << endl;																//intro
	Sleep(1000);

	cout << tr("Na początek podaj szerokość planszy, na której chcesz zagrać (od 5 do 35): ");										//szerokosc
	cin >> szer;
	while(cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> szer;
	}
	int *wszer = &szer;
	poprawnosc(wszer, 5, 35);

	cout << tr("Teraz podaj wysokość tej planszy (od 5 do 35): ");																	//wysokosc
	cin >> wys;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> wys;
	}
	int *wwys = &wys;
	poprawnosc(wwys, 5, 35);

	cout << tr("A więc zadeklarowana przez Ciebie plansza będzie miała wymiary: ") << szer << " x " << wys << endl;					//wypisanie wymiarow planszy

	cout << tr("Podaj tempo gry w jakim życzysz sobie zagrać od 1 do 50: ");
	cin >> speed;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> speed;
	}
	int *wspeed = &speed;
	poprawnosc(wspeed, 1, 50);

	cout << tr("Czy chcesz, aby uderzenie o ściane powodowało koniec gry? Wpisz 0- nie, 1-tak: ");									//czy kolizja
	cin >> wybor;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> wybor;
	}
	while (wybor <0 || wybor>1)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Niestety Twoja liczba nie znajduje się w przedziale, sprobój jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin >> wybor;
	}

	cout << "Na koniec zadeklaruj przyciski sterowania" << endl;

	cout << tr("Góra: ") << endl;
	gora = _getch();
	if (gora == 224)gora += _getch();
	if (gora == 0)gora -= _getch();

	cout << tr("Dół: ") << endl;
	dol = _getch();
	if (dol == 224)dol += _getch();
	if (dol == 0)dol -= _getch();

	cout << tr("Lewo: ") << endl;
	lewo = _getch();
	if (lewo == 224)lewo += _getch();
	if (lewo == 0)lewo -= _getch();

	cout << tr("Prawo: ") << endl;
	prawo = _getch();
	if (prawo == 224)prawo += _getch();
	if (prawo == 0)prawo -= _getch();

	Sleep(2000);
	system("cls");																													//zakonczenie procesu konfiguracji





	do
	{


		for (int i = 0; i < wys; i++)
		{
			for (int j = 0; j < szer; j++)
			{
				pole[j][i] = 0;																											//wypelnianie tablicy zerami
			}
		}

		do {
			Xj = rand() % szer;																											//pozycja poczatkowa jedzenia			
			Yj = rand() % wys;
		} while (pole[Xj][Yj] != 0);

		pole[Xj][Yj] = 2;

		if (wybor == 0)
		{
			Xw = rand() % szer;																												//pozycja poczatkowa dla 0		
			Yw = rand() % wys;
		}
		else
		{
			Xw = 1;
			Yw = 1;
		}
		pole[Xw][Yw] = 1;





		idzdoxy(0, 0);
																																		//rysowanie planszy
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		for (int i = 0; i <= szer + 1; i++)					//gorna ramka																
			cout << (char)178 << (char)178;


		for (int i = 0; i < wys; i++)
		{
			cout << endl << (char)178 << (char)178;			//prawa ramka
			for (int j = 0; j < szer; j++)
			{
				if (pole[j][i] == 0)
				{
					cout << "  ";				//wypelniacz pola
				}
				if (pole[j][i] == 1)
				{
					SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
					cout << (char)219 << (char)219;  //waz
				}

				if (pole[j][i] == 2)
				{
					SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_RED);
					cout << (char)123 << (char)125;  //jedzenie
				}
			}
			SetConsoleTextAttribute(hOut, FOREGROUND_RED);
			cout << (char)178 << (char)178;					//lewa ramka
		}

		cout << endl;

		for (int i = 0; i <= szer + 1; i++)																								//koniec rysowania planszy
			cout << (char)178 << (char)178;





		for (;;)																														//GRA !!!!
		{
			ruchy++;
			hX[ruchy] = Xw;
			hY[ruchy] = Yw;



			Sleep(1000 / (speed + (dl / 2)));																								//predkosc
			if (wybor == 1)
				punkty++;

			if (_kbhit())
			{
				klawisz = _getch();
				if (klawisz == 224)klawisz += _getch();
				if (klawisz == 0) klawisz -= _getch();

				if (klawisz == gora && zwrot != 'd') zwrot = 'g';																				//deklaracja poruszania
				if (klawisz == dol && zwrot != 'g') zwrot = 'd';
				if (klawisz == lewo && zwrot != 'p') zwrot = 'l';
				if (klawisz == prawo && zwrot != 'l') zwrot = 'p';
			}



			if (zwrot == 'l') Xw--;																											//ruch weza
			if (zwrot == 'p') Xw++;
			if (zwrot == 'g') Yw--;
			if (zwrot == 'd') Yw++;




			if (wybor == 0)
			{
				if (Xw == szer) Xw = 0;																										//brak kolizji na scianach
				if (Xw == -1) Xw = szer - 1;
				if (Yw == wys) Yw = 0;
				if (Yw == -1) Yw = wys - 1;
			}

			if (wybor == 1)																													//kolizja na scianach
			{
				{
					if (Xw == szer || Xw == -1)
						break;
					if (Yw == wys || Yw == -1)
						break;
				}
			}





			if (pole[Xw][Yw] == 1)																											//jedzenie samego siebie
			{
				break;
			}





			if (pole[Xw][Yw] == 2)																											//jedzenie jedzenia :D
			{
				punkty = punkty + (2 * speed);
				dl++;
				do {
					Xj = rand() % szer;																										//pozycja nowego jedzenia			
					Yj = rand() % wys;
				} while (pole[Xj][Yj] != 0);

				pole[Xj][Yj] = 2;
				idzdoxy(Xj * 2 + 2, Yj + 1);
				SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_RED);
				cout << (char)123 << (char)125;
				SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
			}
			else
			{
				if (ruchy > 0) pole[hX[ruchy - dl]][hY[ruchy - dl]] = 0;																	//usuwanie ogona
				idzdoxy(hX[ruchy - dl] * 2 + 2, hY[ruchy - dl] + 1);
				cout << "  ";
			}

			pole[Xw][Yw] = 1;
			idzdoxy(Xw * 2 + 2, Yw + 1);
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
			cout << (char)219 << (char)219;

			idzdoxy(0, wys + 1);
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
			cout << endl << "Punkty: " << punkty;
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);


		}

		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cout << endl << "Koniec gry, zdobyte punkty: " << punkty;
		cout << endl << tr("Czy chcesz zagraæ jeszcze raz na tych samych ustawieniach? 0- nie, 1-tak: ");
		cin >> gracdalej;
		while (gracdalej < 0 || gracdalej>1)
		{
			cout << tr("Niestety nie ma takiej opcji, sprobój jeszcze raz: ");
			cin >> gracdalej;
		}
		if (gracdalej == 1)
		{
			system("cls");
			punkty = 0;
			dl = 0;
		}


	} while (gracdalej == 1);

	cout << "Zatem do widzenia!";
	Sleep(1500);

	return 0;
}

1

Jak maina rozbić na funkcje?

Szukaj w main fragmentów kodu odpowiadających za jedną czynność.
Napisz dla tego fragmentu odpowiednią funkcję i w miejsce owego fragmentu wstaw wywołanie funkcji.
Im krótsze zrobisz funkcje, łatwiej je ogarnąć i ew. wykorzystać cyklicznie.

Np. ten fragment pojawia się więcej niż raz, więc można z niego zrobić funkcję zwracającą poprawnie wczytaną wartość.

cout << tr("Na początek podaj szerokość planszy, na której chcesz zagrać (od 5 do 35): ");                                        //szerokosc
    cin >> szer;
    while(cin.good() == false)
    {
        SetConsoleTextAttribute(hOut, FOREGROUND_RED);
        cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
        SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
        cin.clear();
        cin.ignore(1000, '\n');
        cin >> szer;
    }
    int *wszer = &szer;
    poprawnosc(wszer, 5, 35); 

Identyfikatory staraj się pisać po angielsku.

0

Ok, to faktycznie planowałem wstawić do funkcji poprawność, tak jak sprawdzanie czy liczba należy do poproszonego przedziału, tylko miałem nie lada problem z wstawieniem cin.good() do tejże funkcji w dobry sposób. Nawiązując jednak jeszcze do ogółu- poza tym sprawdzaniem, czy dane na strumieniu wejściowym są poprawne nie ma za bardzo powtarzających się części kodu, a jakbym chciał zrobić funkcję rysowania planszy czy czegokolwiek to przekazywanie argumentów itd mija się chyba z celem, bo kodu przybędzie zamiast ubyć, prawda?

1

a jakbym chciał zrobić funkcję rysowania planszy czy czegokolwiek to przekazywanie argumentów itd mija się chyba z celem, bo kodu przybędzie zamiast ubyć, prawda?

Kodu przybędzie, ale kod zyska na czytelności.
Lepiej czytać kilku wierszowe moduły, niż przedzierać się przez setki linii jednej długiej niezrozumiałej funkcji.

edit: w main() zostaw tylko ogólny szkielet programu.
A resztę podziel na funkcje: jedna funkcja - jedna funkcjonalność, stosowanie się do zasady DRY itd.

2

Nie mija się z celem. Chcemy zrobić czytelny kod, który możesz przeczytać nie wchodząc w szczegóły.

Kiedy masz klika linijek z nazwami funkcji, to przeczytasz dużo szybciej niż przechodząc przez cały bełkot czytając komentarze, co robi dany kawałek kodu.

0

O, tego typu argumenty bardzo mnie przekonują, dziękuje bardzo za wyjaśnienie i link. Po wstępnym przeglądnięciu mogę stwierdzić, że czeka mnie jutro ciekawa i pouczająca lektura :)

0

Jako, że termin mam na dziś, godzinę 23:59 to zacząłem już robić, aby mieć pewność, że zdążę. Nie przeczytałem jeszcze zawartości linku, lecę na czuja póki co. W chwili obecnej mam takie coś, kod może faktycznie zyskał na czytelności, ale gdy chce teraz napisać funkcję szkieletplanszy (nie zmieniłem jeszcze nazw na angielskie) to nie wiem jak tam te wszystkie wartości zreturnować :/ Czy moje myślenie w ogóle jest prawidłowe?

 // Snake podejscie pierwsze 21.11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <cstdio>

using namespace std;

void idzdoxy(int x, int y)
{
	HANDLE hCon;
	COORD dwPos;

	dwPos.X = x;
	dwPos.Y = y;

	hCon = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hCon, dwPos);
}

char *tr(char *str)																												//funkcja na polskie znaki
{
	static char buff[256];
	char cp[] = "\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
	if (strlen(str) >= sizeof(buff)) return str;
	char *bf = buff;
	while (*str)
	{
		char *pos = strchr(cp + 18, *str);
		*(bf++) = pos ? *(pos - 18) : *str;
		++str;
	}
	*bf = 0;
	return buff;
}

void poprawnosc(int *x, int z1, int z2)
{
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	while (*x < z1 || *x > z2)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Niestety Twoja liczba nie znajduje się w przedziale, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin >> *x;
	}
}

int szerokosc()
{
	int szer;
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
	cout << tr("Na początek podaj szerokość planszy, na której chcesz zagrać (od 5 do 35): ");										//szerokosc
	cin >> szer;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> szer;
	}
	int *wszer = &szer;
	poprawnosc(wszer, 5, 35);

	return szer;
}

int wysokosc()
{
	int wys;
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
	cout << tr("Teraz podaj wysokość tej planszy (od 5 do 35): ");																	//wysokosc
	cin >> wys;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> wys;
	}
	int *wwys = &wys;
	poprawnosc(wwys, 5, 35);
	return wys;
}

int szybkosc()
{
	int speed;
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
	cout << tr("Podaj tempo gry w jakim życzysz sobie zagrać od 1 do 50: ");
	cin >> speed;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> speed;
	}
	int *wspeed = &speed;
	poprawnosc(wspeed, 1, 50);
	return speed;
}

int kolizja()
{
	int wybor;
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
	cout << tr("Czy chcesz, aby uderzenie o ściane powodowało koniec gry? Wpisz 0- nie, 1-tak: ");									//czy kolizja
	cin >> wybor;
	while (cin.good() == false)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> wybor;
	}
	while (wybor <0 || wybor>1)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		cout << tr("Niestety Twoja liczba nie znajduje się w przedziale, sprobój jeszcze raz: ");
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cin >> wybor;
	}
	return wybor;
}

int dogory()
{
	int gora;
	cout << tr("Góra: ") << endl;
	gora = _getch();
	if (gora == 224)gora += _getch();
	if (gora == 0)gora -= _getch();
	return gora;
}

int wdol()
{
	int dol;
	cout << tr("Dół: ") << endl;
	dol = _getch();
	if (dol == 224)dol += _getch();
	if (dol == 0)dol -= _getch();
	return dol;
}

int wlewo()
{
	int lewo;
	cout << tr("Lewo: ") << endl;
	lewo = _getch();
	if (lewo == 224)lewo += _getch();
	if (lewo == 0)lewo -= _getch();
	return lewo;
}

int wprawo()
{
	int prawo;
	cout << tr("Prawo: ") << endl;
	prawo = _getch();
	if (prawo == 224)prawo += _getch();
	if (prawo == 0)prawo -= _getch();
	return prawo;
}

char szkieletplanszy(int szer, int wys)
{
	char pole[50][50];
	for (int i = 0; i < wys; i++)
	{
		for (int j = 0; j < szer; j++)
		{
			pole[j][i] = 0;																											//wypelnianie tablicy zerami
		}
	}

	do {
		Xj = rand() % szer;																											//pozycja poczatkowa jedzenia			
		Yj = rand() % wys;
	} while (pole[Xj][Yj] != 0);

	pole[Xj][Yj] = 2;

	if (wybor == 0)
	{
		Xw = rand() % szer;																												//pozycja poczatkowa dla 0		
		Yw = rand() % wys;
	}
	else
	{
		Xw = 1;
		Yw = 1;
	}
	pole[Xw][Yw] = 1;

	return pole[50][50];
}

int main()
{
	int szer, wys, dl = 0, speed, gracdalej;
	int gora, dol, lewo, prawo;
	char pole[50][50];
	int hX[10000]; int hY[10000]; int ruchy = 0;
	int Xw, Yw, Xj, Yj;
	int klawisz, punkty = 0, wybor;
	char zwrot = 'p';

	srand(time(NULL));
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);

	cout << "Witam w programie Snake autorstwa Daniela Kalety" << endl;																//intro
	Sleep(1000);
	szer= szerokosc();
	wys = wysokosc();
	cout << tr("A więc zadeklarowana przez Ciebie plansza będzie miała wymiary: ") << szer << " x " << wys << endl;					//wypisanie wymiarow planszy
	speed = szybkosc();
	wybor = kolizja();

	cout << "Na koniec zadeklaruj przyciski sterowania" << endl;

	gora = dogory();
	dol = wdol();
	lewo = wlewo();
	prawo = wprawo();

	Sleep(2000);
	system("cls");																													//zakonczenie procesu konfiguracji


	do
	{


		/*for (int i = 0; i < wys; i++)
		{
			for (int j = 0; j < szer; j++)
			{
				pole[j][i] = 0;																											//wypelnianie tablicy zerami
			}
		}

		do {
			Xj = rand() % szer;																											//pozycja poczatkowa jedzenia			
			Yj = rand() % wys;
		} while (pole[Xj][Yj] != 0);

		pole[Xj][Yj] = 2;

		if (wybor == 0)
		{
			Xw = rand() % szer;																												//pozycja poczatkowa dla 0		
			Yw = rand() % wys;
		}
		else
		{
			Xw = 1;
			Yw = 1;
		}
		pole[Xw][Yw] = 1;*/



		for (int i=0; )

		idzdoxy(0, 0);
																																		//rysowanie planszy
		SetConsoleTextAttribute(hOut, FOREGROUND_RED);
		for (int i = 0; i <= szer + 1; i++)					//gorna ramka																
			cout << (char)178 << (char)178;


		for (int i = 0; i < wys; i++)
		{
			cout << endl << (char)178 << (char)178;			//prawa ramka
			for (int j = 0; j < szer; j++)
			{
				if (pole[j][i] == 0)
				{
					cout << "  ";				//wypelniacz pola
				}
				if (pole[j][i] == 1)
				{
					SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
					cout << (char)219 << (char)219;  //waz
				}

				if (pole[j][i] == 2)
				{
					SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_RED);
					cout << (char)123 << (char)125;  //jedzenie
				}
			}
			SetConsoleTextAttribute(hOut, FOREGROUND_RED);
			cout << (char)178 << (char)178;					//lewa ramka
		}

		cout << endl;

		for (int i = 0; i <= szer + 1; i++)																								//koniec rysowania planszy
			cout << (char)178 << (char)178;





		for (;;)																														//GRA !!!!
		{
			ruchy++;
			hX[ruchy] = Xw;
			hY[ruchy] = Yw;



			Sleep(1000 / (speed + (dl / 2)));																								//predkosc
			if (wybor == 1)
				punkty++;

			if (_kbhit())
			{
				klawisz = _getch();
				if (klawisz == 224)klawisz += _getch();
				if (klawisz == 0) klawisz -= _getch();

				if (klawisz == gora && zwrot != 'd') zwrot = 'g';																				//deklaracja poruszania
				if (klawisz == dol && zwrot != 'g') zwrot = 'd';
				if (klawisz == lewo && zwrot != 'p') zwrot = 'l';
				if (klawisz == prawo && zwrot != 'l') zwrot = 'p';
			}



			if (zwrot == 'l') Xw--;																											//ruch weza
			if (zwrot == 'p') Xw++;
			if (zwrot == 'g') Yw--;
			if (zwrot == 'd') Yw++;




			if (wybor == 0)
			{
				if (Xw == szer) Xw = 0;																										//brak kolizji na scianach
				if (Xw == -1) Xw = szer - 1;
				if (Yw == wys) Yw = 0;
				if (Yw == -1) Yw = wys - 1;
			}

			if (wybor == 1)																													//kolizja na scianach
			{
				{
					if (Xw == szer || Xw == -1)
						break;
					if (Yw == wys || Yw == -1)
						break;
				}
			}





			if (pole[Xw][Yw] == 1)																											//jedzenie samego siebie
			{
				break;
			}





			if (pole[Xw][Yw] == 2)																											//jedzenie jedzenia :D
			{
				punkty = punkty + (2 * speed);
				dl++;
				do {
					Xj = rand() % szer;																										//pozycja nowego jedzenia			
					Yj = rand() % wys;
				} while (pole[Xj][Yj] != 0);

				pole[Xj][Yj] = 2;
				idzdoxy(Xj * 2 + 2, Yj + 1);
				SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_RED);
				cout << (char)123 << (char)125;
				SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
			}
			else
			{
				if (ruchy > 0) pole[hX[ruchy - dl]][hY[ruchy - dl]] = 0;																	//usuwanie ogona
				idzdoxy(hX[ruchy - dl] * 2 + 2, hY[ruchy - dl] + 1);
				cout << "  ";
			}

			pole[Xw][Yw] = 1;
			idzdoxy(Xw * 2 + 2, Yw + 1);
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
			cout << (char)219 << (char)219;

			idzdoxy(0, wys + 1);
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
			cout << endl << "Punkty: " << punkty;
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);


		}

		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cout << endl << "Koniec gry, zdobyte punkty: " << punkty;
		cout << endl << tr("Czy chcesz zagraæ jeszcze raz na tych samych ustawieniach? 0- nie, 1-tak: ");
		cin >> gracdalej;
		while (gracdalej < 0 || gracdalej>1)
		{
			cout << tr("Niestety nie ma takiej opcji, sprobój jeszcze raz: ");
			cin >> gracdalej;
		}
		if (gracdalej == 1)
		{
			system("cls");
			punkty = 0;
			dl = 0;
		}


	} while (gracdalej == 1);

	cout << "Zatem do widzenia!";
	Sleep(1500);

	return 0;
}

1

Nie będę wszystkiego wytykał, bo za dużo roboty.

Z natury jestem leniwy i wolę coś zrobić raz i mieć z głowy niż robić to sto razy... Ty widocznie lubisz się powtarzać. Sam zobacz ile razy masz w kodzie:

hOut = GetStdHandle(STD_OUTPUT_HANDLE);
// albo
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);

wdol, wgore, wlewo, wprawo to praktycznie ta sama funkcjonalność w czterech funkcjach - nie dałoby się tego skrócić do jednej funkcji?

I co to niby jest:

char pole[50][50];
//...
return pole[50][50]; // wtf?

Dlaczego //rysowanie planszy nie jest osobną funkcją? Podobnie z innymi komentarzami.

Jeżeli nie chcesz czegoś mieć w funkcjach, bo czujesz, że najwygodniej byłoby mieć funkcje i zmienne globalne, a wbijano Ci do głowy, że globalne to zło (nie bez powodu zresztą)... to czas na zapoznanie się z klasami.

3

Ok, wielkie dzięki za wskazówki, biorę się do roboty. Pozwolę sobie podzielić się efektami jak tylko jakieś uda mi się osiągnąć.

Xupicor napisał(a):

Nie będę wszystkiego wytykał, bo za dużo roboty.

Rozumiem, wnioskuje, że mój kod to jeden wielki burdel w takim razie. Tym bardziej ładnie proszę, aby w miarę możliwości wytykać mi takie błędy, będę nad nimi pracował i z czasem pozbędę się ich w przyszłości :)

1

Jeśli masz deadline to uważaj, żebyś się w zmianach nie zakopał. Po pierwsze zrób tak, żeby program działał poprawnie i spełniał wymagania. W najgorszym razie będzie brzydki stylistycznie, "prymitywny" i gwałcił DRY/KISS, ale może lepiej brzydki i działający niż rozkopany, czyli ani ładny, ani działający. ;)
Nie kompilowałem, ale tak na oko to to raczej nie działa, albo "działa przypadkiem". Przykładowo zwracasz pole[50][50] gdzie najwyższy indeks dla 50-elementowej tablicy to 49. No i już UB. A może tablicę chcesz tam zwrócić?

Mała stylistyczna uwaga - nie musisz zmiennych definiować na początku funkcji. Zrób to blisko miejsca użycia i najlepiej od razu inicjalizuj jakąś użyteczną wartością.

Pouczysz się trochę to nie będziesz pisał "najpierw na brzydko/po polsku", tylko od razu myślał w innych kategoriach i nawet "takie se próby" będą wyższej jakości.
Nie od razu Rzym zbudowano. ;)

0

Nie mam nic do stracenia, projekt został już pokazany, działał jak należy, tylko właśnie doczepiono się wielkiego maina. Teraz albo poprawie i będę miał więcej pkt, albo nic się nie zmieni.
Jak na razie szło bardzo dobrze, linijek ogólnie przybyło, ale main stał się chyba o połowę krótszy, mam wrażenie, że zmierzam w dobrym kierunku. Wszystko ładnie pięknie, dopóki funkcja miała za zadanie nic nie zwracać, lub zwracać jedną rzecz. Teraz funkcja "rysowanieplanszy" korzysta z zmiennych Xw i Yw, pracuje na nich, ale są one też mi potrzebne do wypełniania tablicy historii ruchów węża, tam mi wywala błąd (zaraz przy komentarzu GRA !!!!). Czy jest jakiś sposób na to, czy gdy pojawia się taki problem to mam próbować to upchnąć wszystko do jednej funkcji?

PS Jest tu jakiś "spoiler" czy coś w tym guście? Jak tak dalej pójdzie to stare posty będę musiał usuwać, bo długość strony będzie absurdalna przez te kody :P

// Snake podejscie pierwsze 21.11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <cstdio>

using namespace std;

void idzdoxy(int x, int y)
{
	HANDLE hCon;
	COORD dwPos;

	dwPos.X = x;
	dwPos.Y = y;

	hCon = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hCon, dwPos);
}

char *tr(char *str)																												//funkcja na polskie znaki
{
	static char buff[256];
	char cp[] = "\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
	if (strlen(str) >= sizeof(buff)) return str;
	char *bf = buff;
	while (*str)
	{
		char *pos = strchr(cp + 18, *str);
		*(bf++) = pos ? *(pos - 18) : *str;
		++str;
	}
	*bf = 0;
	return buff;
}

void kolortekstu()
{
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
}

void czerwony()
{
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_RED);
}

void kolorweza()
{
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
}

void kolorjedzenia()
{
	HANDLE hOut;																													//nadanie koloru czcionce
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_RED);
}

int wprowadzaniedanych(int z1, int z2)
{
	int x;
	cin >> x;
	while (cin.good() == false)
	{
		czerwony();
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		kolortekstu();
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> x;
	}
	while (x < z1 || x > z2)
	{
		czerwony();
		cout << tr("Niestety Twoja liczba nie znajduje się w przedziale, spróbuj jeszcze raz: ");
		kolortekstu();
		cin >> x;
	}
	return x;
}

int szerokosc()
{
	int szer;
	kolortekstu();
	cout << tr("Na początek podaj szerokość planszy, na której chcesz zagrać (od 5 do 35): ");										//szerokosc
	szer= wprowadzaniedanych(5,35);
	return szer;
}

int wysokosc()
{
	int wys;
	kolortekstu();
	cout << tr("Teraz podaj wysokość tej planszy (od 5 do 35): ");																	//wysokosc
	wys= wprowadzaniedanych(5, 35);
	return wys;
}

int szybkosc()
{
	int speed;
	kolortekstu();
	cout << tr("Podaj tempo gry w jakim życzysz sobie zagrać od 1 do 50: ");
	speed=wprowadzaniedanych(1, 50);
	return speed;
}

int kolizja()
{
	int wybor;
	kolortekstu();
	cout << tr("Czy chcesz, aby uderzenie o ściane powodowało koniec gry? Wpisz 0- nie, 1-tak: ");									//czy kolizja
	cin >> wybor;
	while (cin.good() == false)
	{
		czerwony();
		cout << tr("Wprowadziłeś literkę zamiast liczby, spróbuj jeszcze raz: ");
		kolortekstu();
		cin.clear();
		cin.ignore(1000, '\n');
		cin >> wybor;
	}
	while (wybor < 0 || wybor>1)
	{
		czerwony();
		cout << tr("Niestety Twoja liczba nie znajduje się w przedziale, sprobój jeszcze raz: ");
		kolortekstu();
		cin >> wybor;
	}
	return wybor;
}

int sterowanie()
{
	int klawisz;
	klawisz = _getch();
	if (klawisz == 224)klawisz += _getch();
	if (klawisz == 0)klawisz -= _getch();
	return klawisz;
}

int rysowanieplanszy(int szer, int wys, int wybor)
{
	char pole[50][50];
	int Xw, Yw, Xj, Yj;
	for (int i = 0; i < wys; i++)
	{
		for (int j = 0; j < szer; j++)
		{
			pole[j][i] = 0;																											//wypelnianie tablicy zerami
		}
	}

	do {
		Xj = rand() % szer;																											//pozycja poczatkowa jedzenia			
		Yj = rand() % wys;
	} while (pole[Xj][Yj] != 0);

	pole[Xj][Yj] = 2;

	if (wybor == 0)
	{
		Xw = rand() % szer;																												//pozycja poczatkowa dla 0		
		Yw = rand() % wys;
	}
	else
	{
		Xw = 1;
		Yw = 1;
	}
	pole[Xw][Yw] = 1;
	
	idzdoxy(0, 0);
	czerwony();
	for (int i = 0; i <= szer + 1; i++)					//gorna ramka																
		cout << (char)178 << (char)178;


	for (int i = 0; i < wys; i++)
	{
		cout << endl << (char)178 << (char)178;			//prawa ramka
		for (int j = 0; j < szer; j++)
		{
			if (pole[j][i] == 0)
			{
				cout << "  ";				//wypelniacz pola
			}
			if (pole[j][i] == 1)
			{
				kolorweza();
				cout << (char)219 << (char)219;  //waz
			}

			if (pole[j][i] == 2)
			{
				kolorjedzenia();
				cout << (char)123 << (char)125;  //jedzenie
			}
		}
		czerwony();
		cout << (char)178 << (char)178;					//lewa ramka
	}

	cout << endl;

	for (int i = 0; i <= szer + 1; i++)																								//koniec rysowania planszy
		cout << (char)178 << (char)178;

	return Xw, Yw;
}


int main()
{
	int dl=0;
	char pole[50][50];
	int hX[10000]; int hY[10000]; int ruchy = 0;
	int Xw, Yw, Xj, Yj;
	int klawisz, punkty = 0, wybor;
	char zwrot = 'p';

	srand(time(NULL));
	kolortekstu();
	cout << "Witam w programie Snake autorstwa Daniela Kalety" << endl;																//konfiguracja
	Sleep(1000);
	int szer;
	szer = szerokosc();
	int wys;
	wys = wysokosc();
	cout << tr("A więc zadeklarowana przez Ciebie plansza będzie miała wymiary: ") << szer << " x " << wys << endl;					//wypisanie wymiarow planszy
	int speed;
	speed = szybkosc();
	wybor = kolizja();

	cout << "Na koniec zadeklaruj przyciski sterowania" << endl;

	int gora, dol, lewo, prawo;																										//<<sterowanie
	cout << tr("Góra: ") << endl;
	gora = sterowanie();
	cout << tr("Dół: ") << endl;
	dol = sterowanie();
	cout << tr("Lewo: ") << endl;
	lewo = sterowanie();
	cout << tr("Prawo: ") << endl;
	prawo = sterowanie();																											//sterowanie>>

	Sleep(1000);
	system("cls");																													//zakonczenie procesu konfiguracji

	int gracdalej;
	do
	{
		rysowanieplanszy(szer,wys,wybor);
	
		for (;;)																														//GRA !!!!
		{
			/*ruchy++;
			hX[ruchy] = Xw;
			hY[ruchy] = Yw;*/



			Sleep(1000 / (speed + (dl / 2)));																								//predkosc
			if (wybor == 1)
				punkty++;

			if (_kbhit())
			{
				klawisz = _getch();
				if (klawisz == 224)klawisz += _getch();
				if (klawisz == 0) klawisz -= _getch();

				if (klawisz == gora && zwrot != 'd') zwrot = 'g';																				//deklaracja poruszania
				if (klawisz == dol && zwrot != 'g') zwrot = 'd';
				if (klawisz == lewo && zwrot != 'p') zwrot = 'l';
				if (klawisz == prawo && zwrot != 'l') zwrot = 'p';
			}



			if (zwrot == 'l') Xw--;																											//ruch weza
			if (zwrot == 'p') Xw++;
			if (zwrot == 'g') Yw--;
			if (zwrot == 'd') Yw++;




			if (wybor == 0)
			{
				if (Xw == szer) Xw = 0;																										//brak kolizji na scianach
				if (Xw == -1) Xw = szer - 1;
				if (Yw == wys) Yw = 0;
				if (Yw == -1) Yw = wys - 1;
			}

			if (wybor == 1)																													//kolizja na scianach
			{
				{
					if (Xw == szer || Xw == -1)
						break;
					if (Yw == wys || Yw == -1)
						break;
				}
			}





			if (pole[Xw][Yw] == 1)																											//jedzenie samego siebie
			{
				break;
			}





			if (pole[Xw][Yw] == 2)																											//jedzenie jedzenia :D
			{
				punkty = punkty + (2 * speed);
				dl++;
				do {
					Xj = rand() % szer;																										//pozycja nowego jedzenia			
					Yj = rand() % wys;
				} while (pole[Xj][Yj] != 0);

				pole[Xj][Yj] = 2;
				idzdoxy(Xj * 2 + 2, Yj + 1);
				kolorjedzenia();
				cout << (char)123 << (char)125;
				kolorweza();
			}
			else
			{
				if (ruchy > 0) pole[hX[ruchy - dl]][hY[ruchy - dl]] = 0;																	//usuwanie ogona
				idzdoxy(hX[ruchy - dl] * 2 + 2, hY[ruchy - dl] + 1);
				cout << "  ";
			}

			pole[Xw][Yw] = 1;
			idzdoxy(Xw * 2 + 2, Yw + 1);
			kolorweza();
			cout << (char)219 << (char)219;

			idzdoxy(0, wys + 1);
			kolortekstu();
			cout << endl << "Punkty: " << punkty;
			kolorweza();


		}

		kolortekstu();
		cout << endl << "Koniec gry, zdobyte punkty: " << punkty;
		cout << endl << tr("Czy chcesz zagrać jeszcze raz na tych samych ustawieniach? 0- nie, 1-tak: ");
		cin >> gracdalej;
		while (gracdalej < 0 || gracdalej>1)
		{
			cout << tr("Niestety nie ma takiej opcji, sprobój jeszcze raz: ");
			cin >> gracdalej;
		}
		if (gracdalej == 1)
		{
			system("cls");
			punkty = 0;
			dl = 0;
		}


	} while (gracdalej == 1);

	cout << "Zatem do widzenia!";
	Sleep(1500);

	return 0;
}


 
2

Stwórz sobie strukturę o nazwie "punkt" ("point") i zwracaj tę strukturę. Albo skorzystaj z pair, które już jest w c++:
http://www.cplusplus.com/reference/utility/pair/pair/

Wywal też te miliony enterów, sformatuj jakoś kod. Tutaj:

            if (wybor == 1)                                                                                                                    //kolizja na scianach
            {
                {
                    if (Xw == szer || Xw == -1)
                        break;
                    if (Yw == wys || Yw == -1)
                        break;
                }
            }

na pewno chcesz otwierać i zamykać dwa nawiasy klamrowe?

3

zrobie Ci maly code review

  • #include <conio.h> powinno byc oddzielone, zeby dzialalo tylko na windowsie. Wiec powinienes sprawdzac czy jest to uruchamiane na windowsie
  • #include "stdafx.h" do niczego Ci nie jest potrzebne, zapoznaj sie z tym jak pisac w visualu odpowiednio kod. Bo Ty w ogole nie uzywasz stdafx
  • piszesz w C++ wiec nie time.h tylko ctime odnosi sie do wszystkich biblotek ktore mozna zamienic
  • #include <windows.h> to samo co przy conio.h
  • Polskie nazewnictwo
  • beznadziejne nazewnictwo. Bez patrzenia w kod co ma niby robic funkcja Tr? ma sobie tyrkac trtrtr?
  • uzywanie char zamiast string
  • polskie znaki sie ustawia inaczej Jak uzyskać polskie znaki w strum. wyjścia
  • magic numbers
  • kolortekstu nie przyjmuje zadnego argumentu. Czyli to nie jest kolor tekstu tylko juz jakis konkretny kolor
  • czerwony. Co czerwony? Nazewnictwo jest strasznie slabe
  • void kolorweza() nic nie przyjmuje, nic nie zwraca
  • wiec co to ma niby robic? Co jezeli chce inny kolor weza?
  • void kolorjedzenia() to samo co wyzej
  • int wprowadzaniedanych(int z1, int z2) i niby czym ma byc to z1 i z2?
  • wyswieltasz i pobierasz dane w tej samej funkcji. To jest zlamanie jednej z zasady SOLID (a dokladniej pierwszej)
  • while (cin.good() == false). Zamiast tego !cin.good
  • kolizja() zamiast sprawdzac kolicje, to ustawia czy sciany beda przeszkoda czy nie... to juz ostatnie do nazewnictwa
  • formatowanie kodu. te ify bez {} kiedys sie na Tobie zemszcza
  • funkcje ktora maja wiecej niz 10 linii sa za duze (to nie jest jakas regula, ale w Twoim wypadku pomoze Ci to poprawic kod)
  • zamiast endl napisz '\n'
  • zamiast tablic uzyj std::vector
  • zamiast random uzyj device_random http://ideone.com/IxQCwU tutaj przyklad jak uzywac (warunek petli byl by cos pokazac komus, nie pisz tak bo to nie wyglada dobrze)
  • kod ma byc pisany tak, ze jezeli ktos kto nie zna sie na programowaniu powinien powiedziec co dana rzecz robi (patrzac po samych nazwach). U Ciebie jest chaos w formatowaniu i w nazewnictwie i ogolnie w pliku
  • doszedlem do maina i mi sie odechcialo. To znaczy zebys to wyrzucil i zaczal od nowa. Z jedna zasada. W mainie mozesz miec maksymalnie 5 linijek kodu
  • poczytaj o DRY, SOLID, MVC
  • poczytaj o klasach (sprawdz w moim kursie sa poczatki na temat klas)

1 użytkowników online, w tym zalogowanych: 0, gości: 1