New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Oddělit načítání od zbytku backendu do separátního modulu #108

Open
anezkamll opened this Issue Nov 27, 2018 · 6 comments

Comments

Projects
None yet
3 participants
@anezkamll
Contributor

anezkamll commented Nov 27, 2018

No description provided.

@anezkamll

This comment has been minimized.

Contributor

anezkamll commented Dec 9, 2018

S @befeleme jsme došly k následujícímu postupu: Výstupem z loadingu by měl být slovník s koordináty jako klíčem a hodnotou v podobě seznamu obsahujícím v tuto chvíli věci, které se bereme z JSONu pro inicializaci objektů třídy Tile, tedy nyní path, direction a efekty políčka. Hodnoty určující směr specifické pro JSON převedeme na stupně v rámci loadingu.

@befeleme

This comment has been minimized.

Contributor

befeleme commented Dec 11, 2018

Peru se s tím úkolem a bojím se, že jsem se už zacyklila.

Tyto funkce pracují s údaji z json souboru a postupně vytvářejí data k poskládání objektů hry:

get_data(map_name)
get_coordinates(data)
get_paths(data)
get_types(data)
get_tile_id(tile_number)
get_tile_direction(tile_number)
get_board(data)

Tyto funkce jsem odmontovala do zvláštního souboru a potřebuji některé upravit.
Chci docílit toho, že v backendu zavolám jen jednu komplexní funkci z loadingu, která vrátí vše potřebné, aby se backend korektně vytvořil.
Začala jsem proto přemontovávat nejkomplexnější funkci je get_board(), která dostane nově jako argument název mapy. Protože se nám do kódu mezi tím přidaly k loadingu také sizes, tato funkce vrátí dvojici: board a sizes.

Předělávám funkci get_board, aby neinicializovala objekt třídy Tile, ale vracela board: slovník s daty k tomu potřebnými:
{(11, 0): [(0, './img/squares/png/ground.png', 'ground'), (...)]...}

V backendu zato mám funkci get_start_state(), které předám název mapy a uvnitř zavolám loading.get_board(). Zde přestávám vidět smysl všech úkonů, protože začínám s transformací:

  • coordinates nechávám
  • směr převedu na objekt třídy Direction
  • směr, cestu, type(s) použiju k inicializaci objektů Tile. Tiles na stejných koordinátách poskládám do seznamu. Vytvořím slovník {(11, 0): [Tile, Tile, Tile]...}

Zde si uvědomuji, že téměř ty stejné transformace (jen na syrových datech, nikoli objektech) se provádí v get_board() v loadingu. A že pokud větší cíl je umožnit načítání dat v jiných formátech, pak v tom backendu už teď mám transformací nějak moc, mám pocit, že dubluji věci a tato cesta není nejlepší. Můžu explicitně vyžadovat v backendu, že data, která dostaneme z nečítacího souboru, musí vždy mít formát:
{(11, 0): [(0, './img/squares/png/ground.png', 'ground'), (...)]...}
a žádný jiný?

@anezkamll

This comment has been minimized.

Contributor

anezkamll commented Dec 11, 2018

Nevím, jestli tady nejde o to, na co jsme narazily v neděli, zda dokážeme bez znalosti možností různých vstupů zajistit určitý formát výstupu. Takže bych to asi udělala tak, že to teď bude ten formát vyžadovat a bude to fungovat, a pak můžem domýšlet, co s tím dál.

@encukou

This comment has been minimized.

Member

encukou commented Dec 11, 2018

@befeleme

This comment has been minimized.

Contributor

befeleme commented Dec 11, 2018

Do modulu loading naimportuju tridu Tile z backendu, a do modulu backend naimportuju get_board() z loadingu? Tuto moznost jsme odhodily kvuli obavam ze zacykleni importu.
@anezkamll, je mozne, je popisuju to stejne, jen mi trvalo dva dny, nez jsem pochopila souvislosti :).

@encukou

This comment has been minimized.

Member

encukou commented Dec 11, 2018

Tuto moznost jsme odhodily kvuli obavam ze zacykleni importu.

Cyklické importy se dají řešit, viz materiály.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment