C++, Inicjowanie pól planszy przez komputer

Programowanie w języku C i językach pochodnych, jak C++, C#
premiera

C++, Inicjowanie pól planszy przez komputer

Post autor: premiera » 17 sty 2016, 21:52

Witam

Od dawna męczę się z grą w statki, którą mam napisać strukturalnie.
W rozgrywce z komputerem, powinna być możliwość zainicjowania pól planszy gracza przez pobranie znaków z konsoli oraz utworzenie planszy komputera, z możliwością trzech opcji-
a-statki komputera mają losową orientację
b-statki ustawione są pionowo
c- statki poziome

Napisałam funkcję inicjacji planszy przez gracza i wszytko okej, na tej samej zasadzie chciałam napisać funkcję inicjacji planszy komputera, ale w tej funkcji statki ustawiają się kompletnie losowo i w ogóle nie trzymają się zasad, które zapisałam w funkcji. Gdyby ktokolwiek miał pomysł, dlaczego tak się dzieję, serdecznie proszę o pomoc

Kod: Zaznacz cały

void ustaw_statki(int gracz)
{

	for (i = 0; i < 10; i++){
		for (j = 0; j < 10; j++)
			pole[i][j] = '0';
	}
	if (gracz == 1){ nick = nick1; plansza1[N][N] = pole[N][N]; }
	else if (gracz == 2){ nick = nick2; plansza2[N][N] = pole[N][N]; }
	cout << nick << " utworzysz teraz plansze swojej gry, ma ona wymiar 10x10, twoje okrety to\n"
		<< " czteromasztowiec\n trzymasztowiec\n  dwumasztowiec\n jednomasztowiec\n\n"
		<< "Mozesz tworzyc je tylko w postaci odcinkow o orientacji dla kazdego z nich poziomej lub pionowej.\n"
		<< "Podajesz zawsze wspolrzedne kolumny i wiersza pierwszego masztu statku patrzac od gory i lewej strony planszy.\n"
		<< "Pamietaj, zeby podawane przez Ciebie wspolrzedne nie powodowaly budowania statku poza plansza ani krzyzowania\n"
		<< "lub stykania sie okretow. Kolumny i wiersze numerowane sa od 1 do 10.\n\n"
		<< "Nacisnij enter, zeby przejsc dalej";
	getchar();
	system("cls");

do{
	cout << "Podajesz koordynaty dla 4-masztowca\n";
	cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n\n";
	cin >> x >> y;
	cout << "Podaj orientacje statku\n1.Pionowa\n2.Pozioma:\n\n";
	cin >> orient;
	ustawienie = true;
	w = x - 1;
	k = y - 1;
	if ((orient == 1 && w > 6) || (orient == 1 && k > 9) || (orient == 2 && w > 9) || (orient == 2 && k > 6))
		ustawienie = false;
	if (ustawienie == true)
	{
		if (orient == 1)
		{
			for (int j = 0; j < 4; j++)
			{
				pole[w][k] = '1';
				w++;
			}
		}
		else
		{
			for (int j = 0; j < 4; j++)
			{
				pole[w][k] = '1';
				k++;
			}
		}
	}
	else{ cout << "Nie mozesz tu zbudowac statku."; }
} while (ustawienie == false);


do{
	cout << "Podajesz koordynaty dla 3-masztowca\n";
	cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n\n";
	cin >> x >> y;
	cout << "\nPodaj orientacje statku\n1.Pionowa\n2.Pozioma:\n\n";
	cin >> orient;
	ustawienie = true;
	w = x - 1;
	k = y - 1;
	if ((orient == 1 && w > 7) || (orient == 1 && k > 9) || (orient == 2 && w > 9) || (orient == 2 && k > 7))
		ustawienie = false;
	else{
		a = w;
		b = k;
		for (int j = 0; j < 3; j++)
		{
			if (pole[a][b] == '1')
			{
				ustawienie = false;
				break;
			}
			if (orient == 1)
				a++;
			else
				b++;
		}
	}

	if (ustawienie == true)
	{
		if (orient == 1)
		{
			for (int j = 0; j < 3; j++)
			{
				pole[w][k] = '1';
				w++;
			}
		}
		else
		{
			for (int j = 0; j < 3; j++)
			{
				pole[w][k] = '1';
				k++;
			}
		}
	}
	else{ cout << "Na tym polu nie zbudujesz statku- krzyzowalby sie z innym!\n\n"; }
} while (ustawienie == false);
			
	
do{
	cout << "Podajesz koordynaty dla 2-masztowca\n";
	cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n\n";
	cin >> x >> y;
	cout << "Podaj orientacje statku\n1.Pionowa\n2.Pozioma:\n\n";
	cin >> orient;
	ustawienie = true;
	w = x - 1;
	k = y - 1;
	if ((orient == 1 && w > 8) || (orient == 1 && k > 9) || (orient == 2 && w > 9) || (orient == 2 && k > 8))
	{
		cout << "Na tym polu nie zbudujesz statku- nie zawieralby sie na planszy!\n\n";
		ustawienie = false;
	}
	else{
		a = w;
		b = k;
		for (int j = 0; j < 2; j++)
		{
			if (pole[a][b] == '1')
			{
				ustawienie = false;
				break;
			}
			if (orient == 1)
				a++;
			else
				b++;
		}
		if (orient == 1)//////////////////////dlaczego nie działa!???
			{
				for (int j = 0; j < 4; j++)
				{
					if (pole[w - 1][k - 1] == 1 || pole[w - 1][k + 1] == 1)
						ustawienie == false; break;
					w++;
				}
				if (pole[w - 1][k] == '1' || pole[w + 3][k] == '1')
					ustawienie == false;
			}
			else
			{
				for (int j = 0; j < 4; j++)
				{
					if (pole[w - 1][k - 1] == 1 || pole[w - 1][k + 1] == 1)
						ustawienie == false; break;
					k++;
				}
				if (pole[w][k - 1] == '1' || pole[w][k + 3] == '1')
					ustawienie == false;
			}
		}
		
	if (ustawienie == true)
	{
		if (orient == 1)
		{
			for (int j = 0; j < 2; j++)
			{
				pole[w][k] = '1';
				w++;
			}
		}
		if (orient == 2)
		{
			for (int j = 0; j < 2; j++)
			{
				pole[w][k] = '1';
				k++;
			}
		}
	}	
	else{ cout << "Na tych polach nie zbudujesz statku"; ustawienie == false; }

} while (ustawienie == false);

do{
	cout << "Podajesz koordynaty dla 1-masztowca\n";
	cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n\n";
	cin >> x >> y;
	ustawienie = true;
	w = x - 1;
	k = y - 1;
	if (( w > 9) || ( k > 9))
	{
		cout << "Na tym polu nie zbudujesz statku- nie zawieralby sie na planszy!\n\n";
		ustawienie = false;
	}
	else{
			if (pole[w][k] == '1')
				cout << "Na tym polu nie zbudujesz statku- krzyzowalby sie z innym!\n\n";
	}

	if (ustawienie == true)
				pole[w][k] = '1';
} while (ustawienie == false);
		
if (gracz == 1){ nick = nick1; pole[N][N] = plansza1[N][N]; }
else if (gracz == 2){ nick = nick2; pole[N][N] = plansza2[N][N]; }
}




void set_planszekomp(char strategia)////na takich samych zasadach jak ustaw_statki
	{
		for (i = 0; i < 10; i++)
		{
			for (j = 0; j < 10; j++)
				pole[i][j] = '0';
		}
		plansza2[N][N] = pole[N][N];
		do{
			w = (rand() % 10) + 0;
			k = (rand() % 10) + 0;
			if (strategia == 'a')(orient = (rand() % 2) + 1);
			if (strategia == 'b')(orient =1);
			if (strategia == 'c')(orient =2);
			ustawienie = true;
			if ((orient == 1 && w > 6) || (orient == 1 && k > 9) || (orient == 2 && w > 9) || (orient == 2 && k > 6))
				ustawienie = false;
			else
			{
				if (orient == 1)
				{
					for (int j = 0; j < 4; j++)
					{
						pole[w][k] = '1';
						w++;
					}
				}
				else
				{
					for (int j = 0; j < 4; j++)
					{
						pole[w][k] = '1';
						k++;
					}
				}
			}
		} while (ustawienie == false);


		do{
			w = (rand() % 10) + 0;
			k = (rand() % 10) + 0;
			if (strategia == 'a')(orient = (rand() % 2) + 1);
			if (strategia == 'b')(orient =1);
			if (strategia == 'c')(orient = 2);
			ustawienie = true;
			if ((orient == 1 && w > 7) || (orient == 1 && k > 9) || (orient == 2 && w > 9) || (orient == 2 && k > 7))
				ustawienie = false;
			else{
				a = w;
				b = k;
				for (int j = 0; j < 3; j++)
				{
					if (pole[a][b] == '1')
					{
						ustawienie = false;
						break;
					}
					if (orient == 1)
						a++;
					else
						b++;
				}
			}
			if (ustawienie == true)
			{
				if (orient == 1)
				{
					for (int j = 0; j < 3; j++)
					{
						pole[w][k] = '1';
						w++;
					}
				}
				else
				{
					for (int j = 0; j < 3; j++)
					{
						pole[w][k] = '1';
						k++;
					}
				}
			}
		} while (ustawienie == false);


		do{
			w = (rand() % 10) + 0;
			k = (rand() % 10) + 0;
			if (strategia == 'a')(orient = (rand() % 2) + 1);
			if (strategia == 'b')(orient = 1);
			if (strategia == 'c')(orient = 2);
			ustawienie = true;
			if ((orient == 1 && w > 8) || (orient == 1 && k > 9) || (orient == 2 && w > 9) || (orient == 2 && k > 8))
				ustawienie = false;
			else{
				a = w;
				b = k;
				for (int j = 0; j < 2; j++)
				{
					if (pole[a][b] == '1')
					{
						ustawienie = false;
						break;
					}
					if (orient == 1)
						a++;
					else
						b++;
				}
			}
			if (ustawienie == true)
			{
				if (orient == 1)
				{
					for (int j = 0; j < 2; j++)
					{
						pole[w][k] = '1';
						w++;
					}
				}
				else
				{
					for (int j = 0; j <2; j++)
					{
						pole[w][k] = '1';
						k++;
					}
				}
			}
		} while (ustawienie == false);

		do{
			w = (rand() % 10) + 0;
			k = (rand() % 10) + 0;
			ustawienie = true;
			if (( k > 9) || ( w > 9))
				ustawienie = false;
			else{
					if (pole[w][k] == '1')
					{
						ustawienie = false;
						break;
					}
				}
			if (ustawienie == true)
			{
						pole[w][k] = '1';
			}
		} while (ustawienie == false);
	}