<mxfile host="app.diagrams.net" modified="2023-04-22T21:41:54.811Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0" etag="XUdtKlKq9CwMdteHJajC" version="21.2.1" type="google">
  <diagram name="Page-1" id="auje5pjk2vSV_R7NQ9GG">
    <mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="IAsiQonNshdkpuGhaLFM-1" value="" style="ellipse;html=1;shape=startState;fillColor=#000000;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="70" y="50" width="30" height="30" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-2" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="85" y="140" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-3" value="playAgain" style="rhombus;whiteSpace=wrap;html=1;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="20" y="140" width="130" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-4" value="no" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-3">
          <mxGeometry x="-0.5" y="5" relative="1" as="geometry">
            <mxPoint x="85" y="300" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-5" value="yes" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=top;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-3">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="230" y="160" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-6" value="&lt;div&gt;newGame()&lt;/div&gt;&lt;div&gt;return&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="230" y="140" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-7" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-6">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="530" y="160" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-8" value="" style="ellipse;html=1;shape=endState;fillColor=#000000;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="530" y="145" width="30" height="30" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-9" value="curGame.checkIfFree(col)" style="rhombus;whiteSpace=wrap;html=1;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="-30" y="300" width="230" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-10" value="no" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-9">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="310" y="320" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-11" value="yes" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=top;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-9">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="85" y="450" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-12" value="print &quot;column full&quot; error message" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="310" y="300" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-13" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-12" target="IAsiQonNshdkpuGhaLFM-8">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="370" y="400" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-14" value="&lt;div&gt;row = 0&lt;/div&gt;&lt;div&gt;i = 0&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="25" y="450" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-15" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-14">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="85" y="550" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.452;entryY=0.017;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-16" target="IAsiQonNshdkpuGhaLFM-26">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-16" value="i &amp;lt; curGame.getNumRows()" style="rhombus;whiteSpace=wrap;html=1;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="-35" y="550" width="240" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-18" value="yes" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=top;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-16">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="85" y="670" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-19" value="pos = new BoardPosition(i, col)" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="-17.5" y="670" width="205" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-20" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-19">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="85" y="770" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-21" value="curGame.whatsAtPos(pos) == &#39; &#39;" style="rhombus;whiteSpace=wrap;html=1;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="-47.5" y="770" width="265" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-22" value="no" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-21">
          <mxGeometry x="-0.5556" y="5" relative="1" as="geometry">
            <mxPoint x="85" y="900" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-23" value="yes" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=top;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-21">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="300" y="790" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-24" value="i++" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="25" y="900" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-25" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-24" target="IAsiQonNshdkpuGhaLFM-16">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="85" y="1000" as="targetPoint" />
            <Array as="points">
              <mxPoint x="-80" y="920" />
              <mxPoint x="-80" y="570" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-26" value="&lt;div align=&quot;left&quot;&gt;&lt;font color=&quot;#ff3333&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; A &quot;no&quot; path for this condition does not exist. &lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;font color=&quot;#ff3333&quot;&gt;Rather, the loop can never &lt;i&gt;not&lt;/i&gt; be broken during &lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;font color=&quot;#ff3333&quot;&gt;runtime if the previous condition is true.&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
          <mxGeometry x="140" y="590" width="290" height="60" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-27" value="&lt;div&gt;row = i&lt;/div&gt;break" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="300" y="770" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-28" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-27">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="490" y="790" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-29" value="set marker at row and column to token corresponding to currentPlayer" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="490" y="770" width="230" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-30" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-29">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="605" y="680" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-36" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-31" target="IAsiQonNshdkpuGhaLFM-34">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-31" value="curGame.checkForWin(col)" style="rhombus;whiteSpace=wrap;html=1;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="490" y="640" width="230" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-32" value="no" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-31">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="780" y="660" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-33" value="yes" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=top;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-31">
          <mxGeometry x="-0.2" y="-5" relative="1" as="geometry">
            <mxPoint x="605" y="540" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-34" value="&lt;div&gt;print win message and prompt to play again&lt;/div&gt;playAgain = true" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="470" y="500" width="270" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-35" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-34" target="IAsiQonNshdkpuGhaLFM-8">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="875" y="510" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-37" value="curGame.checkTie()" style="rhombus;whiteSpace=wrap;html=1;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="780" y="640" width="200" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-38" value="no" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-37">
          <mxGeometry x="-1" relative="1" as="geometry">
            <mxPoint x="1050" y="660" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-39" value="yes" style="edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=top;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-37">
          <mxGeometry y="-10" relative="1" as="geometry">
            <mxPoint x="880" y="540" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-40" value="&lt;div&gt;print tie message and prompt to play again&lt;/div&gt;&lt;div&gt;playAgain = true&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="755" y="500" width="250" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-41" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-40" target="IAsiQonNshdkpuGhaLFM-8">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="920" y="340" as="targetPoint" />
            <Array as="points">
              <mxPoint x="880" y="149" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-42" value="&lt;div&gt;currentPlayer++&lt;/div&gt;&lt;div&gt;prompt next player&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;" vertex="1" parent="1">
          <mxGeometry x="1050" y="640" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="IAsiQonNshdkpuGhaLFM-43" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="IAsiQonNshdkpuGhaLFM-42" target="IAsiQonNshdkpuGhaLFM-8">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="1100" y="390" as="targetPoint" />
            <Array as="points">
              <mxPoint x="1110" y="135" />
              <mxPoint x="545" y="135" />
            </Array>
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
