Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Simulation water
- * main()
- * |
- * |--Room
- * | |
- * | |--setRoom()
- * |
- * |--Water
- * | |
- * | |--setWater()
- * | |
- * | |--getWater()
- * | |
- * | |--physix()--------|
- * | | |--physix_if()
- * | |--physix_if() |
- * | | |--getWater()
- * | |
- * |
- * |--Display
- * | |
- * | |--menu()
- * | |
- * | |--menu_3()--error()
- * | |
- * | |--menu_4()--error()
- * | |
- * | |--error()
- * | |
- * | |--debug()
- * |
- *
- **/
- #include <iostream>
- #include <vector>
- #include <stdlib.h>
- #include <windows.h>
- #include <conio.h>
- using namespace std;
- vector< vector<int> > water; //иÑпользуетÑÑ Ð²: Water.
- int room_size = 10; //иÑпользуетÑÑ Ð²: Water, Room;
- bool debug_water = false;
- bool debug_room = false;
- class Room {
- private:
- public:
- void setRoom() {
- star: ;
- system("cls");
- cout << "\n set room size >> "; cin >> room_size;
- cout << endl;
- if (room_size > 20) {
- cout << "ERROR, parameter is very big. Please, set 1-20 room size \n";
- goto star;
- }
- else if (room_size <= 0) {
- cout << "ERROR, parameter < 0. Please, set 1-20 room size \n";
- goto star;
- }
- debug_room = true;
- }
- };
- class Water {
- private:
- vector<int> water_x;
- int water_level = 0;
- public:
- void setWater() {
- system("cls");
- star: ;
- cout << "\n default water level in room >> "; cin >> water_level;
- cout << endl;
- if (water_level > 7) {
- cout << "\n ERROR, parameter is very big. Please, set 0-7 water level \n";
- goto star;
- }
- else if (water_level < 0) {
- cout << "\n ERROR, parameter < 0. Please, set 0-7 water level \n";
- goto star;
- }
- water_x.clear();
- water.clear();
- for (;water.size() < room_size; water.push_back(water_x))
- for (;water_x.size() < room_size; water_x.push_back(water_level)) ;
- debug_water = true;
- }
- void getWater() {
- star: ;
- system("cls");
- cout << " ";
- for (int x = 0; x < room_size+1; x++) {
- cout << "##";
- }
- cout << "#";
- for (int x = 0; x < room_size; x++) {
- cout << "\n # ";
- for (int y = 0; y < room_size; y++) {
- cout << water[x][y] << " ";
- }
- cout << "#";
- }
- cout << "\n ";
- for (int x = 0; x < room_size+1; x++) {
- cout << "##";
- }
- cout << "#\n";
- }
- void physix() {
- const int qX1[8] = {1, -1, 1, 0, -1, 1, 0, -1};
- const int qY1[8] = {0, 0, 1, -1, 1, -1, 1, -1};
- int qX;
- int qY;
- vector<int> free_block;
- int block;
- bool physix_debug; //debug
- for (int x = 0; x < room_size; x++) {
- for (int y = 0; y < room_size; y++) {
- free_block.clear();
- physix_debug = false; //debug
- for (int k = 0; k < 9; k++) {
- qX = qX1[k] + x;
- qY = qY1[k] + y;
- if (water[x][y] > 1)
- if (physix_if(qX, qY, room_size) && water[qX][qY] < water[x][y]) {
- free_block.push_back(k);
- physix_debug = true; //debug
- }
- /*if (qX >= 0 && qY >= 0)
- if (qX < room_size && qY < room_size)
- if (water[qX][qY] < water[x][y]) {
- free_block.push_back(k);
- physix_debug = true; //debug
- } */
- }
- if (physix_debug == true) {
- block = rand() % free_block.size();
- qX = x+qX1[free_block[block]];
- qY = y+qY1[free_block[block]];
- water[x][y] -= 1;
- water[qX][qY] += 1;
- }
- }
- Water::getWater();
- Sleep(10);
- }
- }
- bool physix_if(int x, int y, int room) {
- if (x < 0) return false;
- if (y < 0) return false;
- if (x >= room) return false;
- if (y >= room) return false;
- return true;
- }
- };
- class Display {
- private:
- public:
- void menu() {
- system("cls");
- cout << "\n ####################################\n"
- << " ###################################\n"
- << " ## ##\n"
- << " ## 1 - new room ##\n"
- << " ## 2 - start ##\n"
- << " ## 3 - add block ##\n"
- << " ## 4 - del block ##\n"
- << " ## 5 - info ##\n"
- << " ## 0 - quit ##\n"
- << " ## ##\n"
- << " ##################################\n"
- << "##################################\n";
- cout << "\n\n\n\n"
- << "Command >> ";
- }
- void menu_3() {
- int x = 0;
- int y = 0;
- //int type;
- star: ;
- system("cls");
- cout << "\n ####################################\n"
- << " ###################################\n"
- << " ## ##\n"
- << " ## ADD BLOCK ##\n"
- << " ## ##\n"
- << " ##################################\n"
- << "##################################\n";
- cout << "## room size = " << room_size << "x" << room_size << endl << endl;
- cout << "set coordinates X >> "; cin >> x;
- if (x > room_size || x < 1) {
- error("ucorrect size");
- getch();
- goto star;
- }
- cout << "\n"
- << "set coordinates Y >> "; cin >> y;
- if (y > room_size || y < 1) {
- error("ucorrect size");
- getch();
- goto star;
- }
- x -= 1;
- y -= 1;
- water[x][y] = 7;
- }
- void menu_4() {
- int x = 0;
- int y = 0;
- //int type;
- star: ;
- system("cls");
- cout << "\n ####################################\n"
- << " ###################################\n"
- << " ## ##\n"
- << " ## DELETE BLOCK ##\n"
- << " ## ##\n"
- << " ##################################\n"
- << "##################################\n";
- cout << "## room size = " << room_size << "x" << room_size << endl << endl;
- cout << "set coordinates X >> "; cin >> x;
- if (x > room_size || x < 1) {
- error("ucorrect size");
- getch();
- goto star;
- }
- cout << "\n"
- << "set coordinates Y >> "; cin >> y;
- if (y > room_size || y < 1) {
- error("ucorrect size");
- getch();
- goto star;
- }
- x -= 1;
- y -= 1;
- water[x][y] = 0;
- }
- void error(string s) {
- system("cls");
- cout << "\n ####################################\n"
- << " ###################################\n"
- << " ## ##\n"
- << " ## ERROR ERROR ##\n"
- << " ## ##\n"
- << " ##################################\n"
- << "##################################\n";
- cout << "# " << s << " #\n";
- }
- bool debug() {
- if (debug_water == false || debug_room == false) {
- error("ERROR! please, set parameters. Menu > 1 - new room.");
- return false;
- }
- return true;
- }
- };
- int main() {
- Water objWater;
- Room objRoom;
- Display objDisplay;
- int command;
- star: ;
- objDisplay.menu();
- cin >> command;
- switch (command) {
- case 1:
- objRoom.setRoom();
- objWater.setWater();
- objWater.getWater();
- cout << " Please, press button \n";
- getch();
- goto star;
- case 2:
- if (objDisplay.debug() == false) { getch(); goto star; }
- for (int x = 0; x < 10; x++)
- objWater.physix();
- objWater.getWater();
- cout << " Please, press button \n";
- getch();
- goto star;
- case 3:
- if (objDisplay.debug() == false) { getch(); goto star; }
- objDisplay.menu_3();
- objWater.getWater();
- cout << " Please, press button \n";
- getch();
- goto star;
- case 4:
- if (objDisplay.debug() == false) { getch(); goto star; }
- objDisplay.menu_4();
- objWater.getWater();
- cout << " Please, press button \n";
- getch();
- goto star;
- case 5:
- if (objDisplay.debug() == false) { getch(); goto star; }
- objWater.getWater();
- cout << " Please, press button \n";
- getch();
- goto star;
- case 0:
- break;
- default:
- objDisplay.error("ucorrect command");
- getch();
- goto star;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement