Kiedy proszę gracza o koordynaty statków i wyświetlam planszę jego gry, statki pokazują się przesunięte parę wierszy niżej. Nie wiem, już co mogę z tym zrobić, próbowałam wszystkiego. Poza tym, kiedy koordynaty wczytywane z konsoli są wbrew zasadom gry, gracz nie dostaje odpowiedniego komunikatu, jaki zawarłam w kodzie. Nie mówiąc już o tym, że nie potrafię wymyślić skończonej pętli, która będzie żądała od gracza podania nowych koordynatów, jeżeli wcześniejsze będą niepoprawne. Błagam o jakąkolwiek wskazówkę.
Kod: Zaznacz cały
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<string>
using namespace std;
int wynik1, wynik2;
int const N = 9;
char plansza1[N][N];
char plansza2[N][N];
char pole[N][N];
char pole_pomocnik[11][11];
bool ustawienie;
int ulatwienia, typ_rozgr;
int i, j, k, x, y,w;
int r = 4;
string nick, nick1, nick2, nick3;
int orient, gracz;
char strategia;
int strzaly1, strzaly2;
int pudla1, pudla2;
int zatopienia1, zatopienia2;
void menu();
void ustaw_statki(int gracz);
void set_planszekomp(char strategia);
void wyswietl_plansze(int ulatwienia, int gracz);
bool czy_zatopiony(int w, int k);
//int ruch(int gracz);
//int ruch_komp();
//int getruchy(int gracz);
//int rozgrywka(int typ_rozgr);
void menu()
{
cout << "\t\t\tWitaj w Battleship Limited Reunion 15/16\n\n" << "Jaki rodzaj rozgrywki wybierasz?\n\n" << "1.Multiplayer\n" << "2.Gracz vs komputer\n" << "3.Wyjscie\n";
cin >> typ_rozgr;
switch (typ_rozgr){
case 1:
cout << "\n\nPodaj nick gracza nr 1:\n";
cin >> nick1;
cout << "\n\n" << "Podaj nick gracza nr 2:\n";
cin >> nick2;
system("cls");
cout << "Czy chcecie stosowac ulatwienia?\n\n" << "1.Oznaczanie pol na ktrych nie moze byc statku\n" << "2.Oznaczanie pol na ktore oddano juz strzal\n" << "3.Bez ulatwien\n" << "4.Powrot do menu\n";
cin >> ulatwienia;
break;
case 2:
cout << "\n\nPodaj nick gracza:\n";
cin >> nick1;
nick3 = "wrog";
system("cls");
cout << "Jaka strategie ma stosowac komputer?\n\n" << "a.Losowa\n" << "b.Statki w orientacji pionowej\n" << "c.Statki w orientacji poziomej\n" << "d.Powrot do menu\n" << "e.Wyjscie z gry\n";
cin >> strategia;
break;
case 3:
exit(0);
break;
}
system("cls");
cout << "Oznaczenia pol na planszy:\n\n"
<< "0"": pole nieodkryte\n"
<< "+"": zatopiony maszt\n"
<< "-"": pole puste\n"
<< "."": pole na ktorym nie moze byc masztu innego statku\n\n"
<<"Nacisnij dowolny klawisz, zeby przejsc dalej";
}
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");
cout << "Podajesz koordynaty dla 4-masztowca\n";
cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n";
cin >> x >> y;
cout << "Podaj orientacje statku\n1.Pionowa\n2.Pozioma:\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))
cout << "Na tym polu nie zbudujesz statku- nie zawieralby sie na planszy!"; ustawienie == false;
for (int j = 0; j < 4; j++)
{ //pętla sparwdzajaca, czy pola dookoła nowo budowanego
if (pole[w][k] == '1')//statku i jego maszty nie są oznaczone już przez x lub 1
{
cout << "Na tym polu nie zbudujesz statku- krzyzowalby sie z innym!";
ustawienie = false;
}
if (orient == 1)
w++;
else
k++;
}
if (ustawienie == true && orient == 1)
{
for (int j = 0; j < 4; j++)
{
pole[w][k] = '1';
w++;
}
}
else if (ustawienie == true && orient == 2)
{
for (int j = 0; j < 4; j++)
{
pole[w][k] = '1';
k++;
}
}
cout << "Podajesz koordynaty dla 3-masztowca\n"
<< "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n";
cin >> x >> y;
cout << "Podaj orientacje statku\n1.Pionowa\n2.Pozioma:\n";
cin >> orient;
w = x - 1;
k = y - 1;
ustawienie = true;
if ((orient == 1 && w > 7) || (orient == 1 && k>9) || (orient == 2 && w>9) || (orient == 2 && k > 7))
cout << "Na tym polu nie zbudujesz statku- nie zawieralby sie na planszy!";
for (int j = 0; j < 3; j++)
{ //pętla sparwdzajaca, czy pola dookoła nowo budowanego
if (pole[w][k] == '1')//statku i jego maszty nie są oznaczone już przez x lub 1
{
cout << "Na tym polu nie zbudujesz statku- krzyzowalby sie z innym!";
ustawienie = false;
}
if (orient == 1)
w++;
else
k++;
}
if (ustawienie == true && orient == 1)
{
for (int j = 0; j < 3; j++)
{
pole[w][k] = '1';
w++;
}
}
else if (ustawienie == true && orient == 2)
{
for (int j = 0; j < 3; j++)
{
pole[w][k] = '1';
k++;
}
}
cout << "Podajesz koordynaty dla 2-masztowca\n";
cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n";
cin >> x >> y;
cout << "Podaj orientacje statku\n1.Pionowa\n2.Pozioma:\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!"; ustawienie == false;
for (int j = 0; j < 2; j++)
{ //pętla sparwdzajaca, czy pola dookoła nowo budowanego
if (pole[w][k] == '1')//statku i jego maszty nie są oznaczone już przez x lub 1
{
cout << "Na tym polu nie zbudujesz statku- krzyzowalby sie z innym!";
ustawienie = false;
}
if (orient == 1)
w++;
else
k++;
}
if (ustawienie == true && orient == 1)
{
for (int j = 0; j < 2; j++)
{
pole[w][k] = '1';
w++;
}
}
else if (ustawienie == true && orient == 2)
{
for (int j = 0; j < 2; j++)
{
pole[w][k] = '1';
k++;
}
}
cout << "Podajesz koordynaty dla 1-masztowca\n";
cout << "Podaj wiersz i kolumne pierwszej wspolrzednej statku, rozdziel je spacja\n";
cin >> x >> y;
w = x - 1;
k = y - 1;
ustawienie = true;
if ((w > 9) || (k > 9))
{
cout << "Na tym polu nie zbudujesz statku- nie zawieralby sie na planszy!"; ustawienie == false;
}
else if(pole[w][k] == '1')
{
cout << "Na tym polu nie zbudujesz statku- krzyzowalby sie z innym!";
ustawienie = false;
}
if (ustawienie == true)
pole[w][k] = '1';
if (gracz == 1){ nick = nick1; plansza1[N][N] = pole[N][N]; }
else if (gracz == 2){ nick = nick2; plansza2[N][N] = pole[N][N]; }
}
void wyswietl_plansze(int ulatwienia, int gracz)
{
if (gracz == 1){ nick = nick1;}
else if (gracz == 2){ nick = nick2; }
else if (gracz == 3){ nick = "wrog"; }
cout << "Oto plansza gracza " << nick << ":\n\n";
switch (ulatwienia)
{
case 0:////wyswietlanie jawnie wszystkich statkow na planszy
for (int i = 0; i < 10; i++)
{
for (int j = 0; j< 10; j++)
{
if (pole[i][j] == '0' || pole[i][j] == '1')
cout << pole[i][j] << ' ';
}
cout << endl;
}
break;
case 1:////wyswietlanie pol gdzie byl oddany strzal
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (pole[i][j] == '.' || pole[i][j] == '-' || pole[i][j] == '+')
cout << pole[i][j] << ' ';
else
pole[i][j] = '0';
cout << pole[i][j] << ' ';
}
cout << endl;
}
break;
case 2:////wyświetlanie pól, na których nie może być statku
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (pole[i--][j--] == '1' || pole[i--][j] == '1' || pole[i--][j++] == '1' || pole[i][j--] == '1' || pole[i][j++] == '1'
|| pole[i++][j--] == '1' || pole[i++][j] == '1' || pole[i++][j++] == '1')
pole[i][j] = '.';
else
pole[i][j] = '-';
cout << pole[i][j] << ' ';
}
cout << endl;
}
break;
case 3:///bez ulatwień, tylko zatopione maszty
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (pole[i][j] == '+')
cout << pole[i][j] << ' ';
else
{
pole[i][j] = '0';
cout << pole[i][j] << ' ';
}
}
cout << endl;
}
break;
}
cout << "\t\t\t";
getchar();
}
zamykam(: