Advertisement
Guest User

бойй, после 330 строки тупа тест

a guest
Aug 17th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. #include <iterator>
  4. using namespace std;
  5.  
  6. class polk {
  7.     public:
  8.     polk (int spd, int max_orgg, int max_colwoo, double dmg_distt, double dmg_blizhh, char typee) {
  9.         speed = spd;
  10.         org = max_org = max_orgg;
  11.         colwo = max_colwo = max_colwoo;
  12.         dmg_dist = dmg_distt;
  13.         dmg_blizh = dmg_blizhh;
  14.         type = type;
  15.     }
  16.    
  17.     int get_dmg_dist() {
  18.         return dmg_dist*colwo*org;
  19.     }
  20.     int get_dmg_blizh() {
  21.         return dmg_blizh*colwo*org;
  22.     }
  23.     bool add_kills(int chisl) {
  24.         if (org > max_org/2) {
  25.             colwo -= chisl*0.25;
  26.             org -= chisl*0.75;
  27.         } else if (org > 0) {
  28.             colwo -= chisl*0.75;
  29.             org -= chisl*0.25;
  30.         } else {
  31.             colwo -= chisl;
  32.         }
  33.         if (colwo <0) colwo = 0;
  34.         if (org < 0) org = 0;
  35.         if (colwo == 0 || org == 0) return 0;
  36.         return 1;
  37.     }
  38.    
  39.     void regen_org(int chisl) {
  40.         org += chisl;
  41.         if(org > max_org) org = max_org;
  42.         return;
  43.     }
  44.     void regen_units(int chisl) {
  45.         colwo += chisl;
  46.         return;
  47.     }
  48.    
  49.     int needed_units () {
  50.         return max_colwo - colwo;
  51.     }
  52.     int get_speed () {
  53.         return speed;
  54.     }
  55.     int get_org () {
  56.         return org;
  57.     }
  58.     int get_max_org () {
  59.         return max_org;
  60.     }
  61.     int get_colwo () {
  62.         return colwo;
  63.     }
  64.     int get_max_colwo () {
  65.         return max_colwo;
  66.     }
  67.     double get_dist () {
  68.         return dmg_dist;
  69.     }
  70.     double get_blizh () {
  71.         return dmg_blizh;
  72.     }
  73.     int get_type () {
  74.         return type;
  75.     }
  76.     bool storona;
  77.     private:
  78.     char type;
  79.     int speed;
  80.     int max_org;
  81.     int org;
  82.     int max_colwo;
  83.     int colwo;
  84.     double dmg_dist;
  85.     double dmg_blizh;
  86. };
  87.  
  88. class leader {
  89.     public:
  90.     private:
  91. };
  92.  
  93. class army {
  94.     public:
  95.     army (polk* first_polk) {
  96.         speed = first_polk->get_speed();
  97.         colwo_arm = first_polk->get_colwo();
  98.         army_needed = first_polk->needed_units();
  99.         number_of_polks = 1;
  100.         all_polks.push_front(first_polk);
  101.     }
  102.     void merge_polks () {
  103.        
  104.     }
  105.     void add_polk (polk* new_polk) {
  106.         if (new_polk->get_blizh() > new_polk->get_dist()) {
  107.             all_polks.push_front(new_polk);
  108.         } else {
  109.             all_polks.push_back(new_polk);
  110.         }
  111.         number_of_polks++;
  112.         colwo_arm += new_polk->get_colwo();
  113.         army_needed += new_polk->needed_units();
  114.         if (speed > new_polk->get_speed()) speed = new_polk->get_speed();
  115.     }
  116.     list <polk*> get_polks () {
  117.         return all_polks;
  118.     }
  119.     private:
  120.     leader* general;
  121.     list <polk*> all_polks;
  122.     int speed;
  123.     int colwo_arm;
  124.     int number_of_polks;
  125.     int army_needed;
  126. };
  127.  
  128. class battle {
  129.     public:
  130.     battle (int heightt, int widthh, army* army1, army* army2) {
  131.    
  132.         height = heightt;
  133.         width = widthh;
  134.         field = new polk**[height];
  135.         for(int i = 0; i < height; i++) {
  136.             field[i] = new polk*[width];
  137.             for(int j = 0; j < width; j++) {
  138.                 field[i][j] = NULL;
  139.             }
  140.         }
  141.         field_dmg = new int*[height];
  142.         for(int i = 0; i < height; i++) {
  143.             field_dmg[i] = new int[width];
  144.             for(int j = 0; j < width; j++) {
  145.                 field_dmg[i][j] = 0;
  146.             }
  147.         }
  148.             cout << "sasa";
  149.         copy((army1->get_polks()).begin(), (army1->get_polks()).end(), inserter(reserve_a1, reserve_a1.end()));
  150.             cout << "sasa";
  151.         copy((army2->get_polks()).begin(), (army2->get_polks()).end(), inserter(reserve_a2, reserve_a2.end()));
  152.             cout << "sasa";
  153.         it_a1 = reserve_a1.begin();
  154.         it_a2 = reserve_a2.begin();
  155.         have_ended = false;
  156.     }
  157.     ~battle () {
  158.         for(int i = 0; i < height; i++) {
  159.             delete[] field[i];
  160.         }
  161.         delete[] field;
  162.         for(int i = 0; i < height; i++) {
  163.             delete[] field_dmg[i];
  164.         }
  165.         delete[] field_dmg;
  166.     }
  167.     void end_battle (bool win_storona) {
  168.         std::cout << "ASASSSSSAASSASAASSA " << win_storona << " AAAA";
  169.         have_ended = true;
  170.     }
  171.     void test_to_flank () {
  172.         for (int j = 0; j < width; j++) {
  173.             if (field[0][j]) {
  174.                 if (!(field[0][j]->storona)) {
  175.                     end_battle (false);
  176.                 }
  177.             }
  178.             if (field[0][j]) {
  179.                 if (field[height-1][j]->storona) {
  180.                     end_battle (true);
  181.                 }
  182.             }
  183.         }
  184.     }
  185.     void add_daln_dmg_local (int dmg, int j, bool storona) {
  186.         if (storona)
  187.             for (int i = 1; i < height; i++) {
  188.                 if (field[i][j]) {
  189.                     if (!(field[i][j]->storona)) {
  190.                         field_dmg[i][j] += dmg;
  191.                         break;
  192.                     }
  193.                 }
  194.             }
  195.         else
  196.             for (int i = height - 2; i > 0; i--) {
  197.                 if (field[i][j]) {
  198.                     if (field[i][j]->storona) {
  199.                         field_dmg[i][j] += dmg;
  200.                         break;
  201.                     }
  202.                 }
  203.             }
  204.     }
  205.     void move_and_add_blizh_dmg () {
  206.         for (int j = 0; j < width; j++) {
  207.             for (int i = 1; i < height - 1; i++) {
  208.                 if (field[i][j] != NULL) {
  209.                     if ((field[i][j]->storona) && (field[i+1][j] == NULL)) {
  210.                         swap(field[i][j], field[i+1][j]);
  211.                     } else if ((field[i][j]->storona) && (!(field[i+1][j]->storona))) {
  212.                         field_dmg[i+1][j] += (field[i][j]->get_dmg_blizh());
  213.                     }
  214.                 }
  215.             }
  216.             for (int i = height - 2; i > 0; i--) {
  217.                 if (field[i][j] != NULL) {
  218.                     if ((!(field[i][j]->storona)) && (field[i-1][j] == NULL)) {
  219.                         swap(field[i][j], field[i-1][j]);
  220.                     } else if ((!(field[i][j]->storona)) && (field[i-1][j]->storona)) {
  221.                         field_dmg[i-1][j] += (field[i][j]->get_dmg_blizh());
  222.                     }
  223.                 }
  224.             }
  225.         }
  226.     }
  227.     void razmescheniye_voysk () {
  228.         for (int i = 0; (i < width) && (reserve_a1.end() != it_a1); i++) {
  229.             if(field[1][i] == NULL)
  230.                  for (;(reserve_a1.end() != it_a1);it_a1++)
  231.                     if((*it_a1)->get_blizh() > (*it_a1)->get_dist()) {
  232.                         (*it_a1)->storona = true;
  233.                         field[1][i] = (*it_a1);
  234.                         reserve_a1.erase(it_a1);
  235.                         it_a1 = reserve_a1.begin();
  236.                         break;
  237.                     }
  238.             if(field[0][i] == NULL)
  239.                  for (;(reserve_a1.end() != it_a1);it_a1++)
  240.                     if((*it_a1)->get_blizh() < (*it_a1)->get_dist()) {
  241.                         (*it_a1)->storona = true;
  242.                         field[0][i] = (*it_a1);
  243.                         reserve_a1.erase(it_a1);
  244.                         it_a1 = reserve_a1.begin();
  245.                         break;
  246.                     }
  247.         }
  248.         for (int i = 0; (i < width) && (reserve_a2.end() != it_a2); i++) {
  249.             if(field[height - 2][i] == NULL)
  250.                  for (; (reserve_a2.end() != it_a2); it_a2++)
  251.                     if((*it_a2)->get_blizh() > (*it_a2)->get_dist()) {
  252.                         (*it_a2)->storona = false;
  253.                         field[height - 2][i] = (*it_a2);
  254.                         reserve_a2.erase(it_a2);
  255.                         it_a2 = reserve_a2.begin();
  256.                         break;
  257.                     }
  258.             if(field[height - 1][i] == NULL)
  259.                  for (;(reserve_a2.end() != it_a2); it_a2++)
  260.                     if((*it_a2)->get_blizh() < (*it_a2)->get_dist()) {
  261.                         (*it_a2)->storona = false;
  262.                         field[height - 1][i] = (*it_a2);
  263.                         reserve_a2.erase(it_a2);
  264.                         it_a2 = reserve_a2.begin();
  265.                         break;
  266.                     }
  267.         }
  268.     }
  269.     void add_daln_dmg () {
  270.         for (int j = 0; j < width; j++) {
  271.             if (field[0][j]) {
  272.                 add_daln_dmg_local ((field[0][j]->get_dmg_dist()), j, true);
  273.             }
  274.             if (field[height-1][j]) {
  275.                 add_daln_dmg_local ((field[height - 1][j]->get_dmg_dist()), j, false);
  276.             }
  277.         }
  278.     }
  279.     void add_all_dmg_from_matrix () {
  280.         for (int i = 0; i < height; i++) {
  281.             for (int j = 0; j < width; j++) {
  282.                 if(field[i][j])
  283.                     if(!(field[i][j]->add_kills(field_dmg[i][j]))) field[i][j] = NULL;
  284.                 field_dmg = 0;
  285.             }
  286.         }
  287.     }
  288.     void test_to_end () {
  289.         bool a_zasch = true, a_atak = true;
  290.         for (int i = 0; i < height; i++) {
  291.             for (int j = 0; j < width; j++) {
  292.                 if (field[i][j]) {
  293.                     if (field[i][j]->storona) a_zasch = false;
  294.                     else a_atak = false;
  295.                 }
  296.             }
  297.         }
  298.         if (a_atak) {
  299.             end_battle (true);
  300.         }
  301.         if (a_zasch) {
  302.             end_battle (false);
  303.         }
  304.     }
  305.     void tick () {
  306.         razmescheniye_voysk();
  307.         move_and_add_blizh_dmg();
  308.         test_to_flank();
  309.         add_daln_dmg();
  310.         add_all_dmg_from_matrix();
  311.         test_to_end();
  312.     }
  313.     void add_to_battle (army* army_new) {
  314.        
  315.     }
  316.     polk*** get_field () {
  317.         return field;
  318.     }
  319.     bool have_ended;
  320.     private:
  321.     list <polk*> reserve_a1;
  322.     list <polk*> reserve_a2;
  323.     list <polk*> :: iterator it_a1;
  324.     list <polk*> :: iterator it_a2;
  325.     leader* leader_a1;
  326.     leader* leader_a2;
  327.     polk*** field;
  328.     int** field_dmg;
  329.     int width;
  330.     int height;
  331. };
  332.  
  333. void temp_create_army(army* kek) {
  334.     polk* asssas = new polk(7, 1000, 1000, 0.2, 0.1, 'i');
  335.     army* ass = new army(asssas);
  336.     for(int i = 0; i < 10; i++) {
  337.         asssas = new polk(7, 1000, 1000, 0.2, 0.1, 'i');
  338.         ass->add_polk(asssas);
  339.     }
  340.     kek = ass;
  341. }
  342.  
  343. int main() {
  344.     //testing of battles
  345.     army* army1;
  346.     army* army2;
  347.     temp_create_army(army1);
  348.     temp_create_army(army2);
  349.     battle ass_god(4, 20, army1, army2);
  350.     polk*** fie_ld;
  351.     int chisl;
  352.     int orga;
  353.     for (;;) {
  354.         ass_god.tick();
  355.         fie_ld = ass_god.get_field();
  356.         for (int i = 0; i < 4; i++) {
  357.             for (int j = 0; j < 20; j++) {
  358.                 if (fie_ld[i][j])
  359.                     std::cout << 'i';
  360.                 else
  361.                     std::cout << 'o';
  362.             }
  363.             std::cout << endl;
  364.         }
  365.         for (int i = 0; i < 4; i++) {
  366.             for (int j = 0; j < 20; j++) {
  367.                 if (fie_ld[i][j]) {
  368.                     chisl = fie_ld[i][j]->get_colwo();
  369.                     orga = fie_ld[i][j]->get_org();
  370.                     std::cout << "Org: " << orga << " Chisl: " << chisl << " j: " << j;
  371.                     std::cout << endl;
  372.                 }
  373.             }
  374.             std::cout << endl;
  375.         }
  376.         cin >> orga;
  377.         if(orga) break;
  378.     }
  379. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement