1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| package test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
public class SortieAleaDunCarre extends JPanel {
private static final int TAILLE_CARRE = 97; // largeur carré
private static final int LARGEUR = 600; // largeur fenêtre
private static final int HAUTEUR = 630; // hauteur fenêtre
private static final int PIXEL_SIZE = 5; // largeur d'un pixel
private static final long PERIODE = 0; // nombre de ms d'attente entre chaque mouvement
private int tailleCarre;
private BufferedImage image;
private final int largeurImage;
private final int hauteurImage;
private Random random;
public SortieAleaDunCarre(int tailleCarre) {
this.tailleCarre=tailleCarre;
this.largeurImage=tailleCarre*PIXEL_SIZE;
this.hauteurImage=tailleCarre*PIXEL_SIZE;
this.image = creerImageVide();
this.random=new Random();
new Thread() {
public void run() {
try {
dessiner();
} catch (InterruptedException e) {
}
}
}.start();
}
private void dessiner() throws InterruptedException {
for (int c = 0; c < 5; c ++) {// on essaie 5 sorties {
dessinerCarre(c);
}
}
private void dessinerCarre(int c) throws InterruptedException {
int x=tailleCarre/2;
int y=tailleCarre/2;
Color couleurCarre = new Color((55+50*c)%255, (55+30*c)%255, 155);
for(int i=1;i<25000;i++) {
dessineNouveauPixel(couleurCarre, x, y);
if ( x<0 || x>=tailleCarre || y<0 || y>=tailleCarre) {
// sortie carré
break;
}
Thread.sleep(PERIODE);
switch(random.nextInt(4)) {
case 0:
x--;
break;
case 1:
x++;
break;
case 2:
y++;
break;
case 3:
y--;
break;
}
}
}
private void dessineNouveauPixel(Color couleurCarre, int x, int y) {
BufferedImage image = new BufferedImage(largeurImage, hauteurImage, BufferedImage.TYPE_INT_RGB);
Graphics2D gr = image.createGraphics();
gr.drawImage(this.image, 0, 0, null);
gr.setColor(couleurCarre);
gr.fillRect(x*PIXEL_SIZE, y*PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE);
gr.dispose();
this.image=image;
repaint();
}
private BufferedImage creerImageVide() {
BufferedImage image = new BufferedImage(largeurImage, hauteurImage, BufferedImage.TYPE_INT_RGB);
Graphics2D gr = image.createGraphics();
gr.setBackground(Color.WHITE);
gr.fillRect(0, 0, largeurImage, hauteurImage);
gr.dispose();
return image;
}
@Override
public void paint(Graphics g) {
// vide le fond en noir
g.setColor(Color.BLACK);
Dimension size = getSize();
g.fillRect(0, 0, (int)size.getWidth(), (int)size.getHeight());
// centrer l'image
g.drawImage(image, (int)(size.getWidth()-image.getWidth())/2,
(int)(size.getHeight()-image.getHeight())/2,this);
}
public static void main(String[] args) {
JFrame cadre1 = new JFrame();
JTextPane texte1 = new JTextPane();
String str1 = "Un point part du centre d'un carré (de côté < 120) et se déplace aléatoirement (par défaut : uniformément dans les quatre directions).";
texte1.setText(str1);
cadre1.add(texte1);
cadre1.setSize(200, 150);
cadre1.setLocation(50, 200);
cadre1.setVisible(true);
cadre1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
JFrame cadre11 = new JFrame();
JTextPane texte11 = new JTextPane();
String str11 = " On simule (5 fois) le ''temps'' qu'il met pour sortir du carré. Sorry : la fenêtre met quelques secondes pour apparaître ...et idem pour disparaître. ";
texte11.setText(str11);
cadre11.add(texte11);
cadre11.setSize(200, 150);
cadre11.setLocation(50, 350);
cadre11.setVisible(true);
cadre11.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
//
JFrame cadre0 =new JFrame();
cadre0.setSize(LARGEUR,HAUTEUR);cadre0.setLocation(550,0);cadre0.setVisible(true);
cadre0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SortieAleaDunCarre jeu = new SortieAleaDunCarre(TAILLE_CARRE);
cadre0.getContentPane().add(jeu);
}
} |
Partager