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
| public Carte( PasDeTemps pasDeTemps, String fileMap ){
// Mise en memoire
this.pasDeTemps=pasDeTemps;
// Initialisation du terrain
initTerrain(getClass().getResourceAsStream("map/"+fileMap+".txt"));
// Initialisation de la foule
listePersonne = new HashMap<Integer, Personne>( Parametres.getNbPersonneMax() );
// Ajout d'un ecouteur permettant de faire varier la carte
// dans le temps ( ajout et déplacement de personne ).
pasDeTemps.addCreationPersonne(this);
}
// -----------
// Fonctions :
// -----------
/**
* Cette fonction permet de remplir le tableau 2d representatif du terrain
* @param fileStream <r>Adresse du fichier contenant les informations
* sur le terrain a creer.</r>
*/
private void initTerrain(InputStream fileStream){
// On cree un tableau de terrain selon les dimensions
// fournis par la classe Parametres.
int i = 0; // Cases remplies.
int x=0;
int y=0;
BufferedReader file = null;
String ligne;
// On essaye de lire le fichier.
try {
file = new BufferedReader(new InputStreamReader(fileStream));
// Interpretation du fichier
// Recuperation de la taille de la carte
if ((ligne = file.readLine()) != null)
x = Integer.valueOf("0"+ligne.replaceAll("[^0-9]", ""));
if ((ligne = file.readLine()) != null)
y = Integer.valueOf("0"+ligne.replaceAll("[^0-9]", ""));
// Verification de la taille :
if (x!=Parametres.getX() || y!=Parametres.getY()){
// Mise a jour de la taille :
Parametres.setDimension(x,y);
}// Maintenant que l'on as la dimention, on cree le tableaux
terrain = new Terrain[Parametres.getX()][Parametres.getY()];
// On rempli les cases selon le fichier
while ((ligne = file.readLine()) != null){
if ( i >= x*y ){
System.err.println("FileMap -> nombre de ligne incorrect. ( Trop de ligne )");
return;
}
terrain[i/y][i%y] = new Terrain(ligne);
i++;// On as rempli une case de plus
}
while (i < x*y ){
System.err.println("FileMap -> nombre de ligne incorrect. ( Manque de ligne )");
terrain[i/y][i%y] = new Terrain("");
i++;// On as rempli une case de plus
}
} catch(FileNotFoundException fnfe) {
// if ( ! noBugInitTerrain(fileUrl.getFile()) ){
System.err.println("Fichier Map : "+fileStream.toString()+" inaccessible.");
System.err.println("FileNotFoundException ->.");
fnfe.printStackTrace();
initTerrain("");
// }
return;
} catch(IOException ioe) {
System.err.println("Fichier Map : "+fileStream.toString()+" Error syntaxe.");
System.err.println("IOException ->.");
ioe.printStackTrace();
initTerrain("");
return;
} finally {
try {// On referme le fichier
if ( file!=null )// Si le fichier a ete ouvert
file.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} |