Projekt Sudoku

 

1. etapa

Na prvej hodine ste takmer všetci zvládli nakresliť hrací plán Sudoku (obrázok vpravo). Mnohí postupovali extenzívne, niektorí zvládli aj efektívnosť riešenia. Počet použitých príkazov sa pohyboval od 21 do 93 (mne sa to podarilo na 18 príkazov, svoje riešenie sprístupním, keď všetky triedy dokončia prvú etapu a sprístupním tiež najefektívnejšie riešenia žiakov a jedno či viac riešení, ktoré budú niečim originálne.  Úloha sa dá vykonať dokonca jediným príkazom, ale to nie je riešenie problému podľa zadania, viacerí „leniví“ žiaci sa mi pokúsili predať i takéto riešenie – skopírovanie hotového cudzieho obrázka z internetu, niekedy skopírovanie môjho vlastného obrázka 🙂

2. etapa

V druhej etape by ste mali doplniť nasledujúce funkcie:

  • tlačítko Nová hra – zmaže obrazovku a nakreslí hrací plán
  • tlačítka 19: po stlačení tlačítka si program zapamätá hodnotu číslice, ktorú tlačítko reprezentuje
  • tlačítko Guma: zmaže hodnotu zapísanú na hracom pláne
  • so stránkou zviazať akciu, ktorá sa udeje pri kliknutí na hrací plán. Keď klikneme na príslušné políčko, nakreslí sa číslica, ktorú sme aktivovali stlačením tlačítka číslice

    (najprv predpokladajme inteligenciu používateľa, neskôr ošetríme, aby sa akcia vykonala, iba ak používateľ klikol do vnútra plánu, tiež ošetríme, aby sa číslica zobrazila v strede políčka)

Pomôcky:

  • pozíciu myši zistíme príkazom pozmyši
  • korytnačku možno premiestniť na zadanú pozíciu príkazom nechpoz [x y], kde x a y sú číselné súradnice, ak použijeme premenné, príkaz musíme zadať v tvare nechpoz\, veta\, :x :y. Pozor: Často musíme pred použitím tohto príkazu zdvihnúť pero.
  • podmienené príkazy v Imagine sú:
    ak podmienka [príkaz] – jednocestný príkaz, príkazy v hranatých zátvorkách sa vykonajú, iba ak je podmienka splnená
    ak2  podmienka [príkaz1] [príkaz2]  – ak je podmienka splnená, vykoná/vykonajú sa príkaz/príkazy 1, inak sa vykoná príkaz/príkazy 2
    akje – viaccestný príkaz – v tomto prípade ho asi nepotrebujete
  • príkaz na vypísanie textu na pozícii korytnačky – text hodnota, na mieste hodnoty môže byť text v úvodovkách alebo nejaká premenná či výraz
  • keď chcete stránke priradiť reakciu na nejakú udalosť, napríklad na kliknutie myší, dvakrát kliknite na stránku a zobrazí sa:
    Do okienka Udalosti priKliknutí zadajte príkaz (príkazy), ktoré sa majú vykonať.

3. etapa

V tretej etape  ošetríme chybné používateľské vstupy.

  • kliknutie mimo hrací plán
  • kliknutie na pomedzí viacerých políčok – centrovanie číslice v políčku
  • kliknutie na vyplnené políčko
  • kliknutie na políčko zadania riešenia problému

Kliknutie mimo hrací plán

Zapísanie číslice  sa má vykonať, len ak pozícia myši je v oblasti, kde sa nachádza hrací plán. Pozíciu myši zistíme príkazom pozmysi. Príkaz vracia dvojprvkový zoznam súradníc myši, na prvej pozícii je súradnica X na druhej Y. Myš je v oblasti hracieho plánu, ak súradnica X je v intervale minX a maxX a súčasne je súradnica Y v intervale minY a maxY. Použijeme jednocestný podmienený príkaz ak, na zistenie súčasného splnenia dvoch podmienok slúži príkaz and.

Súradnicu X zistíme príkazom prvy\, pozmysi, súradnicu y príkazom posledny\, pozmysi.

Podmienený príkaz môže vyzerať napríklad takto:

\\ ak\, and :x<180 :x>-180 [\\ \,ak\, and :y<180 :y>-180 [\\ \,\,akcia]]

Namiesto akcia zadajte príkazy, ktoré sa majú vykonať, ak podmienka platí. Hodnoty -180 a 180 nahraďte hodnotami zodpovedajúcimi vášmu umiestneniu hracieho plánu a jeho rozmerom.

Vycentrovanie číslice v políčku

Ak by sa číslice vypisovali tam, kam používateľ klikol, tak by to vyzeralo chaoticky (obrázku vpravo). Či používateľ klikne do stredu políčka, vľavo dole, vpravo hore …, číslica sa má vypísať vždy na  tom istom mieste políčka. Nech políčka majú veľkosť 40 a ľavý horný roh políčka v ktorom je číslica 7 má súradnice [0 0], potom pravý dolný roh má súradnice [40 -40]. Ak sme klikli do vnútra políčka, číslica sa  vypíš na pozícii [20 -20]. V ďalších políčkach číslice máme umiestňovať na pozície: [60 -20] [100 -20] [20 -60] [60 -60] [100 -60] [20 -100] [60 -100] [100 -100].

Ak súradnice myši boli [5 -10] číslicu vypíšeme na pozíciu [20 -20], [50 -30]->[60 -20].  Ako to zovšeobecniť? Od súradnice X odpočítame zvyšok po delení 40 a pripočítame 20, podobne pre súradnicu Y. Vo vašom projekte použite zvyšok po delení rozmerom vašich políčok a posun podľa toho, ako ste umiestnili hrací plán. Môžete postupovať aj metódou pokusov a omylov.

V mojom riešení problému vyzerá procedúra zapísania číslice na hrací plán takto:

\\viem\, poloz\\k1'ph\\urob\, "x\, prvy\, pozmysi\\urob\, "y\, posledny\, pozmysi\\ak\, and\, :x\, 180\, :x\, -180 [\\ak\, and\, :y\, 180\, :y\, -180 [\\urob\, "x\, :x-(zvysok :x+20\, 40)+20\\urob\, "y :y-(zvysok :y+20\, 40)+20\\k1'nechpoz\, veta\, :x\, :y\\k1'text\, :c]\\]\\ koniec

Kliknutie na vyplnené políčko

Čo sa stane po kliknutí na vyplnené políčko možno ošetriť dvoma spôsobmi, sú to tieto tri 🙂

  1. číslicu prepíšeme
  2. nestane sa nič
  3. budú na sebe obe číslice – zatiaľ sa program chová takto

Prikláňam sa k druhej možnosti, zabráni sa tak tomu, aby po mylných kliknutiach používateľ prišiel o doterajšie riešenie.

Ak sa rozhodneme pre 1., pôvodnú číslicu zmažeme a zapíšeme novú. Stačí upraviť procedúru poloz tak, aby pred vypísaním číslice políčko vždy premazala.

Ak sa rozhodneme pre 2, otestujeme, či je políčko obsadené, ak nie je, spustí sa procedúra poloz, inak sa neudeje nič (test môže byť súčasťou procedúry poloz).

4. etapa

Ošetrenie konzistencie riešenia používateľa na pravidlá Sudoku:

  • v každom riadku, stĺpci a hrubo vyznačenom štvorci 3×3 sa každá číslica môže vyskytnúť práve raz (asi na to použijete zoznamy, napríklad sa na celý hrací plán možno pozerať, že je to lineárny zoznam prvkov 1 až 81 a musí platiť, že pre prvky zoznamu 1-9, 10-18, … platí hore uvedená podmienka jediného výskytu každej číslice Ako vytvoriť podmnožiny tohto zoznamu, aby predstavovali riadky a štvorce je už vašou úlohou)

5. etapa

Na začiatku by ste cez nejaký parameter mali určiť, zadanie Sudoku. Toto zadanie by malo byť na hracom pláne nejako farebne odlíšené a program nesmie dovoliť používateľovi zmazať a zmeniť políčka, ktoré sú prvopočiatočnými políčkami zadania. Mali by ste vedieť zmerať čas, za ktorý sa používateľovi podarilo zadanie vyriešiť.

6. etapa

Všetky vyššie uvedené etapy by ste mali byť schopní všetci zvládnuť (stačí chcieť a porozmýšĺať).  Táto etapa je prémiová, dovolím si tvrdiť, že ju nezvládne, či namáhavo zvládne, aj veľké množstvo kolegov učiteľov informatiky. Na začiatku nejakým parametrom vložíte zadanie úlohy Sudoku a program  nájde jej riešenie. Jedno z riešení som vám predviedol vo forme genetického algoritmu. Môžte použiť genetický alebo deterministický algoritmus, poprípade ich kombináciu.

7. etapa

Ak ste si netrúfali na etapu 6. alebo ste ju vyriešili, môžete prejsť na etapu 7.  Je to dolaďovanie programu, dovedenie programu k „dokonalosti“. V čom táto dokonalosť spočíva:

  • Dizajnové doladenie programu: aby sa používateľom už na prvý pohľad páčil a aby sa ĺahko a intuitívne ovládal.
  • Návod k programu
  • Náhodná voľba zadania
  • Rekordy a mená používateľov
  • Tlačítko Undo
  • Fantázia – doplnenie ďalších prvkov, ktoré ma nenapadli a nenapadli ani vašich spolužiakov, prípadne tvorivé rozvinutie cudzích nápadov (mali by ste uviesť, kto vás inšpiroval)
print

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *