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);
}
}