NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Struktura pro 2D mapu

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:23.12.2017 18:21

Ahoj,

pracuji teď na jedné hře, jejíž součástí je 2D mapa uložení jako 2D pole.
Potřeboval bych ale poradit, jak co nejefektivněji definovat jednotlivé bloky, a potom je přiřazovat do mapy.

Jednak potřebuji definovat obecně typy bloků (hlína, zeď, tráva atd..) a jejich vlastnosti jako třeba tvrdost, texturu atd.

Dále bych pak potřeboval vytvořit strukturu reprezentující každý daný blok v mapě, který bude mít přiřazený typ bloku z již definovaných, ale každý jednotlivý blok může mít ještě své další konkrétní vlastnosti (třeba na kolik % je zničený, kdo tento konkrétní blok položil atd.)

Mohl by mi prosím někdo poradit jak konkrétně to co nejúsporněji zaznamenávat ?

Editováno 23.12.2017 18:21
Odpovědět
23.12.2017 18:21
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jenkings
David Hartinger:23.12.2017 19:26

Na tohle si uděláš normálně třídy. Není potřeba tam řešit, aby to bylo úsporně uložené, ty struktury mají pár bajtů. Co se potom řeší je třeba kolize pomocí Octree a podobné optimalizace, ale určitě ne velikost typu toho políčka.

Nahoru Odpovědět
23.12.2017 19:26
New kid back on the block with a R.I.P
Avatar
Jenkings
Tvůrce
Avatar
Odpovídá na David Hartinger
Jenkings:23.12.2017 19:42

díky, jen si nevím rady, jak navázat konkrétní bloky na mapě na definice těch základních bloků

Nahoru Odpovědět
23.12.2017 19:42
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Neználek
Člen
Avatar
Odpovídá na Jenkings
Neználek:23.12.2017 20:57

Trochu jsem si upravil terminologii

  • typ bloku = definice základního bloku
  • blok = konkrétní blok na mapě

a vyšel mi z toho následující kód:

public enum TypBloku {

    HLINA(2, 1),

    ZED(10, 2),

    TRAVA(3, 3);

    private final int tvrdost;

    private final int textura;

    private TypBloku(int tvrdost, int textura) {
        this.tvrdost = tvrdost;
        this.textura = textura;
    }

    public int getTvrdost() {
        return tvrdost;
    }

    public int getTextura() {
        return textura;
    }

}
public class Blok {

    private final TypBloku typ;

    private float procentoZniceni;

    public Blok(TypBloku typ, float procentoZniceni) {
        this.typ = typ;
        this.procentoZniceni = procentoZniceni;
    }

    public float getProcentoZniceni() {
        return procentoZniceni;
    }

    public void setProcentoZniceni(float procentoZniceni) {
        this.procentoZniceni = procentoZniceni;
    }

    public TypBloku getTyp() {
        return typ;
    }

}
public class Mapa {

    private final int sirka;

    private final int vyska;

    private final Blok[] bloky;

    public Mapa(int sirka, int vyska) {
        this.sirka = sirka;
        this.vyska = vyska;
        this.bloky = new Blok[sirka * vyska];
    }

    public int getSirka() {
        return sirka;
    }

    public int getVyska() {
        return vyska;
    }

    public Blok getBlok(int x, int y) {
        int index = getIndex(x, y);
        return this.bloky[index];
    }

    private int getIndex(int x, int y) {
        return y * sirka + x;
    }

}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.12.2017 20:57
Avatar
Jenkings
Tvůrce
Avatar
Odpovídá na Neználek
Jenkings:23.12.2017 21:02

Super, mockrát děkuji :) pořád jsem na to šel nějak špatně a měl jsem to zbytečně překombinované :)

Editováno 23.12.2017 21:02
Nahoru Odpovědět
23.12.2017 21:02
Největší časovou náročnost má výpočet časové náročnosti..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.