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';////////////////zmiana
}
if (gracz == 1){ nick = nick1; plansza1[11][11] = pole[11][11]; }
else if (gracz == 2){ nick = nick2; plansza2[11][11] = pole[11][11]; }
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";
ustawienie = true;
w = x - 1;//żeby wczytane znaki z konsoli były odekwatne do numeracji pól w tablicy
k = y - 1;
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;
if ((orient == 1 && w > 7) || (orient == 2 && k > 7))///warunke zawierania sie statku na planszy
{
cout << "Na tym polu nie zbudujesz statku- nie zawieralby sie na planszy!";
ustawienie == false;
}
for (int j = 0; j < 4; j++)///warunke krzyzowania sie statku na planszy
{
if (pole[w][k] == '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)/////rysowanie statku, jeżeli jest prawidlowy w zaleznosci od jego orientacji
{
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++;
}
}
/////to samo dla reszty okretow
ustawienie = true;
cout << "Podajesz koordynaty dla 3-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;
w = x - 1;
k = y - 1;
if ((orient == 1 && w > 8) || (orient == 2 && k > 8))
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;
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++;
}
}
ustawienie = true;
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;
w = x - 1;
k = y - 1;
if ((orient == 1 && w > 9) || (orient == 2 && k > 9))
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++;
}
}
ustawienie = true;
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;
if ((w > 10) || (k > 10))
{
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';
}
void set_planszekomp(char strategia)////na takich samych zasadach jak ustaw_statki
{
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
plansza2[i][j] = '0';
}
switch (ulatwienia)
{
case 'b':
orient = 1;
break;
case 'c':
orient = 2;
break;
}
w = x - 1;
k = y - 1;
ustawienie = true;
x = (rand() % 10) + 0;
y = (rand() % 10) + 0;
if(strategia=='a'){orient=(rand()%2)+1;}
if ((orient == 1 && w > 7)||(orient==2&&k>7))
ustawienie=false;
for (int j = 0; j < 4; j++)
{
if (plansza2[w][k] == '1')
ustawienie = false;
if (orient == 1)
w++;
else
k++;
}
if (ustawienie == true && orient == 1)
{
for (int j = 0; j < 4; j++)
{
plansza2[w][k] = '1';
w++;
}
}
else if (ustawienie == true && orient == 2)
{
for (int j = 0; j < 4; j++)
{
plansza2[w][k] = '1';
k++;
}
}
x = (rand() % 10) + 0;
y = (rand() % 10) + 0;
ustawienie = true;
if(strategia=='a'){orient=(rand()%2)+0;}
if ((orient == 1 && w > 8)||(orient==2&&k>8))
ustawienie=false;
for (int j = 0; j < 3; j++)
{
if (plansza2[w][k] == '1')
ustawienie = false;
if (orient == 1)
w++;
else
k++;
}
if (ustawienie == true && orient == 1)
{
for (int j = 0; j < 3; j++)
{
plansza2[w][k] = '1';
w++;
}
}
else if (ustawienie == true && orient == 2)
{
for (int j = 0; j < 4; j++)
{
plansza2[w][k] = '1';
k++;
}
}
x = (rand() % 10) + 0;
y = (rand() % 10) + 0;
ustawienie = true;
if(strategia=='a'){orient=(rand()%2)+0;}
if ((orient == 1 && w > 9)||(orient==2&&k>9))
ustawienie=false;
for (int j = 0; j < 2; j++)
{
if (plansza2[w][k] == '1')
ustawienie = false;
if (orient == 1)
w++;
else
k++;
}
if (ustawienie == true && orient == 1)
{
for (int j = 0; j < 2; j++)
{
plansza2[w][k] = '1';
w++;
}
}
else if (ustawienie == true && orient == 2)
{
for (int j = 0; j < 2; j++)
{
plansza2[w][k] = '1';
k++;
}
}
x = (rand() % 10) + 0;
y = (rand() % 10) + 0;
ustawienie = true;
if (strategia == 'a'){ orient = (rand() % 2) + 0; }
if ((orient == 1 && w > 10)||(orient==2&&k>10))
ustawienie=false;
if (plansza2[w][k] == '1')
ustawienie = false;
if (ustawienie == true)
plansza2[w][k] = '1';
}
void wyswietl_plansze(int ulatwienia, int gracz)
{///zerowanie pole[11][11]
for (i = 0; i < 10; i++){
for (j = 0; j < 10; j++){
pole[i][j] = '0';
}
}
if (gracz == 1){ nick = nick1; pole_pomocnik[i][j] = pole[N][N]; pole[N][N] = plansza2[N][N]; }
else if (gracz == 2){ nick = nick2; pole_pomocnik[i][j] = pole[N][N]; pole[N][N] = plansza1[N][N]; }
char z= '2';
char t = z;
char p = z;
char u = z;
char f = z;
char g = z;
switch (ulatwienia)
{
case 0:////wyswietlanie jawnie wszystkich statkow na planszy
f = '1';
break;
case 1:////wyswietlanie pol gdzie byl oddany strzal
p = '.';
t = '-';
g = '+';
break;
case 2:////wyświetlanie pól, na których nie może być statku
z = '0';
break;
case 3:///bez ulatwień, tylko zatopione maszty
u = '+';
break;
}
cout << "Oto plansza gracza " << nick;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++){
if (pole[i][j] == f){ pole_pomocnik[i][j] = '1'; }
if (pole[i][j] == z)
{
if (pole[i--][j--] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i--][j] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i--][j++] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i][j--] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i][j++] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i++][j--] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i++][j] == '1'){ pole_pomocnik[i][j] = '.'; }
else if (pole[i++][j++] == '1'){ pole_pomocnik[i][j] = '.'; }
}
if (pole[i][j] == p)pole_pomocnik[i][j] = '.';
else if (pole[i][j] == t)pole_pomocnik[i][j] = '-';
else if (pole[i][j] == g)pole_pomocnik[i][j] = '+';
if (pole[j][j] == u)pole_pomocnik[i][j] = '+';
}
}
for (int i = 0; i < 10; i++)
{
for ( int l = 0; l < 10; l++)
cout << pole_pomocnik[i][j] << ' ';
}
}
int main()
{
srand(time(NULL));
menu();
if (typ_rozgr == 1)
{
ustaw_statki(1);
ustaw_statki(2);
cout << "\n\n\n";
wyswietl_plansze(1, '0');
cout << "\t\t\t";
wyswietl_plansze(2, '0');
do{
//ruch(1);
//wynik1 = ruch(1);
if (wynik1 == 1){ zatopienia1++, strzaly1++; }
if (wynik1 == 2){ strzaly1++; }
if (wynik1 == 3){ pudla1++; strzaly1++; }
//ruch(2);
//wynik2 = ruch(2);
if (wynik2 == 1){ zatopienia2++, strzaly2++; }
if (wynik2 == 2){ strzaly2++; }
if (wynik2 == 3){ pudla2++; strzaly2++; }
} while (zatopienia1 == 4 || zatopienia2 == 4);
}
else if (typ_rozgr == 2)
{
ustaw_statki(1);
set_planszekomp(strategia);
cout << "\n\n\n";
wyswietl_plansze(1, '0');
cout << "\t\t\t";
nick2 = "wrog";
wyswietl_plansze(2, '0');
do{
//ruch(1);
//wynik1 = ruch(1);
if (wynik1 == 1){ zatopienia1++, strzaly1++; }
if (wynik1 == 2){ strzaly1++; }
if (wynik1 == 3){ pudla1++; strzaly1++; }
//ruch_komp()
//wynik2=ruch_komp()
if (wynik2 == 1){ zatopienia2++, strzaly2++; }
if (wynik2 == 2){ strzaly2++; }
if (wynik2 == 3){ pudla2++; strzaly2++; }
} while (zatopienia1 == 4 || zatopienia2 == 4);
}
/*
bool czy_zatopiony(int w, int k)////sprawdza, czy maszty okretu sa zatopione-- wywolana w obu funkcjach ruch
int ruch(int gracz); || gracz lub komputer strzela, wywołuję funkcje czy_zatopiony, jezeli trafi.
int ruch_komp(int gracz); ||return(wynik) wynik=1=>zatopienia++, ruchy++; 2=> ruchy++; 3=> ruchy++, pudlo++
*/
if (zatopienia1 == 4)
nick == nick1;
else
nick == nick2;
cout << "Zwyciezyl gracz\n" << nick << "\n\n Plansza gracza " << nick1 << "\n\n";
wyswietl_plansze(1, '5');
cout << "\n\n Plansza gracza" << nick2 << "\n\n";
wyswietl_plansze(2, '5');
getchar();
return(0);
}
program nie zamyka mi się znikąd, wszystko sie kompiluje, poprosztu pojawiają mi się dwa razy puste plansze(ze znaków białych) nadpisane 'plansza gracza nick1( np agata)
Zamiast poprawnie wypisanych planszy gracza i komputera, nadpisanych 'plansza agata' i 'plansza wrog'
Jak kogos zainteresuje temat, to proszę, niech na niego ze mną podywaguje(: