Malý projektJednoduchá20 XPÚloha 1/8

Trs trávy

Zadanie

Vytvor program s plátnom 700 × 500. Kliknutím ľavým tlačidlom myši nakreslí na mieste kliknutia trs trávy: aspoň 5 zelených čiar (stebiel), ktoré začínajú v bode kliknutia a končia najviac 30 bodov vľavo alebo vpravo a najviac 50 bodov nad ním. Pravým tlačidlom sa celý obrázok vymaže.

Stebla môžu mať náhodný smer aj dĺžku.

Program beží v simulácii tkinteru priamo v prehliadači - po spustení uvidíš okno a môžeš doň klikať. Testy klikajú a kontrolujú, čo sa na plátne nakreslilo.

Príklady

  • Volanie

    from tkinter import _mente as okno
    
    
    def v_poriadku(ciara, x, y):
        zaciatok = (round(ciara.coords[0]), round(ciara.coords[1]))
        koniec = (round(ciara.coords[-2]), round(ciara.coords[-1]))
        if koniec == (x, y):
            zaciatok, koniec = koniec, zaciatok
        return zaciatok == (x, y) and abs(koniec[0] - x) <= 30 and 0 <= y - koniec[1] <= 50
    
    
    okno.check("platno 700x500", okno.size() == (700, 500), f"rozmer je {okno.size()}")
    okno.click(350, 250)
    steble = okno.items("line")
    okno.check("klik nakreslil trs", len(steble) >= 5, f"pocet ciar: {len(steble)}")
    okno.check("steble su v povolenom rozsahu", steble and all(v_poriadku(c, 350, 250) for c in steble))
    okno.check("trava je zelena", steble and all(okno.greenish(c.fill) for c in steble))

    Očakávaný výstup

    platno 700x500: OK
    klik nakreslil trs: OK
    steble su v povolenom rozsahu: OK
    trava je zelena: OK
  • Volanie

    from tkinter import _mente as okno
    
    okno.click(100, 400)
    okno.click(600, 100)
    okno.check("dva trsy", len(okno.items("line")) >= 10)
    okno.click(300, 300, button=3)
    okno.check("prave tlacidlo zmaze obrazok", len(okno.items()) == 0, f"na platne ostalo {len(okno.items())}")

    Očakávaný výstup

    dva trsy: OK
    prave tlacidlo zmaze obrazok: OK

Po odoslaní riešenie overí ešte 1 skrytý test: klik na inom mieste.

Python sa spustí pri prvom spustení kódu.

Ctrl+Enter spustí program. Tab odsadí riadok. Esc a potom Tab opustí editor.

Vstup (stdin)

Každý riadok = jedno volanie input().

Výstup

Nápovedy

Najprv to skús sám. Každá nápoveda prezradí o niečo viac - a trochu zníži odmenu.

Bez prihlásenia sú nápovedy zadarmo - ale ani XP sa neudeľujú.

Riešenie

Riešenie sa odomkne po poslednej nápovede.