Arvutiteaduse instituut
  1. Kursused
  2. 2024/25 kevad
  3. Objektorienteeritud programmeerimine (LTAT.03.003)
EN
Logi sisse

Objektorienteeritud programmeerimine 2024/25 kevad

  • Kodutööd ja praktikumid
  • Loengud
  • Kursuse korraldus
  • IDE juhend
  • Süvendusrühm
  • Silumisest

Dungeons & Dudes

Selles ülesandes ehitame väga lihtsustatud lahingusimulaatori. Loome erinevad tegelased, kes suudavad omavahel duelle pidada. Duell kestab, kuni üks tegelastest langeb. Tegelased käivad kordamööda ja saavad enda käigu ajal vastast erinevate efektidega rünnata. Efektid kulutavad action pointe, mis taastuvad käigu lõpus. Efektid võivad olla ühekordse mõjuga või kesta mitu käiku, mõjudes vastase käikude alguses ja/või lõpus.

  • Loo abstraktne klass Dude, kes on kõigi tegelaste aluseks. Tal on muuhulgas järgnevad omadused: accuracy, armor, health ja action points. Lisaks on tal meetod void takeTurn(Dude attackTarget) ja boolean isAlive().
  • Loo interface Effect, milles on järgnevad meetodid:
    • void onHit(Dude effectTarget);, mille käivitab ründaja, kui vastane saab efektiga pihta
    • void onTurnStart(Dude effectTarget);, mille käivitab efektiga pihta saanud vastane iga oma käigu alguses
    • void onTurnEnd(Dude effectTarget);, mille käivitab efektiga pihta saanud vastane iga oma käigu lõpus
    • int requiredActionPoints();
    • boolean isExpired();
  • Loo Dude alamklassid Fighter ja Wizard. Neil on erinevad accuracy, armor, health ja action points taastumise kiirus. Fighter ja Wizard kasutavad ründamiseks erinevaid efekte.
  • Loo järgnevad Effect klassi implementatsioonid (võid ise täiendavaid välja mõelda):
    • WeaponAttack - vähendab pihta minemise hetkel vastase health
    • Knockdown - vähendab pihta minemise hetkel vastase actionPoints 0 peale
    • Firebolt - vähendab vastase käigu lõpus vastase health. efekt lõppeb pärast health vähendamist.
    • Spiderweb - vähendab vastase iga käigu alguses tema action points. efekt lõpeb, kui vastast on kahe tema käigu jooksul mõjutatud.

Rünnakud võivad ebaõnnestuda (vastasest mööda minna). Iga rünnaku pihta/mööda minemise tuvastamiseks kasutatakse valemit "d20 + ründaja täpsus >= vastase kaitse", kus d20 on juhuslik arv [1..20].

Ühele tegelasele saab korraga rakenduda mitu sama tüüpi effekti. Iga dude peaks ise arvet pidama, mis efektid teda hetkel mõjutavad ja iga efekt peaks ise arvet pidama, kui kaua ta veel kestab. Näiteks wizard saab vastasele kaks käiku järjest spiderweb visata, mis juhul mõjutavad vastast vahepeal korraga kaks eraldiseisvat spiderwebi.

Efekti-spetsiifiline loogika peaks olema vastava efekti klassis. Dude klassis olev ründamise loogika (takeTurn) peaks olema üldistatud ja kõigi tegelaste/efektide puhul täpselt ühesugune. Dude ei peaks teadma, mis alamklassid tal on ega mis konkreetseid efekte ründamiseks kasutatakse. Dude alamklassid teavad, mis efektidega nad rünnata oskavad, aga mitte seda, millega neid rünnata võidakse. Selle tulemusena on võimalik lisada uusi efekte ja Dude alamklasse, ilma et peaks teisi klasse muutma.

Kuidas Dude peaks valima rünnakuks sobiva efekti, kui ta ei tea konkreetsetest efektidest midagi? Hea mõte on lisada Dude klassi abstract method efekti valimiseks. Iga alamklass saab selle endale sobival viisil implementeerida.

Mõtle välja puudu olevad muutujad ja meetodid, nii et mäng toimiks. Tekita peameetod, mis tegelasi võitlema paneb ja tulemused välja kuulutab. Main meetod loob mängu alguses kaks tegelast. Pärast seda kutsutakse kordamööda dude objektidel takeTurn meetodit, kuni võitja on selgunud. Dude objektid peavad ise suutma välja mõelda, mida nad oma käigu ajal teevad. Võitluse ajal interaktiivselt sisendit ei küsita.

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused