{"id":4219,"date":"2025-03-23T13:43:15","date_gmt":"2025-03-23T13:43:15","guid":{"rendered":"https:\/\/mariasmolina24.thkit.ee\/wp\/?page_id=4219"},"modified":"2025-03-25T11:59:49","modified_gmt":"2025-03-25T11:59:49","slug":"loovulesanne-tic-tac-toe","status":"publish","type":"page","link":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/","title":{"rendered":"LOOV\u00dcLESANNE: Tic Tac Toe"},"content":{"rendered":"\n<p class=\"has-colibri-color-6-color has-colibri-color-5-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-b3c7452d46ef0962b59d5410a1b7a249\">See projekt v\u00f5imaldab m\u00e4ngida klassikalist <strong>Tic Tac Toe<\/strong> otse <strong>Google Sheetsi<\/strong> tabelis. Kasutajad saavad reaalajas teha k\u00e4ike, kasutades tabeli lahtrite interaktiivsust. Projekt sisaldab automatiseeritud loogikat, mis m\u00e4\u00e4rab v\u00f5itja ja takistab kehtetuid k\u00e4ike.<\/p>\n\n\n\n<br>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Kuidas alustada?<\/strong><\/h3>\n\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-7e87f317b70ffeade63ff51b0545740f\">Projekti loomiseks kasutasin juhend &#8211;&gt; <strong><a href=\"https:\/\/spreadsheet.dev\/tic-tac-toe-in-google-sheets\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#008ee3\" class=\"has-inline-color\">Spreadsheet Dev&#8217;is<\/mark><\/a><\/strong><\/p>\n\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-b866753afaecdaf1cbec7fe57f8401ab\">Teeme uus Google Sheet leht, ja \u00fcmbernimetame <strong>&#8220;Board&#8221;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1075\" height=\"703\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg\" alt=\"Tic Tac Toe\" class=\"wp-image-4362\" srcset=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg 1075w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202-300x196.jpg 300w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202-1024x670.jpg 1024w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202-768x502.jpg 768w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202-150x98.jpg 150w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202-600x392.jpg 600w\" sizes=\"auto, (max-width: 1075px) 100vw, 1075px\" \/><\/figure>\n\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-22ea3bf12b6ebe470a17ce39ecec81e7\"><br>Lisame Google Sheetsi tabelit 3&#215;3 <em>(B2:D4)<\/em> nimega <strong>&#8220;Board&#8221;<\/strong> ja v\u00e4li <em>(G2:J2 \u00fchendatud lahter)<\/em> s\u00f5numite jaoks nimega <strong>&#8220;Message&#8221;<\/strong><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69daf71255199&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69daf71255199\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1432\" height=\"703\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219.png\" alt=\"\" class=\"wp-image-4404\" srcset=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219.png 1432w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219-300x147.png 300w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219-1024x503.png 1024w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219-768x377.png 768w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219-150x74.png 150w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-219-600x295.png 600w\" sizes=\"auto, (max-width: 1432px) 100vw, 1432px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-3d575ef29c4c7832c7166fbb182aed73\"><br>Lisame nuppu &#8220;Reset game&#8221; ja m\u00e4\u00e4rame skripti <strong>&#8220;resetGame&#8221;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"413\" height=\"275\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-012852.jpg\" alt=\"\" class=\"wp-image-4355\" srcset=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-012852.jpg 413w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-012852-300x200.jpg 300w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-012852-150x100.jpg 150w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Kuidas t\u00f6\u00f6tab kood?<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-group has-colibri-color-5-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-4525feef7aa1b1c5ecbfadce150624b3\"><strong>Kui m\u00e4ngija valib lahtri<\/strong>, k\u00e4ivitub <code><strong>onSelectionChange(e<\/strong>)<\/code>, mis:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-45767c240854abfc146848b789a50917\">L\u00e4htestab teate<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-c7b79cfabd542c69ceb8d13eca7ac746\">Kontrollib, kas lahtri valimine on lubatud (<code><strong>checkSelection<\/strong><\/code>)<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-d9a71dca1bf3b9073451a8f779172195\">Kui k\u00f5ik on korras, lisab lahtrisse <strong>&#8220;X&#8221;<\/strong> v\u00f5i <strong>&#8220;O&#8221;<\/strong> (<code><strong>play<\/strong><\/code>)<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction onSelectionChange(e) {\n  \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\n  displayMessage(&quot;&quot;);\n   \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430\n  var isSelectionValid = checkSelection(e.range);\n  if(isSelectionValid)\n    play(e.range); \/\/ \u0415\u0441\u043b\u0438 \u0434\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0433\u0440\u0443\n}\n<\/pre><\/div>\n\n\n<div class=\"wp-block-group has-colibri-color-5-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-8e4c2f063aaa1733cdc5b7a41617d56a\"><strong>Lahtri kontroll (<code>checkSelection<\/code>)<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-f38bd7c65c54f41830ace670af9e24a0\">Lahter peab olema m\u00e4ngulaua sees (<strong>3&#215;3 ala<\/strong>)<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-a5e2161e24487717f5fab48df3e09733\">Saab valida ainult \u00fche lahtri<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-eebbe0e146d2433727f5cf5dbe7c2176\">Lahter peab olema t\u00fchi<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-1eb674af657721fd72e6211c01f54c50\">Kui midagi on valesti, kuvatakse veateade<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction checkSelection(range) {\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0432\u044b\u0448\u0435\u043b \u043b\u0438 \u0432\u044b\u0431\u043e\u0440 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u044f\u0447\u0435\u0439\u043a\u0438 2-4 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c)\n  if(range.rowStart &lt; 2 || range.rowEnd &gt; 4 || range.columnStart &lt; 2 || range.columnEnd &gt; 4) {\n    error(&quot;Select a cell inside the board.&quot;);\n    return false;\n  }\n \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430\n  if(range.rowStart != range.rowEnd || range.columnStart != range.columnEnd) {\n    error(&quot;Select a single cell.&quot;);\n    return false;\n  }\n \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0443\u0441\u0442\u0430\u044f \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430\n  var cell = SpreadsheetApp\n    .getActive()\n    .getSheetByName(&quot;Board&quot;)\n    .getRange(range.rowStart, range.columnStart);\n  var cellValue = cell.getValue();\n \n  if(cellValue != &quot;&quot;) {\n    error(&quot;Select an empty cell.&quot;);\n    return false;\n  }\n \n  return true;\n}\n<\/pre><\/div>\n\n\n<div class=\"wp-block-group has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-7ea1907492b7a82d25aa23a319aaec71\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group has-colibri-color-5-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-060f2816c6ea3a00f41a2648323d2dd8\"><strong>Funktsioon <code>play(range)<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e4\u00e4rab, kelle kord on (m\u00e4ngija 1 v\u00f5i 2)<\/li>\n\n\n\n<li>Lisab valitud lahtrisse <strong>&#8220;X&#8221;<\/strong> v\u00f5i <strong>&#8220;O&#8221;<\/strong><\/li>\n\n\n\n<li>Kontrollib, kas keegi on v\u00f5itnud (<code><strong>hasPlayerWonGame<\/strong><\/code>)<\/li>\n\n\n\n<li>Kui keegi v\u00f5idab, kuvatakse teade v\u00f5itja kohta. Kui k\u00f5ik lahtrid on t\u00e4is, on viik. Kui m\u00e4ng j\u00e4tkub, n\u00e4idatakse, kelle kord on j\u00e4rgmine<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction play(range) {\n  var player = whoseTurnIsIt(); \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0447\u0435\u0439 \u0445\u043e\u0434\n   \n  \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c &quot;X&quot; \u0438\u043b\u0438 &quot;O&quot; \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0445\u043e\u0434\u0430 \u0438\u0433\u0440\u043e\u043a\u0430\n  SpreadsheetApp\n    .getActive()\n    .getSheetByName(&quot;Board&quot;)\n    .getRange(range.rowStart, range.columnStart)\n    .setValue(player == &quot;1&quot; ? &quot;X&quot; : &quot;O&quot;);\n \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u043b\u0438 \u0438\u0433\u0440\u043e\u043a\n  if(hasPlayerWonGame()) {\n    displayMessage(&quot;Player &quot; + player + &quot; has won!&quot;);\n  } else if(areAllSquaresTaken()) {\n    displayMessage(&quot;Game is a draw!&quot;); \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0438\u0447\u044c\u044e\n  } else { \n    displayMessage(&quot;Player &quot; + (player == &quot;1&quot; ? &quot;2&#039;s &quot; : &quot;1&#039;s &quot;) + &quot;turn.&quot;);\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-4070216b80caf0c5fb7f01125e2a7258\"><strong>M\u00e4ngu oleku kontrollimise funktsioonid<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-3ae5b004be97709594a8cfeed0ef8101\"><code><strong>whoseTurnIsIt()<\/strong><\/code> \u2013 m\u00e4\u00e4rab, kelle kord on, lugedes t\u00e4idetud lahtrite arvu<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nfunction whoseTurnIsIt() {\n  \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0447\u0435\u0439 \u0445\u043e\u0434: \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0447\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0442\u043e 1-\u0439 \u0438\u0433\u0440\u043e\u043a, \u0438\u043d\u0430\u0447\u0435 2-\u0439\n  return numSquaresTaken() % 2 == 0 ? 1 : 2;\n}\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-2b3f615a0dee0cdf486ce973480dd492\"><code><strong>numSquaresTaken()<\/strong><\/code> \u2013 loeb, mitu lahtrit on h\u00f5ivatud<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nfunction numSquaresTaken() {\n  \/\/ \u041f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u043a\u043b\u0435\u0442\u043e\u043a (\u0441 &quot;X&quot; \u0438\u043b\u0438 &quot;O&quot;)\n  var board = SpreadsheetApp.getActive().getRangeByName(&quot;Board&quot;).getValues();\n  var numChars = 0;\n  board.forEach(function(row) {\n    row.forEach(function(col) {\n      if(col == &quot;X&quot; || col == &quot;O&quot;)\n        numChars++;\n    });\n  });\n  return numChars;\n}\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-920d388b06d6b62aa03258dd232a898c\"><code><strong>areAllSquaresTaken()<\/strong><\/code> \u2013 kontrollib, kas k\u00f5ik 9 lahtrit on t\u00e4is (viigi korral)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nfunction areAllSquaresTaken() {\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438 \u0432\u0441\u0435 9 \u044f\u0447\u0435\u0435\u043a \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f\n  return numSquaresTaken() === 9;\n}\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-52a19530b67987d85f026727239f0f2a\"><code><strong>hasPlayerWonGame()<\/strong><\/code> \u2013 kontrollib v\u00f5idukombinatsioone<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction hasPlayerWonGame() {\n  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f\n  var board = SpreadsheetApp.getActive().getRangeByName(&quot;Board&quot;).getValues();\n   \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 (\u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c, \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c \u0438 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044f\u043c)\n  if(\n      (board&#x5B;0]&#x5B;0] === board&#x5B;0]&#x5B;1] &amp;&amp; board&#x5B;0]&#x5B;1] === board&#x5B;0]&#x5B;2] &amp;&amp; board&#x5B;0]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;1]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;1]&#x5B;2] &amp;&amp; board&#x5B;1]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;2]&#x5B;0] === board&#x5B;2]&#x5B;1] &amp;&amp; board&#x5B;2]&#x5B;1] === board&#x5B;2]&#x5B;2] &amp;&amp; board&#x5B;2]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;0] === board&#x5B;1]&#x5B;0] &amp;&amp; board&#x5B;1]&#x5B;0] === board&#x5B;2]&#x5B;0] &amp;&amp; board&#x5B;0]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;1] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;2]&#x5B;1] &amp;&amp; board&#x5B;0]&#x5B;1] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;2] === board&#x5B;1]&#x5B;2] &amp;&amp; board&#x5B;1]&#x5B;2] === board&#x5B;2]&#x5B;2] &amp;&amp; board&#x5B;0]&#x5B;2] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;2]&#x5B;2] &amp;&amp; board&#x5B;0]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;2]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;0]&#x5B;2] &amp;&amp; board&#x5B;2]&#x5B;0] != &quot;&quot;)\n  ) {\n    return true;\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-cb3ffb411821e019b4af855d1e657f6e\"><strong>Funktsioon <code>resetGame()<\/code><\/strong> \u2013 puhastab m\u00e4ngulaua ja alustab uut m\u00e4ngu esimese m\u00e4ngijaga<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction resetGame() {\n  var spreadsheet = SpreadsheetApp.getActive();\n   \n  \/\/ \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435\n  spreadsheet.getRangeByName(&quot;Board&quot;).setValue(&quot;&quot;);\n   \n  \/\/ \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u0434 \u0437\u0430 \u0438\u0433\u0440\u043e\u043a\u043e\u043c 1\n  displayMessage(&quot;Player 1&#039;s turn&quot;);\n   \n  \/\/ \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430)\n  spreadsheet.getSheetByName(&quot;Board&quot;).getRange(1,1).activate();\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Tulemus<\/strong><\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"386\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/chrome-capture-2025-3-25-2.gif\" alt=\"\" class=\"wp-image-4411\"\/><\/figure>\n<\/div>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69daf712567cd&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69daf712567cd\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1079\" height=\"701\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412.jpg\" alt=\"Tic Tac Toe\" class=\"wp-image-4358\" srcset=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412.jpg 1079w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412-300x195.jpg 300w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412-1024x665.jpg 1024w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412-768x499.jpg 768w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412-150x97.jpg 150w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-014412-600x390.jpg 600w\" sizes=\"auto, (max-width: 1079px) 100vw, 1079px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<br>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Originaal kood<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction onSelectionChange(e) {\n  \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\n  displayMessage(&quot;&quot;);\n  \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430\n  var isSelectionValid = checkSelection(e.range);\n  if(isSelectionValid)\n    play(e.range); \/\/ \u0415\u0441\u043b\u0438 \u0434\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0433\u0440\u0443\n}\n\nfunction checkSelection(range) {\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0432\u044b\u0448\u0435\u043b \u043b\u0438 \u0432\u044b\u0431\u043e\u0440 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u044f\u0447\u0435\u0439\u043a\u0438 2-4 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c)\n  if(range.rowStart &lt; 2 || range.rowEnd &gt; 4 || range.columnStart &lt; 2 || range.columnEnd &gt; 4) {\n    error(&quot;Select a cell inside the board.&quot;);\n    return false;\n  }\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430\n  if(range.rowStart != range.rowEnd || range.columnStart != range.columnEnd) {\n    error(&quot;Select a single cell.&quot;);\n    return false;\n  }\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0443\u0441\u0442\u0430\u044f \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430\n  var cell = SpreadsheetApp\n    .getActive()\n    .getSheetByName(&quot;Board&quot;)\n    .getRange(range.rowStart, range.columnStart);\n  var cellValue = cell.getValue();\n\n\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u0430 (\u043d\u0435 &quot;X&quot; \u0438 \u043d\u0435 &quot;O&quot;)\n  if(cellValue != &quot;&quot;) {\n    error(&quot;Select an empty cell.&quot;);\n    return false;\n  }\n\n  return true;\n}\n\nfunction displayMessage(message) {\n  \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 &quot;Message&quot;\n  SpreadsheetApp.getActive().getRangeByName(&quot;Message&quot;).setValue(message);\n}\n\nfunction error(message) {\n  \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435\n  displayMessage(&quot;\u26a0\ufe0f &quot; + message);\n}\n\nfunction play(range) {\n  var player = whoseTurnIsIt(); \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0447\u0435\u0439 \u0445\u043e\u0434\n  \n  \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c &quot;X&quot; \u0438\u043b\u0438 &quot;O&quot; \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0445\u043e\u0434\u0430 \u0438\u0433\u0440\u043e\u043a\u0430\n  SpreadsheetApp\n    .getActive()\n    .getSheetByName(&quot;Board&quot;)\n    .getRange(range.rowStart, range.columnStart)\n    .setValue(player == &quot;1&quot; ? &quot;X&quot; : &quot;O&quot;);\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u043b\u0438 \u0438\u0433\u0440\u043e\u043a\n  if(hasPlayerWonGame()) {\n    displayMessage(&quot;Player &quot; + player + &quot; has won!&quot;);\n  } else if(areAllSquaresTaken()) {\n    displayMessage(&quot;Game is a draw!&quot;); \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0438\u0447\u044c\u044e\n  } else { \n    displayMessage(&quot;Player &quot; + (player == &quot;1&quot; ? &quot;2&#039;s &quot; : &quot;1&#039;s &quot;) + &quot;turn.&quot;);\n  }\n}\n\nfunction whoseTurnIsIt() {\n  \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0447\u0435\u0439 \u0445\u043e\u0434: \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0447\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0442\u043e 1-\u0439 \u0438\u0433\u0440\u043e\u043a, \u0438\u043d\u0430\u0447\u0435 2-\u0439\n  return numSquaresTaken() % 2 == 0 ? 1 : 2;\n}\n\nfunction areAllSquaresTaken() {\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438 \u0432\u0441\u0435 9 \u044f\u0447\u0435\u0435\u043a \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f\n  return numSquaresTaken() === 9;\n}\n\nfunction numSquaresTaken() {\n  \/\/ \u041f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u043a\u043b\u0435\u0442\u043e\u043a (\u0441 &quot;X&quot; \u0438\u043b\u0438 &quot;O&quot;)\n  var board = SpreadsheetApp.getActive().getRangeByName(&quot;Board&quot;).getValues();\n  var numChars = 0;\n  board.forEach(function(row) {\n    row.forEach(function(col) {\n      if(col == &quot;X&quot; || col == &quot;O&quot;)\n        numChars++;\n    });\n  });\n  return numChars;\n}\n\nfunction hasPlayerWonGame() {\n  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f\n  var board = SpreadsheetApp.getActive().getRangeByName(&quot;Board&quot;).getValues();\n  \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 (\u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c, \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c \u0438 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044f\u043c)\n  if(\n      (board&#x5B;0]&#x5B;0] === board&#x5B;0]&#x5B;1] &amp;&amp; board&#x5B;0]&#x5B;1] === board&#x5B;0]&#x5B;2] &amp;&amp; board&#x5B;0]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;1]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;1]&#x5B;2] &amp;&amp; board&#x5B;1]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;2]&#x5B;0] === board&#x5B;2]&#x5B;1] &amp;&amp; board&#x5B;2]&#x5B;1] === board&#x5B;2]&#x5B;2] &amp;&amp; board&#x5B;2]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;0] === board&#x5B;1]&#x5B;0] &amp;&amp; board&#x5B;1]&#x5B;0] === board&#x5B;2]&#x5B;0] &amp;&amp; board&#x5B;0]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;1] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;2]&#x5B;1] &amp;&amp; board&#x5B;0]&#x5B;1] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;2] === board&#x5B;1]&#x5B;2] &amp;&amp; board&#x5B;1]&#x5B;2] === board&#x5B;2]&#x5B;2] &amp;&amp; board&#x5B;0]&#x5B;2] != &quot;&quot;) ||\n      (board&#x5B;0]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;2]&#x5B;2] &amp;&amp; board&#x5B;0]&#x5B;0] != &quot;&quot;) ||\n      (board&#x5B;2]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;0]&#x5B;2] &amp;&amp; board&#x5B;2]&#x5B;0] != &quot;&quot;)\n  ) {\n    return true;\n  }\n}\n\nfunction resetGame() {\n  var spreadsheet = SpreadsheetApp.getActive();\n  \n  \/\/ \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435\n  spreadsheet.getRangeByName(&quot;Board&quot;).setValue(&quot;&quot;);\n  \n  \/\/ \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u0434 \u0437\u0430 \u0438\u0433\u0440\u043e\u043a\u043e\u043c 1\n  displayMessage(&quot;Player 1&#039;s turn&quot;);\n  \n  \/\/ \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430)\n  spreadsheet.getSheetByName(&quot;Board&quot;).getRange(1,1).activate();\n}\n<\/pre><\/div>\n\n\n<br>\n\n\n\n<hr class=\"wp-block-separator aligncenter has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Minu koodis tehtud muudatused<\/strong><\/h3>\n\n\n\n<p class=\"has-colibri-color-6-color has-colibri-color-5-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-b77a64290801111f151ed1af4ad509ee\">Otsustasin lisada koodile uusi funktsioone, nagu v\u00e4rskendatav skooritabel ja lahtrite esilet\u00f5stmine v\u00f5idu korral, et muuta Tic Tac Toe m\u00e4ngu veelgi p\u00f5nevamaks ja interaktiivsemaks<\/p>\n\n\n\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-740fe7006ffbe35d5fb04042651c3e32\">Lisame Google Sheetsi tabelit 3&#215;2 ja anname nimed t\u00fchjadele lahtristele <strong>&#8220;Player1Wins&#8221;<\/strong>, <strong>&#8220;Player2Wins&#8221;<\/strong> ja <strong>&#8220;Draw&#8221;<\/strong><br>Lisame nuppu <strong>&#8220;Reset score&#8221;<\/strong> ja m\u00e4\u00e4rame skripti <strong>&#8220;resetScoreboard&#8221;<\/strong><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69daf712571f3&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69daf712571f3\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1435\" height=\"704\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218.png\" alt=\"Tic Tac Toe\" class=\"wp-image-4399\" srcset=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218.png 1435w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218-300x147.png 300w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218-1024x502.png 1024w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218-768x377.png 768w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218-150x74.png 150w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/image-218-600x294.png 600w\" sizes=\"auto, (max-width: 1435px) 100vw, 1435px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<br>\n\n\n\n<div class=\"wp-block-group has-colibri-color-5-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-7a38538db3af121cbbf83e62098f1c0f\"><strong>Lisatud funktsioon <code>highlightWinningCells(cells)<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-a3e83dd24e83db1f887f6b8b509d4410\">Toetab v\u00f5idukombinatsiooniga lahtrite esilet\u00f5stmist<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-7e39321735e7138909f6bcf65120d98c\">Arvutab v\u00f5idulahtrite koordinaadid, mis asuvad <strong>&#8220;Board&#8221;<\/strong> vahemikus<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-e5a79e09e0823cf55c95c9bc26a9c062\">Muudab nende tausta roheliseks (<strong>#90EE90<\/strong>)<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction highlightWinningCells(cells) {\n  var sheet = SpreadsheetApp.getActive().getSheetByName(&quot;Board&quot;);\n    \n  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d &quot;Board&quot; \u0438 \u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432\n  var range = sheet.getRange(&quot;Board&quot;);\n  var startRow = range.getRow();  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\n  var startCol = range.getColumn();  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\n  \n  \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 &quot;Board&quot;\n  cells.forEach(function(cell) {\n    \/\/ \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 Board\n    var row = startRow + cell&#x5B;0];  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 + \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0431\u0435\u0434\u044b\n    var col = startCol + cell&#x5B;1];  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 + \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043f\u043e\u0431\u0435\u0434\u044b\n  \n    \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043e\u043d \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a\n    sheet.getRange(row, col).setBackground(&quot;#90EE90&quot;); \/\/ \u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u0431\u0435\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a\n  });\n}\n<\/pre><\/div>\n\n\n<div class=\"wp-block-group has-colibri-color-5-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-99ea685e0b00e11e761e3bdb966c3f0e\"><strong>Lisatud funktsioon <code>updateScoreboard(winner)<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-e3fc16d07f6abbc2137cca487411451e\">Suurendab v\u00f5itnud m\u00e4ngija (<strong>Player1Wins<\/strong> v\u00f5i <strong>Player2Wins<\/strong>) skoori<\/li>\n\n\n\n<li class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-7c25f631db6d386b83fa4acda4935528\">Suurendab viigi skoori (<strong>Draws<\/strong>), kui m\u00e4ng l\u00f5ppeb viigiga<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction updateScoreboard(winner) {\n  var spreadsheet = SpreadsheetApp.getActive();\n   \n  \/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u043e\u0432 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\n  if (winner == &quot;1&quot;) {\n    var player1Wins = spreadsheet.getRangeByName(&quot;Player1Wins&quot;).getValue();\n    spreadsheet.getRangeByName(&quot;Player1Wins&quot;).setValue(player1Wins + 1);\n  } else if (winner == &quot;2&quot;) {\n    var player2Wins = spreadsheet.getRangeByName(&quot;Player2Wins&quot;).getValue();\n    spreadsheet.getRangeByName(&quot;Player2Wins&quot;).setValue(player2Wins + 1);\n  } else if (winner == &quot;draw&quot;) {\n    var draws = spreadsheet.getRangeByName(&quot;Draws&quot;).getValue();\n    spreadsheet.getRangeByName(&quot;Draws&quot;).setValue(draws + 1);\n  }\n}\n<\/pre><\/div>\n\n\n<div class=\"wp-block-group has-colibri-color-6-color has-colibri-color-5-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-9076e918139bd3b544199a03028eb22d\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-292c5e85b3eb6a9af0208bdc4dbe0806\"><strong>Lisatud funktsioon <code>resetScoreboard()<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nullib m\u00e4ngijate v\u00f5idud ja viigid<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction resetScoreboard() {\n  var spreadsheet = SpreadsheetApp.getActive();\n \n  \/\/ \u0421\u0431\u0440\u043e\u0441 \u0432\u0441\u0435\u0445 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 (\u043f\u043e\u0431\u0435\u0434 1-\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430, \u043f\u043e\u0431\u0435\u0434 2-\u0433\u043e \u0438 \u043d\u0438\u0447\u044c\u0438\u0445)\n  spreadsheet.getRangeByName(&quot;Player1Wins&quot;).setValue(0);\n  spreadsheet.getRangeByName(&quot;Player2Wins&quot;).setValue(0);\n  spreadsheet.getRangeByName(&quot;Draws&quot;).setValue(0);\n}\n<\/pre><\/div>\n\n\n<div class=\"wp-block-group has-colibri-color-6-color has-colibri-color-5-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-feec9f03a1785d4718559f8e038d886d\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-b7f3b852dd8ba76ea5d26125fe90dead\"><strong>T\u00e4iendatud funktsioon <code>play(range)<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kutsutakse v\u00e4lja <code><strong>highlightWinningCells(winningCells)<\/strong><\/code>, kui keegi on v\u00f5itnud<\/li>\n\n\n\n<li>Uuendab skoori, kutsudes v\u00e4lja <code><strong>updateScoreboard(player)<\/strong><\/code> v\u00f5i <code><strong>updateScoreboard(\"draw\")<\/strong><\/code>, s\u00f5ltuvalt m\u00e4ngu tulemuseks<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u043b\u0438 \u0438\u0433\u0440\u043e\u043a\n  var winningCells = hasPlayerWonGame();\n  if (winningCells) {\n    displayMessage(&quot;Player &quot; + player + &quot; has won!&quot;);\n    highlightWinningCells(winningCells);\n    updateScoreboard(player);\n  } else if (areAllSquaresTaken()) {\n    displayMessage(&quot;Game is a draw!&quot;); \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0438\u0447\u044c\u044e\n    updateScoreboard(&quot;draw&quot;);\n  } else { \n    displayMessage(&quot;Player &quot; + (player == &quot;1&quot; ? &quot;2&#039;s &quot; : &quot;1&#039;s &quot;) + &quot;turn.&quot;);\n  }\n}\n<\/pre><\/div>\n\n\n<div class=\"wp-block-group has-colibri-color-6-color has-colibri-color-5-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-2bd1a27671c065d63b66ea0265a1db60\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-colibri-color-6-color has-text-color has-link-color has-medium-font-size wp-elements-48ea9d6e20f3cf65471b4b03372852ce\"><strong>T\u00e4iendatud funktsioon <code>resetGame()<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Puhastab m\u00e4nguv\u00e4lja (<strong>setValue(&#8220;&#8221;)<\/strong>)<\/li>\n\n\n\n<li>Taastab m\u00e4nguv\u00e4lja tausta (<strong>setBackground(&#8220;#EFEFEF&#8221;)<\/strong>)<\/li>\n\n\n\n<li>Uuendab s\u00f5numit m\u00e4ngu alguses<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction resetGame() {\n  var spreadsheet = SpreadsheetApp.getActive();\n  var sheet = spreadsheet.getSheetByName(&quot;Board&quot;);\n \n  \/\/ \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435\n  sheet.getRange(&quot;Board&quot;).setValue(&quot;&quot;); \n \n  \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 Board\n  sheet.getRange(&quot;Board&quot;).setBackground(&quot;#efefef&quot;);\n \n  \/\/ \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u0434 \u0437\u0430 \u0438\u0433\u0440\u043e\u043a\u043e\u043c 1\n  displayMessage(&quot;Player 1&#039;s turn&quot;);\n \n  \/\/ \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430)\n  sheet.getRange(1, 1).activate();\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Tulemus<\/strong><\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"390\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/chrome-capture-2025-3-25-5-2.gif\" alt=\"\" class=\"wp-image-4425\"\/><\/figure>\n<\/div>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69daf71258404&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69daf71258404\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1066\" height=\"706\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226.jpg\" alt=\"Tic Tac Toe\" class=\"wp-image-4359\" srcset=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226.jpg 1066w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226-300x199.jpg 300w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226-1024x678.jpg 1024w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226-768x509.jpg 768w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226-150x99.jpg 150w, https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-020226-600x397.jpg 600w\" sizes=\"auto, (max-width: 1066px) 100vw, 1066px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<br>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Kood minu muudatusega<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction onSelectionChange(e) {\n  \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\n  displayMessage(&quot;&quot;);\n\n   \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430\n  var isSelectionValid = checkSelection(e.range);\n  if(isSelectionValid)\n    play(e.range); \/\/ \u0415\u0441\u043b\u0438 \u0434\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0433\u0440\u0443\n}\n\nfunction checkSelection(range) {\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0432\u044b\u0448\u0435\u043b \u043b\u0438 \u0432\u044b\u0431\u043e\u0440 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u044f\u0447\u0435\u0439\u043a\u0438 2-4 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c)\n  if(range.rowStart &lt; 2 || range.rowEnd &gt; 4 || range.columnStart &lt; 2 || range.columnEnd &gt; 4) {\n    error(&quot;Select a cell inside the board.&quot;)\n    return false;\n  }\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430\n  if(range.rowStart != range.rowEnd || range.columnStart != range.columnEnd) {\n    error(&quot;Select a single cell.&quot;)\n    return false;\n  }\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0443\u0441\u0442\u0430\u044f \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430\n  var cell = SpreadsheetApp\n    .getActive()\n    .getSheetByName(&quot;Board&quot;)\n    .getRange(range.rowStart, range.columnStart);\n  var cellValue = cell.getValue();\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u0430 (\u043d\u0435 &quot;X&quot; \u0438 \u043d\u0435 &quot;O&quot;)\n  if(cellValue != &quot;&quot; &amp;&amp; cellValue !=null) {\n    error(&quot;Select an empty cell.&quot;)\n    return false;\n  }\n\n  return true;\n}\n\nfunction displayMessage(message) {\n  \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 &quot;Message&quot;\n  SpreadsheetApp.getActive().getRangeByName(&quot;Message&quot;).setValue(message);\n}\n\nfunction error(message) {\n  \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435\n  displayMessage(&quot;\u26a0\ufe0f &quot; + message);\n}\n\nfunction play(range) {\n  var player = whoseTurnIsIt();  \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0447\u0435\u0439 \u0445\u043e\u0434\n  \n  \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c &quot;X&quot; \u0438\u043b\u0438 &quot;O&quot; \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0445\u043e\u0434\u0430 \u0438\u0433\u0440\u043e\u043a\u0430\n  SpreadsheetApp\n    .getActive()\n    .getSheetByName(&quot;Board&quot;)\n    .getRange(range.rowStart, range.columnStart)\n    .setValue(player == &quot;1&quot; ? &quot;X&quot; : &quot;O&quot;);\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u043b\u0438 \u0438\u0433\u0440\u043e\u043a\n  var winningCells = hasPlayerWonGame();\n  if (winningCells) {\n    displayMessage(&quot;Player &quot; + player + &quot; has won!&quot;);\n    highlightWinningCells(winningCells);\n    updateScoreboard(player);\n  } else if (areAllSquaresTaken()) {\n    displayMessage(&quot;Game is a draw!&quot;); \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0438\u0447\u044c\u044e\n    updateScoreboard(&quot;draw&quot;);\n  } else { \n    displayMessage(&quot;Player &quot; + (player == &quot;1&quot; ? &quot;2&#039;s &quot; : &quot;1&#039;s &quot;) + &quot;turn.&quot;);\n  }\n}\n\nfunction whoseTurnIsIt() {\n  \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0447\u0435\u0439 \u0445\u043e\u0434: \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0447\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0442\u043e 1-\u0439 \u0438\u0433\u0440\u043e\u043a, \u0438\u043d\u0430\u0447\u0435 2-\u0439\n  return numSquaresTaken() % 2 == 0 ? 1 : 2;\n}\n\nfunction areAllSquaresTaken() {\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438 \u0432\u0441\u0435 9 \u044f\u0447\u0435\u0435\u043a \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f\n  return numSquaresTaken() === 9;\n}\n\nfunction numSquaresTaken() {\n  \/\/ \u041f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u043a\u043b\u0435\u0442\u043e\u043a (\u0441 &quot;X&quot; \u0438\u043b\u0438 &quot;O&quot;)\n  var board = SpreadsheetApp.getActive().getRangeByName(&quot;Board&quot;).getValues();\n  var numChars = 0;\n  board.forEach(function(row) {\n    row.forEach(function(col) {\n      if(col == &quot;X&quot; || col == &quot;O&quot;)\n        numChars++;\n    });\n  });\n  return numChars;\n}\n\nfunction hasPlayerWonGame() {\n  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f\n  var board = SpreadsheetApp.getActive().getRangeByName(&quot;Board&quot;).getValues();\n\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 (\u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c, \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c \u0438 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044f\u043c)\n  for (var i = 0; i &lt; 3; i++) {\n    \/\/ \u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438\n    if (board&#x5B;i]&#x5B;0] !== &quot;&quot; &amp;&amp; board&#x5B;i]&#x5B;0] === board&#x5B;i]&#x5B;1] &amp;&amp; board&#x5B;i]&#x5B;1] === board&#x5B;i]&#x5B;2]) {\n      return &#x5B;&#x5B;i, 0], &#x5B;i, 1], &#x5B;i, 2]]; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b\n    }\n    \/\/ \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438\n    if (board&#x5B;0]&#x5B;i] !== &quot;&quot; &amp;&amp; board&#x5B;0]&#x5B;i] === board&#x5B;1]&#x5B;i] &amp;&amp; board&#x5B;1]&#x5B;i] === board&#x5B;2]&#x5B;i]) {\n      return &#x5B;&#x5B;0, i], &#x5B;1, i], &#x5B;2, i]]; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b\n    }\n  }\n  \n  \/\/ \u0414\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438\n  if (board&#x5B;0]&#x5B;0] !== &quot;&quot; &amp;&amp; board&#x5B;0]&#x5B;0] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;2]&#x5B;2]) {\n    return &#x5B;&#x5B;0, 0], &#x5B;1, 1], &#x5B;2, 2]]; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b\n  }\n  if (board&#x5B;0]&#x5B;2] !== &quot;&quot; &amp;&amp; board&#x5B;0]&#x5B;2] === board&#x5B;1]&#x5B;1] &amp;&amp; board&#x5B;1]&#x5B;1] === board&#x5B;2]&#x5B;0]) {\n    return &#x5B;&#x5B;0, 2], &#x5B;1, 1], &#x5B;2, 0]]; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b\n  }\n\n  return false;\n}\n\n\nfunction resetGame() {\n  var spreadsheet = SpreadsheetApp.getActive();\n  var sheet = spreadsheet.getSheetByName(&quot;Board&quot;);\n\n  \/\/ \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435\n  sheet.getRange(&quot;Board&quot;).setValue(&quot;&quot;); \n\n  \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 Board\n  sheet.getRange(&quot;Board&quot;).setBackground(&quot;#efefef&quot;);\n\n  \/\/ \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u0434 \u0437\u0430 \u0438\u0433\u0440\u043e\u043a\u043e\u043c 1\n  displayMessage(&quot;Player 1&#039;s turn&quot;);\n\n  \/\/ \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f (\u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430)\n  sheet.getRange(1, 1).activate();\n}\n\nfunction updateScoreboard(winner) {\n  var spreadsheet = SpreadsheetApp.getActive();\n  \n  \/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u043e\u0432 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\n  if (winner == &quot;1&quot;) {\n    var player1Wins = spreadsheet.getRangeByName(&quot;Player1Wins&quot;).getValue();\n    spreadsheet.getRangeByName(&quot;Player1Wins&quot;).setValue(player1Wins + 1);\n  } else if (winner == &quot;2&quot;) {\n    var player2Wins = spreadsheet.getRangeByName(&quot;Player2Wins&quot;).getValue();\n    spreadsheet.getRangeByName(&quot;Player2Wins&quot;).setValue(player2Wins + 1);\n  } else if (winner == &quot;draw&quot;) {\n    var draws = spreadsheet.getRangeByName(&quot;Draws&quot;).getValue();\n    spreadsheet.getRangeByName(&quot;Draws&quot;).setValue(draws + 1);\n  }\n}\n\nfunction resetScoreboard() {\n  var spreadsheet = SpreadsheetApp.getActive();\n\n  \/\/ \u0421\u0431\u0440\u043e\u0441 \u0432\u0441\u0435\u0445 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 (\u043f\u043e\u0431\u0435\u0434 1-\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430, \u043f\u043e\u0431\u0435\u0434 2-\u0433\u043e \u0438 \u043d\u0438\u0447\u044c\u0438\u0445)\n  spreadsheet.getRangeByName(&quot;Player1Wins&quot;).setValue(0);\n  spreadsheet.getRangeByName(&quot;Player2Wins&quot;).setValue(0);\n  spreadsheet.getRangeByName(&quot;Draws&quot;).setValue(0);\n}\n\nfunction highlightWinningCells(cells) {\n  var sheet = SpreadsheetApp.getActive().getSheetByName(&quot;Board&quot;);\n  \n  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d &quot;Board&quot; \u0438 \u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432\n  var range = sheet.getRange(&quot;Board&quot;);\n  var startRow = range.getRow();  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\n  var startCol = range.getColumn();  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\n\n  \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u043e\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 &quot;Board&quot;\n  cells.forEach(function(cell) {\n    \/\/ \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 Board\n    var row = startRow + cell&#x5B;0];  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 + \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0431\u0435\u0434\u044b\n    var col = startCol + cell&#x5B;1];  \/\/ \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 + \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043f\u043e\u0431\u0435\u0434\u044b\n\n    \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043e\u043d \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a\n    sheet.getRange(row, col).setBackground(&quot;#90EE90&quot;); \/\/ \u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442\n  });\n}\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>See projekt v\u00f5imaldab m\u00e4ngida klassikalist Tic Tac Toe otse Google Sheetsi tabelis. Kasutajad [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4219","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>LOOV\u00dcLESANNE: Tic Tac Toe - Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/\" \/>\n<meta property=\"og:locale\" content=\"et_EE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LOOV\u00dcLESANNE: Tic Tac Toe - Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |\" \/>\n<meta property=\"og:description\" content=\"See projekt v\u00f5imaldab m\u00e4ngida klassikalist Tic Tac Toe otse Google Sheetsi tabelis. Kasutajad [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/\" \/>\n<meta property=\"og:site_name\" content=\"Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-25T11:59:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1075\" \/>\n\t<meta property=\"og:image:height\" content=\"703\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/\",\"url\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/\",\"name\":\"LOOV\u00dcLESANNE: Tic Tac Toe - Maria Smolina &Otilde;PIMAPP\\\/ Portfoolio | EST |\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Screenshot-2025-03-25-022202.jpg\",\"datePublished\":\"2025-03-23T13:43:15+00:00\",\"dateModified\":\"2025-03-25T11:59:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/#breadcrumb\"},\"inLanguage\":\"et\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Screenshot-2025-03-25-022202.jpg\",\"contentUrl\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Screenshot-2025-03-25-022202.jpg\",\"width\":1075,\"height\":703},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/loovulesanne-tic-tac-toe\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"LOOV\u00dcLESANNE: Tic Tac Toe\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/#website\",\"url\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/\",\"name\":\"Maria Smolina \u00d5PIMAPP\\\/ Portfoolio | EST |\",\"description\":\"Noorem Tarkvaraarendaja eriala\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"et\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/#organization\",\"name\":\"Maria Smolina \u00d5PIMAPP\\\/ Portfoolio | EST |\",\"url\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/cropped-cropped-cropped-logo.png\",\"contentUrl\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/cropped-cropped-cropped-logo.png\",\"width\":373,\"height\":373,\"caption\":\"Maria Smolina \u00d5PIMAPP\\\/ Portfoolio | EST |\"},\"image\":{\"@id\":\"https:\\\/\\\/mariasmolina24.thkit.ee\\\/wp\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"LOOV\u00dcLESANNE: Tic Tac Toe - Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/","og_locale":"et_EE","og_type":"article","og_title":"LOOV\u00dcLESANNE: Tic Tac Toe - Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |","og_description":"See projekt v\u00f5imaldab m\u00e4ngida klassikalist Tic Tac Toe otse Google Sheetsi tabelis. Kasutajad [&hellip;]","og_url":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/","og_site_name":"Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |","article_modified_time":"2025-03-25T11:59:49+00:00","og_image":[{"width":1075,"height":703,"url":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/","url":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/","name":"LOOV\u00dcLESANNE: Tic Tac Toe - Maria Smolina &Otilde;PIMAPP\/ Portfoolio | EST |","isPartOf":{"@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/#primaryimage"},"image":{"@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/#primaryimage"},"thumbnailUrl":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg","datePublished":"2025-03-23T13:43:15+00:00","dateModified":"2025-03-25T11:59:49+00:00","breadcrumb":{"@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/#breadcrumb"},"inLanguage":"et","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/"]}]},{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/#primaryimage","url":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg","contentUrl":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-25-022202.jpg","width":1075,"height":703},{"@type":"BreadcrumbList","@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/loovulesanne-tic-tac-toe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/mariasmolina24.thkit.ee\/wp\/"},{"@type":"ListItem","position":2,"name":"LOOV\u00dcLESANNE: Tic Tac Toe"}]},{"@type":"WebSite","@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/#website","url":"https:\/\/mariasmolina24.thkit.ee\/wp\/","name":"Maria Smolina \u00d5PIMAPP\/ Portfoolio | EST |","description":"Noorem Tarkvaraarendaja eriala","publisher":{"@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mariasmolina24.thkit.ee\/wp\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"et"},{"@type":"Organization","@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/#organization","name":"Maria Smolina \u00d5PIMAPP\/ Portfoolio | EST |","url":"https:\/\/mariasmolina24.thkit.ee\/wp\/","logo":{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/#\/schema\/logo\/image\/","url":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2024\/11\/cropped-cropped-cropped-logo.png","contentUrl":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-content\/uploads\/2024\/11\/cropped-cropped-cropped-logo.png","width":373,"height":373,"caption":"Maria Smolina \u00d5PIMAPP\/ Portfoolio | EST |"},"image":{"@id":"https:\/\/mariasmolina24.thkit.ee\/wp\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/pages\/4219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/comments?post=4219"}],"version-history":[{"count":0,"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/pages\/4219\/revisions"}],"wp:attachment":[{"href":"https:\/\/mariasmolina24.thkit.ee\/wp\/wp-json\/wp\/v2\/media?parent=4219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}