<snapdata remixID="13066272"><project name="U3L1-TicTacToe" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="U3L1-TicTacToe"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="words"/></block></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><l></l><block s="reportListItem"><l>1</l><block var="words"/></block></list></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></list></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportCDR"><block s="reportCDR"><block var="words"/></block></block></block></custom-block></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><l> </l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></list></block></block></script></block></script><scripts><script x="229.00000300000002" y="196.77778077777774"><block s="reportJoinWords"><list><l></l><l></l></list></block></script></scripts></block-definition><block-definition s="ignore %&apos;x&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="makeBoard" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>myboardposition</l><l>0</l></block><block s="hide"></block><block s="doSwitchToCostume"><l>Empty</l></block><block s="doFor"><l>row</l><l>1</l><l>3</l><script><block s="doFor"><l>column</l><l>1</l><l>3</l><script><block s="doSetVar"><l>myboardposition</l><block s="reportVariadicSum"><list><block var="myboardposition"/><l>1</l></list></block></block><block s="createClone"><l><option>myself</option></l></block><block s="forward"><l>50</l></block></script></block><block s="changeXPosition"><l>-150</l></block><block s="changeYPosition"><l>-50</l></block></script></block><block s="doSetVar"><l>myboardposition</l><l>0</l></block></script></block-definition><block-definition s="status of triple %&apos;array&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="boardstate"/></block></autolambda><list></list></block><block var="array"/></block><block s="reportNewList"><list><l>X</l><l>X</l><l>X</l></list></block></list></block><block s="reportVariadicEquals"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="boardstate"/></block></autolambda><list></list></block><block var="array"/></block><block s="reportNewList"><list><l>O</l><l>O</l><l>O</l></list></block></list></block></list></block></block></script></block-definition><block-definition s="winning triples for player %&apos;input&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><custom-block s="%l is not made of letters"><l/></custom-block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><custom-block s="how many %s in %l"><block var="input"/><l/></custom-block><l>2</l></list></block></autolambda><list></list></block><block var="status of all winning triples"/></block></block></block></script></block-definition><block-definition s="how many %&apos;input&apos; in %&apos;list?&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>length</option></l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><l></l><block var="input"/></list></block></autolambda><list></list></block><block var="list?"/></block></block></block></script></block-definition><block-definition s="detect win" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>status of all winning triples</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="boardstate"/></block></autolambda><list></list></block><block var="winning triplets"/></block></block><block s="doIf"><custom-block s="won? %s"><l>X</l></custom-block><script><block s="doBroadcast"><l>X win</l><list></list></block><block s="doSetVar"><l>winner?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list><custom-block s="won? %s"><l>O</l></custom-block><script><block s="doBroadcast"><l>O win</l><list></list></block><block s="doSetVar"><l>winner?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><block s="reportNot"><custom-block s="%l is not made of letters"><block var="boardstate"/></custom-block></block><script><block s="doBroadcast"><l>tie</l><list></list></block><block s="doSetVar"><l>winner?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></list></block></script></block-definition><block-definition s="won? %&apos;input&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>winner</l></list></block><block s="doIf"><block s="reportListContainsItem"><block var="status of all winning triples"/><block s="reportNewList"><list><l>X</l><l>X</l><l>X</l></list></block></block><script><block s="doSetVar"><l>winner</l><l>X</l></block></script><list><block s="reportListContainsItem"><block var="status of all winning triples"/><block s="reportNewList"><list><l>O</l><l>O</l><l>O</l></list></block></block><script><block s="doSetVar"><l>winner</l><l>O</l></block></script></list></block><block s="doReport"><block s="reportVariadicEquals"><list><block var="input"/><block var="winner"/></list></block></block></script></block-definition><block-definition s="play turn" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block var="X&apos;s turn?"/><script><block s="doSwitchToCostume"><l>X</l></block><block s="doReplaceInList"><block var="myboardposition"/><block var="boardstate"/><l>X</l></block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list><block s="reportVariadicEquals"><list><block var="X&apos;s turn?"/><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><script><block s="doSwitchToCostume"><l>O</l></block><block s="doReplaceInList"><block var="myboardposition"/><block var="boardstate"/><l>O</l></block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></list><comment w="90" collapsed="false">adds the turns</comment></block><custom-block s="detect win"><comment w="90" collapsed="false">Check and update boardstate</comment></custom-block></script></block-definition><block-definition s="best empty square" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><l></l><block var="boardstate"/></block><l></l></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>5</l><l>1</l><l>3</l><l>7</l><l>9</l><l>2</l><l>4</l><l>6</l><l>8</l></list></block></block></block></script></block-definition><block-definition s="computer strategic move" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><custom-block s="winning square for player %s"><l>X</l></custom-block><l></l></list></block></block><script><block s="doReport"><custom-block s="winning square for player %s"><l>X</l></custom-block></block></script><list><block s="reportNot"><block s="reportVariadicEquals"><list><custom-block s="winning square for player %s"><l>O</l></custom-block><l></l></list></block></block><script><block s="doReport"><custom-block s="winning square for player %s"><l>O</l></custom-block><comment w="90" collapsed="false">X is the human player, O is the computer player</comment></block></script><l><bool>true</bool></l><script><block s="doReport"><custom-block s="best empty square"></custom-block></block></script></list><comment w="90" collapsed="false">This is the whole strategic move</comment></block></script></block-definition><block-definition s="setup" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doAsk"><l>What to play against computer? y/n</l></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="getLastAnswer"></block><l>y</l></list></block><script><block s="doSetVar"><l>computer player</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doAsk"><l>Do you want the computer to be X or O?</l></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="getLastAnswer"></block><l>O</l></list></block><script><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list><block s="reportVariadicEquals"><list><block s="getLastAnswer"></block><l>X</l></list></block><script><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doBroadcastAndWait"><l>computer turn</l><list></list></block></script></list></block></script><list></list></block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>winner?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="winning square for player %&apos;input&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><custom-block s="winning triples for player %s"><block var="input"/></custom-block></block><comment w="90" collapsed="false">Prevent error input.</comment></block><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>number</option></l></block></autolambda><list></list></block><block s="reportListItem"><l>1</l><custom-block s="winning triples for player %s"><block var="input"/></custom-block></block></block></block></script><list><l><bool>true</bool></l><script><block s="doReport"><l></l></block></script></list></block></script></block-definition><block-definition s="%&apos;array&apos; is not made of letters" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><l/></block><script><block s="doIf"><block s="reportIsA"><block s="reportListItem"><block var="i"/><block var="array"/></block><l><option>number</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list><l><bool>true</bool></l><script></script></list></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="computer player" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l></l></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="false" sublistIDs="false" id="606"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="607"></list></costumes><sounds><list struct="atomic" id="608"></list></sounds><variables></variables><blocks></blocks><scripts><script x="47" y="28.56666666666669"><block s="clear"></block><block s="write"><l>You move first</l><l>12</l></block></script></scripts><sprites select="3"><sprite name="Square" idx="3" x="-50" y="-100" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="1" color="80,80,80,1" pen="tip" id="617"><costumes><list id="618"><item><ref mediaID="Square_cst_Empty"></ref></item><item><ref mediaID="Square_cst_X"></ref></item><item><ref mediaID="Square_cst_O"></ref></item></list></costumes><sounds><list struct="atomic" id="619"></list></sounds><blocks></blocks><variables><variable name="myboardposition"><l>0</l></variable></variables><scripts><script x="398.00000000000034" y="241.06666666666655"><block s="receiveMessage"><l>Play</l><list><l>data</l></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="myboardposition"/><block var="data"/></list></block><script><custom-block s="play turn"></custom-block></script><list></list></block></script><script x="333.0000000000008" y="346.06666666666655"><block s="receiveOnClone"></block><block s="show"></block><block s="doSwitchToCostume"><l>Empty</l></block></script><script x="45.00000000000003" y="461.73333333333346"><block s="doSetVar"><l>winning triplets</l><block s="reportNewList"><list><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block><block s="reportNewList"><list><l>4</l><l>5</l><l>6</l></list></block><block s="reportNewList"><list><l>7</l><l>8</l><l>9</l></list></block><block s="reportNewList"><list><l>1</l><l>4</l><l>7</l></list></block><block s="reportNewList"><list><l>2</l><l>5</l><l>8</l></list></block><block s="reportNewList"><list><l>3</l><l>6</l><l>9</l></list></block><block s="reportNewList"><list><l>3</l><l>5</l><l>7</l></list></block><block s="reportNewList"><list><l>1</l><l>5</l><l>9</l></list></block></list></block><comment w="90" collapsed="true">A list of potential game situations that win.</comment></block></script><script x="47.00000000000003" y="550.733333333333"><block s="doSetVar"><l>computer player</l><block s="reportBoolean"><l><bool>true</bool></l><comment w="90" collapsed="true">used when using the computer and the manual switching feature.</comment></block></block></script><script x="372.00000000000057" y="31.066666666666663"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="getCostumeIdx"></block><l>1</l></list></block><block s="reportVariadicEquals"><list><block var="winner?"/><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></list></block><script><block s="doBroadcastAndWait"><l>Play</l><list><l><option>all</option></l><block var="myboardposition"/></list></block><block s="doIf"><block s="reportVariadicEquals"><list><custom-block s="computer player"></custom-block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block><script><block s="doBroadcast"><l>computer turn</l><list><l>Computer Player</l><block var="myboardposition"/></list></block></script><list></list><comment w="90" collapsed="true">say computer turn if it can</comment></block></script><list></list></block></script><script x="41.00000000000003" y="212.3333333333336"><block s="receiveGo"></block><block s="doSetVar"><l>computer player</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>winner?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>boardstate</l><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l><l>4</l><l>5</l><l>6</l><l>7</l><l>8</l><l>9</l></list></block></block><block s="show"></block><block s="gotoXY"><l>-50</l><l>50</l><comment w="90" collapsed="true">Position for makeBoard</comment></block><custom-block s="makeBoard"><comment w="90" collapsed="true">Make nine copies there.</comment></custom-block><custom-block s="setup"></custom-block><custom-block s="detect win"><comment w="90" collapsed="true">reset winning triples</comment></custom-block></script><script x="487.00000000000057" y="542.4000000000004"><block s="reportListItem"><l>2</l><custom-block s="winning triples for player %s"><l>X</l></custom-block></block></script><script x="19.000000000000085" y="157.73333333333306"><custom-block s="winning square for player %s"><l>O</l></custom-block></script><script x="13.000000000000085" y="60.166666666666515"><custom-block s="winning triples for player %s"><l>X</l></custom-block></script><script x="10.000000000000028" y="122.16666666666652"><custom-block s="status of triple %l"><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block></custom-block></script><script x="10.8333333333334" y="10"><block var="status of all winning triples"><comment w="90" collapsed="false">checks if the list of winning game states, which is updated in the detect win block, matches the current board.</comment></block></script></scripts></sprite><sprite name="Writer" idx="1" x="42.3671875" y="-100" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="26,23,0,1" pen="tip" id="813"><costumes><list struct="atomic" id="814"></list></costumes><sounds><list struct="atomic" id="815"></list></sounds><blocks></blocks><variables></variables><scripts><script x="48" y="28.73333333333335"><block s="receiveMessage"><l>O win</l><list></list><comment w="90" collapsed="false">What is said when O wins</comment></block><block s="clear"></block><block s="gotoXY"><l>-25</l><l>-100</l></block><block s="write"><l>O wins!</l><l>12</l></block></script><script x="53" y="176.73333333333335"><block s="receiveMessage"><l>X win</l><list></list><comment w="90" collapsed="false">What is said when X wins</comment></block><block s="clear"></block><block s="gotoXY"><l>-25</l><l>-100</l></block><block s="write"><l>X wins!</l><l>12</l></block></script><script x="55" y="321.73333333333335"><block s="receiveGo"><comment w="90" collapsed="false">Initial board</comment></block><block s="setColor"><color>26,23,0,1</color></block><block s="gotoXY"><l>-50</l><l>-100</l></block><block s="hide"></block><block s="clear"></block><block s="write"><l>You move first</l><l>12</l></block></script><script x="378" y="110.73333333333335"><block s="receiveMessage"><l>Play</l><list></list></block><block s="clear"></block></script></scripts></sprite><sprite name="Computer Player" idx="2" x="153" y="120" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="26,19,0,1" pen="tip" id="857"><costumes><list struct="atomic" id="858"></list></costumes><sounds><list struct="atomic" id="859"></list></sounds><blocks></blocks><variables></variables><scripts><script x="20.279296875" y="22.733333333333604"><block s="receiveGo"></block><block s="setColor"><color>26,19,0,1</color></block><block s="hide"></block></script><script x="13.279296875" y="169.7333333333337"><block s="receiveMessage"><l>computer turn</l><list></list><comment w="90" collapsed="false">Announces computer turn with best empty square</comment></block><block s="doBroadcastAndWait"><l>Play</l><list><l><option>all</option></l><custom-block s="computer strategic move"></custom-block></list></block></script><script x="17" y="262.73333333333335"><custom-block s="winning square for player %s"><l>X</l></custom-block></script><script x="10" y="331.73333333333335"><block s="doBroadcastAndWait"><l>Play</l><list><l><option>all</option></l><custom-block s="best empty square"></custom-block></list><comment w="90" collapsed="false">Helps strategic play</comment></block></script></scripts></sprite><watcher var="X&apos;s turn?" style="normal" x="5" y="5" color="243,118,29"/><watcher var="status of all winning triples" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="boardstate" style="normal" x="10" y="31.000001999999995" color="243,118,29" hidden="true"/><watcher var="computer player" style="normal" x="10" y="52.00000399999999" color="243,118,29" hidden="true"/><watcher var="winner?" style="normal" x="10" y="73.000006" color="243,118,29" hidden="true"/><watcher var="winning triplets" style="normal" x="10" y="94.00000799999998" color="243,118,29" hidden="true"/><watcher scope="Square" var="myboardposition" style="normal" x="10" y="136.00001199999997" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="X&apos;s turn?"><bool>false</bool></variable><variable name="status of all winning triples"><list id="895"><item><list struct="atomic" id="896">X,X,O</list></item><item><list struct="atomic" id="897">O,O,X</list></item><item><list struct="atomic" id="898">7,X,9</list></item><item><list struct="atomic" id="899">X,O,7</list></item><item><list struct="atomic" id="900">X,</list></item><item><list struct="atomic" id="901">X,X,O,O,O,X,7,X,9</list></item><item><list struct="atomic" id="902">X,X,O,O,O,X,7,X,9</list></item><item><list struct="atomic" id="903">X,X,O,O,O,X,7,X,9</list></item></list></variable><variable name="boardstate"><list struct="atomic" id="904">X,X,O,O,O,X,7,X,9</list></variable><variable name="computer player"><bool>true</bool></variable><variable name="winner?"><bool>true</bool></variable><variable name="winning triplets"><list id="905"><item><list struct="atomic" id="906">1,2,3</list></item><item><list struct="atomic" id="907">4,5,6</list></item><item><list struct="atomic" id="908">7,8,9</list></item><item><list struct="atomic" id="909">1,4,7</list></item><item><list struct="atomic" id="910">2,</list></item><item><list struct="atomic" id="911"></list></item><item><list struct="atomic" id="912"></list></item><item><list struct="atomic" id="913"></list></item></list></variable></variables></scene></scenes></project><media name="U3L1-TicTacToe" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><costume name="Empty" center-x="26" center-y="26" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAAAXNSR0IArs4c6QAAAMdJREFUaEPtmrENgmAUBh9TYEfBIs6i4lAEZ6GVGAs3MjFxgK+5wJ+jv3y8O0q6auzpqupcVWsLdw3D+P4ddLlO62OZD33Tc3vVdLt/PGivGS201zL/97KQhWADfnKw8HjOQrEyGLAQLDyes1CsDAYsBAuP5ywUK4MBC8HC4zkLxcpgwEKw8HjOQrEyGLAQLDyes1CsDAYsBAuP5ywUK4MBC8HC4zkLxcpgwEKw8HjOQrEyGLAQLDyes1CsDAbaLtTKH419f9q+t56dV83eYNkAAAAASUVORK5CYII=" mediaID="Square_cst_Empty"/><costume name="X" center-x="26" center-y="26" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAAAXNSR0IArs4c6QAAAgVJREFUaEPt2rtOAkEUBuBDpTRgTdRQ8gRIaUUMoIk3RAQlEWm9FpYG7IzxKSyoLC3VTmPUxkvrLVFLLOhMzJJgREHOnDlnZxeh22Qv882/O+HPrgcAgvH4xKbP19MLLv9Vqx/XHgAYDocjh9mFnKtBb68vcHV58VADJZPpg3J5v8/NAZ2encN2qdgFOTbE/5nQ49MzDA70OyqVVmNCJbSYL0AgEIBSccsRqJvbOxhNJGBndw8mx8caxoQCVSrvkF8qQCgUMo6qY+Yy2aZjQYGsKXACqh3GGicaZBqFwSiDTKGwGBLIbpQKhgyyC6WK0QJJoygYbZAUiophAXGjdDBsIC6ULoYVpIviwLCDqCgujAhIFcWJEQNhUdwYUVA7lARGHNQKJYWxBfQTlUrN1MpZqz7T0NYIG0r1gXD+r0OsPpXJzsPJ8REsr6yKFUXbQNZtFo/FwOv1wtR00t2g78/MxvqaaJ0XT6jZAiBZ50VBf61mUigxEGZplkCJgDCY+vLHjWIHqWAkUKwgCoYbxQbSwXCiWEAcGC6UNogTw4HSAklgdFFkkCRGB0UC2YGhopRBdmIoKCWQCYwqCg0yiVFBoUBOwGBRKFA0OgJDkYhYy1St9vU/tKnZNO2lsRNf61sov9/3ay5QCanOoMn9uyCTs4+5dmcn1GkfAAYBIIeJ1QX73H8CynJ8DoPjGXcAAAAASUVORK5CYII=" mediaID="Square_cst_X"/><costume name="O" center-x="26" center-y="26" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAAAXNSR0IArs4c6QAABGBJREFUaEPtmktME1EUhv+uFXCnCQIRBOpjYYtGN4qiIUbwFTUKPmKUghIXEKNxQyllY5ACC+ODYmJUoPiIDzAxREV04QNpNRFESDSCzx0PXWPOmJu0dKZzZ+ZOQWSSpovee+Z85z9z7r1nasE0uywA1gLomA5cSUkp3RLQocOOjksN9f8004uXXXAUFL6dAZqqMs4oxKtM+8PH8PsDGOj/gI7Hj/Dp08ewqTt37UZ8fDyW2ezIWpeJxIT5vOYVxwlVaHDoC7zeBjReu4qM5Sukj91ugzU9TdZZunnfh368Cfhx7+4dafyevHzs2L5FN5gQoGCQwiPFyM/brSvat27fg6+5CSPDwyg6WqwLzDDQ5SuNcLucIJCjRQ7ExcXqji6bSOlaXVWFhMRElJc7NQVHN9DIyCjKXRXo7emBu7ISq1auMAwSbIDsn7/oRf2Fc7hQ70X2hiwu+7qA6GYFjkLExsaixlMtRBUlbykNTxwvxRlPLVcKagZiMFarFZVuF1fUjA7q6X2Pzbm5XFCagQ4XFCImJgZ1tR6jfmqaT1BLlyzG8xevIqa3JqCz5y6i80kHGrz1pqaZWvoFAgHF+3MDsQi96+nFksWLNEVX5OCS0uOSOaUM4QaiVLPZM3CsuEikf5pt0TNss9nQ1OyTTT0uIBqUn7cHkaTW7JmBCZT6AX835I46XEAk88LUtElXh8WAqdTa1haW/qpAtK1JSkzA8PDIpBQCJSFPV3nw+9dY2NKhCkRbG9o8RrtMq2UkFanSklK0tz8IGaoKROm2ek0m1yqt5oTo35OTUzAx7VSB5CaJdkyvPblgqwJZLBaMj4/rvaep86ja0RW8lEQEoh89Hg9uXPeZ6phe43TMaPH5Qsq3KpDX65Wt93qdEDmPnJ/o3wyQyAgbtaVZIaVab9QRUfPp8PfsaWfIGvl/VTmKZHb2RlN6BiJUohPAppzckEVfVaEypwspC1Nx8MBeET4ItUGL/pPOzpCukCoQ65VNtbWItbo07+Voqz5nThw+Dw5p6o8JlULGGGXOrNkxOHXy7wmWXaoK0UClyWY7rWQ/UpC5gOhMtDYzc0qdWH/++C7bRuMCYirRd7R6cUrqsAOn0iPADcRUUmpORCv9qFSnpqWHPTuaniE2mLVlJ6tZQsfu7tddEfuC3AoxKCoQfX19UW82smDKNUY0V7mJ6RRtKF4Y8lOzQhOVcrnKTe2k0qm0proqrHeg9MzqBiKDlNP0/sbpcgvfGlERqqhwY2hwELV1tdxBMwTEJHaWlUlv2xwOh+EXX7RoXm1sllTR81bQMBBBBTuxLmt92A6Yp6STIk3NLZLiZENvcIQAMYcJ7PbdVtxva5XK65at26QW8vIMuzRkkTVd6r7SwXFs7Be+fvuOgYEBaSx99u7bj5ycHEMqCwUKVoIi3vXaLzlM/1UYHR3FzRst0pAFC5IlFejFGQMW9Y7WNCCeNDNjzAyQGVEVaXN6KzRd/tE4d+68l38AHzaJdYJvYYIAAAAASUVORK5CYII=" mediaID="Square_cst_O"/></media></snapdata>