Guest User

Untitled

a guest
Jan 9th, 2014
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Simulation water
  3.  * main()
  4.  * |
  5.  * |--Room
  6.  * |    |
  7.  * |    |--setRoom()
  8.  * |
  9.  * |--Water
  10.  * |    |
  11.  * |    |--setWater()
  12.  * |    |
  13.  * |    |--getWater()
  14.  * |    |
  15.  * |    |--physix()--getWater()
  16.  * |
  17.  * |--Display
  18.  * |    |
  19.  * |    |--menu()
  20.  * |    |
  21.  * |    |--menu_3()--error()
  22.  * |    |
  23.  * |    |--menu_4()--error()
  24.  * |    |
  25.  * |    |--error()
  26.  * |    |
  27.  * |    |--debug()
  28.  * |
  29.  *
  30. **/
  31.  
  32. #include <iostream>
  33. #include <vector>
  34. #include <stdlib.h>
  35. #include <windows.h>
  36. #include <conio.h>
  37.  
  38. using namespace std;
  39. vector< vector<int> > water;    //используется в: Water.
  40. int room_size = 10;             //используется в: Water, Room;
  41. bool debug_water = false;
  42. bool debug_room = false;
  43.  
  44. class Room {
  45. private:
  46.    
  47. public:
  48.     void setRoom() {
  49.         star: ;
  50.         system("cls");
  51.         cout << "\n   set room size         >> ";   cin >> room_size;
  52.         cout << endl;
  53.         if (room_size > 20) {
  54.             cout << "ERROR, parameter is very big. Please, set 1-20 room size \n";
  55.             goto star;
  56.         }
  57.         else if (room_size <= 0) {
  58.             cout << "ERROR, parameter < 0. Please, set 1-20 room size \n";
  59.             goto star;
  60.         }
  61.         debug_room = true; 
  62.     }
  63.        
  64. };
  65.  
  66. class Water {
  67. private:
  68.     vector<int> water_x;
  69.     int water_level = 0;
  70. public:
  71.     void setWater() {
  72.         system("cls");
  73.         star: ;
  74.        
  75.         cout << "\n   default water level in room   >> ";   cin >> water_level;
  76.         cout << endl;
  77.         if (water_level > 7) {
  78.             cout << "\n   ERROR, parameter is very big. Please, set 0-7 water level \n";
  79.             goto star;
  80.         }
  81.         else if (water_level < 0) {
  82.             cout << "\n   ERROR, parameter < 0. Please, set 0-7 water level \n";
  83.             goto star;
  84.         }
  85.         water_x.clear();
  86.         water.clear();
  87.         for (;water.size() < room_size; water.push_back(water_x))
  88.             for (;water_x.size() < room_size; water_x.push_back(water_level)) ;
  89.        
  90.         debug_water = true;
  91.     }
  92.    
  93.     void getWater() {
  94.         star: ;
  95.         system("cls");
  96.        
  97.         cout << "  ";
  98.         for (int x = 0; x < room_size+1; x++) {
  99.             cout << "##";
  100.         }
  101.         cout << "#";
  102.         for (int x = 0; x < room_size; x++) {
  103.             cout << "\n  # ";
  104.             for (int y = 0; y < room_size; y++) {
  105.                 cout << water[x][y] << " ";
  106.             }
  107.             cout << "#";
  108.         }
  109.         cout << "\n  ";
  110.         for (int x = 0; x < room_size+1; x++) {
  111.             cout << "##";
  112.         }
  113.         cout << "#\n";
  114.        
  115.     }
  116.    
  117.     void physix() {
  118.         const int qX1[8] = {1, -1, 1, 0, -1, 1, 0, -1};
  119.         const int qY1[8] = {0, 0, 1, -1, 1, -1, 1, -1};
  120.         int qX;
  121.         int qY;
  122.         vector<int> free_block;
  123.         int block;
  124.         bool physix_debug; //debug
  125.         for (int x = 0; x < room_size; x++) {
  126.             for (int y = 0; y < room_size; y++) {
  127.                 free_block.clear();
  128.                 physix_debug = false; //debug
  129.                 for (int k = 0; k < 9; k++) {
  130.                     qX = qX1[k] + x;
  131.                     qY = qY1[k] + y;
  132.                     if (water[x][y] != 1)
  133.                         if (qX >= 0 && qY >= 0)
  134.                             if (qX < room_size && qY < room_size)
  135.                                 if (water[qX][qY] < water[x][y] && water[x][y] != 0) { 
  136.                                     free_block.push_back(k);
  137.                                     physix_debug = true; //debug
  138.                                 }
  139.                 }
  140.                
  141.                 if (physix_debug == true) {
  142.                     block = rand() % free_block.size();
  143.                     qX = x+qX1[free_block[block]];
  144.                     qY = y+qY1[free_block[block]];
  145.                    
  146.                     water[x][y] -= 1;
  147.                     water[qX][qY]   += 1;
  148.                 }              
  149.             }
  150.         Water::getWater();
  151.         Sleep(10);
  152.         }
  153.     }  
  154. };
  155.  
  156. class Display {
  157. private:
  158. public:
  159.     void menu() {
  160.         system("cls");
  161.         cout << "\n  ####################################\n"
  162.              << "  ###################################\n"
  163.              << "  ##                              ##\n"
  164.              << "  ##       1 - new room           ##\n"
  165.              << "  ##       2 - start              ##\n"
  166.              << "  ##       3 - add block          ##\n"
  167.              << "  ##       4 - del block          ##\n"
  168.              << "  ##       5 - info               ##\n"
  169.              << "  ##       0 - quit               ##\n"
  170.              << "  ##                              ##\n"
  171.              << " ##################################\n"
  172.              << "##################################\n";
  173.         cout << "\n\n\n\n"
  174.              << "Command    >> ";  
  175.     }
  176.    
  177.     void menu_3() {
  178.         int x = 0;
  179.         int y = 0;
  180.         //int type;
  181.         star: ;
  182.         system("cls");
  183.         cout << "\n  ####################################\n"
  184.              << "  ###################################\n"
  185.              << "  ##                              ##\n"
  186.              << "  ##        ADD  BLOCK            ##\n"
  187.              << "  ##                              ##\n"
  188.              << " ##################################\n"
  189.              << "##################################\n";
  190.         cout << "## room size = " << room_size << "x" << room_size << endl << endl;
  191.         cout << "set coordinates X >> ";        cin >> x;
  192.         if (x > room_size || x < 1) {
  193.             error("ucorrect size");
  194.             getch();
  195.             goto star; 
  196.         }
  197.         cout << "\n"
  198.              << "set coordinates Y >> ";        cin >> y;
  199.         if (y > room_size || y < 1) {
  200.             error("ucorrect size");
  201.             getch();
  202.             goto star; 
  203.         }
  204.         x -= 1;
  205.         y -= 1;
  206.         water[x][y] = 7;
  207.     }
  208.    
  209.     void menu_4() {
  210.         int x = 0;
  211.         int y = 0;
  212.         //int type;
  213.         star: ;
  214.         system("cls");
  215.         cout << "\n  ####################################\n"
  216.              << "  ###################################\n"
  217.              << "  ##                              ##\n"
  218.              << "  ##        DELETE BLOCK          ##\n"
  219.              << "  ##                              ##\n"
  220.              << " ##################################\n"
  221.              << "##################################\n";
  222.         cout << "## room size = " << room_size << "x" << room_size << endl << endl;
  223.         cout << "set coordinates X >> ";        cin >> x;
  224.         if (x > room_size || x < 1) {
  225.             error("ucorrect size");
  226.             getch();
  227.             goto star; 
  228.         }
  229.         cout << "\n"
  230.              << "set coordinates Y >> ";        cin >> y;
  231.         if (y > room_size || y < 1) {
  232.             error("ucorrect size");
  233.             getch();
  234.             goto star; 
  235.         }
  236.         x -= 1;
  237.         y -= 1;
  238.         water[x][y] = 0;
  239.     }
  240.    
  241.     void error(string s) {
  242.         system("cls");
  243.         cout << "\n  ####################################\n"
  244.              << "  ###################################\n"
  245.              << "  ##                              ##\n"
  246.              << "  ##       ERROR ERROR            ##\n"
  247.              << "  ##                              ##\n"
  248.              << " ##################################\n"
  249.              << "##################################\n";
  250.         cout << "# " << s << " #\n";
  251.     }
  252.    
  253.     bool debug() {
  254.         if (debug_water == false || debug_room == false) {
  255.             error("ERROR! please, set parameters. Menu > 1 - new room.");
  256.             return false;  
  257.         }
  258.         return true;
  259.     }
  260. };
  261.  
  262. int main() {
  263.     Water objWater;
  264.     Room objRoom;
  265.     Display objDisplay;
  266.    
  267.     int command;
  268.    
  269.     star: ;
  270.     objDisplay.menu();
  271.     cin >> command;
  272.     switch (command) {
  273.         case 1:
  274.             objRoom.setRoom();
  275.             objWater.setWater();
  276.             objWater.getWater();
  277.             cout << "   Please, press button \n";
  278.             getch();
  279.             goto star;
  280.         case 2:
  281.             if (objDisplay.debug() == false) { getch(); goto star; }
  282.             for (int x = 0; x < 10; x++)
  283.                 objWater.physix();
  284.             objWater.getWater();
  285.             cout << "   Please, press button \n";
  286.             getch();
  287.             goto star;
  288.         case 3:
  289.             if (objDisplay.debug() == false) { getch(); goto star; }
  290.             objDisplay.menu_3();
  291.             objWater.getWater();
  292.             cout << "   Please, press button \n";
  293.             getch();
  294.             goto star;
  295.         case 4:
  296.             if (objDisplay.debug() == false) { getch(); goto star; }
  297.             objDisplay.menu_4();
  298.             objWater.getWater();
  299.             cout << "   Please, press button \n";
  300.             getch();
  301.             goto star;
  302.         case 5:
  303.             if (objDisplay.debug() == false) { getch(); goto star; }
  304.             objWater.getWater();
  305.             cout << "   Please, press button \n";
  306.             getch();
  307.             goto star;
  308.         case 0:
  309.             break;
  310.         default:
  311.             objDisplay.error("ucorrect command");
  312.             getch();
  313.             goto star;
  314.     }
  315. }
Advertisement
Add Comment
Please, Sign In to add comment