<snapdata remixID="13882346"><project name="U3L3-TicTacToeAI" app="Snap! 10.1-dev, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="U3L3-TicTacToeAI"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>step</l><l>tester</l></list></block><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="start"/><block var="end"/></list></block><script><block s="doSetVar"><l>step</l><l>-1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportVariadicLessThan"><list><block var="i"/><block var="end"/></list></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>step</l><l>1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportVariadicGreaterThan"><list><block var="i"/><block var="end"/></list></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><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="errorObsolete"></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="doSwitchToCostume"><l>Empty</l></block><block s="show"></block><block s="setEffect"><l><option>ghost</option></l><l>30</l><comment w="78" collapsed="true">3.3.3 TIF B</comment></block><block s="setScale"><l>95</l><comment w="190" collapsed="true">Oops costumes are a bit too big.</comment></block><block s="doSetVar"><l>position number</l><l>1</l><comment w="53.333333333333336" collapsed="true">3.3.1.4</comment></block><custom-block s="for %upvar = %n to %n %cs"><l>i</l><l>1</l><l>3</l><script><custom-block s="for %upvar = %n to %n %cs"><l>j</l><l>1</l><l>3</l><script><block s="gotoXY"><block s="reportVariadicSum"><list><l>-100</l><block s="reportVariadicProduct"><list><l>50</l><block var="j"/></list></block></list></block><block s="reportDifference"><l>100</l><block s="reportVariadicProduct"><list><l>50</l><block var="i"/></list></block></block></block><block s="createClone"><l><option>myself</option></l></block><block s="doChangeVar"><l>position number</l><l>1</l><comment w="53.333333333333336" collapsed="true">3.3.1.4</comment></block></script></custom-block></script></custom-block><block s="hide"></block></script></block-definition><block-definition s="possible winning triples" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><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>1</l><l>5</l><l>9</l></list></block><block s="reportNewList"><list><l>3</l><l>5</l><l>7</l></list></block></list></block></block></script></block-definition><block-definition s="status of triple %&apos;triple&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="board"/></block></autolambda><list></list></block><block var="triple"/></block></block></script></block-definition><block-definition s="status of all winning triples" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="status of triple %l"><l/></custom-block></autolambda><list></list></block><custom-block s="possible winning triples"></custom-block></block></block></script></block-definition><block-definition s="won? %&apos;who&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListContainsItem"><custom-block s="status of all winning triples"></custom-block><block s="reportNewList"><list><block var="who"/><block var="who"/><block var="who"/></list></block></block></block></script></block-definition><block-definition s="tied?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>number</option></l></block></autolambda><list></list></block><block var="board"/></block><l></l></list></block></block></script></block-definition><block-definition s="draw win line" type="command" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doFor"><l>i</l><l>1</l><l>8</l><script><block s="doDeclareVariables"><list><l>line</l></list></block><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="i"/><custom-block s="status of all winning triples"></custom-block></block><block s="reportNewList"><list><l>X</l><l>X</l><l>X</l></list></block></list></block><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="i"/><custom-block s="status of all winning triples"></custom-block></block><block s="reportNewList"><list><l>O</l><l>O</l><l>O</l></list></block></list></block></list></block><script><block s="doSetVar"><l>line</l><block s="reportListItem"><block var="i"/><block var="win lines"/></block></block><block s="up"></block><block s="doGotoObject"><block s="reportListItem"><l>1</l><block var="line"/><comment w="137.33333333333334" collapsed="false">This is why each line in WIN LINES is a list of points, each of which is a list of x,y coordinates:  It allows us to use the endpoints, as points, in the GO TO block.</comment></block></block><block s="down"></block><block s="doGotoObject"><block s="reportListItem"><l>2</l><block var="line"/></block></block><block s="up"></block></script><list></list></block></script></block></script><scripts><comment x="174" y="6.666666666666667" w="244" collapsed="false">I&apos;m kind of bummed that I didn&apos;t find a beautiful one-line solution using FIND FIRST, but it just gives the value it finds, not the position in the list, which is what we need to find the line endpoints in WIN LINES. So it&apos;s a plain old fashioned FOR loop.</comment></scripts></block-definition><block-definition s="move in this square" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block var="playing"/><script><block s="doIfElse"><block var="X&apos;s turn?"/><script><block s="doSwitchToCostume"><l>X</l></block><block s="doReplaceInList"><block var="position number"/><block var="board"/><l>X</l><comment w="53.333333333333336" collapsed="true">3.3.1.5</comment></block><block s="doIf"><custom-block s="won? %s"><l>X</l><comment w="53.333333333333336" collapsed="true">3.3.2.9</comment></custom-block><script><block s="bubble"><l>X won!</l></block><block s="goToLayer"><l><option>front</option></l></block><block s="doTellTo"><l>Sprite</l><block s="reifyScript"><script><custom-block s="draw win line"></custom-block></script><list></list></block><list></list><comment w="134.66666666666666" collapsed="true">3.3.3.TIF B.  See below.</comment></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block><comment w="53.333333333333336" collapsed="true">3.3.3.5</comment></block></script><list></list></block><block s="doBroadcast"><custom-block s="next move for computer"></custom-block><list></list></block></script><script><block s="doSwitchToCostume"><l>O</l></block><block s="doReplaceInList"><block var="position number"/><block var="board"/><l>O</l><comment w="53.333333333333336" collapsed="true">3.3.1.5</comment></block><block s="doIf"><custom-block s="won? %s"><l>O</l><comment w="53.333333333333336" collapsed="true">3.3.2.9</comment></custom-block><script><block s="bubble"><l>O won!</l></block><block s="goToLayer"><l><option>front</option></l></block><block s="doTellTo"><l>Sprite</l><block s="reifyScript"><script><custom-block s="draw win line"></custom-block></script><list></list></block><list></list><comment w="130.66666666666666" collapsed="true">3.3.3.TIF B.  See below.</comment></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block><comment w="53.333333333333336" collapsed="true">3.3.3.5</comment></block></script><list></list></block></script></block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportNot"><block var="X&apos;s turn?"/></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="playing"/><custom-block s="tied?"><comment w="135.33333333333334" collapsed="false">3.3.3.1 and 3.3.3.5&#xD;See 3.3.3.3 above for why we have to test PLAYING.</comment></custom-block></list></block><script><block s="bubble"><l>It&apos;s a tie.</l></block><block s="goToLayer"><l><option>front</option></l></block></script><list></list></block><block s="doDeclareVariables"><list><l>available squares</l></list><comment w="252.66666666666666" collapsed="true">3.3.3 TIF A, here on down.  See comment below.</comment></block><block s="doSetVar"><l>available squares</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>number</option></l></block></autolambda><list></list></block><block var="board"/></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="playing"/><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="available squares"/></block><l>1</l></list></block></list></block><script><block s="doReplaceInList"><block s="reportListItem"><l>1</l><block var="available squares"/></block><block var="board"/><l>X</l></block><block s="doIf"><block s="reportNot"><custom-block s="won? %s"><l>X</l></custom-block></block><script><block s="bubble"><l>It&apos;s a tie.</l></block><block s="goToLayer"><l><option>front</option></l></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script><list></list></block></script><list></list></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="reportIsA"><block s="reportListItem"><l></l><block var="board"/></block><l><option>number</option></l></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="how many %&apos;item&apos; in %&apos;triple&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%l" initial="1"></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="item"/></list></block></autolambda><list></list></block><block var="triple"/></block></block></block></script></block-definition><block-definition s="winning triple for player %&apos;who&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><custom-block s="how many %s in %l"><block var="who"/><l/></custom-block><l>2</l></list></block></autolambda><list></list></block><custom-block s="status of all winning triples"><comment w="90" collapsed="true">3.3.2.7 inside</comment></custom-block></block></block></script></block-definition><block-definition s="winning square for player %&apos;who&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doIf"><block s="reportIsA"><custom-block s="winning triple for player %s"><block var="who"/></custom-block><l><option>list</option></l></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><custom-block s="winning triple for player %s"><block var="who"/></custom-block></block></block></script><list></list></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="can player %&apos;who&apos; win now" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportIsA"><custom-block s="winning square for player %s"><block var="who"/></custom-block><l><option>number</option></l></block></block></script></block-definition><block-definition s="next move for computer" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><custom-block s="can player %s win now"><l>X</l></custom-block><script><block s="doReport"><custom-block s="winning square for player %s"><l>X</l></custom-block></block></script><list><custom-block s="can player %s win now"><l>O</l></custom-block><script><block s="doReport"><custom-block s="winning square for player %s"><l>O</l></custom-block></block></script></list></block><block s="doReport"><custom-block s="best empty square"></custom-block></block></script></block-definition></blocks><primitives></primitives><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="721"><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="722"></list></costumes><sounds><list struct="atomic" id="723"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Square" idx="1" x="50" y="-50" heading="90" scale="0.95" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="1" color="80,80,80,1" pen="tip" id="728"><costumes><list id="729"><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="730"></list></sounds><blocks></blocks><variables><variable name="position number"><l>10</l></variable></variables><scripts><script x="19.61490785416541" y="10"><block s="receiveGo"></block><block s="clear"></block><custom-block s="makeBoard"><comment w="190.66666666666663" collapsed="true">3.3.1.4, and 3.3.3.TIF B, inside</comment></custom-block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>board</l><block s="reportNumbers"><l>1</l><l>9</l><comment w="53.333333333333336" collapsed="true">3.3.1.2</comment></block></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>true</bool></l><comment w="130.66666666666666" collapsed="true">3.3.3.5, more below.</comment></block></block></script><script x="18.28157452083215" y="364.6666666666665"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="getCostumeIdx"></block><l>1</l></list></block><script><custom-block s="move in this square"></custom-block></script><list></list></block></script><script x="14.948241187498837" y="1648.3333333333328"><block s="doSetVar"><l>win lines</l><block s="reportNewList"><list><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>50</l></list></block><block s="reportNewList"><list><l>100</l><l>50</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>0</l></list></block><block s="reportNewList"><list><l>100</l><l>0</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>-50</l></list></block><block s="reportNewList"><list><l>100</l><l>-50</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-50</l><l>100</l></list></block><block s="reportNewList"><list><l>-50</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>0</l><l>100</l></list></block><block s="reportNewList"><list><l>0</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>50</l><l>100</l></list></block><block s="reportNewList"><list><l>50</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>100</l></list></block><block s="reportNewList"><list><l>100</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>-100</l></list></block><block s="reportNewList"><list><l>100</l><l>100</l></list></block></list></block></list></block></block></script><comment x="16.614908854165378" y="1846.333333333332" w="363.3333333333333" collapsed="false">TIF B:  First of all, we don&apos;t want Square, the sprite with nine clones to show the board, to move around.  So I added another sprite, named Sprite.  It&apos;s hidden, but can draw lines with its thick red pen.  (Click on Sprite at the right to see its code.)  The actual work is done in procedure DRAW WIN LINE.  But instead of running DRAW WIN LINE in the Square sprite (this one), we TELL Sprite TO do it. </comment><script x="20.948242187498806" y="1945.6666666666636"><custom-block s="draw win line"><comment w="90" collapsed="true">TIF B inside.</comment></custom-block></script><comment x="19.28157552083215" y="1970.6666666666688" w="358" collapsed="false">We modify makeBoard for TIF B because drawn lines are behind sprites on the stage, so the win line is hidden by the board.  To fix that, we apply a ghost effect (transparency) to the board sprites.  The value 30 for the ghost effect was found by experiment.  Any more and the board is too faint; any less and the line is.</comment><script x="20.281575520832178" y="2056.6666666666674"><custom-block s="makeBoard"><comment w="90" collapsed="true">TIF B inside.</comment></custom-block></script><script x="19.94824118749881" y="312.33333333333303"><custom-block s="won? %s"><l>X</l><comment w="90" collapsed="true">3.3.2.8 inside</comment></custom-block></script><script x="19.94824118749881" y="280.9999999999998"><custom-block s="status of all winning triples"><comment w="90" collapsed="true">3.3.2.7 inside</comment></custom-block></script><script x="20.614907854165438" y="164.3333333333329"><custom-block s="possible winning triples"><comment w="90" collapsed="true">3.3.1.8 inside</comment></custom-block></script><script x="23.614908854165492" y="242.66666666666632"><block s="reportVariadicEquals"><list><custom-block s="status of triple %l"><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block></custom-block><block s="reportNewList"><list><l>X</l><l>X</l><l>X</l></list></block></list><comment w="77.33333333333333" collapsed="true">more 3.3.2.5</comment></block></script><script x="23.281574520832237" y="217.99999999999935"><custom-block s="status of triple %l"><l/><comment w="90" collapsed="true">3.3.2.5 inside</comment></custom-block></script><script x="25.948241187498894" y="338.3333333333329"><custom-block s="tied?"><comment w="90" collapsed="true">3.3.3.1 inside</comment></custom-block></script><comment x="348.28157452083167" y="94.66666666666654" w="179.33333333333334" collapsed="false">3.3.3.3:  If the ninth move, the one that fills the board, causes a win, then the game isn&apos;t a tie even though no more moves are possible.</comment><script x="21.614908854165463" y="187.33333333333312"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="board"/></block></autolambda><list></list></block><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block><comment w="53.333333333333336" collapsed="true">3.3.2.2</comment></block></script><comment x="15.94824218749875" y="1184.666666666667" w="358.6666666666667" collapsed="false">3.3.3 TIF A&#xD;This is quite complicated!&#xD;We are asked to make a check, never mind details yet, after the eighth move, because that&apos;s when the last move is forced.  But if the eighth move causes O to win (it has to be O because odd numbered moves are X and even numbered moves are O), then we shouldn&apos;t do this.  That&apos;s why the IF around this code has to include a check of PLAYING.&#xD;&#xD;If O didn&apos;t just win, then we are going to imagine filling the final square with X (because move 9, an odd-numbered move, is always X).  But we&apos;re not really going to change what&apos;s on the board, just what&apos;s in the BOARD list.  (Really we shouldn&apos;t even do that; we should copy the list and change the copy.  But if the eighth move has just happened and X can win on the next move, it&apos;s okay that we&apos;ve already marked that square as belonging to X; we&apos;ll do it again when player X actually clicks the square.)&#xD;&#xD;It&apos;s just after the eighth move if there&apos;s exactly one number left in BOARD.  We compute the list of numbers in BOARD, for two purposes:  First we see if there&apos;s exactly one number.  If so, we change that item of BOARD to X.  Then, if X didn&apos;t win, we can announce a tie. &#xD;&#xD;Note: The code from 3.3.3.1 that checks for a tie on the ninth move is now never going to succeed, because we&apos;re catching ties early.  But there&apos;s no need to remove it, just in case a player manages to click the ninth square before we locate it.  Maybe mark it as obsolete in a comment.  </comment><comment x="14.614908854165463" y="1569.3333333333328" w="356" collapsed="false">3.3.3.TIF B starts here.  The instruction below only needs to be run once.  It makes a list of the two endpoints of each of the lines to mark a win.  It must be in the same order as POSSIBLE WINNING TRIPLES. </comment><comment x="262.9482411874983" y="307.33333333333314" w="174.66666666666666" collapsed="true">3.3.3.5:  There are many ways to do this.  The way shown here uses a /flag variable/, i.e., a variable whose value is true or false.  In this case, PLAYING is true if further moves are allowed.</comment><script x="210.2815755208317" y="363.6666666666665"><block s="receiveMessage"><l><option>any message</option></l><list><l>data</l></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="data"/><block var="position number"/></list></block><script><custom-block s="move in this square"></custom-block></script><list></list></block></script><script x="18.711425781250057" y="522.0833333333339"><custom-block s="next move for computer"></custom-block></script><script x="12" y="546.5000000000002"><custom-block s="winning triple for player %s"><l>X</l></custom-block></script><script x="10" y="602.6666666666665"><custom-block s="can player %s win now"><l>X</l></custom-block></script><script x="11" y="574.6666666666667"><custom-block s="winning square for player %s"><l>X</l></custom-block></script></scripts></sprite><sprite name="Sprite" idx="2" x="50" y="-100" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="255,32,0,1" pen="tip" id="971"><costumes><list struct="atomic" id="972"></list></costumes><sounds><list struct="atomic" id="973"></list></sounds><blocks></blocks><variables></variables><scripts><script x="27" y="23.666666666666668"><block s="receiveGo"></block><block s="hide"></block><block s="setSize"><l>5</l></block><block s="setColor"><color>255,32,0,1</color></block></script></scripts></sprite><watcher scope="Square" var="position number" style="normal" x="10" y="298.500002" color="243,118,29" hidden="true"/><watcher var="playing" style="normal" x="10" y="325.499996" color="243,118,29" hidden="true"/><watcher var="win lines" style="normal" x="10" y="177.999998" color="243,118,29" hidden="true"/><watcher var="board" style="normal" x="0" y="27" color="243,118,29" extX="80" extY="70"/></sprites></stage><variables><variable name="X&apos;s turn?"><bool>false</bool></variable><variable name="board"><list struct="atomic" id="988">X,2,X,4,O,6,7,8,9</list></variable><variable name="playing"><bool>true</bool></variable><variable name="win lines"><list id="989"><item><list id="990"><item><list struct="atomic" id="991">-100,50</list></item><item><list struct="atomic" id="992">100,50</list></item></list></item><item><list id="993"><item><list struct="atomic" id="994">-100,0</list></item><item><list struct="atomic" id="995">100,0</list></item></list></item><item><list id="996"><item><list struct="atomic" id="997">-100,-50</list></item><item><list struct="atomic" id="998">100,-50</list></item></list></item><item><list id="999"><item><list struct="atomic" id="1000">-50,100</list></item><item><list struct="atomic" id="1001">-50,-100</list></item></list></item><item><list id="1002"><item><list struct="atomic" id="1003">0,100</list></item><item><list struct="atomic" id="1004">0,-100</list></item></list></item><item><list id="1005"><item><list struct="atomic" id="1006">50,100</list></item><item><list struct="atomic" id="1007">50,-100</list></item></list></item><item><list id="1008"><item><list struct="atomic" id="1009">-100,100</list></item><item><list struct="atomic" id="1010">100,-100</list></item></list></item><item><list id="1011"><item><list struct="atomic" id="1012">-100,-100</list></item><item><list struct="atomic" id="1013">100,100</list></item></list></item></list></variable></variables></scene></scenes></project><media name="U3L3-TicTacToeAI" app="Snap! 10.1-dev, https://snap.berkeley.edu" version="2"><costume name="Empty" center-x="29" center-y="28" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAAAXNSR0IArs4c6QAAAStJREFUaEPtmyEOg0AQRX9v0Bu0Bt0mCAxJK9bsLXoDLA5wWE6zZkUFBkFSj6E34AhlG9Kkpa2e3XwUct78/zIGNgBKAAcAx/k9xOe2WSBPAM4hEs5c10/IUWuNJEn2PgN3XTcaYxyC43iH1FqPTdMgiiKvIYdhGLMsgzFmDVmWJYqi8DnE1+xVVcHxrJIkpGf5Mkk66VFlWVfWlXWVtQE6SSdlNfLvNKwr68q6ytoAnaSTshrJE0In6SSdlLUBOkknZTWSd5JO0kk6KWsDdJJOymok7ySdpJN0UtYG6CSdlNVI3kk6SSdDcFIpNdV1jTiOtx7xrEbt+37K8xzWWsex+jx7UkohTVOvIdu2nay1Dv4rpM8B/pr9meRl+SB9FyIhgLuDDPVXiVdmD7kbqAKqUfW9AAAAAElFTkSuQmCC" mediaID="Square_cst_Empty"/><costume name="X" center-x="29" center-y="29" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA6CAYAAAAKjPErAAAAAXNSR0IArs4c6QAAA8dJREFUaEPd271P20AYBvCHVkIMlsjQIRsM3RgS9kKCutAJ+AuAjYEhqEu2wMYIAwsMwMYGY5cKBsaqAgW2DrAxVBVIDAipUnlcznIO+2zfhx3nJCQUO9i/e997z71zhzCYrQLgXtCGXn5ZB1ADUB8Q7zsAVQDPAP4A+CmQDQDNAUHKjDMZ+ex5HlZXV4dHRkZKZX56esLBwQHu7u4Skf4J9Xodp6enqFSY2uVoCwsLODk5CW52YmLi9/X19YeXDH0TyeCkMkGXl5f9KIq2v7+P29tbrK+z3EjI+fn5nt4oA1QGdjodH7exsRGN5MGxsTHwi6L1M1QGLi4uBhFVItkTDH2/Q1VABigRyZOioMx1RrbolgRMjYyCstqy6hYJTQPMhPRL09kZWJAeHh78ABYJlbMrPAbl7EqVruEvXVxcoNlsFgrNAswcSYEtEioDG42Gn2GqljmSRUJlYK1W84FJT2PaSGLzjKguUDtd8x6jJkArSNcRNQVaQ7qCcjjMzMzg/v7/P+zTjkHjKURVxWyOUVtAq5G0WXVl4OjoqF/kxsfHtZ4ijapr3BVNIhoF5DRh8vjoBBk3RvlQz8dCVeeExyAjaAp0kq6q6YXHCF1aWnrjdBFBcRFnkRQXuLm58aN3eXkZwGQoz5mcnAyqqK0I5obkhTgF8KE+CspjTFFGks020Hm6hnMyCrqzs4O9vT2nwFyRcRENd8Tx8bGyMGnNH2mXP3T/eNT3GNGpqSlcXV31HI4rSDau7bzwyDdJ5PT0NLrd7mAi5SIjd4CraOYaSU4ToooSyMKzu7urnF5Kla5Ry/d8KFBNLzaAuVXXOKBAuIY6T9e0a6MuoU6RaYGqiHJPhtsVJs0ZMitQBeXYZeXVbU6QusAwtNVq4fDwMHCZQK0jxX6guDvV8n1SZAizAbWKzLp8n4TkcRtQa0gXQNEJplArSBtro0lRNYEaI/MAmkbUCJkn0ASqjSwCqAvVQnKZkOsyouku3yeNQ9XxLGM0M9Lm8r0JMsv0kgkpA/meDz9L2gQ1xZhGNDXS5eKvaSfIqct1Xj7ris5PhexnYFwxCr89logsA1BAt7a2sLa2FiSGgG5vb8e/Wzc3N9ezCepidds0VeXvR709Njs7i83NTZ7a+ypou93G0dERuE/BVgagAMvQarUqXvDtRXqe9/fx8fF92YBx0NfPz8Xr2Z8BfAqnwcrKCtgbZWusJ+E3mLn3JJBfAXhlA6W83x9EcneUW8FfAAwDOAfwK+Uf6OfTPr7e3HcixX+V4If8+dbPd65zb/8AvCU3cMSBHxoAAAAASUVORK5CYII=" mediaID="Square_cst_X"/><costume name="O" center-x="28" center-y="28" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAAAXNSR0IArs4c6QAABGBJREFUaEPtmos1c0EQx/dWgApIBagAFaACVIAKklSAClABKkhSASpABajg+n73fJMzWfcxu/eRCHNOjkf27u5//vPa2Zs45wbOuZ1/P5dVJsl/kP1lReicG/5KkMM0TX88q0mSDJ1zgmOWyTRNl8ZqkwQjzaQ7kK+vr+7t7S1bdX193W1sbLSq0NZBTiYTd39/78bjsXt6eioFs7W15XZ3d93BwYHb2WkuyLcCEqaGw2EG7uPjI4ql1dXVDGy/36/NdKMgAXR1deUGA9JtsWgT1aZb9ATznZ6eOoDHSGMgb25u3Pn5+TfmAAQjYoZlmxSz5qf4rIwH4MXFhTs+Pg7G2QhIwF1eXs4sjk/BAOBiBB/meXxay9nZWQY2RGqBxDxPTk4y3xOBOQDDXhPC3ADTzDL39fW12XyjQQJwb29vJmIeHR1lAGN9p0gprAXQ29vb6RAi8Wg0Mq0VDRIG8UMRomBVwKnLLPMTtUXwTxitkiiQ/mIsFBMQqjaX9z2KRcEhyg0GiY8cHh5OFyG0+0EnZvMhz2C6pCqRu7u70hgQDLLX6zlyG7K/vz8TdEI2Wncswefh4SGbhrLw5eWlcMogkDBGukBWVlYysE0HGSt4ghHgPj8/s0dIKzCcJ2aQTAqLUqaVTWrdaN1xWukoGzbzlG4GqSckF4rJ1t1o3edhU3JokeLNILe3t6c5sctoWqUEHW2psqiUfDGBxETX1tamz76/v8/NF30Alr2ZQFq0VaXxNr+n+nl+fs6WyLMyE0gSvZRUixBwfIXpeEFpqSsxxppAcpKQ0wD1YuzJoi028UPqaCTPL/9AiuYJOpIfFynoyP508CFPskctJibVILeorcqyPf6BFMp1iH58fHT8vUhCq5NiBdnc3PzW+jQxuUTRdTBz4aN9T4OsOrvNg2F9xo1OIboTkJds5wFMr6mLlbw2jDLXYia1zVcdUOcBWKe4vJhh8kk2Tv6RA+oiBR9NQNER0AxSm8QimaxlX2aQuj6EWU7hbV+5VZk+B3e6FSJFdbUZJBPpKMvvTDpPoSiXQ3LRgdl8ChEgvubmmU78/muZZQUxCVjtAwQj2Oy6AiLYwKIcGqpiRDBIJsZU5SSOXxJtu2pN+l1DyjhMtmz9YJCwiSYBKikl5PKljg/jLnTv5Vqe3i8AqywpCiQb9aNt26brmyh7sHYpokGyiO/8AJWr7zqM+c9y7+F3x0PaorVA5pku/8N8aHjV7QVhLVxL6LdGrCYa3BmoYgVf4QJGgpGMByTRmBxmLRyYi6YZVuI3igkynDisc8k+ajMpExH1aA3ykYCklQO7csXOJmWjgJIrBwDkvesDe5grn5go3hhIDda/+q6yhLLvm7iibxykro7klRW5R7SC5d5TXokJNc28NVoDqRfDlPVrZ9pEtenKa2cxJlmmwE5AWhlsa5ypM9DW4l3N+9uY/PZ69jhN07h3xrqiyLBOkiTcygqO3/kOukFPP25I1pL88eZZpfYvlc1Jo4IBAH0AAAAASUVORK5CYII=" mediaID="Square_cst_O"/></media></snapdata>