Exemple #1
0
GameStatistics Halite::runGame() {
	std::vector<bool> result(number_of_players, true);
	std::vector<unsigned char> rankings;
	const int maxTurnNumber = game_map.map_width * game_map.map_height;
	while(std::count(result.begin(), result.end(), true) > 1 && turn_number < maxTurnNumber) {
		//Increment turn number:
		turn_number++;
		if(!program_output_style) std::cout << "Turn " << turn_number << "\n";
		//Frame logic.
		std::vector<bool> newResult = processNextFrame(result);
		//Add to vector of players that should be dead.
		for(unsigned char a = 0; a < number_of_players; a++) if(result[a] && !newResult[a]) {
			rankings.push_back(a);
		}
		result = newResult;
	}

	for(int a = 0; a < number_of_players; a++) if(result[a]) rankings.push_back(a);
	std::reverse(rankings.begin(), rankings.end());
	GameStatistics stats;
	int chunkSize = game_map.map_width * game_map.map_height / number_of_players;
	for(unsigned char a = 0; a < number_of_players; a++) {
		PlayerStatistics p;
		p.tag = a + 1;
		p.rank = std::distance(rankings.begin(), std::find(rankings.begin(), rankings.end(), a)) + 1;
		p.average_territory_count = full_territory_count[a] / double(chunkSize * alive_frame_count[a]);
		p.average_strength_count = full_strength_count[a] / double(chunkSize * alive_frame_count[a]);
		p.average_production_count = full_production_count[a] / double(chunkSize * (alive_frame_count[a] - 1)); //For this, we want turns rather than frames.
		p.average_response_time = total_response_time[a] / double(alive_frame_count[a]); //In milliseconds.
		p.still_percentage = full_still_count[a] / double(full_cardinal_count[a] + full_still_count[a]);
		stats.player_statistics.push_back(p);
	}
	stats.timeout_tags = timeout_tags;
	return stats;

}
void FrameGrabber<Camera>::
initialise()
{
  loadParams();

  frame_data.disp.create(frame_data.cam_vec[0].image_size(),
                         CV_32F);
#ifdef SCAVISLAM_CUDA_SUPPORT
  frame_data.gpu_disp_32f.create(frame_data.cam_vec[0].image_size(),
                                 CV_32F);
  for (int l=0; l<NUM_PYR_LEVELS; ++l)
  {
    frame_data.cur_left().gpu_pyr_float32[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.gpu_pyr_float32_dx[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.gpu_pyr_float32_dy[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.prev_left().gpu_pyr_float32[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.gpu_pyr_float32_dx[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.gpu_pyr_float32_dy[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
  }
  frame_data.right.gpu_pyr_float32[0]
      .create(frame_data.cam_vec[0].image_size(),  CV_32FC1);
#else
  frame_data.pyr_float32.resize(NUM_PYR_LEVELS);
  frame_data.pyr_float32_dx.resize(NUM_PYR_LEVELS);
  frame_data.pyr_float32_dy.resize(NUM_PYR_LEVELS);
  for (int l=0; l<NUM_PYR_LEVELS; ++l)
  {
    frame_data.pyr_float32[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.pyr_float32_dx[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
    frame_data.pyr_float32_dy[l]
        .create(frame_data.cam_vec[l].image_size(), CV_32FC1);
  }
#endif

  if (params_.livestream)
  {
#ifdef SCAVISLAM_PCL_SUPPORT
    grabber.initialize();
    boost::thread(boost::ref(grabber));
#else
    assert(false);
#endif
  }
  else
  {
    //preprocessFiles(params_.path_str,true);
    file_grabber_.initialize(params_.path_str,
                             params_.base_str,
                             params_.format_str,
                             frame_data.frame_id,
                             params_.color_img,
                             !params_.color_img,
                             params_.right_img,
                             params_.disp_img,
                             params_.right_img,
                             &file_grabber_mon_);


    if (params_.rectify_frame)
    {
      intializeRectifier();
    }
  }
#ifdef SCAVISLAM_CUDA_SUPPORT
  dx_filter_ =
      cv::gpu::createDerivFilter_GPU(frame_data.cur_left()
                                     .gpu_pyr_float32[0].type(),
                                     frame_data.gpu_pyr_float32_dx[0]
                                     .type(),
                                     1, 0, 1, cv::BORDER_REPLICATE);
  dy_filter_ =
      cv::gpu::createDerivFilter_GPU(frame_data.cur_left()
                                     .gpu_pyr_float32[0].type(),
                                     frame_data.gpu_pyr_float32_dy[0]
                                     .type(),
                                     0, 1, 1, cv::BORDER_REPLICATE);
#endif



  processNextFrame();
}