/* Application exemple d'utilisation des methodes   */
/* contenues dans EcranGraphique.class              */

public class TestEcranGraphiqueEnConsole {

  public static void croix(int x,int y) {
    EcranGraphique.drawLine(x-10,y,x+10,y);
    EcranGraphique.drawLine(x,y-10,x,y+10);
  }

  public static void main(String [] args) {
    Console.setTitle("TestEcranGraphique");
    int val = -1;
  /* Initialisation de la fenetre d'affichage       */
    EcranGraphique.init(50,50,480,360,640,480,"Test affichage graphique");
  /* Boucle de gestion de l'application             */
    while ( val != 0 ) {
  /* Menu                                           */
      Console.afficherln(" 1 - Afficher 3 pixels");
      Console.afficherln(" 2 - Afficher un segment de droite");
      Console.afficherln(" 3 - Animer un segment de droite");
      Console.afficherln(" 4 - Afficher un rectangle et remplir un rectangle");
      Console.afficherln("     Afficher un cercle et remplir un cercle");
      Console.afficherln(" 5 - Afficher une chaine de caracteres");
      Console.afficherln(" 6 - Tester l'alpha-blending");
      Console.afficherln(" 7 - Effacer l'ecran");
      Console.afficherln(" 8 - Lire un caractere au clavier");
      Console.afficherln(" 9 - Deplacer une croix a la souris");
      Console.afficherln("10 - Lire une image PNG et l'afficher");
      Console.afficherln("11 - Lire une image PNG sur le web et l'afficher");
      Console.afficherln("12 - Tester getMouseState()");
      Console.afficherln("13 - Tester getMouseButton()");
      Console.afficherln(" 0 - Quitter");
      Console.afficher("Choix ? ");
      val = Console.saisirInt();
  /* Action en fonction de la valeur saisie         */
      switch (val) {
        case 1 : {
  /* Affichage de trois pixels de couleurs differentes */
          EcranGraphique.setColor(200,0,0);
          EcranGraphique.drawPixel(100,200);
          EcranGraphique.setColor(0,200,0);
          EcranGraphique.drawPixel(200,100);
          EcranGraphique.setColor(0,0,200);
          EcranGraphique.drawPixel(300,200);
          EcranGraphique.flush(); }
          break;
        case 2 : {
  /* Affichage d'un segment de droite               */
          EcranGraphique.setColor(200,0,0);
          EcranGraphique.drawLine(-100,100,100,100);
          EcranGraphique.flush(); }
          break;
        case 3 : {
  /* Animation d'un segment de droite               */
          long ti = System.nanoTime();
          for ( int i = 0 ; i <= 768 ; i++ ) {
            EcranGraphique.clear();
            EcranGraphique.setColor(i/3,i%256,(i+128)%256);
            EcranGraphique.drawLine((int) (320+200*Math.cos(i*Math.PI*2.0/768.0)+0.5),
                                    (int) (240+200*Math.sin(i*Math.PI*2.0/768.0)+0.5),
                                    (int) (320-200*Math.cos(i*Math.PI*2.0/768.0)+0.5),
                                    (int) (240-200*Math.sin(i*Math.PI*2.0/768.0)+0.5));
            EcranGraphique.flush(); }
          long tf = System.nanoTime();
          Console.out.println((tf-ti)/1000000); }
          break;
        case 4 : {
  /* Affichage d'un rectangle                       */
          EcranGraphique.setColor(200,0,0);
          EcranGraphique.drawRect(-100,100,370,500);
  /* Affichage d'un cercle                          */
          EcranGraphique.setColor(0,200,0);
          EcranGraphique.drawCircle(120,250,200);
  /* Remplissage d'un cercle                        */
          EcranGraphique.setColor(0,200,200);
          EcranGraphique.fillCircle(500,320,240);
  /* Remplissage d'un rectangle                     */
          EcranGraphique.setColor(200,200,0);
          EcranGraphique.fillRect(500,300,700,100);
          EcranGraphique.flush(); }
          break;
        case 5 : {
  /* Affichage d'une chaine de caracteres */
          EcranGraphique.setColor(255,255,255);
          EcranGraphique.drawString(10,200,EcranGraphique.SYMBOL8x13,"ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-0123456789");
          EcranGraphique.drawString(10,220,EcranGraphique.COLABA8x13,"ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-0123456789");
          EcranGraphique.flush(); }
          break;
        case 6 : {
  /* Affichage d'un rectangle                       */
          EcranGraphique.setColor(200,0,0);
          EcranGraphique.drawRect(-100,100,400,500);
  /* Remplissage d'un rectangle                     */
          EcranGraphique.setColor(200,200,0);
          EcranGraphique.fillRect(500,300,700,100);
          EcranGraphique.setAlphaBlendingMode(true);
          EcranGraphique.setAlpha(0.5);
  /* Affichage d'un cercle                          */
          EcranGraphique.setColor(0,200,0);
          EcranGraphique.drawCircle(120,250,200);
  /* Remplissage d'un cercle                        */
          EcranGraphique.setColor(0,200,200);
          EcranGraphique.fillCircle(500,320,240);
          EcranGraphique.setAlphaBlendingMode(false);
          EcranGraphique.flush(); }
          break;
        case 7 : {
  /* Effacement de la fenetre de dessin             */
          EcranGraphique.clear();
          EcranGraphique.flush(); }
          break;
        case 8 : {
  /* Lecture d'un caractere au clavier              */
          char c;
          while ( (c = EcranGraphique.getKey()) == 0x00 );
          Console.out.println(c);
          Console.out.println((int) c); }
          break;
        case 9 : {
  /* Deplacement d'une croix a la souris            */
          EcranGraphique.setColor(255,255,255);
          while ( EcranGraphique.getMouseState() == 0 ) {
            EcranGraphique.wait(10); }
          EcranGraphique.setXorMode(true);
          int xOld = EcranGraphique.getMouseX();
          int yOld = EcranGraphique.getMouseY();
          croix(xOld,yOld);
          while ( EcranGraphique.getMouseState() == 1 ) {
            int x = EcranGraphique.getMouseX();
            int y = EcranGraphique.getMouseY();
            if ( ( x != xOld ) || ( y != yOld ) ) {
              croix(xOld,yOld);
              xOld = x;
              yOld = y;
              croix(x,y);
              EcranGraphique.flush(); }
              else {
              EcranGraphique.wait(10); } }
          croix(xOld,yOld);
          EcranGraphique.flush();
          EcranGraphique.setXorMode(false); }
          break;
        case 10 : {
  /* Lecture et affichage d'une image PNG           */
          Console.afficher("Quel fichier? ");
          String file = Console.saisirString();
          int [][] img = EcranGraphique.loadPNGFile(file);
          if ( img != null ) {
            EcranGraphique.drawImage(0,0,img);
            EcranGraphique.flush(); } }
          break;
        case 11 : {
  /* Lecture et affichage d'une image PNG           */
          Console.afficher("Quelle url? ");
          String url = Console.saisirString();
          int [][] img = EcranGraphique.downloadPNGFile(url);
          if ( img != null ) {
            EcranGraphique.drawImage(0,0,img);
            EcranGraphique.flush(); } }
          break;
        case 12 : {
          boolean go = true;
          while (go) {
            EcranGraphique.wait(10);
            int v = EcranGraphique.getMouseState();
            if ( v == 2 ) {
              go = false; }
            Console.afficherln(v); }
          Console.afficherln("Par le bouton ",EcranGraphique.getMouseButton()); }
          break;
        case 13 : {
          boolean go = true;
          while (go) {
            EcranGraphique.wait(10);
            int v = EcranGraphique.getMouseButton();
            if ( v == 2 ) {
              go = false; }
            Console.afficherln(v); } }
          break;
        case 14 : {
          EcranGraphique.setWindowResizable(false);
          EcranGraphique.setWindowSize(800,600); }
          break;
        case 0 : {
          Console.afficherln("A bientot!!!");
          break; } } }
  /* Fermeture de la fenetre                        */
  /* et interruption de l'application               */
    EcranGraphique.exit();
  }
}