//--------- Begin of function FirmCamp::next_day ---------// // void FirmCamp::next_day() { //----- call next_day() of the base class -----// Firm::next_day(); //----- update the patrol_unit_array -----// validate_patrol_unit(); validate_soldier(); //------- update loyalty --------// if( info.game_date%30 == firm_recno%30 ) update_loyalty(); //-------- consume food --------// if( soldier_count>0 ) consume_food(); // ------- process train ---------// if( config.fast_build && is_own() ) { for( int i=0 ; i<100 ; i++ ) basic_train(); } else basic_train(); //--------------------------------------// if( info.game_date%30 == firm_recno%30 ) // once a week { advanced_train(); } if( info.game_date%8 == firm_recno%8 ) { recover_hit_point(); } // ------ process item --------// Soldier* soldierPtr = soldier_array; for( int i=0 ; i<soldier_count ; i++, soldierPtr++ ) { soldierPtr->item.next_day(); } //----------- debugging code -----------// err_when( overseer_recno && unit_array[overseer_recno]->skill_level()==0 ); err_when( overseer_recno && unit_array[overseer_recno]->nation_recno != nation_recno ); }
int player_food_consumption(t_server *server) { int i; i = -1; while (++i < server->client_pool_size) { if (server->clients[i].socket != 0 && server->clients[i].type == DRONE) consume_food(server, &server->clients[i]); } return (RETURN_SUCCESS); }
int main() { // initialise const unsigned int kGridSize = 25; const unsigned int kPopulationMax = 30; const unsigned int kFoodMax = 50; const unsigned int kReproduceEnergy = 120; const unsigned int kCellStartEnergy = 100; const unsigned int kMaxFoodEnergy = 100; Dish petri(kGridSize); unsigned int total_population = 15; unsigned int total_food = 30; std::vector<Cell> population; for (unsigned int i = 0; i < total_population; i++) { population.push_back(Cell(kGridSize, kCellStartEnergy)); } std::list<Food> supply; for (unsigned int i = 0; i < total_food; i++) { supply.push_back(Food(kGridSize, kMaxFoodEnergy)); } bool exit = false; unsigned int w = 1; while (w < 50) { /* // Process step */ for (auto cell = population.begin(); cell != population.end(); ++cell) { if (cell->alive() == true) { // move cell->move(kGridSize); for (auto food = supply.begin(); food != supply.end(); ++food) { if (cell->location() == food->location()) { total_food = supply.size(); cell->consume_food(*food); food = supply.erase(food); } } for (auto target = population.begin(); target != population.end(); ++target) { switch (can_consume_cell(*cell, *target)) { case false: continue; case true: target = population.erase(target); break; default: break; } } // reproduce if ((total_population < kPopulationMax) && (cell->reproduce())) { population.push_back(Cell(kGridSize, cell->energy() / 2)); cell->set_energy(cell->energy() / 2); total_population = population.size(); } // death if (cell->energy() <= 0) { cell->set_alive(false); } } } if (total_food < kFoodMax) { supply.push_back(Food(kGridSize, kMaxFoodEnergy)); total_food = supply.size(); } /* // Input step */ // poll user input /* // Display step */ // display grid // TODO: Optimise this horrible loop for (unsigned int i = 0; i < kGridSize; i++) { for (unsigned int j = 0; j < kGridSize; j++) { bool occupied = false; position display_location; display_location.x = i; display_location.y = j; for (Cell cell : population) { if (cell.location() == display_location) { if (cell.alive() == true) { std::cout << cell.energy(); } else { std::cout << "-"; } occupied = true; } } for (Food food : supply) { if (food.location() == display_location) { std::cout << "."; occupied = true; } } if (occupied == false) { std::cout << " "; } else { occupied = false; } } std::cout << "\n"; } for (unsigned int i = 0; i < kGridSize; i++) { std::cout << "="; } std::cout << "\n" << total_population; std::cout.flush(); Sleep(1500); w++; } population.clear(); supply.clear(); return 0; }