public TetrisWindow(String hostName, int serverPortNumber) throws IOException {
   super("Rainbow Tetris");
   connection = new TetrisClient(hostName, serverPortNumber);
   myID = connection.getID();
   board = new Board();
   message = new JLabel("Waiting for two players to connect.", JLabel.CENTER);
   board.setBackground(Color.WHITE);
   board.setPreferredSize(new Dimension(300, 660));
   board.addMouseListener(
       new MouseAdapter() {
         public void mousePressed(MouseEvent evt) {
           doMouseClick();
         }
       });
   message.setBackground(Color.LIGHT_GRAY);
   message.setOpaque(true);
   JPanel content = new JPanel();
   content.setLayout(new BorderLayout(2, 2));
   content.setBorder(BorderFactory.createLineBorder(Color.GRAY, 2));
   content.setBackground(Color.GRAY);
   content.add(board, BorderLayout.CENTER);
   content.add(message, BorderLayout.SOUTH);
   setContentPane(content);
   pack();
   setResizable(false);
   setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
   addWindowListener(
       new WindowAdapter() {
         public void windowClosing(WindowEvent evt) {
           dispose();
           connection.disconnect();
           try {
             Thread.sleep(333);
           } catch (InterruptedException e) {
           }
           System.exit(0);
         }
       });
   setLocation(200, 100);
   setVisible(true);
 }
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      if (state == null) {
        g.drawString("Starting up.", 20, 35);
        return;
      }
      if (!paused) {
        //		   g.setColor(Color.RED);
        for (int i = 0; i < staticX.size(); ++i) {
          if (staticX.get(i) == 0 || staticX.get(i) == 1) g.setColor(Color.RED);
          else if (staticX.get(i) == 2 || staticX.get(i) == 3) g.setColor(Color.ORANGE);
          else if (staticX.get(i) == 4 || staticX.get(i) == 5) g.setColor(Color.YELLOW);
          else if (staticX.get(i) == 6 || staticX.get(i) == 7) g.setColor(Color.GREEN);
          else g.setColor(Color.BLUE);
          if (staticX.get(i) >= 0) {
            g.fillRect(
                staticX.get(i) * squareWidth(),
                staticY.get(i) * squareHeight(),
                squareWidth(),
                squareHeight());
          }
        }
        g.setColor(Color.GRAY);
        for (int u = 0; u < 4; ++u) {
          g.fillRect(
              shadowX[u] * squareWidth(),
              shadowY[u] * squareHeight(),
              squareWidth(),
              squareHeight());
        }
        if (randNum == 0) g.setColor(Color.RED);
        else if (randNum == 1) g.setColor(Color.ORANGE);
        else if (randNum == 2) g.setColor(Color.YELLOW);
        else if (randNum == 3) g.setColor(Color.GREEN);
        else if (randNum == 4) g.setColor(Color.BLUE);
        else if (randNum == 5) g.setColor(Color.CYAN);
        else g.setColor(Color.PINK);
        for (int j = 0; j < 4; ++j) {
          g.fillRect(
              currentX[j] * squareWidth(),
              currentY[j] * squareHeight(),
              squareWidth(),
              squareHeight());
        }

        g.setColor(Color.BLACK);
        int tempTime = 0;
        if (state.time % 60 == 0)
          g.drawString("Time Left " + state.time / 60 + ":" + state.time % 60 + tempTime, 180, 35);
        else if (state.time % 60 < 10)
          g.drawString("Time Left " + state.time / 60 + ":" + tempTime + state.time % 60, 180, 35);
        else g.drawString("Time Left " + state.time / 60 + ":" + state.time % 60, 180, 35);
      }
      if (state.time <= 0) {
        if (myID == state.winner) {
          g.setColor(Color.BLUE);
          g.drawString("YOU WIN!", getWidth() / 2, getHeight() / 2);
        } else if (state.tie) {
          g.setColor(Color.BLACK);
          g.drawString("IT'S A TIE!", getWidth() / 2, getHeight() / 2);
        } else {
          g.setColor(Color.RED);
          g.drawString("YOU LOSE!", getWidth() / 2, getHeight() / 2);
        }
      }
    }