Semestrálny projekt v zimnom semestri


Zadanie

Napíš program, ktorý umožní jednému alebo viacerým hráčom zahrať sa nejakú (najlepšie doskovú) hru. Tvoj program vykreslí hraciu plochu, umožní hráčom ťahať, bude pritom kontrolovať prípustnosť ťahov a zároveň bude kontrolovať, či niektorý z hráčov nevyhral, resp. neprehral.

Témy

Vyber si jednu z týchto hier, alebo sa nimi inšpiruj:

Môžeš sa inšpirovať online hrami na internete, napríklad

Pri výbere hry mysli na to, že by sa mala ovládať najmä myšou (klikanie, ťahanie), bolo by dobre, keby obsahovala aspoň jeden animovaný prvok (striedanie niekoľkých fáz animácie, napríklad postavičky hráča).

Je vhodné si tému projektu nechať schváliť cvičiacimi, aby si mal istotu, že to čo ideš programovať je dobrá téma. Samozrejme, že tému si môžeš hocikedy zmeniť.

Pravidlá vybranej hry si môžeš prispôsobiť alebo aj dosť radikálne zmeniť.


Požiadavky

Tvoj program musí spĺňať nasledovné požiadavky:

  • program musí byť realizovaný ako inštancia takejto triedy Program, napríklad:

    import tkinter
    
    class Program:
        def __init__(self):
            ...
            tkinter.mainloop()
    
        ...
    
    Program()
    
  • okrem tejto triedy definuj aspoň ďalšie dve:

    1. pre popis a ovládanie hracej plochy

    2. pre popis a funkčnosť nejakej časti hráča, napríklad figúrky, kartičky, políčka, hráč, nepriateľ, …

  • tieto triedy využiješ v hlavnej triede Program (tieto pomocné triedy môžeš definovať buď v tom istom module alebo v ďalšom)

  • okrem definícií týchto tried a inštancie triedy Program, nepoužívaj žiadne globálne premenné ani funkcie

  • snaž sa čo najviac dodržiavať pravidlá správneho zápisu pythonovských programov (pozri napríklad Python štýl pre zápis programov)

Ďalej musí platiť:

  • grafika je realizovaná modulom tkinter:

    • na ovládanie hry použi udalosti myši (klikanie, ťahanie)

    • využi časovač (pomocou after())

    • môžeš využiť aj klávesnicu (ale hlavné ovládanie hry by malo byť ťahaním a klikaním myšou)

    • aspoň nejaká časť grafiky musí byť realizovaná obrázkami (.png, .gif), pričom musíš simulovať aspoň jednu animáciu (striedanie niekoľkých obrázkov v časovači) počas hry (nestačí, ak je iba na „úvodnej obrazovke“)

    • môžeš využiť aj také funkcie a vlastnosti tkinter, ktoré sme sa neučili

    • pre projekt môžeš využiť ľubovoľnú grafiku z internetu alebo z nejakej hry (ak neplánuješ nejako šíriť túto hru, inak by si mal dbať na legálne použitie grafiky)

  • program by mal čítať aj zapisovať aspoň jeden textový súbor, napríklad rozohranú partiu, úvodné nastavenie, rôzne nastavenia hry, tabuľka najlepších výsledkov a pod. (určite zapisovať a čítať viac informácií)

  • môžeš ešte použiť aj moduly PIL, random, math a json

Dopredu si dohodni s cvičiacimi, ak by mala tvoja téma problém s niektorou z týchto požiadaviek.


Hodnotenie

Projekt budú hodnotiť tvoji cvičiaci, ale musíš ho odovzdať na úlohový server L.I.S.T., pričom

  1. za splnenie všetkých požiadaviek bude základných 5 bodov (menej ako 5 bodov sa nepripočítava ku skúške)

  2. za umelecký dojem, pohodlné ovládanie, nové zaujímavé prvky, použitie nejakého náročnejšie algoritmu a pod. do 5 bodov - tieto body sa budú pridávať k základným 5 bodom

  3. projekt by si mal realizovať samostatne, bez cudzej pomoci, samozrejme, že môžeš rôzne problémy konzultovať s vyučujúcimi ale aj so svojimi kolegami

Takto získané body (aspoň 5) sa pripočítavajú k bodom ku skúške len vtedy, ak ich získaš ešte pred samotným termínom skúšky.