ITI0011:Aardejaht

Allikas: Kursused
Redaktsioon seisuga 4. veebruar 2016, kell 11:49 kasutajalt Ago (arutelu | kaastöö)
Mine navigeerimisribale Mine otsikasti

Tagasi kursuse lehele

Xena on just lõpetanud pika sõjakäigu ning saabunud äsjavallutatud piirkonda. Selleks, et piirkond üles ehitada, on vaja kulda. Xena oli kuulnud jutte, kuidas piirkonnas olevat juba ammusest ajast palju varandust maa alla peidetud (arvatavasti mõne vana hõimkonna komme). Kaalunud võimalust tööga raha teenida, otsustab Xena hakata kulda maapõuest otsima. Kuna aga kulla otsimine konkreetselt alalt võtab aega, ei tahaks ta kogu ala läbi kaevata. Eesmärk oleks kogu kuld piirkonnas kokku koguda võimalikult väikese vaevaga.

Aardejaht on ühe mängija mäng, kus tuleb võimalikult kiiresti (väheste "kaevamiste" arvuga) leida üles kõik aarded.

Mäng toimub M x N (M rida, N veergu) laua peal, kus igas lahtris (edaspidi "ruudus") võib olla aare. Kõik ruudud on algselt mängija eest peidetud ehk siis mängija ei tea, kas ruudu all on aare. Kui mängija valib ühe ruudu, siis see ruut avatakse. Mäng kestab seni, kuni kõik aarded on üles leitud. Mängu jooksul avatud ruutude summa on mängija "aeg" - mida väiksem see number on, seda parem. Mängulauale peidetud aarete kogus on teada.

Põhiosa (4p)

Nõuded:

  • mängijalt küsitakse mängulaua suurus (M ja N)
  • mängijalt küsitakse aarete kogus (X)
  • programm genereerib M x N kaardi, mille peal on juhuslikult paigutatud X aaret
  • kasutaja valib ruudu (rida, veerg), mis tuleb avada
    • kui avatud ruudus ei ole aare, siis näidatakse välja number, mitu aaret on selle ruudu kõrval olevates ruutudes (iga ruudu küljes võib maksimaalselt olla 8 aaret).
  • mängijale kuvatakse jooksvalt leidmata aarete kogus, kasutatud avamiste kogu ja mängulaud peale igat käiku.
  • kui kõik aarded on leitud, küsib programm, kas mängija tahab uuesti mängida.

Näide:

Sisesta M (ridade arv), N (veergude arv), X (aarete arv): 3, 3, 3

Edukat kaevamist!

...
...
...
kaevamisi: 0, aardeid jäänud: 3
Mida kaevame (rida, veerg): 0, 0

1..
...
...
kaevamisi: 1, aardeid jäänud: 3
Mida kaevame (rida, veerg): 0, 1

11.
...
...
kaevamisi: 2, aardeid jäänud: 3
Mida kaevame (rida, veerg): 1, 1

11.
.+.
...
AARE!

kaevamisi: 3, aardeid jäänud: 2
Mida kaevame (rida, veerg): 2, 1
(1,0 pole mõtet kaevata, kuna 0,0 ümbruses oli üks aare ja see paikneb 1,1 ruudul)

11.
.+.
.3.
kaevamisi: 4, aardeid jäänud: 2
Mida kaevame (rida, veerg): 2, 2

11.
.+.
.3+
AARE!

kaevamisi: 5, aardeid jäänud: 1
Mida kaevame (rida, veerg): 2, 0

11.
.+.
+3+
AARE!

kaevamisi: 6, aardeid jäänud: 0

Mäng läbi! Kokku tehti 6 kaevamist.
Kas soovid veel mängida?

Lisaosa: kaardi avamine (1p)

Kaardi avamine minesweeperi moodi.

Kui avada ruut, mille ümbruses on 0 aaret, avada järjest kõik ruudud, mis samamoodi sisaldavad väärtust 0. Iga sellise 0 väärtusega ruudu ümbert avatakse kõik 8 ruutu.

Nõuded:

  • kui mängija satub 0 väärtusega ruudu peale, avatakse kogu tühi ala eelnevalt kirjeldatud loogika alusel.

Lisaosa: edetabel (1p)

Parimad tulemused jäätakse meelde koos nimega. Erinevate mänguseadete jaoks (laua suurus, aarete arv) on erinev edetabel. Meeles hoitakse kuni 10 parimat tulemust. Mängijal on võimalik jooksvalt vaadata edetabelit.

Nõuded:

  • kui mäng lõppeb tulemusega, mis mahub edetabelisse (on parem kui praegu edetabelis 10. kohal olev tulemus), küsitakse mängijalt nimi
  • mängija nimi peab sisaldama vähemalt 3 sümbolit ja maksimaalselt 20 sümbolit
  • saadud nimi salvestatakse mällu (faili salvestamist pole vaja teha)
  • kui tulemus satub mõne eelnevalt saadud tulemuse ette, siis kõik praegusest tulemusest kehvemad tulemused nihutatakse ühe koha võrra edasi.
  • kui tulemus kattub (on võrdne) mõne olemasoleva tulemusega, siis uus tulemus läheb vanast tulemusest kehvemale kohale (kui näiteks edetabelis on 2. kohal tulemus 100 ja mängija saab tulemuseks 100, siis uus tulemus läheb 3. kohale).
  • edetabel kuvatakse välja nii, et tulemused on üksteise all joondatud paremale (vt näidet)
  • edetabelit on võimalik "puhastada"

Näide:


käik (rida, veerg) või käsk: edetabel

Edetabel seadetega 10x10, 5
1. ago           6
2. ago          16
3. agooooooo    92

käik (rida, veerg) või käsk: puhasta

Edetabel seadetega 10x10, 5 puhastatud

Lisaosa: aardeotsimise MM (1p)

Mängitakse 5 mängu, iga mäng läheb raskemaks (laud suureneb ja/või aarete arv väheneb).

Nõuded:

  • Mängija mängib järjest 5 mängu
  • iga mängu kohta kehtivad muudes punktides määratud reeglid
  • mängija kasutatud käigud summeeritakse kokku
    • kui on realiseeritud edetabeli lisaosa, on MM-i jaoks eraldi edetabel

Lisaosa: soe-külm variant (1p)

Variatsioon mängust, kus mängija saab ruudu avamise korral informatsiooni lähedal oleva aarde kohta. Kui avatud ruudu all ei ole aare, antakse mängijale lähima aarde kaugus antud ruudust.

Nõuded:

  • selle variatsiooni puhul kaardi avamist (vt eraldi lisaosa) ei toimu
    • kui realiseeritud on kaardi avamise lisaosa, siis mängija saab mängu alguses valida, kumba varianti ta mängida tahab.
  • kui avatava ruudu all aaret pole, antakse mängijale üks number, mis näitab, kui kaugel on kõige lähemalolev aare.
  • avatud ruudud jäävad avatuks (ruudule on märgitud kaugus lähimma aardeni)

Mall

Siia tuleb mall, mille saab aluseks võtta.