Tic-Tac-Toe v Baltíku

Väčšina z vás sa na počítačoch najradšej hrá. Aj ja sa na počítačoch a mobiloch zvyknem hrať, ale najväčšou zábavou pre mňa je niečo naprogramovať. Kedysi som sa naučil programovať  hlavne tým, že som programoval rôzne počítačové hry. Prvý počítač som si kúpil v roku 1985, bol to osembitový japonský počítač Sord, mal 8 kilobajtov pamäte a programy sa doň nahrávali pomocou kazetového magnetofónu. Do ôsmich KB sa toho veľa nezmestilo, preto som sa snažil programovať efektívne s čo najmenšími pamäťovými nárokmi a programujem tak doteraz. Vtedajšie počítače boli mnohotisíckrát pomalšie, ako dnešné, takže, ak hra mala byť hrateľná, bolo potrebné optimalizovať aj rýchlosť programu. Programovacím jazykom bol Basic a kritické časti som programoval v asemblery.

Na tento počítač takmer žiadne hry neexistovali a tak, keď som na iných počítačoch videl nejakú hru, naprogramoval som ju aj na mojom počítači.

Začneme jednoduchou logickou hrou Tic-Tac-Toe. Hrá sa na hracom pláne 3×3. Do plánu hráči striedavo zapisujú svoje symboly – krížik a krúžok. Kto uloží svoje symboly tak, že sú vedľa seba, pod sebou alebo po diagonále tri, vyhral. Ak sú všetky políčka obsadené a nik nemá tri rovnaké symboly v rade, hra skončila remízou. Na obrázku vpravo vyhral hráč, ktorý kreslil krúžky.

1. etapa

Najprv naprogramujeme nakreslenie hracieho plánu. Sú to dve vodorovné a dve zvislé úsečky. Na nakreslenie hracieho plánu použijeme pomocníka s názvom plán.

Pomocník plán môže vyzerať napríklad takto:

Symbol vodorovnej čiary je príkaz úsečka, prvý parameter je hrúbka pera (ak sa nepoužije, kreslí sa perom s hrúbkou 1), prvé na seba kolmé šípky a čísla  za nimi sú súradnice začiatočného bodu, za druhý šípkami sú súradnice koncového bodu úsečky.

2. etapa

V druhej etape naučíme Baltíka kresliť symboly krúžok a krížik.

Vytvoríme dvoch pomocníkov, jeden sa bude volať (aké prekvapenie) krúžok a druhý krížik. Títo pomocníci budú mať vstupné parametre súradnice X a Y, ktoré budú určovať, kde sa symbol nakreslí. V konečnom riešení budú zodpovedať miestu kliknutia myšou na obrazovke. Súradnice X, Y  budú stredom kruhu alebo priesečníkom krížika.

Pomocník krúžok

Na kreslenie kružnice alebo elipsy sa používa príkaz  . Má rovnaké parametre ako  úsečka, súradnice sú súradnicami koncových bodov diagonály štvorca (obdĺžnika) do ktorého je kružnica/elipsa vpísaná. Pomocník krúžok môže vyzerať napríklad takto:

Používa lokálne premenné X a Y. Štvorec, do ktorého je vpísaná kružnica je určený jednou z jeho diagonál. Zvoľme diagonálu, ktorá ide zľava doprava a zhora nadol, stred kruhu je v strede diagonály štvorca, ak bude diagonála dlhá 17 jednotiek, jej počiatočný bod má súradnice X-8, Y-8, koncový bod X+8, Y+8. Preto som použil tieto hodnoty pri kreslení krúžku.

Volanie pomocníka krúžok na súradniciach [40 , 40] vyzerá takto:

Modrá šípka znázorňuje vloženie hodnoty do košíka (uloženie hodnoty do premennej).

Pomocník krížik

Nakreslenie krížika je nakreslenie dvoch úsečiek, sú to diagonály štvorca, do ktorého bola vpísaná kružnica v pomocníkovi krúžok. Súradnice koncových bodov prvej diagonály teda poznáme sú to X-8, Y-8 X+8, Y+8. Druhá diagonála ide tiež zľava doprava, ale zdola nahor. Jej koncové body budú X-8, Y+8 a X+8, Y-8. Pomocník krížik potom môže vyzerať takto:

Zistenie súradníc bodu, kam sme klikli myšou

Symboly krížik a krúžok potrebujeme zapisovať na miesto, kam sme klikli myšou. Na zistenie súradnice X slúži príkaz , súradnice Y  

Vo volaní procedúry nahradíme pevné hodnoty týmito príkazmi.

Nultá verzia programu vyzerá takto:

Môžete si ju stiahnuť tu.

Päťkrát sa opakuje dvojica príkazov Krúžok a Krížik s čakaním na kliknutie myši. Už v tejto jednoduchej verzii možno hrať Tic-Tac-Toe, ale program slúži rovnako, ako by poslúžili pero a papier: nekontroluje legálnosť ťahu hráča a nevyhodnotí, že niektorý z hráčov vyhral. Hráčom umožňuje umiestniť symboly aj mimo hrací plán, aj  na miesto, kde už nejaký symbol bol a ak sa hráč netrafí celkom presne do štvorčeka, symbol prechádza cez viac políčok.

3. etapa

Ošetrenie používateľských vstupov :

  • Nedovoliť umiestniť symbol mimo hrací plán
  • Symboly centrovať do stredu políčok

Kresliť iba v hracom pláne

Vytvoríme pomocníka testkliknutia, hrací plán má minimálne a maximálne súradnice 30 a 120, ak klikneme do oblasti plánu, naplníme globálne premenné X a Y hodnotou súradníc myši, inak opakujeme testkliknutia.

Potrebujeme nový príkaz, ktorý bude testovať, či je splnená nejaká podmienka. Takýmto príkazom je príkaz if (slovensky ak), aby boli súradnice v oblasti hracieho plánu musia byť súčasne splnené štyri podmienky X má byť väčšie ako 30 a menšie ako 120, rovnaké podmienky majú platiť aj pre Y. Ak podmienka splnená je, vykoná sa príkaz/príkazy v prvej dvojici „kučeravých“ zátvoriek, pokiaľ podmienka splnená nie je a chceme vykonať iný príkaz/príkazy uvedieme príkaz else  (slovensky inak) a do druhých kučeravých zátvoriek dáme príkaz/príkazy, ktoré sa majú vykonať. Pomocník testkliknutia bude predbežne vyzerať takto:

Centrovanie symbolov

Ak bude X z rozsahu 31 až 59, má sa zobraziť na pozícii 45, 60-89, na pozícii 75 a 90 až 119 na pozícii 105. To isté má platiť pre súradnicu Y. Využijeme to, že sme premenné X a Y zvolili ako celočíselné premenné. Ak súradnicu x myši predelíme 30 a túto hodnotu zapíšeme do premennej X, premenná X bude mať hodnotu 1, 2 alebo 3. Ak ju  vynásobíme 30 a pripočítame k výsledku 15 dostaneme požadované hodnoty 45, 75 a 105. Upravíme pomocníka testkliknutia tak, že do premenných X  a Y vložíme hodnoty súradníc myši predelených 30 a pri volaní pomocníkov krúžok a krížik budeme do košíkov vkladať 30 x X+15 a 30 x Y+15. Baltík rešpektuje prioritu matematických operácií, najprv násobí a k výsledku pripočíta 15. Ak niekedy budete potrebovať najprv pripočítať a až súčtom násobiť, vložte súčet do jednoduchých zátvoriek.

4. etapa

Program po tretej etape je už takmer plne funkčný, ale dovolí zapísať symbol aj do políčka, v ktorom už nejaký symbol je. Program tiež nevyhodnotí, či už niekto má 3 symboly a vyhral alebo že hra skončila remízou.

Je už políčko obsadené?

Či je políčko obsadené by sme mohli zisťovať  tak, že by sme políčko vyplnili nejakou farbou a pri kliknutí by sme testovali, či je centrálny bod čierny alebo nie je.

My to ošetríme inak. Hrací plán sa skladá z jednotlivých políčok, tieto sú v troch riadkoch a v troch stĺpcoch, na súbor týchto políčok sa môžeme dívať tak, že tvoria pole s rozmermi 3×3. Políčko vľavo hore má súradnice [1,1] a políčko vpravo dole má súradnice [3,3]. Máme dvoch hráčov hráča 1 a 2. Na začiatku sú políčka prázdne, prázdnosť políčka môže reprezentovať hodnota 0. Ak políčko obsadil hráč 1, do políčka vložíme hodnotu 1, ak ho obsadil hráč 2, do políčka vložíme hodnotu 2. Pomocníka testkliknutia doplníme o test, či je zvolené políčko prázdne, teda má hodnotu nula. Baltík a väčšina programovacích jazykov obsahuje aj premenné typu pole. V zozname premenných sú to mriežkované objekty v predposlednom riadku.

Na začiatku programu deklarujme premennú plán s rozmermi 3×3. Urobíme to príkazom:

V hranatých zátvorkách sú rozmery poľa, v našom prípade  3×3, ak by sme programovali šach, zvolili by sme 8×8, sudoku 9×9, … Pole môže mať jeden rozmer, ale môže mať 3 a viac rozmerov, záleží na tom, čo má pole reprezentovať.

 

 

 

print

Pridaj komentár

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