Zastavuj kocky

Čo budeme robiť

  • budeme hrať jednoduchú hru, v ktorej sa budeme snažiť zastaviť kocky vtedy, keď bude aspoň na dvoch z nich rovnaká hodnota

Čo už musíme vedieť

  • pracovať s korytnačkami, ich tvarmi, tlačidlami

Naučíme sa

  • spúšťať a zastavovať procesy, zväčšovať tvar korytnačiek

Navrhujeme projekt

Na hracej ploche sa nachádzajú 3 kocky, ktoré sa akoby otáčajú. Úlohou hráča je stlačiť tlačidlo STOP vtedy, keď je aspoň na 2 z nich rovnaký počet bodiek. 

Analyzujeme projekt

  1. Kocky sú zrejme korytnačky s tvarom, ktorého zábery vyjadrujú jednotlivý počet bodiek.
  2. Tlačidlo START musí zabezpečiť, aby sa všetky kocky začali otáčať, t.j. meniť svoje zábery. Nie však naraz vždy na ďalší záber, lebo vtedy by sa bodky na kockách menili rovnako a nikdy by nenastala situácia, že na niektorých 2 je rovnaký počet bodiek.
  3. Tlačidlo STOP musí zabezpečiť, aby sa otáčanie kociek zastavilo a aby hráč mohol vidieť, či sa má dobrý postreh a kocky zastavil v okamihu, keď je aspoň na 2 z nich rovnaký počet bodiek.

Programujeme

  1. V LogoMotion nakreslime kocku so 6 zábermi a zapíšme tento súbor niekde na disk – najlepšie do adresára Obrázky, ktorý je podadresárom adresára, v ktorom je nainštalovaný Imagine (ak ste pri inštalácii nič nemenili je to v

  2. C:\Program Files\Imagine\Obrazky\)
    V pravoklikovom menu korytnačkyk1 vyberme Zmeň k1, v dialógu kliknime na tlačidlo Tvar a vyberme súbor s obrázkom kocky:

Ak sa nám zdá kocka malá, prejdime do záložky Tvar a v časti Zväčšenie napíšme napr. číslo 3, t.j. kocka sa bude zobrazovať ako 3x väčšia ako bola v skutočnosti nakreslená – súbor ani jej obrázok sa v skutočnosti nezmenili, zmenilo sa len jej zobrazovanie na stránke.

Kocku môžeme premiestniť na iné miesto na stránke – v jej pravoklikovom menu vyberme Presúvaj k1.
Ďalšie 2 kocky s rovnakým tvarom aj zväčšením získame kopírovaním tejto korytnačky cez schránku:
  • v pravoklikovom menu korytnačky-kocky vyberme Skopíruj do schránky a v pravoklikovom menu stránky vyberme Prilep zo schránky
    Dávajme pozor, aby sme omylom nekopírovali celú stránku – všímajme si, v koho pravoklikovom menu sa nachádzame.

    V riadku vyskúšajme, či funguje otáčanie kocky, t.j. výmena jej záberov:
    ? k1'nechZáber 2
    ? k1'nechZáber 3
    ? k1'nechZáber 4
    ...
    Takto by sme mohli pokračovať...
    Vyskúšajme koľko bodiek bude na kocke, keď záber, ktorý chceme nastaviť má väčšie číslo ako je skutočný počet záberov tvaru korytnačky. Vidíme, že záber 7 je ten istý ako záber 1, záber 8 je rovnaký ako záber 2, atď.

    Chceli by sme však, aby sa kocka otáčala, kým ju používateľ nezastaví tlačidlom STOP.

    Na to, aby sa v Imagine dialo niečo dokola, ale s prestávkami medzi oboma zmenami použijeme základný príkaz každých (pozrite si jeho definíciu v Pomocníkovi).
    ? k1'každých 200 [nechZáber záber+1]
    Týmto sme pre k1 spustili proces, ktorý každých 200 milisekúnd zmení jej záber na ďalší.
    Podobne môžeme pre k2 a k3 spustiť ich procesy:
    ? k2'každých 500 [nechZáber záber+1]
    ? k1'každých 800 [nechZáber záber+1]

    Ak chceme procesy zastaviť, môžeme stlačiť tlačidlo  v hlavnom paneli alebo stlačiť kláves F12.

    Keď procesy spustíme s rovnakým počtom milisekúnd, budú sa bodky meniť v rovnakom čase a nikdy sa nestane, že by boli niektoré 2 z nich rovnaké.

    Alebo naopak, ak všetkým nastavíme ich záber na 1 a potom ich spustíme v jednom riadku naraz, bude na všetkých 3 vždy rovnaký počet bodiek:
    ? k1'každých 200 [nechZáber záber+1] k2'každých 200 [nechZáber záber+1] k3'každých 200 [nechZáber záber+1]
    Pozor, možno sú na vašej obrazovke tieto príkazy vo viacerých riadkoch, ale treba ich zapísať do jedného príkazového riadku bez stlačenia klávesu <Enter>.

    Aby sa kocky otáčali nerovnako môžeme každej z nich nastaviť iný počet milisekúnd. Alebo ak nám nevadí, že sa budú otáčať nepravidelne, môžeme ich zábery meniť náhodne:
    ? k1'každých 200 [nechZáber ?] k2'každých 200 [nechZáber ?] k3'každých 200 [nechZáber ?]
     

  1. Položme na stránku tlačidlo, prejdime do jeho pravoklikového menu, vyberme Zmeň t1. Zmeňme jeho popis na ŠTART a jeho udalosť priZapnutí na spustenie všetkých 3 procesov tak ako sme to skúšali v riadku.


  2.  
  3. Položme na stránku ďalšie tlačidlo, prejdime do jeho pravoklikového menu, vyberme Zmeň t2. Jeho popis bude STOP a udalosť priZapnutí bude zastavovať všetky procesy rovnako ako tlačidlo v hlavnom paneli, ktorým sme ich zastavovali, keď sme ich pustili z riadku – využijeme základný príkaz zastavVšetky:


Vylepšujeme projekt

  1. V projekte môžeme počítať počet všetkých zastavení – napr. v texte, pričom pri každom stlačení tlačidla STOP s hodnota v text1 zvýši o 1. Dávajme však pozor, aby sme zvýšenie urobili predtým ako zastavíme všetky procesy. Ak by sme tento príkaz zapísali až za príkazom zastavVšetky už by sa nevykonal. A tiež nezabudnime dať do text1 hodnotu 0, lebo inak by vznikla chyba pri pripočítavaní čísla 1 k tejto hodnote.

  2. Počítajme len také pokusy, v ktorých bol aspoň na 2 kockách rovnaký počet bodiek – opäť zrejme upravíme udalosť priZapnutí tlačidla t2, tentoraz však bude príkaz o niečo dlhší:

  3. ak (alebo (k1'záber=k2'záber)(k1'záber=k3'záber)(k2'záber=k3'záber))
         [text1'nechHodnota text1 + 1]
    zastavVšetky
    Rozdelenie do niekoľkých riadkov je opäť len kvôli prehľadnoti, v udalosti priZapnutí je nutné zapísať všetko to jedného riadku.

Úlohy

  1. Vyskúšajte, čo sa bude diať, keď viackrát stlačíme tlačidlo ŠTART bez toho, aby sme procesy zastavili.
  2. Doplňte do programu ešte aj počítanie takých pokusov, keď sa hráčovi nepodarilo zastaviť kocky tak, že aspoň na dvoch z nich je rovnaký počet bodiek.
  3. Vytvorte aktivitu Akvárium z CD, na ktorom ste od projektu Infovek dostali program Imagine. Postupujte podľa PDF súboru, ktorý nájdete v adresári Prve projekty s Imagine, ktorý je podadresárom adresára, kde máte nainštalovaný Imagine.