package jeudelavie; /** * * Executable pour la visualisation de la Jeu de vie. * (Devoir 1, IFT1025 automne 2009) * * @author iklós Csűrös */ import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JButton; import java.awt.Dimension; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.BufferedReader; import java.io.Reader; public class Lancer { /** * Taille d'un point pour la visualisation de la grille. */ private static final int POINT_SIZE = 8; /** * Construit une liste de liste de champs ˆ partir d'un fichier. * Chaque ŽlŽment de la liste correspond ˆ une ligne, dans l'ordre * du fichier. Les champs d'une ligne sont sŽparŽs par des sŽquences * d'espace blancs (espace ' ' ou tab '\t'). * * @param R Reader pour un fichier ou autre source * @return liste de listes de champs * @throws java.io.IOException s'il y a un problme lors de la lecture */ private static ArrayList> readFields(Reader R) throws IOException { ArrayList> all_data = new ArrayList>(); // initialisation BufferedReader BR = new BufferedReader(R); // pour la lecture de R String line = null; // contient une ligne ˆ la fois do { line = BR.readLine(); // lire une ligne if (line == null) continue; // arrive a la derniere ligne (fin-de-fichier) String[] fields = line.split("\\s+"); // coupe par sequences d'espace blanc (tab, espace, ...) ArrayList line_fields = new ArrayList(); // aggrŽgation des champs for (int i=0; ifinal ici, // parce qu'il y a une rŽfŽrence dans la mŽthode // actionPerformed plus tard. final Visualisation V = new Visualisation(G, POINT_SIZE); int taille = G.getSize(); // ici on doit assurer que le JFrame prend la taille souhaitŽe Dimension D = new Dimension(taille*POINT_SIZE, taille*POINT_SIZE); V.setPreferredSize(D); // on dŽfinit le titre JFrame frame = new JFrame("Jeu de la vie"); // l'exŽcution est finie quand la fentre est fermŽe frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(V, BorderLayout.CENTER); JButton B = new JButton("Prochaine gŽnŽration"); B.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ignored) { G.nextGeneration(); V.repaint(); } }); frame.add(B, BorderLayout.SOUTH); // faire calculer les dimensions du JFrame frame.pack(); // afficher frame.setVisible(true); } /** * Execution ˆ partir de la ligne de commande. * * @param args arguments ˆ la ligne de commande: -rnd n p ou -in fichier * @throws java.io.IOException s'il y a un problme avec le fichier (p.e., n'existe pas) */ public static void main(String[] args) throws java.io.IOException { if (args.length <2 || args.length>3) // mauvais nombre d'arguments throw new IllegalArgumentException("Arguments: -rnd n p ou -in fichier."); Grille G = null; if (args[0].equals("-rnd")) { if (args.length != 3) throw new IllegalArgumentException("Il faut appeler par -rnd n p"); int n = Integer.parseInt(args[1]); double p = Double.parseDouble(args[2]); G = Grille.random(n, p); } else if (args[0].equals("-in")) { if (args.length != 2) throw new IllegalArgumentException("Il faut appeler par -in fichier"); G = Grille.read(readFields(new java.io.FileReader(args[1]))); } else { throw new IllegalArgumentException("Le premier argument doit etre -rnd ou -in"); } showFrame(G); } }