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);
}