Criando o jogo Labirinto para dispositivos móveis

Veja nesta dica como desenvolver o jogo Labirinto para aparelhos J2ME.

Criando o jogo Labirinto para dispositivos móveis

 

Veja nesta dica como desenvolver o jogo Labirinto para aparelhos J2ME.

 

          

<B><SPAN lang=EN-US > </SPAN></B>

<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >java.util.Random;</SPAN>
<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >java.util.Vector;</SPAN>

<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >javax.microedition.midlet.*;</SPAN>
<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >javax.microedition.lcdui.*;</SPAN>

<B><SPAN lang=EN-US >public class </SPAN></B><SPAN lang=EN-US >Maze </SPAN><B><SPAN lang=EN-US >extends </SPAN></B><SPAN lang=EN-US >MIDlet </SPAN><B><SPAN lang=EN-US >implements </SPAN></B><SPAN lang=EN-US >CommandListener {</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >MazeCanvas myCanvas;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >SelectScreen mySelectScreen;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Command myExitCommand = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Command(</SPAN><SPAN lang=EN-US >"Exit"</SPAN><SPAN lang=EN-US >, Command.EXIT, </SPAN><SPAN lang=EN-US >99</SPAN><SPAN lang=EN-US >);</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Command myNewCommand = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Command(</SPAN><SPAN lang=EN-US >"New Maze"</SPAN><SPAN lang=EN-US >, Command.SCREEN, </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >);</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Command myAlertDoneCommand = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Command(</SPAN><SPAN lang=EN-US >"Done"</SPAN><SPAN lang=EN-US >, Command.EXIT, </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >);</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Command myPrefsCommand </SPAN>
<SPAN lang=EN-US >= </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Command(</SPAN><SPAN lang=EN-US >"Size Preferences"</SPAN><SPAN lang=EN-US >, Command.SCREEN, </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >);</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >Maze() {</SPAN>
<B><SPAN lang=EN-US >try </SPAN></B><SPAN lang=EN-US >{     myCanvas = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >MazeCanvas(Display.getDisplay(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >));</SPAN>
<SPAN lang=EN-US >myCanvas.addCommand(myExitCommand);</SPAN>
<SPAN lang=EN-US >myCanvas.addCommand(myNewCommand);</SPAN>
<SPAN lang=EN-US >myCanvas.addCommand(myPrefsCommand);</SPAN>
<SPAN lang=EN-US >myCanvas.setCommandListener(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >catch</SPAN></B><SPAN lang=EN-US >(Exception e) {</SPAN>
<SPAN lang=EN-US >Alert errorAlert = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Alert(</SPAN><SPAN lang=EN-US >"error"</SPAN><SPAN lang=EN-US >, </SPAN>
<SPAN lang=EN-US >e.getMessage(), null, AlertType.ERROR);</SPAN>
<SPAN lang=EN-US >errorAlert.setCommandListener(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >errorAlert.setTimeout(Alert.FOREVER);</SPAN>
<SPAN lang=EN-US >errorAlert.addCommand(myAlertDoneCommand);</SPAN>
<SPAN lang=EN-US >Display.getDisplay(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >).setCurrent(errorAlert);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >startApp() </SPAN><B><SPAN lang=EN-US >throws </SPAN></B><SPAN lang=EN-US >MIDletStateChangeException {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myCanvas != </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myCanvas.start();</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >destroyApp(</SPAN><B><SPAN lang=EN-US >boolean </SPAN></B><SPAN lang=EN-US >unconditional) </SPAN>
<B><SPAN lang=EN-US >throws </SPAN></B><SPAN lang=EN-US >MIDletStateChangeException {</SPAN>
<SPAN lang=EN-US >myCanvas = </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >System.gc();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >pauseApp() {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >commandAction(Command c, Displayable s) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(c == myNewCommand) {</SPAN>
<SPAN lang=EN-US >myCanvas.newMaze();</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(c == myAlertDoneCommand) {</SPAN>
<B><SPAN lang=EN-US >try </SPAN></B><SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >destroyApp(</SPAN><B><SPAN lang=EN-US >false</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >notifyDestroyed();</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >catch </SPAN></B><SPAN lang=EN-US >(MIDletStateChangeException ex) {</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(c == myPrefsCommand) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(mySelectScreen == </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >mySelectScreen = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >SelectScreen(myCanvas);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >Display.getDisplay(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >).setCurrent(mySelectScreen);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(c == myExitCommand) {</SPAN>
<B><SPAN lang=EN-US >try </SPAN></B><SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >destroyApp(</SPAN><B><SPAN lang=EN-US >false</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >notifyDestroyed();</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >catch </SPAN></B><SPAN lang=EN-US >(MIDletStateChangeException ex) {</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>


<B><SPAN lang=EN-US >class </SPAN></B><SPAN lang=EN-US >MazeCanvas </SPAN><B><SPAN lang=EN-US >extends </SPAN></B><SPAN lang=EN-US >javax.microedition.lcdui.Canvas {</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public static final int </SPAN></B><SPAN lang=EN-US >BLACK = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public static final int </SPAN></B><SPAN lang=EN-US >WHITE = </SPAN><SPAN lang=EN-US >0xffffff</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Display myDisplay;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Grid myGrid;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private boolean </SPAN></B><SPAN lang=EN-US >myGameOver = </SPAN><B><SPAN lang=EN-US >false</SPAN></B><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >mySquareSize;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myMaxSquareSize;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myMinSquareSize;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myStartX = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myStartY = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myGridHeight;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myGridWidth;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myMaxGridWidth;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myMinGridWidth;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myOldX = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myOldY = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myPlayerX = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private int </SPAN></B><SPAN lang=EN-US >myPlayerY = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >setColWidth(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >colWidth) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(colWidth < </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >mySquareSize = </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else </SPAN></B><SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >mySquareSize = colWidth;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >myGridWidth = getWidth() / mySquareSize;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGridWidth % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myGridWidth -= </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >myGridHeight = getHeight() / mySquareSize;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGridHeight % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myGridHeight -= </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >myGrid = </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >;</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(myGridWidth);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >getMinColWidth() {</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(myMinSquareSize);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >getMaxColWidth() {</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(myMaxSquareSize);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >getMaxNumCols() {</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(myMaxGridWidth);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>


<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >getColWidth() {</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(mySquareSize);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>


<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >getNumCols() {</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(myGridWidth);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >MazeCanvas(Display d) </SPAN><B><SPAN lang=EN-US >throws </SPAN></B><SPAN lang=EN-US >Exception {</SPAN>
<SPAN lang=EN-US >myDisplay = d;</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >width = getWidth();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >height = getHeight();</SPAN>
<SPAN lang=EN-US >mySquareSize = </SPAN><SPAN lang=EN-US >5</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myMinSquareSize = </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myMaxGridWidth = width / myMinSquareSize;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myMaxGridWidth % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myMaxGridWidth -= </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >myGridWidth = width / mySquareSize;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGridWidth % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myGridWidth -= </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >myGridHeight = height / mySquareSize;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGridHeight % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myGridHeight -= </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >myMinGridWidth = </SPAN><SPAN lang=EN-US >15</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myMaxSquareSize = width / myMinGridWidth;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myMaxSquareSize > height / myMinGridWidth) {</SPAN>
<SPAN lang=EN-US >myMaxSquareSize = height / myMinGridWidth;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myMaxSquareSize < mySquareSize) {</SPAN>
<B><SPAN lang=EN-US >throw</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Exception(</SPAN><SPAN lang=EN-US >"Display too small"</SPAN><SPAN lang=EN-US >));</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >void </SPAN></B><SPAN lang=EN-US >start() {</SPAN>
<SPAN lang=EN-US >myDisplay.setCurrent(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >void </SPAN></B><SPAN lang=EN-US >newMaze() {</SPAN>
<SPAN lang=EN-US >myGameOver = </SPAN><B><SPAN lang=EN-US >false</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myGrid = </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myPlayerX = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myPlayerY = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myOldX = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myOldY = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myDisplay.setCurrent(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >protected void </SPAN></B><SPAN lang=EN-US >paint(Graphics g) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGrid == </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >width = getWidth();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >height = getHeight();</SPAN>
 
<SPAN lang=EN-US >myGrid = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Grid(myGridWidth, myGridHeight);</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; i < myGridWidth; i++) {</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; j < myGridHeight; j++) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGrid.mySquares[i][j] == </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >g.setColor(BLACK);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else </SPAN></B><SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >g.setColor(WHITE);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >g.fillRect(myStartX + (i*mySquareSize), </SPAN>
<SPAN lang=EN-US >myStartY + (j*mySquareSize), </SPAN>
<SPAN lang=EN-US >mySquareSize, mySquareSize);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >g.setColor(BLACK);</SPAN>
<SPAN lang=EN-US >g.fillRect(myStartX + ((myGridWidth-</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) * mySquareSize), </SPAN>
<SPAN lang=EN-US >myStartY, width, height);</SPAN>
<SPAN lang=EN-US >g.setColor(WHITE);</SPAN>
<SPAN lang=EN-US >g.fillRect(myStartX + ((myGridWidth-</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) * mySquareSize), </SPAN>
<SPAN lang=EN-US >myStartY + ((myGridHeight-</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >) * mySquareSize), width, height);</SPAN>
<SPAN lang=EN-US >g.setColor(BLACK);</SPAN>
<SPAN lang=EN-US >g.fillRect(myStartX, </SPAN>
<SPAN lang=EN-US >myStartY + ((myGridHeight-</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) * mySquareSize), width, height);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >g.setColor(</SPAN><SPAN lang=EN-US >255</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >g.fillRoundRect(myStartX + (mySquareSize)*myPlayerX, </SPAN>
<SPAN lang=EN-US >myStartY + (mySquareSize)*myPlayerY, </SPAN>
<SPAN lang=EN-US >mySquareSize, mySquareSize, </SPAN>
<SPAN lang=EN-US >mySquareSize, mySquareSize);</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >((myOldX != myPlayerX) || (myOldY != myPlayerY)) {</SPAN>
<SPAN lang=EN-US >g.setColor(WHITE);</SPAN>
<SPAN lang=EN-US >g.fillRect(myStartX + (mySquareSize)*myOldX, </SPAN>
<SPAN lang=EN-US >myStartY + (mySquareSize)*myOldY, </SPAN>
<SPAN lang=EN-US >mySquareSize, mySquareSize);}</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGameOver) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >width = getWidth();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >height = getHeight();</SPAN>
<SPAN lang=EN-US >Font font = g.getFont();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >fontHeight = font.getHeight();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >fontWidth = font.stringWidth(</SPAN><SPAN lang=EN-US >"Maze Completed"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >g.setColor(WHITE);</SPAN>
<SPAN lang=EN-US >g.fillRect((width - fontWidth)/</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >, (height - fontHeight)/</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >,</SPAN>
<SPAN lang=EN-US >fontWidth + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >, fontHeight);</SPAN>

<SPAN lang=EN-US >g.setColor(</SPAN><SPAN lang=EN-US >255</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >g.setFont(font);</SPAN>
<SPAN lang=EN-US >g.drawString(</SPAN><SPAN lang=EN-US >"Maze Completed"</SPAN><SPAN lang=EN-US >, (width - fontWidth)/</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >, </SPAN>
<SPAN lang=EN-US >(height - fontHeight)/</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >,</SPAN>
<SPAN lang=EN-US >g.TOP|g.LEFT);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >keyPressed(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >keyCode) {  </SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(! myGameOver) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >action = getGameAction(keyCode);   </SPAN>
<B><SPAN lang=EN-US >switch </SPAN></B><SPAN lang=EN-US >(action) {</SPAN>
<B><SPAN lang=EN-US >case </SPAN></B><SPAN lang=EN-US >LEFT:</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >((myGrid.mySquares[myPlayerX-</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >][myPlayerY] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) && </SPAN>
<SPAN lang=EN-US >(myPlayerX != </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >)) {</SPAN>
<SPAN lang=EN-US >myOldX = myPlayerX;</SPAN>
<SPAN lang=EN-US >myOldY = myPlayerY;</SPAN>
<SPAN lang=EN-US >myPlayerX -= </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >break</SPAN></B><SPAN lang=EN-US >;</SPAN>
<B><SPAN lang=EN-US >case </SPAN></B><SPAN lang=EN-US >RIGHT:</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGrid.mySquares[myPlayerX+</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >][myPlayerY] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myOldX = myPlayerX;</SPAN>
<SPAN lang=EN-US >myOldY = myPlayerY;</SPAN>
<SPAN lang=EN-US >myPlayerX += </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >((myPlayerX == myGrid.mySquares.length - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >) && </SPAN>
<SPAN lang=EN-US >(myPlayerY == myGrid.mySquares[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >].length - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >)) {</SPAN>
<SPAN lang=EN-US >myOldX = myPlayerX;</SPAN>
<SPAN lang=EN-US >myOldY = myPlayerY;</SPAN>
<SPAN lang=EN-US >myPlayerX += </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >myGameOver = </SPAN><B><SPAN lang=EN-US >true</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >break</SPAN></B><SPAN lang=EN-US >;</SPAN>
<B><SPAN lang=EN-US >case </SPAN></B><SPAN lang=EN-US >UP:</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGrid.mySquares[myPlayerX][myPlayerY-</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myOldX = myPlayerX;</SPAN>
<SPAN lang=EN-US >myOldY = myPlayerY;</SPAN>
<SPAN lang=EN-US >myPlayerY -= </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >break</SPAN></B><SPAN lang=EN-US >;</SPAN>
<B><SPAN lang=EN-US >case </SPAN></B><SPAN lang=EN-US >DOWN:</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(myGrid.mySquares[myPlayerX][myPlayerY+</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >myOldX = myPlayerX;</SPAN>
<SPAN lang=EN-US >myOldY = myPlayerY;</SPAN>
<SPAN lang=EN-US >myPlayerY += </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >repaint();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >break</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >}</SPAN>

<B><SPAN lang=EN-US >class </SPAN></B><SPAN lang=EN-US >SelectScreen </SPAN><B><SPAN lang=EN-US >extends </SPAN></B><SPAN lang=EN-US >Form </SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >implements </SPAN></B><SPAN lang=EN-US >ItemStateListener, CommandListener  {</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Command myExitCommand = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Command(</SPAN><SPAN lang=EN-US >"Done"</SPAN><SPAN lang=EN-US >, Command.EXIT, </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >);</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Gauge myWidthGauge;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Gauge myColumnsGauge;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >MazeCanvas myCanvas;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >SelectScreen(MazeCanvas canvas) {</SPAN>
<B><SPAN lang=EN-US >super</SPAN></B><SPAN lang=EN-US >(</SPAN><SPAN lang=EN-US >"Size Preferences"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >addCommand(myExitCommand);</SPAN>
<SPAN lang=EN-US >setCommandListener(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >myCanvas = canvas;</SPAN>
<SPAN lang=EN-US >setItemStateListener(</SPAN><B><SPAN lang=EN-US >this</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >myWidthGauge = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Gauge(</SPAN><SPAN lang=EN-US >"Column Width"</SPAN><SPAN lang=EN-US >, true, </SPAN>
<SPAN lang=EN-US >myCanvas.getMaxColWidth(), </SPAN>
<SPAN lang=EN-US >myCanvas.getColWidth());</SPAN>
<SPAN lang=EN-US >myColumnsGauge = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Gauge(</SPAN><SPAN lang=EN-US >"Number of Columns"</SPAN><SPAN lang=EN-US >, false,  </SPAN>
<SPAN lang=EN-US >myCanvas.getMaxNumCols(), </SPAN>
<SPAN lang=EN-US >myCanvas.getNumCols());</SPAN>
<SPAN lang=EN-US >append(myWidthGauge);</SPAN>
<SPAN lang=EN-US >append(myColumnsGauge);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >itemStateChanged(Item item) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(item == myWidthGauge) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >val = myWidthGauge.getValue();</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(val < myCanvas.getMinColWidth()) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >myWidthGauge.setValue(myCanvas.getMinColWidth());</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else </SPAN></B><SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >numCols = myCanvas.setColWidth(val);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >myColumnsGauge.setValue(numCols);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >commandAction(Command c, Displayable s) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(c == myExitCommand) {</SPAN>
<SPAN lang=EN-US >myCanvas.newMaze();</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>

<B><SPAN lang=EN-US >class </SPAN></B><SPAN lang=EN-US >Grid {</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private </SPAN></B><SPAN lang=EN-US >Random myRandom = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Random();</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[][] mySquares;</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >Grid(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >width, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >height) {</SPAN>
<SPAN lang=EN-US >mySquares = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[width][height];</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i < width - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i++) {</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; j < height - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; j++) {</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >((i % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) || (j % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >)) {</SPAN>
<SPAN lang=EN-US >mySquares[i][j] = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >mySquares[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >][</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >createMaze();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private void </SPAN></B><SPAN lang=EN-US >createMaze() {</SPAN>
<SPAN lang=EN-US >// create an initial framework of black squares.</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i < mySquares.length - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i++) {</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; j < mySquares[i].length - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; j++) {</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >((i + j) % </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >== </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >mySquares[i][j] = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i < mySquares.length - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i+=</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >) {</SPAN>
<B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; j < mySquares[i].length - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; j+=</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >mySquares[i][j] = </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >Vector possibleSquares = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Vector(mySquares.length </SPAN>
<SPAN lang=EN-US >* mySquares[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >].length);</SPAN>
<B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] startSquare = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >startSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >] = getRandomInt(mySquares.length / </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >)*</SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >+ </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >startSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = getRandomInt(mySquares[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >].length / </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >)*</SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >+ </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >mySquares[startSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >]][startSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >]] = </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >possibleSquares.addElement(startSquare);</SPAN>
<B><SPAN lang=EN-US >while</SPAN></B><SPAN lang=EN-US >(possibleSquares.size() > </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >chosenIndex = getRandomInt(possibleSquares.size());</SPAN>
<B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] chosenSquare = (</SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[])possibleSquares.elementAt(chosenIndex);</SPAN>
<SPAN lang=EN-US >mySquares[chosenSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >]][chosenSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >]] = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >possibleSquares.removeElementAt(chosenIndex);</SPAN>
<SPAN lang=EN-US >link(chosenSquare, possibleSquares);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >possibleSquares = </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >System.gc();</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >private void </SPAN></B><SPAN lang=EN-US >link(</SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] chosenSquare, Vector possibleSquares) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >linkCount = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = chosenSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >];</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = chosenSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >];</SPAN>
<B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] links = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >8</SPAN><SPAN lang=EN-US >];</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(i >= </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(mySquares[i - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >][j] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount] = i - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >linkCount++;</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(mySquares[i - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >][j] == </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >mySquares[i - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >][j] = </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] newSquare = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >] = i - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >possibleSquares.addElement(newSquare);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(j + </SPAN><SPAN lang=EN-US >3 </SPAN><SPAN lang=EN-US ><= mySquares[i].length) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(mySquares[i][j + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >] == </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >mySquares[i][j + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >] = </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] newSquare = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >] = i;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >possibleSquares.addElement(newSquare);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(mySquares[i][j + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount] = i;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >linkCount++;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >} </SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(j >= </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(mySquares[i][j - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >] == </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >mySquares[i][j - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >] = </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] newSquare = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >] = i;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >possibleSquares.addElement(newSquare);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(mySquares[i][j - </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount] = i;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >linkCount++;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >} </SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(i + </SPAN><SPAN lang=EN-US >3 </SPAN><SPAN lang=EN-US ><= mySquares.length) {</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(mySquares[i + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >][j] == </SPAN><SPAN lang=EN-US >3</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >mySquares[i + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >][j] = </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] newSquare = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >] = i + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >newSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >possibleSquares.addElement(newSquare);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >else if</SPAN></B><SPAN lang=EN-US >(mySquares[i + </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >][j] == </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount] = i + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkCount + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = j;</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >linkCount++;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >} </SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(linkCount > </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >linkChoice = getRandomInt(linkCount);</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >linkX = links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkChoice];   </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >linkY = links[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >*linkChoice + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >mySquares[linkX][linkY] = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN>
<B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >[] removeSquare = </SPAN><B><SPAN lang=EN-US >new int</SPAN></B><SPAN lang=EN-US >[</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >];</SPAN>
<SPAN lang=EN-US >removeSquare[</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >] = linkX;</SPAN>
<SPAN lang=EN-US >removeSquare[</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >] = linkY;</SPAN>
<SPAN lang=EN-US >possibleSquares.removeElement(removeSquare);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public int </SPAN></B><SPAN lang=EN-US >getRandomInt(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >upper) {</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >retVal = myRandom.nextInt() % upper;</SPAN>
<B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >(retVal < </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >) {</SPAN>
<SPAN lang=EN-US >retVal += upper;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >(retVal);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >}</SPAN>

Artigos relacionados