import chess.Chess;
import chess.Screen;
import chess.Turtle;

public class TicTacToe {
    
    static int boardLeftMargin= 50; // number of pixels on left margin
    static int boardTopMargin= 50;  // number of pixels on top margin
    static int boxHeight= 130;      // height of each box
    static int boxWidth= boxHeight; // width of each box
    
    /* draws an O at centered at x,y */
    static void drawO( Turtle tim, int x, int y ) {
        tim.setColor(260);
        tim.setPosition( x, y );
        tim.setOrientation( 180 );
        int diameter= boxHeight * 6 / 10;
        tim.penUp();
        tim.forward(diameter/2);
        tim.right(180);
        tim.penDown();
        tim.circle(diameter/2);
    }
    
    /* draws an X at centered at x,y */
    static void drawX( Turtle tim, int x, int y ) {        
        tim.setColor(200);
        tim.setPosition( x, y );
        tim.setOrientation( 180 );        
        int diameter= boxHeight * 6 / 10;
        tim.penUp();
        tim.right(45);        
        tim.forward(diameter/2);
        tim.right(180);
        tim.penDown();
        tim.forward(diameter);
        tim.left(135);
        tim.penUp();
        tim.forward( (int)( diameter / Math.sqrt(2) ) );
        tim.left(135);        
        tim.penDown();
        tim.forward( diameter );
    }
    
    static void drawStatusMessage( Turtle tim, String message ) {
        tim.setPosition( boardLeftMargin + boxWidth , boardTopMargin / 2 );
        tim.setOrientation(0);
        tim.setRGBColor( 1, 1, 1. );
        tim.forward(500);
        tim.back(500);
        tim.forward(20);
        tim.setRGBColor( 0, 0, 0 );
        tim.text( message );
    }
        
    static void drawBoard( Turtle tim ) {        
        tim.setOrientation( 90 );
        for ( int i=1; i<3; i++ ) {
            int x= boardLeftMargin + i * boxWidth ;            
            tim.setPosition( x, boardTopMargin );            
            tim.forward( boxHeight * 3 );
        }
        tim.setOrientation( 0 );
        for ( int i=1; i<3; i++ ) {
            int y= boardTopMargin + i * boxHeight ;            
            tim.setPosition( boardLeftMargin, y );            
            tim.forward( boxWidth * 3 );
        }
    }
    
    public static void main(String[] args) {
        Screen g= Chess.newScreen( boardLeftMargin * 2 + boxWidth * 3, 
                            boardTopMargin * 2 + boxHeight * 3 );
        Turtle tim= g.newTurtle();
        
        tim.setLineWidth(10);
        drawBoard(tim);
        
        tim.setLineWidth(20);
        String turn="O";  
        
        while ( true ) {
            drawStatusMessage( tim, "It's "+turn+"'s turn" );
            
            g.waitForMouseClick();
            int mouseX= g.getMouseX();
            int mouseY= g.getMouseY();
            
            int i= ( mouseX - boardLeftMargin ) / boxWidth;
            int j= ( mouseY - boardTopMargin ) / boxHeight;
                        
            int boxX= boardLeftMargin + (int)( boxWidth * ( i + 0.5 ) );
            int boxY= boardTopMargin + (int)( boxHeight * ( j + 0.5 ) );
            if ( turn.equals("O") ) {                
                drawO( tim, boxX, boxY );
                turn= "X";
            } else {            
                drawX( tim, boxX, boxY );
                turn= "O";
            }
            
        }
        
    }
    
}
