[c++][visual studio] problem z pobieraniem danych z konsoli

transatlantyk a
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 2 gru 2015, o 18:53
Płeć: Kobieta
Lokalizacja: Polska

[c++][visual studio] problem z pobieraniem danych z konsoli

Post autor: transatlantyk a »

Witam, długo już męczę się nad grą w statki, strukturalnie. Mam jeden, okropny problem.

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();
}
-- 15 sty 2016, o 19:45 --

zamykam(:
ODPOWIEDZ