Teaching - 2i013

Enseignants


2i013 - Groupe 5 : Course de voiture

Synchronisation Circuit/image

Voici une proposition (non obigatoire) pour synchroniser simplement le circuit et l'affichage: on utilise exactement le même indicage pour la matrice et pour l'image. L'affichage sera un peu plus "étonnant" mais il y aura moins de problème de synchronisation.

   public static BufferedImage imageFromCircuit(Circuit track) {
		BufferedImage im = 
			new BufferedImage(track.getHeight(), track.getWidth(), 
					BufferedImage.TYPE_4BYTE_ABGR);

		for(int i=0; i<track.getHeight(); i++)
			for(int j=0; j<track.getWidth(); j++)
				im.setRGB(i, j, terrainToRGB(track.getTerrain(i, j)));

		return im;
	}

Proposition de main pour tester le bon fonctionnement de votre programme

	public static void main(String[] args) throws VoitureException, IOException {
		String filename = "track/1_safe.trk";

		CircuitFactory cfac = new CircuitFactoryFromFile(filename);
		Circuit track = cfac.build();

		VoitureFactory vFac = new FerrariFactory(track);
		Voiture v = vFac.build();

		BufferedImage im = ToolsTerrain.imageFromCircuit(track);

		ArrayList<Commande> coms = new ArrayList<Commande>();
		for(int i=0; i<50; i++) coms.add(new Commande(1,0)); // accel a fond
		for(int i=0; i<50; i++) coms.add(new Commande(1,0.1)); // accel a fond + droite
		for(int i=0; i<50; i++) coms.add(new Commande(1,0)); // accel a fond
		for(int i=0; i<50; i++) coms.add(new Commande(1,-0.1)); // accel a fond + gauche

		for(Commande c:coms){
			v.drive(c);
			System.out.println("position : "+ v.getPosition());
			im.setRGB((int) v.getPosition().getX(), 
                                  (int) v.getPosition().getY(),
                                  Color.orange.getRGB());
		}

		ImageIO.write(im, "png", new File("test.png"));
	}