Skip to content

Instantly share code, notes, and snippets.

@davidsan
Created April 11, 2012 17:19
Show Gist options
  • Select an option

  • Save davidsan/2360672 to your computer and use it in GitHub Desktop.

Select an option

Save davidsan/2360672 to your computer and use it in GitHub Desktop.
CompCircuitFactory
package li260.circuits;
import java.util.ArrayList;
import java.util.Random;
import li260.geometrie.Vecteur;
public class CompCircuitFactory {
private int height;
private int width;
private int borderSize;
private static final Vecteur sensDepart = new Vecteur(0, 1);
private static final Vecteur sensArrivee = new Vecteur(0, 1);
private Vecteur ptDepart;
private ArrayList<Vecteur> listeArrivees;
public CompCircuitFactory(int height, int width, int borderSize) {
this.height = height;
this.width = width;
this.borderSize = borderSize;
this.ptDepart = null;
this.listeArrivees = new ArrayList<Vecteur>();
}
public CircuitModifiable build() {
Terrain[][] track;
track = new Terrain[height][width];
init(track);
ajouterBruit(track);
initDepartArrivee(track);
return new CircuitImpl(track, ptDepart, sensDepart, sensArrivee,
listeArrivees, "comp" + height + width + borderSize);
}
private void init(Terrain[][] track) {
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
track[i][j] = Terrain.Route;
if (j < borderSize || j > width - borderSize) {
track[i][j] = Terrain.Herbe;
}
if (i < borderSize || i > (height - borderSize)) {
track[i][j] = Terrain.Herbe;
}
}
}
}
private void initDepartArrivee(Terrain[][] track) {
Random rand = new Random();
int separator = 5;
int size = 40;
int x = rand.nextInt(size) + borderSize + separator;
int y = rand.nextInt(size) + borderSize + separator;
track[x][y] = Terrain.StartPoint;
ptDepart = new Vecteur(x, y);
/* EndLine */
int j = width - borderSize;
for (int i = 0; i < size; i++) {
track[i + height - borderSize - size + 1][j] = Terrain.EndLine;
listeArrivees.add(new Vecteur(i + height - borderSize - size + 1,j));
}
}
private void ajouterBruit(Terrain[][] track) {
Random rand = new Random();
for (int i = 0; i < track.length; i++) {
for (int j = 0; j < track[0].length; j++) {
if (track[i][j] == Terrain.Route) {
double p = rand.nextDouble();
if (p < 0.003) {
track[i][j+1] = Terrain.Herbe;
track[i][j-1] = Terrain.Herbe;
track[i+1][j] = Terrain.Herbe;
track[i-1][j] = Terrain.Herbe;
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment