
import java.awt.*;
import java.io.*;       //   NEW, for files


public class AllSpeciesStats
        {
		private int popsize;
 		private int [][] stats = new int[41][41];

 		private int north_boundary;
 		private int west_boundary;
 		private int substrate_width;
 		private int substrate_height;
 		private int piece_size;

 		private int left;
 		private int top;
 		private int row;
 		private int col;
 		private int piece_pixel_size;
 		private int piece_radius;

 		private PrintWriter outfile;

 		public AllSpeciesStats(int nb, int wb, int sw, int sh, int ps)
 		  {
			north_boundary = nb;
			west_boundary = wb;
			substrate_width = sw;
			substrate_height = sh;
			piece_size = ps;

			left = west_boundary;
			top = north_boundary;
			piece_pixel_size = piece_size;
			piece_radius = piece_pixel_size/2;

			try
				 {
					outfile = new PrintWriter(new FileOutputStream("AllSpeciesCounts.txt"));
				  }
			 	catch (Throwable anError)
			 	  {
					System.out.println("outfile error>  " + anError); // display the error
				  }

			System.out.println("piece_pixel_size = " + piece_pixel_size);
			System.out.println("piece_radius = " + piece_radius);
			outfile.println("piece_pixel_size = " + piece_pixel_size);
			outfile.println("piece_radius = " + piece_radius);

	      }

		public void update(Shape [] pop)
		   {
			for(int i = 0; i < 41; i++)
			    for(int j=0; j<41; j++)
			       stats[i][j]=0;
			int x; int y;
			popsize = pop.length;
			for(int i = 0; i<popsize; i++)
			   {
				   x = pop[i].get_center_x();
				   y = pop[i].get_center_y();
				   row = y-top;

				   col = x-left;
			//	   System.out.println(row + ", " + col);
				   if(row >= 0 && row <= 40 && col >=0 && col <= 40)
				      stats[row][col]++;

				}


		   }

	 	public void print(int gen)
	 	  {

			 String s;
			 int sum;
			  //  Also print to file
			  try
			  	{
					outfile.println("Generation " + gen);
					sum = 0;
					for(int r = 0; r < 41; r++)
					   {
						 s = " ";
					     for(int c = 0; c < 41; c++)
						     {s += stats[r][c] + " "; sum+= stats[r][c];}
					   	 outfile.println(s);
					   }
				    outfile.println("total count:  "+sum);

			  	}
			  	catch (Throwable anError)
			  		{System.out.println("outfile error>  " + anError); }// display the error
			}

		public void close()
		   {outfile.close();}


        }

