Advertisement
Guest User

Untitled

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