GithubHelp home page GithubHelp logo

roboprojekt's People

Contributors

amazonkaarya avatar anezkamll avatar befeleme avatar encukou avatar ivet1987 avatar jureckovak avatar myshiczkah avatar vahalova avatar yaplik avatar zstankova avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

roboprojekt's Issues

Otestovat efekty políček

Napsat testy a otestovat již hotové efekty políček z PR #137 :

  • hole
  • pusher
  • gear
  • laser - otestovat, jestli funguje správně trasování laseru i skrz křižovatky laserů
  • flag
  • repair

Hlavně otestovat správné přidítání/odečítání zranění, odečítání životů a následné (ne)oživení robota.

Naučit roboty střílet laserem

Přidat robotí metodu na střílení laserem. Laser robota neprochází zdí a zasáhne pouze prvního robota v cestě. Laser putuje přes hrací plochu dokud nenarazí na zeď nebo robota. Robot zasažený laserem získá jedno zranění. Roboti s PowerDown nestřílí, ale můžou být zasaženi.

Odstranit Tile(0, 0)

Když je v JSON mapě prázdné políčko (id=0), je reprezentováno pomocí Tile(path=0, rotation=0):

roboprojekt/backend.py

Lines 58 to 66 in 29125f3

for data in layer['data']:
id = get_tile_id(data)
if id == 0:
tile = Tile(0, 0)
else:
rotation_index = get_tile_rotation(data)
rotation = rotation_dict[rotation_index]
tile = Tile(rotation, paths[id])
tilelist_layer.append(tile)

Ve frontendy je pak pro path=0 speciální logika:

roboprojekt/frontend.py

Lines 43 to 47 in 29125f3

for key, value in state[layer].items():
rotation = value.rotation
path = value.path
if path != 0:
img = pyglet.image.load(path)

Nebylo by lepší takovéhle „nepolíčko“ do seznamu tilelist_layer vůbec nedávat?


Na tomhle miniproblému nic dalšího nezávisí. Doporučuju někomu, kdo se v datovém modelu ještě úplně neorientuje (a má nějakou tu hodinku času). Jestli už teď víš jak to vyřešit, přenech to někomu jinému (nebo lépe, nabídni se jako kouč).

Vytvořit rozhraní hry

Napsat program, který vykreslí dvě statické části rozhraní - mapu a budoucí interaktivní část, viz obrázek.

Větší mapy

Budeme potřebovat načítat větší mapy.
Aktuálně program neschroustá mapu rozšířenou o startovací pásek 12x4.

Vytvořit testovací mapu 12x16 a upravit kod, aby se zobrazovala celá.

Chybí mapa

Už je tu dost políček na jednoduchou testovací mapu: s jednou vrstvou, bez otočených políček. Nemusí být vůbec hratelná nebo složitá. Neměla by být symetrická, aby bylo poznat že se správně načte.

Pro sdílené mapy použijte Tiled 1.2 (jestli máš starší verzi a chceš dělat mapy, ozvi se na Slacku).

Budoucnost

  • Hru bude řídit server, ke kterému se budou přihlašovat klienti (speciální sraz)
  • Power Down (#232)
  • Vyřešit odpojování klientů (#384)
  • Z grafiky bude poznat, co se na herní ploše děje (#308)
  • Sepsat návod (#50)

Rozšíření:

  • Na přihlašovací obrazovce půjde vybrat robota a pojmenovat ho
  • Hra obsahuje návod přímo v sobě
  • Klient bude zabalený jako spustitelný soubor pro Windows (PyWorking, možná v červnu)
  • Nasadit server v cloudu

Použít třídu na efekt políčka

„Obrázky“ políčka jsou aktuálně reprezentovány jako dvojice (ID políčka, rotace). Dvojice není úplně ideální: když z ní chci jednotlivé prvky, musím dělat buď:

  • value[0] a value[1] (takže není poznat co dostávám), nebo
  • coordinate, rotation = value (což je super do té doby, než budu potřebovat další kousek informace, a bude potřeba všechno předělat na trojice).

Použijte na to místo dvojice třídu.

Chybí obrázky políček

  • zeď
  • vlajka (1-8)
  • startovací políčka (1-8)
  • laser (začátek, paprsek)
    • jednoduchý
    • dvojitý
    • trojitý
  • posuvníky (pushers) (1/3/5 a 2/4)
  • díra
  • zem
  • pohyblivý pás
    • 1 rovný
    • 1 křižovatka
    • 1 zatáčka (doprava, doleva)
    • 2 rovný
    • 2 křižovatka
    • 2 zatáčka (doprava, doleva)
  • Otáčecí kolečko (doprava, doleva)
  • Opravovací políčko
    • Vylepšovací políčko

Zařídit, aby se robot při pohybu zarazil o zeď

Issues #84 (pohyb robota) a #82 (načítání efektů políček) vypadají že budou co nevidět vyřešené.
Myslím že je čas na první efekty políček!
Doporučuju se napřed zaměřit na zdi, než na ty ostatní.
Můžete přitom doladit, jak jsou efekty políček reprezentovány v kódu ­­– a zvášť jak reprezentujete zeď, #45.

⚠ Předělat strukturu dat

  • Políčka na jedné souřadnici by měly být u sebe, v jednom seznamu.
  • Roboti by si měli pamatovat svoje souřadnice.

Vytvořit třídu rotace

V backendu ve funkci move nahradí tento if:

if direction == 0:
    y += distance
elif direction == 90:
    x += distance
elif direction == 180:
    y -= distance
elif direction == 270:
    x -= distance

Jak vyřešit zeď?

Z UML diagramů zůstalo nedořešené téma, jak bude definovaná zeď v rámci efektu políčka.
Otevírám tedy tímto téma k zamyšlení a diskusi.
Souvisí s #22.

Odstranit "WIP" z API

Věcem které se používají v jiném kódu, jako názvy souborů a funkcí (from jmeno_souboru import jmeno_funkce), počet argumentů funkce (jmeno_funkce(1, 2, 3)) se říká API (application programming interface). Když se API nějaké funkce změní (přejmenuju soubor, změním počet argumentů), kód který tu funkci používal přestane fungovat.

Poznámky o tom, že je něco nedodělané, by neměly být součástí API. Pak totiž vznikají věci jako:

from backend_WIP import get_tiles, get_coordinates, get_data

… které bude potřeba všechny opravit, až se backend „dodělá“. (Kdy to bude? Žádný kód není úplně hotový a perfektní, jsou v něm jen nedodělky s větší nebo menší prioritou.)

Poznámky "WIP" stačí mít mít v komentářích, dokumentaci, nebo issues.

Mapy 4, 5, 6 nefunguji

Opravit mapy - nyni jejich nacitani kolabuje: na cestach k souborum, na spatnem tilesetu atd.

Umírání

Když robot vyjede z mapy, tak spadne hra.

Dopsat README

Soubor README.md je vizitka projektu; GitHub ho ukazuje na hlavní stránce. Měly by tam být věci jako:

  • co ten program dělá
  • jak to nainstalovat (většinou předpokládám že čtenář má aktivované virt. prostředí, ale ten předpoklad tam zmíním),
  • jak to spustit
  • jak spustit testy
  • jak se zapojit (zatím asi nechcete aby se do toho zapojovali cizí lidi)

Nepředávat konstanty jako argumenty

Všemi velkými písmeny, např. WIDTH, se tradičně pojmenovávají konstanty – proměnné, které mají vždycky stejnou hodnotu.
Takové hodnoty není potřeba předávat funkcím jako argumenty. Použijte globální proměnnou (a jestli je nadefinovaná v jiném modulu, naimportujte si ji).

Přidat k mapě roboty

Aktuálně je stav hry jen mapa (slovník souřadnice → seznam políček). Bude k tomu potřeba přidat i seznam robotů, a případně pak nějaké zdi nebo jiné věci.

Udělejte si na stav hry dataclass, který bude obsahovat mapu a roboty. Roboti by se měli objevit na počátečních políčkách.

Přidat dokumentační řetězce

Čím víc lidí (nebo kousků kódu) používá nějakou funkci, tím je k ní důležitější napsat dokumentaci – popis toho, co ta funkce dělá. Člověk si může číst samotný kód, ale tam není všechno.

Dobrá jména funkcí a argumentů už jsou dokumentace sama o sobě. Třeba:

def add(a, b):
    return a + b

… je OK pro funkci, kterou používám někde níž v tom samém souboru. Když si ale jen přečtu kód, není jasné např. jestli je tuhle funkci dobré zavolat na řetězce, add("Hello, ", "world!").

def add(a, b):
    """
    Add two numbers

    `a` and `b` should be numbers (int or float).
    Returns the sum.
    """
    return a + b

Velké projekty, kde je potřeba aby se s kódem mohl každý co nejrychleji seznámit a korektně ho měnit, to berou fakt vážně, a dokumentace je často delší než samotný kód – viz třeba tenhle kód z Javy.
Používají se i nástroje, které ověří že každá funkce a každý argument jsou zdokumentované. To už je docela extrém (u mladšího projektu se pak může stát, že se změní kód ale neaktualizuje dokumentace, a dokumentace co neodpovídá kódu je horší než žádná dokumentace). Ale je dobré se u každého argumentu aspoň zamyslet, jestli o něm jméno říká všechno co je potřeba.

Do dokumentačních řetězců (viz materiály, nebo do vyhledávače dej docstring) je dobré psát co funkce dělá, jaké bere argumenty, co vrací. U složitějších struktur (seznam dvojic slovníků souřadnic) je dobré uvést příklad, aby si to člověk líp uvědomil
Do normálních komentářů je dobré psát jak se to dělá, jak funkce postupuje – věci, které nezajímají toho, kdo pak bude funkci volat.
Například:

def get_coordinates(data):
    """
    Get a list of tile coordinates for a map

    `data` is a dict loaded from a Tiled 1.2 JSON file.
    Returns a list of all tile coordinates, for example:
       [(0, 11), (0, 10), (0, 9), ..., (0, 0), (1, 11), (1, 10), ..., (11, 1), (11, 0)]
    """

    # Get the size of the game board from JSON
    map_field_height = data['layers'][0]['height']
    map_field_width = data['layers'][0]['width']

    # Create map - list of x, y tuples 
    # Transformation with reversed is required as the JSON tiles
    # are in the opposite y direction
    coordinates = []
    for y in reversed(range(map_field_height)):
        for x in range(map_field_width):       
            coordinates.append((x, y))

    return coordinates

Co se „štábní kultury“ týče, je dobré mít jeden řádek s krátkým (jednořádkovým!) popisem, pak řádek vynechat, a pak rozepsat detaily. Všechno v „trojitých dvojitých“ uvozovkách, """.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.