static int Strzelaj(Plansza planszaCel, Plansza planszaUkryta, int[] wspolrzednePola) // 0 pudło. 1 Trafiony, 2 Zatopiony, 3 już strzelono w to miejsce { if ((wspolrzednePola[0] < 0 || wspolrzednePola[0] > 9) && (wspolrzednePola[1] < 0 || wspolrzednePola[1] > 9)) { Console.WriteLine("Strzał poza Planszę"); return(3); } if (planszaUkryta.SprawdzPole(wspolrzednePola[0], wspolrzednePola[1]) == '~') // jeśli nie strzelano jeszcze w to miejsce { if (planszaCel.SprawdzPole(wspolrzednePola[0], wspolrzednePola[1]) == '~') // pudło { planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status = 'o'; planszaUkryta.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status = 'o'; Console.WriteLine($"Pudło! X: {wspolrzednePola[0]}, Y: {wspolrzednePola[1]}"); return(0); } else // trafienie { planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status = 'x'; planszaUkryta.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status = 'x'; planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Czesc.Trafiony = true; Console.WriteLine($"Trafiony! X: {wspolrzednePola[0]}, Y: {wspolrzednePola[1]}"); if (planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Czesc.Statek.Zatopiony) { Console.WriteLine($"Zatopiony!!! X: {wspolrzednePola[0]}, Y: {wspolrzednePola[1]}"); foreach (var czesc in planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Czesc.Statek.Czesc) { planszaCel.ZmienStatusSasiednichPol(czesc.Pole.X, czesc.Pole.Y); planszaUkryta.ZmienStatusSasiednichPol(czesc.Pole.X, czesc.Pole.Y); } return(2); } return(1); } } else { Console.WriteLine("Oddałeś już strzał w to pole lub zestrzeliłeś statek na sąsiednim polu. spróbuj jeszcze raz!"); return(3); } }
public bool CzyMoznaUmiescic(Pole pocz, Pole kon, Plansza plan) { int dlugosc = 0; //czy poczatek i koniec na planszy if (pocz.X < 10 && pocz.X >= 0 && pocz.Y < 10 && pocz.Y >= 0 && kon.X < 10 && kon.X >= 0 && kon.Y < 10 && kon.Y >= 0) { //czy w pionie if (pocz.X - kon.X == 0) { dlugosc = Math.Abs(pocz.Y - kon.Y) + 1; if (pocz.Y - kon.Y < 0) { Kierunek = 's'; } else { Kierunek = 'n'; } } //czy w poziomie else if (pocz.Y - kon.Y == 0) { dlugosc = Math.Abs(pocz.X - kon.X) + 1; if (pocz.X - kon.X < 0) { Kierunek = 'e'; } else { Kierunek = 'w'; } } else if (pocz.Y - kon.Y != 0 && pocz.X - kon.X != 0) { throw new Exception("Statek nie jest w Pionie lub Poziomie! Lub jest poza Planszą"); } if (dlugosc == Maszty) { if (Kierunek == 'n') { for (int i = 0; i < Maszty; i++) { if (plan.SprawdzPole(pocz.X, pocz.Y - i) != '~' || plan.SprawdzSasiedniePola(pocz.X, pocz.Y - i) != true) { throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!"); } } return(true); } if (Kierunek == 's') { for (int i = 0; i < Maszty; i++) { if (plan.SprawdzPole(pocz.X, pocz.Y + i) != '~' || plan.SprawdzSasiedniePola(pocz.X, pocz.Y + i) != true) { throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!"); } } return(true); } if (Kierunek == 'e') { for (int i = 0; i < Maszty; i++) { if (plan.SprawdzPole(pocz.X + i, pocz.Y) != '~' || plan.SprawdzSasiedniePola(pocz.X + i, pocz.Y) != true) { throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!"); } } return(true); } if (Kierunek == 'w') { for (int i = 0; i < Maszty; i++) { if (plan.SprawdzPole(pocz.X - i, pocz.Y) != '~' || plan.SprawdzSasiedniePola(pocz.X - i, pocz.Y) != true) { throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!"); } } return(true); } } else { throw new Exception("Statek niewymiarowy!"); } } else { throw new Exception("Wyszedłeś poza Plansze"); } return(false); }