<snapdata remixID="10317318"><project name="U3L3-TicTacToe" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><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" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+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+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><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="8"><costumes><list id="9"><item><costume name="Empty" center-x="29" center-y="28" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAABKElEQVRoQ+2bIQ6DQBBFPzfoDVqDbhMEhqQVa/YWvQEWBzgsp1mzogKDIKnH0BtwhGYbQtLSVs9uPieYN/+/jFkiABWAI4ATwvzu0QJ5BnAJkxG3T8hJa400TQ8+A/d9PxljHILjeIfUWk9t2yKOY68hx3Gc8jyHMWYLWVUVyrL0OcR19rqu4Xg2SRLSs3yZJJ30qLKsK+vKusraAJ2kk7Ia+Xca1pV1ZV1lbYBO0klZjeQJoZN0kk7K2gCdpJOyGsk7SSfpJJ2UtQE6SSdlNZJ3kk7SSTopawN0kk7KaiTvJJ2kkyE4qZSam6ZBkiQ7j3g2ow7DMBdFAWut49g8z56VUsiyzGvIrutma62D/wrpc4C/Zn8leV0epO9DJATwcJCh/iqxZvYEuRuoAhendhsAAAAASUVORK5CYII=" id="10"/></item><item><costume name="X" center-x="29" center-y="29" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA6CAYAAAAKjPErAAADw0lEQVRoQ93bvU/bQBgG8IdWQgyWYOiQDYZuDAl7IUFd6AT8BYSNIQOoS7bAxggDCwzAxgZjlwoGxqoCQbYOsGWoKpAYEFKl6nE5yznss30fdpyTWGIH+3fve++ZOzOC4WwTAB4EbQTAJoAqgNqQeN8BqAB4AfAHwE+BrANoDAlSZlzIyBfP89BqtUbHxsZKZX5+fsbR0RF6vV4i0j+hVqvh/PwcExNM7XK05eVlnJ2dBTc7PT39u9vtfgDwJpLBSWWCrq6u+lEU7fDwEPf399jcZLmRkEtLS329UQaoDOx0Oj5ua2srGsmDk5OT4BdFG2SoDFxZWQkiqkSyJxj6QYeqgAxQIpInRUGZ64xs0S0JmBoZBWW1ZdUtEpoGmAnpl6aLC7AgPT4++gEsEipnV3gMytmVKl3DX7q6ukKj0SgUmgWYOZICWyRUBtbrdT/DVC1zJIuEysBqteoDk57GtJHE5hlRXaB2uuY9Rk2AVpCuI2oKtIZ0BeVwmJ+fx8PD/z/s045B4ylEVcVsjlFbQKuRtFl1ZeD4+Lhf5KamprSeIo2qa9wVTSIaBeQ0YfL46AQZN0b5UM/HQlXnhMcgI2gKdJKuqumFxwhtNptvnC4iKC7iLJLiAnd3d370rq+vA5gM5TkzMzNBFbUVwdyQvBCnAD7UR0F5jCnKSLLZBjpP13BORkH39vZwcHDgFJgrMi6i4Y44PT1VFiat+SPt8ofuL4/6HiM6OzuL29vbvsNxBcnGtZ0XHvkmiZybm8PNzc1wIuUiI3eAq2jmGklOE6KKEsjCs7+/r5xeSpWuUcv3fChQTS82gLlV1zigQLiGOk/XtGujLqFOkWmBqohyT4bbFSbNGTIrUAXl2GXl1W1OkLrAMHR9fR3Hx8eBywRqHSn2A8XdqZbvkyJDmA2oVWTW5fskJI/bgFpDugCKTjCFWkHaWBtNiqoJ1BiZB9A0okbIPIEmUG1kEUBdqBaSy4RclxFNd/k+aRyqjmcZo5mRNpfvTZBZppdMSBnI93z4WdImqCnGNKKpkS4Xf007QU5drvPyWVd0firkIAPjilH47bFEZBmAArqzs4ONjY0gMQR0d3c3/t26xcXFvk1QF6vbpqkqfz/q7bGFhQVsb2/z1P5XQdvtNk5OTsB9CrYyAAVYhlYqFfGCbz/S87y/T09P78sGjIO+fn4pXs/+DOBTOA3W1tbA3ihbYz0Jv8HMvSeB/ArAKxso5f3+IJK7o9wK/gJgFMAlgF8pf8Egn/bx9ea+Eyn+VYIf8ufbIN+5zr39A7wlN3D1pfCoAAAAAElFTkSuQmCC" id="11"/></item><item><costume name="O" center-x="28" center-y="28" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAEX0lEQVRoQ+2aizUsQRCGeyJABGwEiAARsBEgAkSwuxEgAjYCRGA3AkSACBDB3PPNubWnts2juuexa6lznPsw091//VV/V1dP4pwbOuf23OraNPkPcrC6GN3oV4IcpWn641lNkmTknBMc80ymaboyUZskBGlm3YF8e3tz7+/v2aybm5tua2urVYe2DnI6nbr7+3s3mUzc8/NzKZidnR23v7/vjo6O3N5ecyLfCkiYGo1GGbjPz88oltbX1zOwg8GgNtONggTQ9fW1Gw7ZbotNh6gO3aI3GO/s7MwBPMYaA3l7e+suLi6+MQcgGJEwLFukhDV/Ss7K8wC8vLx0JycnwTgbAQm4q6urucnJKRgAXIyRw7xPTms7Pz/PwIZYLZCE5+npaZZ7YjAHYNhrwhgbYJpZxr65uTGHbzRIAB4cHMwp5vHxcQYwNneKnMJcAB2Px7NHUOLHx0fTXNEgYZA8FEMFqwSnLrOMj2qLkZ8wWmVRIP3JmChGEKoWl/d7HIuDQ5wbDJIc6ff7s0mQdl90YhYf8g6hy1Yldnd3V6oBwSB7vZ5jb8MODw/nRCdkoXWfRXweHh6yYSgLX19fC4cMAgljbBfY2tpaBrZpkbGCR4wA9/X1lb3CtgLDeWYGyaCwKGVa2aDWhdZ9TjsdZ8NmntPNIPWA7IUSsnUXWvd92JQ9tMjxZpC7u7uzPbFLNa1yglZbqiwqJd9MIAnRjY2N2bsfHx8Ly0UfgGVtJpAWb1V5vM3fU/28vLxkU+RFmQkkG72UVMsgOL7DtF5QWupKjGdNIDlJyGmAejH2ZNEWm+QhdTSWl5d/IMXziI7sj8skOrI+LT7sk6xRm4lJ9ZBb1lZl2Rr/QArlWqKfnp4c/14mo9VJsYJtb29/a32amFwhdR3OXfjo3NMgq85ui2BYn3GjtxDdCcjbbBcBTM+pi5W8NowK12ImdcxXHVAXAVhvcXmaYcpJFs7+IwfUZRIfTUDREdAMUofEMoWsZV1mkLo+hFlO4W1fuVWFPgd3uhViRXW1GSQDaZXl7wy6SKMol0Ny0YHZfAoRIL7nFrmd+P3XssgKYhKwOgcQI9jsugJCbGBRDg1VGhEMkoEJVTmJk5eobVetSb9rSBlHyJbNHwwSNvEkQGVLCbl8qZPDpAvde7mWp/cLwKpIigLJQn21bTt0/RBlDdYuRTRIJvGTH6By9V2HMf9d7j387nhIW7QWyLzQ5f8IHxpedXtBRAvXEvqrEWuIBncGqlghV7iAETGS5wGJGrOHWQsHxqJpRpT4jWJEhhOHdSxZR20mZSBUj9YgPyJI2jmwK1fsLFIWCii5cgBA3rc+sEe48hOj4o2B1GD9q++qSCj7fRNX9I2D1NWRfLIi94hWsNx7yicxoaGZN0drIPVkhLL+7EyHqA5d+ewsJiTLHNgJSCuDbT1n6gy0NXlX4/42Jr99nj1J0zTum7GuKDLMkyQJt7KC43d+g27w0497JGtJ/vjwrHL7P5XNSaMYdLI4AAAAAElFTkSuQmCC" id="12"/></item></list></costumes><sounds><list struct="atomic" id="13"></list></sounds><blocks></blocks><variables><variable name="position number"><l>10</l></variable></variables><scripts><script x="14.999999000000003" y="10"><block s="receiveGo"></block><block s="clear"></block><custom-block s="makeBoard"></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></block></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script x="13.666665666666631" y="364.6666666666667"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIf"><block s="reportAnd"><block var="playing"/><block s="reportEquals"><block s="getCostumeIdx"></block><l>1</l></block></block><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></block><block s="doIf"><custom-block s="won? %s"><l>X</l></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></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script><script><block s="doSwitchToCostume"><l>O</l></block><block s="doReplaceInList"><block var="position number"/><block var="board"/><l>O</l></block><block s="doIf"><custom-block s="won? %s"><l>O</l></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></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></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="reportAnd"><block var="playing"/><custom-block s="tied?"></custom-block></block><script><block s="bubble"><l>It&apos;s a tie.</l></block><block s="goToLayer"><l><option>front</option></l></block></script></block><block s="doDeclareVariables"><list><l>available squares</l></list></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="reportAnd"><block var="playing"/><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="available squares"/></block><l>1</l></block></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></block></script></block></script></block></script><script x="10.333332333333317" y="1648.3333333333335"><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="12" y="1846.333333333333" 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="16.333333333333258" y="1945.6666666666665"><custom-block s="draw win line"><comment w="90" collapsed="true">TIF B inside.</comment></custom-block></script><comment x="14.666666666666629" y="1970.6666666666679" 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="15.666666666666629" y="2056.666666666665"><custom-block s="makeBoard"><comment w="90" collapsed="true">TIF B inside.</comment></custom-block></script><script x="15.333332333333317" y="312.3333333333333"><custom-block s="won? %s"><l></l></custom-block></script><script x="15.333332333333317" y="281.00000000000017"><custom-block s="status of all winning triples"></custom-block></script><script x="15.999998999999946" y="164.33333333333326"><custom-block s="possible winning triples"></custom-block></script><script x="18.99999999999997" y="242.66666666666657"><block s="reportEquals"><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></block></script><script x="18.666665666666603" y="217.99999999999983"><custom-block s="status of triple %l"><l/></custom-block></script><script x="21.33333233333329" y="338.3333333333333"><custom-block s="tied?"></custom-block></script><script x="16.999999999999943" y="187.33333333333326"><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></block></script><comment x="10" y="1569.3333333333344" 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><script x="357.9999999999999" y="317.0000000000003"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIf"><block s="reportAnd"><block var="playing"/><block s="reportEquals"><block s="getCostumeIdx"></block><l>1</l></block></block><script><custom-block s="move in this square"></custom-block><block s="doDeclareVariables"><list><l>square number</l></list></block><block s="doSetVar"><l>square number</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><custom-block s="vacant square %s"><l></l></custom-block></autolambda><list></list></block><custom-block s="empty square"></custom-block></block></block><block s="doBroadcast"><block var="square number"/></block></script></block></script><script x="376.16796875" y="531.3333333333335"><block s="receiveMessage"><l><option>any message</option></l></block><block s="doIf"><block s="reportEquals"><block s="getLastMessage"></block><block var="position number"/></block><script><custom-block s="move in this square"></custom-block></script></block></script></scripts></sprite><sprite name="Sprite" idx="2" x="100" y="50" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="255,32,0,1" pen="tip" id="413"><costumes><list struct="atomic" id="414"></list></costumes><sounds><list struct="atomic" id="415"></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><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="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>step</l><l>-1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></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="reportGreaterThan"><block var="i"/><block var="end"/></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></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>1</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></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></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="reportSum"><l>-100</l><block s="reportProduct"><l>50</l><block var="j"/></block></block><block s="reportDifference"><l>100</l><block s="reportProduct"><l>50</l><block var="i"/></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="reportEquals"><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></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="reportOr"><block s="reportEquals"><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></block><block s="reportEquals"><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></block></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></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="doIfElse"><block var="X&apos;s turn?"/><script><block s="doSwitchToCostume"><l>X</l></block><block s="doReplaceInList"><l>1</l><l/><l>thing</l></block><block s="doIf"><custom-block s="won? %s"><l>X</l></custom-block><script><block s="bubble"><l>Congrats! 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></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script><script><block s="doSwitchToCostume"><l>O</l></block><block s="doReplaceInList"><block var="position number"/><block var="board"/><l>O</l></block><block s="doIf"><custom-block s="won? %s"><l>O</l></custom-block><script><block s="bubble"><l>Congrats! 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></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></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="reportAnd"><block var="playing"/><custom-block s="tied?"></custom-block></block><script><block s="bubble"><l>Oh no! It&apos;s a tie!</l></block></script></block></script></block-definition><block-definition s="vacant square %&apos;square number&apos;" type="predicate" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><block var="square number"/><block var="board"/></block><l><option>number</option></l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="empty square" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><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></script></block-definition></blocks><variables><variable name="X&apos;s turn?"><bool>true</bool></variable><variable name="board"><list struct="atomic" id="932">1,2,3,4,5,6,7,8,9</list></variable><variable name="playing"><bool>true</bool></variable><variable name="win lines"><list id="933"><item><list id="934"><item><list struct="atomic" id="935">-100,50</list></item><item><list struct="atomic" id="936">100,50</list></item></list></item><item><list id="937"><item><list struct="atomic" id="938">-100,0</list></item><item><list struct="atomic" id="939">100,0</list></item></list></item><item><list id="940"><item><list struct="atomic" id="941">-100,-50</list></item><item><list struct="atomic" id="942">100,-50</list></item></list></item><item><list id="943"><item><list struct="atomic" id="944">-50,100</list></item><item><list struct="atomic" id="945">-50,-100</list></item></list></item><item><list id="946"><item><list struct="atomic" id="947">0,100</list></item><item><list struct="atomic" id="948">0,-100</list></item></list></item><item><list id="949"><item><list struct="atomic" id="950">50,100</list></item><item><list struct="atomic" id="951">50,-100</list></item></list></item><item><list id="952"><item><list struct="atomic" id="953">-100,100</list></item><item><list struct="atomic" id="954">100,-100</list></item></list></item><item><list id="955"><item><list struct="atomic" id="956">-100,-100</list></item><item><list struct="atomic" id="957">100,100</list></item></list></item></list></variable></variables></project><media name="U3L3-TicTacToe" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>