Statki - zaminowanie pół przy statku, nie stykały się

0

witam, czy jest jakiś sprytny sposób aby przy tablicy dwuwymiarowej podczas alokowania statku można było zaminować pole przy nim a podczas nakładania kolejnego sprawdzić czy we wskazanym miejscu NIE MA miny albo statku ? Oczywiście, statki mogą być tylko pionowo i poziomy więc mogę wczytać od użytkownika orientacje i na podstawie dwóch pierwszych pól narysować statek albo wyświetlić że sie nie zmieści, potem na podstawie położenia wstawić miny w pola dookoła statku. Ale to mi się wydaje głupie przecież musiał bym rozważyć tyle przypadków, że to się moja z celem, może ktoś robił kiedyś podobny projekt i ma jakiś sprytny sposób alokowania statków przy użyciu tablicy ... będę wdzięczny za każdą pomoc

0

Jak nauczysz się korzystać z pętli to okaże się że przypadek będziesz miał tam tylko jeden.

0

właśnie na taką odpowiedź liczyłem :)

0

Minowania chyba nie potrzebujesz. Losujesz współrzędne statku i orientację (pionowa, pozioma). Następnie sprawdzasz obszar dla pionowej x - 1,y - 1 do x + 1, y + liczbaMasztów + 1 czy nie ma tam innego statku. Jeżeli nie ma to stawiasz, jak nie, to losujesz następną pozycję. Pamiętaj jeszcze o sprawdzeniu czy statek nie wychodzi poza planszę, ale to można łatwo rozwiązać ograniczeniem losowania do y - LiczbaMasztów. Dla orientacji poziomej myślę, że już sam wykombinujesz ;]

0

Nawiasem mówiąc, nie losuje miejsc, bo to ma być plansza użytkownika, czyli wczytuje każdą współrzędną po kolei. Oczywiście inne elementy zabezpieczające, mam typu, tylko jeden czteromasztowiec itp. chodzi tylko zabezpieczenie się przed tym jak użytkownik je rozkłada, na mapie.
Link do planszy 10x10 z jednym cztero masztowcem, bo nie rozumiem do końca twojej metody ...
http://zapodaj.net/706cf2670109.jpg.html
Zanim go postawię, sprawdzam pole (2,1) aż do pola (3,6) 'A' liczę jako 1. Tak trochę bez sensu. Mógł byś na tym przykładzie, wyjaśnić dla pionowej orientacji, jeszcze raz ... będę bardzo wdzięczny.

0

Maszt nr1 statku czteromasztowego jest na pozycji (3,2), więc startujemy sprawdzenie od (2,1) i zwiększamy y do jego max czyli do (2,6). Następnie zwiększamy x i mamy (4,1) i znów zwiększamy y do 6. I tak sprawdzamy aż osiągniemy największy punkt czyli (4,6). Oczywiście za każdym razem sprawdzamy czy jest statek i przerywamy sprawdzanie jeżeli jest.

0

aha rozumiem. A jeszcze zostają pola (3,1) (3,6) jeżeli statek jest w takim położeniu, jak w/w linku, ale to już sprawdzam bezpośrednio, w zależności od orientacji, tak ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0