Statki - otaczanie

2012-01-02 12:59

Rejestracja: 10 lat temu

Ostatnio: 7 lat temu

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ę.

Lekcja na dziś: pętle. - Shalom 2012-01-02 13:54

Pozostało 580 znaków

2012-01-02 16:14

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

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

edytowany 1x, ostatnio: rafal92909, 2012-01-02 16:15

Pozostało 580 znaków

2012-01-02 17:17

Rejestracja: 8 lat temu

Ostatnio: 6 lat temu

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?

edytowany 1x, ostatnio: michal_2, 2012-01-02 17:20

Pozostało 580 znaków

2012-01-03 08:29

Rejestracja: 8 lat temu

Ostatnio: 1 miesiąc temu

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';
          }
     }
}
edytowany 2x, ostatnio: gswidwa, 2012-01-03 08:35

Pozostało 580 znaków

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