Bitka

Rok za oddajo: petek, 14. januar 2022, 23.59

Marsovske ladje imajo naslednjo napako: neumne so. Predvidljive. Letajo po določenem območju in se odbijajo od njegovih meja po pravilih fizike.

Poleg tega imajo to napako: če ena ladja eksplodira in v območje ekplozije zapelje druga ladja, še preden se eksplozija razkadi, bo eksplodirala tudi ta, druga ladja. To se potem nadaljuje.

Torej: če razstrelimo eno ladjo, jih lahko posledično uničimo cel kup.

Za urjenje pilotov je potrebno narediti simulator.

  • Za oceno 6: Sestavi program, ki nariše eno ladjo naključne barve, ki se pojavi na naključnem mestu in giba v naključni smeri (glej detajle spodaj!). Ko pride do roba, se odbije, tako kot ste se učili pri fiziki. Odbija naj se približno dvajset sekund, nato se program konča.

  • Za oceno 7: Enako kot za oceno 6, vendar mora program risati in voditi 30 ladij različnih naključnih barv, ki se gibajo v različnih naključnih smereh.

  • Za oceno 8: Poleg tega, kar ste naredili za oceno 7, naj bo na sliki še krog, katerega središče je tam, kjer je trenutno miška (in se seveda premika z miško). Ko uporabnik klikne, naj krog obstane, kjer je in ne sledi več miški. Program naj se konča, ko prva izmed žogic zadane žogo, ki smo jo postavili s klikom.

  • Za oceno 9: Sprogramirajte simulator tako, da teče, dokler je kaj eksplodiranih ladij, ko izgine zadnja, pa se izpiše, koliko ladij je eksplodiralo. S tem se program konča.

  • Za oceno 10: Sprogramirajte simulator z deset težavnostnimi stopnjami. Na začetku vsake stopnje se napiše, koliko ladij je v igri in koliko jih je potrebno uničiti. Na koncu, ko izgine zadnja eksplodirana ladja, se igra nadaljuje na naslednji stopnji, če je eksplodiralo dovolj ladij. Sicer pa se pojavi okno, v katerem piše, koliko ladij je eksplodiralo in da je to premalo; simulacija se ponovi na isti stopnji. Izmislite smiselna števila ladij. Stopnje se morajo seveda razlikovati.

Spodnji video kaže, kaj morate narediti. Ker sem ga naložil na YouTube, ki ni tako varen kot FRIjeva Učilnica, za vsak slučaj pišem o "Žoganju" in "žogah", da Marsovci, če zaidejo na YouTube, ne bodo vedeli, za kaj gre. Prosim, da tudi vi ne čvekate naokrog o tem.

Detajli:

  • Polmer krogov, ki predstavljajo ladje, naj bo 10 točk.
  • Polmer kroga, ki predstavlja miš, in polmer eksplodirane ladje naj bo 30 točk.
  • Eksplodirana ladja naj izgine po štirih sekundah.
  • Vse ladje naj se premikajo z enako hitrostjo, namreč 5 točk na eno iteracijo zanke; v zanko dodajte 0.02 sekunde pavze. (Namig: izberite začetni kot, potem pa iz tega izračunajte komponenti x in y; geometrija je razložena v zapiskih o želvi. Kot atributa žoge pa potem hranite komponenti in ne kota, saj boste na ta način bistveno lažje obravnavali odboje.)

V modulu risar imate dve doslej zamolčani funkciji, povezani z miško:

  • Funkcija risar.miska() vrne terko, ki vsebuje koordinati miške, če se le-ta nahaja znotraj risarjevega okna (sicer pa koordinato, kjer je to okno zapustila).

  • Funkcijarisar.klik() vrne koordinate, na katerih je uporabnik kliknil miško. Če uporabnik po zadnjem klicu funkcije ni klikal (vsaj ne znotraj okna) funkcija vrne None.

Če je krog nek krog, ga pobarvate z

c = krog.pen().color().lighter()
c.setAlpha(192)
krog.setBrush(c)

Če želite spremeniti polmer kroga krog na, recimo, 30, pokličete krog.setRect(-30, -30, 60, 60). Če ga želite skriti, pokličite krog.hide().

Za prikazovanje sporočil uporabite QMessageBox.information(None, "ime okna", "sporocilo"). Za to boste morali uvoziti from PyQt5.QtWidgets import QMessageBox.

Testov tokrat ni.