Statki C++

0

Witam, napisałem gre w statki z użyciem biblioteki FLTK. Wszystko działa poprawnie. Ale chciałbym udoskonalić mój program i wprowadzić takie coś że program rozpoznaje czy statek jest całkowicie zatopiony zmieniając przy tym kolor pola. Pola są indeksowane w mapie. Wiem że trzeba najpierw sprawdzić czy trafiliśmy ale nie wiem jak sprawdzić pola na około pola które trafiliśmy. Macie jakieś pomysły?

1

Na leniucha, po indeksach:

[x-1, y-1], [x, y-1], [x+1, y-1],
[x-1, y  ], [x, y  ], [x+1, y  ],
[x-1, y+1], [x, y+1], [x+1, y+1]

Gdzie x i y to współrzędne twojego pola, a cała reszta, to najbliżsi sąsiedzi.

Jeżeli chcesz oszczędzić palców, możesz do tego użyć matryc:

M1 = { {x-1, y-1}, {x+1, y+1} }
M2 = { {x, y}, {x, y} }

Dla każdego pola M1, które nie jest polem M2

Jasno widzisz, że na twoim przykładzie M2 ma wymiary 1x1, więc możesz ją potraktować jak zwykły punkt, z czego wychodzi nam taki przekład:

for(auto point : matrix)
    if(point != Point(x, y)){ /* ... */ }

Jesteś w stanie wydzielić taką matrycę (ang. submatrix) używając zarówno drobnej własnej klasy, jak i korzystając z rozwiązań dedykowanych bibliotek, takich jak ta: http://arma.sourceforge.net/docs.html

1

rozwiązań jest całe multum.
Problem polega na tym, że każe pasuje do innej implementacji.
Nic konkretnego nie pokazałeś, więc nie wiadomo jaką konkretnie odpowiedź ci udzielić.
Prawie na pewno udzielone odpowiedzi nie będą działać z twoim kodem, mimo że będą poprawne.

0

mam coś takiego:
if (m[pole-10]!=1 && m[pole+10]!=1 && m[pole-1]!=1 && m[pole+1]!=1)
{
std::cout<<"Trafione zatopione"<<std::endl;

tylko że to nie działa dla pól na bokach i nie wiem jak to napisać żeby nie było tyle if.

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