Gra bazowana na kafelkach - kolizja

Gra bazowana na kafelkach - kolizja
Szinek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Hej, chcę napisać gre bazowaną na kafelkach (tile based game).
Aktualnie mam to:
user image
Zapis poziomu i malowanie:

Kopiuj
int level[][] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; public void paint(Graphics g) {
        g.setColor(Color.black);
        g.fillRect(0, 0, 800, 600);
        g.setColor(Color.blue);
        {
            for (int i = 0; i < level.length; i++) {
                for (int j = 0; j < level[0].length; j++) {
                    if (level[i][j] == 1) {
//nothing
                    }else if (level[i][j] == 2) {
                        g.fillRect(j * 32, i * 32, 32, 32);
                    }
                }
            }
        }

Jakieś pomysły w jaki sposób mogę sprawdzać kolizję z każdym kafelkiem o cyferce 2? Myślałem nad tworzeniem nowego Rectangle() dla każdego z nich..

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
0

dlaczego niektórzy ludzie programujący na frameworkach są nastawieni na to, że wszystko już ktoś za nich zrobił?

zrób metodę sprawdzającą kolizje pomiędzy dwoma prostokątami, algorytmów jest mnóstwo na internecie, na pewno sobie poradzisz.

i masz beznadziejnie sformatowany kod inicjalizacji mapy

Szinek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

zrób metodę sprawdzającą kolizje pomiędzy dwoma prostokątami,

Miałem zamiar tak zrobić, ale tych prostokątów będzie multum, setki.

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
3

a jak inaczej chcesz to zrobić? I tak dopiero przy kilku milionach pewnie przestałby wyrabiać

Szinek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

No nic, w takim razie czeka mnie dużo copy-paste.
Chciałem jeszcze zrobić do tego mapeditora, ale w tym przypadku chyba mija sie z celem.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Jakie copy-paste? Co chcesz zrobić? Co jest na wejściu, a co ma być na wyjściu?

Szinek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0
Wibowit napisał(a):

Jakie copy-paste? Co chcesz zrobić? Co jest na wejściu, a co ma być na wyjściu?

Sopelek utwierdził mnie, ze mam dla każdego, hm, odcinka kafelków, które są prostokątami tworzyć nowe Rectangle() i na ich podstawie wykrywać kolizje - chyba dobrze zrozumiałem.
user image
Prosta obrazek ilustrujący to.

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1571
0

Po pierwsze to ty zrób edytor map do tego, bo ta tablica to jedno wielkie WTF. Już lepiej mapę zrobić jako zwykły txt tak jak teraz masz tablicę albo zapis do xml, tylko wtedy musiał byś edytor GUI zrobić.

xxx_xx_x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 365
1

Możesz, nie musisz... alternatywą może być po prostu sprawdzanie na tablicy level[][], musisz tylko wiedzieć gdzie znajduje się testowany obiekt wewnątrz level[][], może być w całości w jednym kafelku, a może być w kilku, np skok po skosie. oczywiście trzeba jeszcze uwzględniać przesunięcia wewnątrz tych pul.

Szinek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0
xeo545x39 napisał(a):

Po pierwsze to ty zrób edytor map do tego, bo ta tablica to jedno wielkie WTF. Już lepiej mapę zrobić jako zwykły txt tak jak teraz masz tablicę albo zapis do xml, tylko wtedy musiał byś edytor GUI zrobić.

Mapa ma wymiary 25x18, zapisuje ją w tablicy tak jak wyżej. Jedynka to kafelek innego koloru, dwójka kolejnego, zero jest puste (tło).
Edytor będzie zapisywał do pliku txt, który później będzie odczytywany tak jak tablica.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.