import java.awt.*; import java.awt.event.*; import java.io.*; class Mot { int generateurs[]; int longueur,genemax; Mot(int gene[]) { generateurs=gene; longueur=gene.length; int mem=0; for (int i=0;imem) mem=Math.abs(generateurs[i]); } genemax=mem; } Mot(String proposition) { int i=0; int type; StreamTokenizer entree=new StreamTokenizer (new StringReader(proposition)); while(true) { try {type=entree.nextToken();} catch (IOException e) {type=StreamTokenizer.TT_EOF;} if ((type==StreamTokenizer.TT_NUMBER)&&(entree.nval!=0)) i++; else { if (type==StreamTokenizer.TT_EOF) break; } } generateurs=new int[i]; i=0; StreamTokenizer repasse=new StreamTokenizer (new StringReader(proposition)); while(true) { try {type=repasse.nextToken();} catch (IOException e) {type=StreamTokenizer.TT_EOF;} if (type==StreamTokenizer.TT_NUMBER) { if ((int)repasse.nval!=0) generateurs[i++]=(int)repasse.nval; } else { if (type==StreamTokenizer.TT_EOF) break; } } longueur=generateurs.length; int mem=0; for (i=0;imem) mem=Math.abs(generateurs[i]); } genemax=mem; } int remonte(int brin) { for (int i=(longueur-1);i==0;i--) { if (generateurs[i]==brin) brin=brin+1; else { if (generateurs[i]==(brin-1)) brin=brin-1; } } return brin; } } class Tresse extends Panel{ Mot mot; int lg,ht; Color couleurs[]={Color.red,Color.green,Color.blue,Color.yellow,Color.magenta,Color.cyan,Color.pink,Color.orange}; Tresse(int tab[]) { mot=new Mot(tab); setBackground(new Color(0,100,0)); } Tresse(String prop) { mot=new Mot(prop); setBackground(Color.white); } void modifie(String prop) { mot=new Mot(prop); this.repaint(); } public void paint(Graphics feuille) { if (mot.longueur>0) { lg=this.getSize().width; ht=this.getSize().height; int pas; if ((lg/(mot.genemax+1))>(ht/(mot.longueur))) pas=ht/(mot.longueur); else pas=lg/(mot.genemax+1); int dpas=pas/2; int inter=pas/6; int dbande=inter/2; int v=(int) (dbande/Math.sqrt(2)+0.5); int decaa=(lg-pas*mot.genemax)/2; int decav=(ht-pas*mot.longueur)/2; for (int brin=0;brin<=mot.genemax;brin++) { feuille.setColor(Color.black); feuille.drawLine(decaa+brin*pas-dbande,decav+mot.longueur*pas,decaa+brin*pas+dbande-1,decav+mot.longueur*pas); int colonne=brin; for (int i=mot.longueur-1;i>=0;i--) { if (Math.abs(mot.generateurs[i])==colonne) { if (mot.generateurs[i]>0) { int x[]={decaa+colonne*pas-dbande,decaa+(colonne-1)*pas+dbande-2*v,decaa+(colonne-1)*pas-dbande,decaa+(colonne-1)*pas+dbande,decaa+colonne*pas-dbande+2*v,decaa+colonne*pas+dbande}; int y[]={decav+(i+1)*pas,decav+i*pas+2*v,decav+i*pas,decav+i*pas,decav+(i+1)*pas-2*v,decav+(i+1)*pas}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x,y,6); feuille.setColor(Color.black); feuille.drawPolygon(x,y,6); feuille.setColor(couleurs[brin%8]); feuille.drawLine(decaa+colonne*pas-dbande+1,decav+(i+1)*pas,decaa+colonne*pas+dbande-1,decav+(i+1)*pas); } else { int x[]={decaa+colonne*pas-dbande,decaa+(colonne-1)*pas+dpas+inter-v,decaa+(colonne-1)*pas+dpas+inter+v,decaa+colonne*pas-dbande+2*v,decaa+colonne*pas+dbande}; int y[]={decav+(i+1)*pas,decav+i*pas+dpas+inter+v,decav+i*pas+dpas+inter-v,decav+(i+1)*pas-2*v,decav+(i+1)*pas}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x,y,5); feuille.setColor(Color.black); feuille.drawPolygon(x,y,5); feuille.setColor(couleurs[brin%8]); feuille.drawLine(decaa+colonne*pas-dbande+1,decav+(i+1)*pas,decaa+colonne*pas+dbande-1,decav+(i+1)*pas); int x2[]={decaa+(colonne-1)*pas+dpas-inter-v,decaa+(colonne-1)*pas+dbande-2*v,decaa+(colonne-1)*pas-dbande,decaa+(colonne-1)*pas+dbande,decaa+(colonne-1)*pas+dpas-inter+v}; int y2[]={decav+i*pas+dpas-inter+v,decav+i*pas+2*v,decav+i*pas,decav+i*pas,decav+i*pas+dpas-inter-v}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x2,y2,5); feuille.setColor(Color.black); feuille.drawPolygon(x2,y2,5); } colonne=colonne-1; } else { if ((Math.abs(mot.generateurs[i])-1)==colonne) { if (mot.generateurs[i]<0) { int x[]={decaa+colonne*pas-dbande,decaa+colonne*pas+dbande-2*v,decaa+(colonne+1)*pas-dbande,decaa+(colonne+1)*pas+dbande,decaa+(colonne+1)*pas-dbande+2*v,decaa+colonne*pas+dbande}; int y[]={decav+(i+1)*pas,decav+(i+1)*pas-2*v,decav+i*pas,decav+i*pas,decav+i*pas+2*v,decav+(i+1)*pas}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x,y,6); feuille.setColor(Color.black); feuille.drawPolygon(x,y,6); feuille.setColor(couleurs[brin%8]); feuille.drawLine(decaa+colonne*pas-dbande+1,decav+(i+1)*pas,decaa+colonne*pas+dbande-1,decav+(i+1)*pas); } else { int x[]={decaa+colonne*pas-dbande,decaa+colonne*pas+dbande-2*v,decaa+colonne*pas+dpas-inter-v,decaa+colonne*pas+dpas-inter+v,decaa+colonne*pas+dbande}; int y[]={decav+(i+1)*pas,decav+(i+1)*pas-2*v,decav+i*pas+dpas+inter-v,decav+i*pas+dpas+inter+v,decav+(i+1)*pas}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x,y,5); feuille.setColor(Color.black); feuille.drawPolygon(x,y,5); feuille.setColor(couleurs[brin%8]); feuille.drawLine(decaa+colonne*pas-dbande+1,decav+(i+1)*pas,decaa+colonne*pas+dbande-1,decav+(i+1)*pas); int x2[]={decaa+colonne*pas+dpas+inter+v,decaa+colonne*pas+dpas+inter-v,decaa+(colonne+1)*pas-dbande,decaa+(colonne+1)*pas+dbande,decaa+(colonne+1)*pas-dbande+2*v}; int y2[]={decav+i*pas+dpas-inter+v,decav+i*pas+dpas-inter-v,decav+i*pas,decav+i*pas,decav+i*pas+2*v}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x2,y2,5); feuille.setColor(Color.black); feuille.drawPolygon(x2,y2,5); } colonne=colonne+1; } else { int x[]={decaa+colonne*pas-dbande,decaa+colonne*pas-dbande,decaa+colonne*pas+dbande,decaa+colonne*pas+dbande}; int y[]={decav+(i+1)*pas,decav+i*pas,decav+i*pas,decav+(i+1)*pas}; feuille.setColor(couleurs[brin%8]); feuille.fillPolygon(x,y,4); feuille.setColor(Color.black); feuille.drawPolygon(x,y,4); feuille.setColor(couleurs[brin%8]); feuille.drawLine(decaa+colonne*pas-dbande+1,decav+(i+1)*pas,decaa+colonne*pas+dbande-1,decav+(i+1)*pas); } } } feuille.setColor(Color.black); feuille.drawLine(decaa+brin*pas-dbande,decav+mot.longueur*pas,decaa+brin*pas+dbande-1,decav+mot.longueur*pas); } } } } public class Ardoise extends java.applet.Applet implements ActionListener { String prop="2 4 1"; Tresse tresse = new Tresse(prop); Button bouton = new Button("Dessiner"); TextField saisie= new TextField(15); public void init() { setLayout(new BorderLayout(5,5)); add("Center",tresse); Panel boite=new Panel(); add("South",boite); saisie.setText(prop); boite.add(saisie); saisie.addActionListener(this); boite.add(bouton); bouton.addActionListener(this); } public void actionPerformed(ActionEvent e) { if ((e.getSource()==bouton)||(e.getSource()==saisie)) { tresse.modifie(saisie.getText()); } } }