Statki - otaczanie

0

Witam.

Mam pewien problem, mianowicie nie wiem jak za bardzo zrobić otaczanie miejsca w którym można postawić statek.(grę tworzę w Allegro). Może podam na przykładzie:

0000000000
0000000000
0000100000
0000000000

Tam gdzie jedynka to stawiam statek, i w drugiej tablicy chciałbym aby pola które można wykorzystać wyglądały następująco:

0000000000
0000200000
0002120000
0000200000

Tak na sztywno pisane to coś takiego:

tab_ota[y][x]=1;
tab_ota[y][x+1]=2;
tab_ota[y][x-1]=2;
tab_ota[y-1][x]=2;
tab_ota[y+1][x]=2;

Ale chciałbym to jakoś usystematyzować abym mógł potem rozmieszczać statki według tego algorytmu. Czy ktoś ma jakąś wskazówkę ;) Z góry dziękuję.

0

jak dobrze cie zrozumiałęm to chcesz otoczyc statek tak zeby nastepny sie z nim nie stykal.
to wg mnie powinno to wygladac tak:

 
for i:=x-1 to x+1 do
for j:=y-1 to y+2 do
T[i,j]:=2;
T[x,y]:=1;

gdzie x i y to pozycja statku

(statki nie mogą sie stykać narożnikami też więc twoje obtoczenie dwujkami nie nie jest do konca prawidlowe

0

Nie wiem, konradinho, o co Ci chodzi, wytłumacz dokładniej bo nie rozumiem. "Pola które można wykorzystać" - tzn. do czego? Tam gdzie można postawić dalej statek?

0

po każdym wstawieniu statku sprawdzasz tablicę w poszukiwaniu znaku '1', a potem obszar wokół tego punktu wypełniasz '2'

 
for(int y=0; y<dlugosc1; y++) //dlugosc 1 - wysokosc tablicy
{
     for(int x=0; x<dlugosc2; x++) // dlugosc 2 - szerokosc tablicy
     {
          if(tablica[y][x] == '1')
          {
               if(tablica[y-1][x] != '1') //jak masz pare jedynek obok siebie, te warunki zagwarantuja ci, ze jedynki wokol "jedynek" nie zostana nadpisane :) (tylko w przypadku wielomasztowcow)
                 tablica[y-1][x] = '2';
               if(tablica[y+1][x] != '1')
                 tablica[y+1][x] = '2';
               if(tablica[y][x+1] != '1')
                 tablica[y][x+1] = '2';
               if(tablica[y][x-1] != '1')
                 tablica[y][x-1] = '2';
          }
     }
}

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