Advertisement
Andrey_ZoZ

Tetris_Project

May 22nd, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 78.48 KB | None | 0 0
  1. #include <ctime>
  2. #include<iostream>
  3. #include"windows.h"
  4. #include <chrono>
  5. #include <thread>
  6. #include <conio.h>
  7. using namespace std;
  8. const int minX{ 1 };
  9. const int minY{ 1 };
  10. int maxX{ 30 };
  11. int maxY{ 24 };
  12. const char* CSI{ "\033[" };
  13. const char* hideCursor{ "?25l" };
  14. const char* clearScreen{ "2J" };
  15. const int kbDeltaY{ 1 };
  16. void gotoxy(int xpos, int ypos)
  17. {
  18.     COORD scrn;
  19.     HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
  20.     scrn.X = xpos; scrn.Y = ypos;
  21.     SetConsoleCursorPosition(hOuput, scrn);
  22. }
  23. void menu()
  24. {
  25.     cout << CSI << clearScreen;
  26.     gotoxy(50, 0);
  27.     cout << "MENU" << "\n";
  28.     cout << "1) Start game \n2) Start game for 2 players\n3) Change maxX\n4) Change maxY\n5) Exit\nChoose:";
  29. }
  30. void printPole(int minX, int minY, int minX2 = 0, int minY2 = 0, bool check = false)
  31. {
  32.     for (int i = minX - 1; i <= maxX; i++)
  33.     {
  34.         gotoxy(i, minY - 1);
  35.         cout << "=";
  36.         gotoxy(i, maxY);
  37.         cout << "=";
  38.     }
  39.     for (int i = minY - 1; i <= maxY; i++)
  40.     {
  41.         gotoxy(minX - 1, i);
  42.         cout << "|";
  43.         gotoxy(maxX, i);
  44.         cout << "|";
  45.  
  46.     }
  47.     if (check == true)
  48.     {
  49.         for (int i = minX2 - 1; i <= maxX + minX2; i++)
  50.         {
  51.             gotoxy(i, minY2 - 1);
  52.             cout << "=";
  53.             gotoxy(i, maxY);
  54.             cout << "=";
  55.         }
  56.         for (int i = minY2 - 1; i <= maxY; i++)
  57.         {
  58.             gotoxy(minX2 - 1, i);
  59.             cout << "|";
  60.             gotoxy(maxX + minX2, i);
  61.             cout << "|";
  62.         }
  63.     }
  64. }
  65. void clearPole()
  66. {
  67.     for (int i = 0; i < 1000; i++)
  68.     {
  69.         for (int j = 0; j < 100; j++)
  70.         {
  71.             gotoxy(j, i);
  72.             cout << " ";
  73.         }
  74.     }
  75. }
  76. struct Prints
  77. {
  78.     void Block1(int lenghtBlock, int startPositionX, int startPositionY)
  79.     {
  80.         for (int i = 0; i < lenghtBlock; i++)
  81.         {
  82.             gotoxy(startPositionX, startPositionY + i);
  83.             cout << "|";
  84.         }
  85.     }
  86.     void Block3(int lenghtBlock, int startPositionX, int startPositionY, int startPositionX2, int startPositionY2)
  87.     {
  88.         for (int i = 0; i < lenghtBlock; i++)
  89.         {
  90.             gotoxy(startPositionX + i, startPositionY);
  91.             cout << "-";
  92.         }
  93.         for (int i = 0; i < lenghtBlock; i++)
  94.         {
  95.             gotoxy(startPositionX2 + i, startPositionY2);
  96.             cout << "-";
  97.         }
  98.     }
  99.     void Block4(int lenghtBlock, int startPositionX, int startPositionY, int startPositionX2, int startPositionY2)
  100.     {
  101.         for (int i = 0; i < lenghtBlock; i++)
  102.         {
  103.             gotoxy(startPositionX, startPositionY + i);
  104.             cout << "|";
  105.             gotoxy(startPositionX2, startPositionY2 + i);
  106.             cout << "|";
  107.         }
  108.     }
  109. };
  110. struct Clears
  111. {
  112.  
  113.     void Block1(int lenghtBlock, int startPositionX, int startPositionY)
  114.     {
  115.         for (int i = 0; i < lenghtBlock; i++)
  116.         {
  117.             gotoxy(startPositionX, startPositionY + i);
  118.             cout << " ";
  119.         }
  120.     }
  121.  
  122.     void Block3(int lenghtBlock, int startPositionX, int startPositionY, int startPositionX2, int startPositionY2)
  123.     {
  124.         for (int i = 0; i < lenghtBlock; i++)
  125.         {
  126.             gotoxy(startPositionX + i, startPositionY);
  127.             cout << " ";
  128.         }
  129.         for (int i = 0; i < lenghtBlock; i++)
  130.         {
  131.             gotoxy(startPositionX2 + i, startPositionY2);
  132.             cout << " ";
  133.         }
  134.     }
  135.  
  136.     void Block4(int lenghtBlock, int startPositionX, int startPositionY, int startPositionX2, int startPositionY2)
  137.     {
  138.         for (int i = 0; i < lenghtBlock; i++)
  139.         {
  140.             gotoxy(startPositionX, startPositionY + i);
  141.             cout << " ";
  142.             gotoxy(startPositionX2, startPositionY2 + i);
  143.             cout << " ";
  144.         }
  145.     }
  146. };
  147. void tetris()
  148. {
  149.     Prints print;
  150.     Clears clear;
  151.     cout << CSI << hideCursor;
  152.     clearPole();
  153.     srand(time(NULL));
  154.     int startPositionX = minX + 5;
  155.     int startPositionY = 1;
  156.     printPole(minX, minY);
  157.     int scorePlayer = 0;
  158.     int positionScoreX = maxX + 5;
  159.     int positionScoreY = 1;
  160.     int** Pole = new int* [maxY];
  161.     int* bigArr = new int[maxY * maxX];
  162.     for (int i = 0; i < maxY; i++)
  163.     {
  164.         Pole[i] = bigArr + i * maxX;
  165.     }
  166.     int lenghtBlock = 3;
  167.     gotoxy(positionScoreX, positionScoreY);
  168.     cout << "Score = " << scorePlayer;
  169.     //Block 1 |
  170.     //        |
  171.     //        |
  172.  
  173.     //Block 2 ---
  174.  
  175.     //Block 3 ---
  176.     //         ---
  177.  
  178.     //Block 4  |
  179.     //         |  |
  180.     //         |  |
  181.     //            |
  182.     while (true)
  183.     {
  184.         int randBlock = rand() % 4 + 1;
  185.         startPositionX = maxX / 2;
  186.         startPositionY = 1;
  187.         while (true)
  188.         {
  189.             if (randBlock == 1)
  190.             {
  191.                 print.Block1(lenghtBlock, startPositionX, startPositionY);
  192.                 if (_kbhit())
  193.                 {
  194.                     auto key{ _getch() };
  195.                     if (key == 'a' or key == 'A') {
  196.                         if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
  197.                             clear.Block1(lenghtBlock, startPositionX, startPositionY);
  198.                             startPositionX--;
  199.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
  200.                                 clear.Block1(lenghtBlock, startPositionX, startPositionY);
  201.                                 startPositionX--;
  202.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
  203.                                     clear.Block1(lenghtBlock, startPositionX, startPositionY);
  204.                                     startPositionX--;
  205.                                 }
  206.                             } print.Block1(lenghtBlock, startPositionX, startPositionY);
  207.                         };
  208.                     };
  209.                     if (key == 'd' or key == 'D') {
  210.                         if (startPositionX < maxX - 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
  211.                             clear.Block1(lenghtBlock, startPositionX, startPositionY);
  212.                             startPositionX++;
  213.                             if (startPositionX < maxX - 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
  214.                                 clear.Block1(lenghtBlock, startPositionX, startPositionY);
  215.                                 startPositionX++;
  216.                                 if (startPositionX < maxX - 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
  217.                                     clear.Block1(lenghtBlock, startPositionX, startPositionY);
  218.                                     startPositionX++;
  219.                                 }
  220.                             } print.Block1(lenghtBlock, startPositionX, startPositionY);
  221.                         };
  222.                     };
  223.                 } //Control game
  224.                 Sleep(300);
  225.  
  226.                 int previousX = startPositionX;
  227.                 int previousY = startPositionY;
  228.                 if (startPositionY + lenghtBlock == maxY)
  229.                 {
  230.  
  231.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  232.                     {
  233.                         Pole[i][startPositionX] = 1;
  234.                     }
  235.                     print.Block1(lenghtBlock, startPositionX, startPositionY);
  236.                     goto end;
  237.                 }
  238.                 else if (Pole[startPositionY + lenghtBlock][startPositionX] == 1)
  239.                 {
  240.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  241.                     {
  242.                         Pole[i][startPositionX] = 1;
  243.                     }
  244.                     print.Block1(lenghtBlock, startPositionX, startPositionY);
  245.                     goto end;
  246.                 }
  247.                 startPositionY++;
  248.  
  249.                 clear.Block1(lenghtBlock, previousX, previousY);
  250.                 if (startPositionY + lenghtBlock == maxY)
  251.                 {
  252.  
  253.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  254.                     {
  255.                         Pole[i][startPositionX] = 1;
  256.                     }
  257.                     print.Block1(lenghtBlock, startPositionX, startPositionY);
  258.                     goto end;
  259.                 }
  260.                 else if (Pole[startPositionY + lenghtBlock][startPositionX] == 1)
  261.                 {
  262.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  263.                     {
  264.                         Pole[i][startPositionX] = 1;
  265.                     }
  266.                     print.Block1(lenghtBlock, startPositionX, startPositionY);
  267.                     goto end;
  268.                 }
  269.  
  270.             }
  271.             else if (randBlock == 2)
  272.             {
  273.                 char* board = new char[lenghtBlock];
  274.                 for (int i = 0; i < lenghtBlock; i++)
  275.                 {
  276.                     board[i] = '-';
  277.                 }
  278.                 board[lenghtBlock] = '\0';
  279.                 gotoxy(startPositionX, startPositionY += 1);
  280.                 cout << board;
  281.                 if (_kbhit())
  282.                 {
  283.                     auto key{ _getch() };
  284.                     if (key == 'a' or key == 'A') {
  285.                         if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) {
  286.                             gotoxy(startPositionX + lenghtBlock - 1, startPositionY);  cout << " "; startPositionX--;
  287.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) {
  288.                                 gotoxy(startPositionX + lenghtBlock - 1, startPositionY);  cout << " "; startPositionX--;
  289.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) { gotoxy(startPositionX + lenghtBlock - 1, startPositionY);  cout << " "; startPositionX--; }
  290.                             } gotoxy(startPositionX, startPositionY); cout << board;
  291.                         };
  292.                     };
  293.                     if (key == 'd' or key == 'D') {
  294.                         if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) {
  295.                             gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++;
  296.                             if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) {
  297.                                 gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++;
  298.                                 if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) { gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++; }
  299.                             } gotoxy(startPositionX, startPositionY); cout << board;
  300.                         };
  301.                     };
  302.                 } //Control game
  303.                 Sleep(300);
  304.  
  305.                 int previousX = startPositionX;
  306.                 int previousY = startPositionY;
  307.                 gotoxy(previousX, previousY);
  308.                 for (int i = 0; i < lenghtBlock; i++)
  309.                 {
  310.                     cout << " ";
  311.                 }
  312.                 if (startPositionY == maxY - 1)
  313.                 {
  314.  
  315.                     for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  316.                     {
  317.                         Pole[startPositionY][i] = 1;
  318.                     }
  319.                     gotoxy(startPositionX, startPositionY);
  320.                     cout << "---";
  321.                     goto end;
  322.                 }
  323.                 else if (((Pole[startPositionY + 1][startPositionX] == 1) or (Pole[startPositionY + 1][startPositionX + 1] == 1) or (Pole[startPositionY + 1][startPositionX + 2] == 1)))
  324.                 {
  325.                     for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  326.                     {
  327.                         Pole[startPositionY][i] = 1;
  328.                     }
  329.                     gotoxy(startPositionX, startPositionY);
  330.                     cout << "---";
  331.                     goto end;
  332.                 }
  333.  
  334.             }
  335.             else if (randBlock == 3)
  336.             {
  337.                 int startPositionX2 = startPositionX + 1;
  338.                 int startPositionY2 = startPositionY + 1;
  339.                 print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  340.                 if (_kbhit())
  341.                 {
  342.                     auto key{ _getch() };
  343.                     if (key == 'a' or key == 'A') {
  344.                         if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
  345.                             clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  346.                             startPositionX--; startPositionX2--;
  347.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
  348.                                 clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  349.                                 startPositionX--; startPositionX2--;
  350.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
  351.                                     clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  352.                                     startPositionX--; startPositionX2--;
  353.                                 }
  354.                             } print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  355.                         };
  356.                     };
  357.                     if (key == 'd' or key == 'D') {
  358.                         if (startPositionX2 + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1) {
  359.                             clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  360.                             startPositionX++; startPositionX2++;
  361.                             if (startPositionX2 + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1) {
  362.                                 clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  363.                                 startPositionX++; startPositionX2++;
  364.                                 if (startPositionX2 + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1) {
  365.                                     clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  366.                                     startPositionX++; startPositionX2++;
  367.                                 }
  368.                             } print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  369.                         };
  370.                     };
  371.                 } //Control game
  372.                 Sleep(300);
  373.                 int previousX = startPositionX;
  374.                 int previousY = startPositionY;
  375.                 int previousX2 = startPositionX2;
  376.                 int previousY2 = startPositionY2;
  377.                 if (startPositionY2 == maxY - 1)
  378.                 {
  379.                     for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  380.                     {
  381.                         Pole[startPositionY][i] = 1;
  382.                     }
  383.                     for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  384.                     {
  385.                         Pole[startPositionY2][i] = 1;
  386.                     }
  387.                     print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  388.                     goto end;
  389.                 }
  390.                 else if (Pole[startPositionY + 1][startPositionX] == 1 or Pole[startPositionY2 + 1][startPositionX2] == 1 or Pole[startPositionY2 + 1][startPositionX2 + 1] == 1 or Pole[startPositionY2 + 1][startPositionX2 + 2] == 1)
  391.                 {
  392.                     for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  393.                     {
  394.                         Pole[startPositionY][i] = 1;
  395.                     }
  396.                     for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  397.                     {
  398.                         Pole[startPositionY2][i] = 1;
  399.                     }
  400.                     print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  401.                     goto end;
  402.                 }
  403.                 startPositionY++;
  404.                 startPositionY2++;
  405.  
  406.                 clear.Block3(lenghtBlock, previousX, previousY, previousX2, previousY2);
  407.                 if (startPositionY2 == maxY - 1)
  408.                 {
  409.                     for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  410.                     {
  411.                         Pole[startPositionY][i] = 1;
  412.                     }
  413.                     for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  414.                     {
  415.                         Pole[startPositionY2][i] = 1;
  416.                     }
  417.                     print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  418.                     goto end;
  419.                 }
  420.                 else if (Pole[startPositionY + 1][startPositionX] == 1 or Pole[startPositionY2 + 1][startPositionX2] == 1 or Pole[startPositionY2 + 1][startPositionX2 + 1] == 1 or Pole[startPositionY2 + 1][startPositionX2 + 2] == 1)
  421.                 {
  422.                     for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  423.                     {
  424.                         Pole[startPositionY][i] = 1;
  425.                     }
  426.                     for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  427.                     {
  428.                         Pole[startPositionY2][i] = 1;
  429.                     }
  430.                     print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  431.                     goto end;
  432.                 }
  433.  
  434.             }
  435.             else if (randBlock == 4)
  436.             {
  437.                 int startPositionX2 = startPositionX + 1;
  438.                 int startPositionY2 = startPositionY + 1;
  439.                 print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  440.                 if (_kbhit())
  441.                 {
  442.                     auto key{ _getch() };
  443.                     if (key == 'a' or key == 'A') {
  444.                         if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  445.                             clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  446.                             startPositionX--; startPositionX2--;
  447.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  448.                                 clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  449.                                 startPositionX--; startPositionX2--;
  450.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  451.                                     clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  452.                                     startPositionX--; startPositionX2--;
  453.                                 }
  454.                             } print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  455.                         };
  456.                     };
  457.                     if (key == 'd' or key == 'D') {
  458.                         if (startPositionX2 < maxX - 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  459.                             clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  460.                             startPositionX++; startPositionX2++;
  461.                             if (startPositionX2 < maxX - 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  462.                                 clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  463.                                 startPositionX++; startPositionX2++;
  464.                                 if (startPositionX2 < maxX - 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  465.                                     clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  466.                                     startPositionX++; startPositionX2++;
  467.                                 }
  468.                             } print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  469.                         };
  470.                     };
  471.                 } //Control game
  472.                 Sleep(300);
  473.                 int previousX = startPositionX;
  474.                 int previousY = startPositionY;
  475.                 int previousX2 = startPositionX2;
  476.                 int previousY2 = startPositionY2;
  477.                 if (startPositionY + lenghtBlock == maxY or startPositionY2 + lenghtBlock == maxY)
  478.                 {
  479.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  480.                     {
  481.                         Pole[i][startPositionX] = 1;
  482.                     }
  483.                     for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  484.                     {
  485.                         Pole[i][startPositionX2] = 1;
  486.                     }
  487.                     print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  488.                     goto end;
  489.                 }
  490.                 else if (((Pole[startPositionY + lenghtBlock][startPositionX] == 1) or (Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1)))
  491.                 {
  492.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  493.                     {
  494.                         Pole[i][startPositionX] = 1;
  495.                     }
  496.                     for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  497.                     {
  498.                         Pole[i][startPositionX2] = 1;
  499.                     }
  500.                     print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  501.                     goto end;
  502.  
  503.  
  504.                 }
  505.                 startPositionY++;
  506.                 startPositionY2++;
  507.  
  508.                 clear.Block4(lenghtBlock, previousX, previousY, previousX2, previousY2);
  509.  
  510.                 if (startPositionY + lenghtBlock == maxY or startPositionY2 + lenghtBlock == maxY)
  511.                 {
  512.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  513.                     {
  514.                         Pole[i][startPositionX] = 1;
  515.                     }
  516.                     for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  517.                     {
  518.                         Pole[i][startPositionX2] = 1;
  519.                     }
  520.                     print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  521.                     goto end;
  522.                 }
  523.                 else if (((Pole[startPositionY + lenghtBlock][startPositionX] == 1) or (Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1)))
  524.                 {
  525.                     for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  526.                     {
  527.                         Pole[i][startPositionX] = 1;
  528.                     }
  529.                     for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  530.                     {
  531.                         Pole[i][startPositionX2] = 1;
  532.                     }
  533.                     print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionX2, startPositionY2);
  534.                     goto end;
  535.  
  536.  
  537.                 }
  538.  
  539.             }
  540.  
  541.         }
  542.     end:;
  543.  
  544.         for (int x = 0; x < maxX; x++)
  545.         {
  546.             if (Pole[minY][x] == 1)
  547.             {
  548.                 goto endProg;
  549.             }
  550.         }
  551.  
  552.         for (int y = 1; y < maxY; y++)
  553.         {
  554.             bool check = true;
  555.             for (int x = 1; x < maxX; x++)
  556.             {
  557.                 if (Pole[y][x] == 1)
  558.                 {
  559.  
  560.  
  561.                     continue;
  562.  
  563.                 }
  564.                 else
  565.                 {
  566.                     check = false;
  567.                     goto endCycle;
  568.                 }
  569.             }
  570.         endCycle:;
  571.             if (check == true)
  572.             {
  573.                 for (int x = 1; x < maxX; x++)
  574.                 {
  575.                     Pole[y][x] = 0;
  576.                     gotoxy(x, y);
  577.                     cout << "-";
  578.                 }
  579.                 Sleep(600);
  580.                 for (int x = 1; x < maxX; x++)
  581.                 {
  582.  
  583.                     gotoxy(x, y);
  584.                     cout << " ";
  585.                 }
  586.                 scorePlayer += 50;
  587.                 gotoxy(positionScoreX, positionScoreY);
  588.                 cout << "Score = " << scorePlayer;
  589.             }
  590.  
  591.         }
  592.     }
  593. endProg:;
  594.     gotoxy(50, maxY-5);
  595.     cout << "Game over. Score = " << scorePlayer;
  596.     Sleep(2000);
  597.     clearPole();
  598. }
  599. void tetrisFor2Users(int minX2, int minY2)
  600. {
  601.     Prints print;
  602.     Clears clear;
  603.     cout << CSI << hideCursor;
  604.     clearPole();
  605.     srand(time(NULL));
  606.     printPole(minX, minY, minX2, minY2, true);
  607.     int scorePlayer = 0;
  608.     int scorePlayer2 = 0;
  609.     int positionScoreX = maxX + 5;
  610.     int positionScoreY = 1;
  611.     int positionScoreX2 = maxX + minX2 + 5;
  612.     int positionScoreY2 = 1;
  613.     int** Pole = new int* [maxY];
  614.     int* bigArr = new int[maxY * (maxX + minX2)];
  615.     for (int i = 0; i < maxY; i++)
  616.     {
  617.         Pole[i] = bigArr + i * (maxX + minX2);
  618.     }
  619.     int lenghtBlock = 3;
  620.     gotoxy(positionScoreX, positionScoreY);
  621.     cout << "Score = " << scorePlayer;
  622.     gotoxy(positionScoreX2, positionScoreY2);
  623.     cout << "Score = " << scorePlayer2;
  624.     /*
  625.     //Block 1 |
  626.     //        |
  627.     //        |
  628.  
  629.     //Block 2 ---
  630.  
  631.     //Block 3 ---
  632.     //         ---
  633.  
  634.     //Block 4  |
  635.     //         |  |
  636.     //         |  |
  637.     //            |
  638.     */
  639.     int check = 1;
  640.     while (true)
  641.     {
  642.         int randBlock = rand() % 4 + 1;
  643.         int startPositionX = maxX / 2;
  644.         int startPositionY = 1;
  645.         int startPositionX2 = minX2 + 5;
  646.         int startPositionY2 = 1;
  647.         check *= (-1);
  648.         while (true)
  649.         {
  650.             if (randBlock == 1)
  651.             {
  652.                 if (check == 1)
  653.                 {
  654.                     print.Block1(lenghtBlock, startPositionX, startPositionY);
  655.                     if (_kbhit())
  656.                     {
  657.                         auto key{ _getch() };
  658.                         if (key == 'a' or key == 'A') {
  659.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
  660.                                 clear.Block1(lenghtBlock, startPositionX, startPositionY);
  661.                                 startPositionX--;
  662.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
  663.                                     clear.Block1(lenghtBlock, startPositionX, startPositionY);
  664.                                     startPositionX--;
  665.                                     if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
  666.                                         clear.Block1(lenghtBlock, startPositionX, startPositionY);
  667.                                         startPositionX--;
  668.                                     }
  669.                                 } print.Block1(lenghtBlock, startPositionX, startPositionY);
  670.                             };
  671.                         };
  672.                         if (key == 'd' or key == 'D') {
  673.                             if (startPositionX < maxX - 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
  674.                                 clear.Block1(lenghtBlock, startPositionX, startPositionY);
  675.                                 startPositionX++;
  676.                                 if (startPositionX < maxX - 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
  677.                                     clear.Block1(lenghtBlock, startPositionX, startPositionY);
  678.                                     startPositionX++;
  679.                                     if (startPositionX < maxX - 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
  680.                                         clear.Block1(lenghtBlock, startPositionX, startPositionY);
  681.                                         startPositionX++;
  682.                                     }
  683.                                 } print.Block1(lenghtBlock, startPositionX, startPositionY);
  684.                             };
  685.                         };
  686.                     } //Control game
  687.                     Sleep(300);
  688.  
  689.                     int previousX = startPositionX;
  690.                     int previousY = startPositionY;
  691.                     if (startPositionY + lenghtBlock == maxY)
  692.                     {
  693.  
  694.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  695.                         {
  696.                             Pole[i][startPositionX] = 1;
  697.                         }
  698.                         print.Block1(lenghtBlock, startPositionX, startPositionY);
  699.                         goto end;
  700.                     }
  701.                     else if (Pole[startPositionY + lenghtBlock][startPositionX] == 1)
  702.                     {
  703.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  704.                         {
  705.                             Pole[i][startPositionX] = 1;
  706.                         }
  707.                         print.Block1(lenghtBlock, startPositionX, startPositionY);
  708.                         goto end;
  709.                     }
  710.                     startPositionY++;
  711.  
  712.                     clear.Block1(lenghtBlock, previousX, previousY);
  713.                     if (startPositionY + lenghtBlock == maxY)
  714.                     {
  715.  
  716.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  717.                         {
  718.                             Pole[i][startPositionX] = 1;
  719.                         }
  720.                         print.Block1(lenghtBlock, startPositionX, startPositionY);
  721.                         goto end;
  722.                     }
  723.                     else if (Pole[startPositionY + lenghtBlock][startPositionX] == 1)
  724.                     {
  725.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  726.                         {
  727.                             Pole[i][startPositionX] = 1;
  728.                         }
  729.                         print.Block1(lenghtBlock, startPositionX, startPositionY);
  730.                         goto end;
  731.                     }
  732.                 }
  733.                 else
  734.                 {
  735.                     print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  736.                     if (_kbhit())
  737.                     {
  738.                         auto key{ _getch() };
  739.                         if (key == 'j' or key == 'J') {
  740.                             if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 - 1] != 1) {
  741.                                 clear.Block1(lenghtBlock, startPositionX2, startPositionY2);
  742.                                 startPositionX2--;
  743.                                 if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 - 1] != 1) {
  744.                                     clear.Block1(lenghtBlock, startPositionX2, startPositionY2);
  745.                                     startPositionX2--;
  746.                                     if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 - 1] != 1) {
  747.                                         clear.Block1(lenghtBlock, startPositionX2, startPositionY2);
  748.                                         startPositionX2--;
  749.                                     }
  750.                                 } print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  751.                             };
  752.                         };
  753.                         if (key == 'l' or key == 'L') {
  754.                             if (startPositionX2 < maxX + minX2 - 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1) {
  755.                                 clear.Block1(lenghtBlock, startPositionX2, startPositionY2);
  756.                                 startPositionX2++;
  757.                                 if (startPositionX2 < maxX + minX2 - 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1) {
  758.                                     clear.Block1(lenghtBlock, startPositionX2, startPositionY2);
  759.                                     startPositionX2++;
  760.                                     if (startPositionX2 < maxX + minX2 - 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1) {
  761.                                         clear.Block1(lenghtBlock, startPositionX2, startPositionY2);
  762.                                         startPositionX2++;
  763.                                     }
  764.                                 } print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  765.                             };
  766.                         };
  767.                     } //Control game
  768.                     Sleep(300);
  769.  
  770.                     int previousX = startPositionX2;
  771.                     int previousY = startPositionY2;
  772.                     if (startPositionY2 + lenghtBlock == maxY)
  773.                     {
  774.  
  775.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  776.                         {
  777.                             Pole[i][startPositionX2] = 1;
  778.                         }
  779.                         print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  780.                         goto end;
  781.                     }
  782.                     else if (Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1)
  783.                     {
  784.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  785.                         {
  786.                             Pole[i][startPositionX2] = 1;
  787.                         }
  788.                         print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  789.                         goto end;
  790.                     }
  791.                     startPositionY2++;
  792.  
  793.                     clear.Block1(lenghtBlock, previousX, previousY);
  794.                     if (startPositionY2 + lenghtBlock == maxY)
  795.                     {
  796.  
  797.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  798.                         {
  799.                             Pole[i][startPositionX2] = 1;
  800.                         }
  801.                         print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  802.                         goto end;
  803.                     }
  804.                     else if (Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1)
  805.                     {
  806.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  807.                         {
  808.                             Pole[i][startPositionX2] = 1;
  809.                         }
  810.                         print.Block1(lenghtBlock, startPositionX2, startPositionY2);
  811.                         goto end;
  812.                     }
  813.                 }
  814.             }
  815.             else if (randBlock == 2)
  816.             {
  817.                 if (check == 1)
  818.                 {
  819.                     char* board = new char[lenghtBlock];
  820.                     for (int i = 0; i < lenghtBlock; i++)
  821.                     {
  822.                         board[i] = '-';
  823.                     }
  824.                     board[lenghtBlock] = '\0';
  825.                     gotoxy(startPositionX, startPositionY += 1);
  826.                     cout << board;
  827.                     if (_kbhit())
  828.                     {
  829.                         auto key{ _getch() };
  830.                         if (key == 'a' or key == 'A') {
  831.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) {
  832.                                 gotoxy(startPositionX + lenghtBlock - 1, startPositionY);  cout << " "; startPositionX--;
  833.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) {
  834.                                     gotoxy(startPositionX + lenghtBlock - 1, startPositionY);  cout << " "; startPositionX--;
  835.                                     if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) { gotoxy(startPositionX + lenghtBlock - 1, startPositionY);  cout << " "; startPositionX--; }
  836.                                 } gotoxy(startPositionX, startPositionY); cout << board;
  837.                             };
  838.                         };
  839.                         if (key == 'd' or key == 'D') {
  840.                             if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) {
  841.                                 gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++;
  842.                                 if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) {
  843.                                     gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++;
  844.                                     if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) { gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++; }
  845.                                 } gotoxy(startPositionX, startPositionY); cout << board;
  846.                             };
  847.                         };
  848.                     } //Control game
  849.                     Sleep(300);
  850.  
  851.                     int previousX = startPositionX;
  852.                     int previousY = startPositionY;
  853.                     gotoxy(previousX, previousY);
  854.                     for (int i = 0; i < lenghtBlock; i++)
  855.                     {
  856.                         cout << " ";
  857.                     }
  858.                     if (startPositionY == maxY - 1)
  859.                     {
  860.  
  861.                         for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  862.                         {
  863.                             Pole[startPositionY][i] = 1;
  864.                         }
  865.                         gotoxy(startPositionX, startPositionY);
  866.                         cout << "---";
  867.                         goto end;
  868.                     }
  869.                     else if (((Pole[startPositionY + 1][startPositionX] == 1) or (Pole[startPositionY + 1][startPositionX + 1] == 1) or (Pole[startPositionY + 1][startPositionX + 2] == 1)))
  870.                     {
  871.                         for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  872.                         {
  873.                             Pole[startPositionY][i] = 1;
  874.                         }
  875.                         gotoxy(startPositionX, startPositionY);
  876.                         cout << "---";
  877.                         goto end;
  878.                     }
  879.                 }
  880.                 else
  881.                 {
  882.                     char* board = new char[lenghtBlock];
  883.                     for (int i = 0; i < lenghtBlock; i++)
  884.                     {
  885.                         board[i] = '-';
  886.                     }
  887.                     board[lenghtBlock] = '\0';
  888.                     gotoxy(startPositionX2, startPositionY2 += 1);
  889.                     cout << board;
  890.                     if (_kbhit())
  891.                     {
  892.                         auto key{ _getch() };
  893.                         if (key == 'j' or key == 'J') {
  894.                             if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
  895.                                 gotoxy(startPositionX2 + lenghtBlock - 1, startPositionY2);  cout << " "; startPositionX2--;
  896.                                 if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
  897.                                     gotoxy(startPositionX2 + lenghtBlock - 1, startPositionY2);  cout << " "; startPositionX2--;
  898.                                     if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1) { gotoxy(startPositionX2 + lenghtBlock - 1, startPositionY2);  cout << " "; startPositionX2--; }
  899.                                 } gotoxy(startPositionX2, startPositionY2); cout << board;
  900.                             };
  901.                         };
  902.                         if (key == 'l' or key == 'L') {
  903.                             if (startPositionX2 + lenghtBlock < maxX + minX2 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1) {
  904.                                 gotoxy(startPositionX2, startPositionY2); cout << " "; startPositionX2++;
  905.                                 if (startPositionX2 + lenghtBlock < maxX + minX2 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1) {
  906.                                     gotoxy(startPositionX2, startPositionY2); cout << " "; startPositionX2++;
  907.                                     if (startPositionX2 + lenghtBlock < maxX + minX2 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1) { gotoxy(startPositionX2, startPositionY2); cout << " "; startPositionX2++; }
  908.                                 } gotoxy(startPositionX2, startPositionY2); cout << board;
  909.                             };
  910.                         };
  911.                     } //Control game
  912.                     Sleep(300);
  913.  
  914.                     int previousX = startPositionX2;
  915.                     int previousY = startPositionY2;
  916.                     gotoxy(previousX, previousY);
  917.                     for (int i = 0; i < lenghtBlock; i++)
  918.                     {
  919.                         cout << " ";
  920.                     }
  921.                     if (startPositionY2 == maxY - 1)
  922.                     {
  923.  
  924.                         for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  925.                         {
  926.                             Pole[startPositionY2][i] = 1;
  927.                         }
  928.                         gotoxy(startPositionX2, startPositionY2);
  929.                         cout << "---";
  930.                         goto end;
  931.                     }
  932.                     else if (((Pole[startPositionY2 + 1][startPositionX2] == 1) or (Pole[startPositionY2 + 1][startPositionX2 + 1] == 1) or (Pole[startPositionY2 + 1][startPositionX2 + 2] == 1)))
  933.                     {
  934.                         for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  935.                         {
  936.                             Pole[startPositionY2][i] = 1;
  937.                         }
  938.                         gotoxy(startPositionX2, startPositionY2);
  939.                         cout << "---";
  940.                         goto end;
  941.                     }
  942.                 }
  943.             }
  944.             else if (randBlock == 3)
  945.             {
  946.                 if (check == 1)
  947.                 {
  948.                     int startPositionXPl2 = startPositionX + 1;
  949.                     int startPositionYPl2 = startPositionY + 1;
  950.                     print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  951.                     if (_kbhit())
  952.                     {
  953.                         auto key{ _getch() };
  954.                         if (key == 'a' or key == 'A') {
  955.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionYPl2][startPositionXPl2 - 1] != 1) {
  956.                                 clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  957.                                 startPositionX--; startPositionXPl2--;
  958.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionYPl2][startPositionXPl2 - 1] != 1) {
  959.                                     clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  960.                                     startPositionX--; startPositionXPl2--;
  961.                                     if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionYPl2][startPositionXPl2 - 1] != 1) {
  962.                                         clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  963.                                         startPositionX--; startPositionXPl2--;
  964.                                     }
  965.                                 } print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  966.                             };
  967.                         };
  968.                         if (key == 'd' or key == 'D') {
  969.                             if (startPositionXPl2 + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1 and Pole[startPositionYPl2][startPositionXPl2 + lenghtBlock] != 1) {
  970.                                 clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  971.                                 startPositionX++; startPositionXPl2++;
  972.                                 if (startPositionXPl2 + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1 and Pole[startPositionYPl2][startPositionXPl2 + lenghtBlock] != 1) {
  973.                                     clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  974.                                     startPositionX++; startPositionXPl2++;
  975.                                     if (startPositionXPl2 + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1 and Pole[startPositionYPl2][startPositionXPl2 + lenghtBlock] != 1) {
  976.                                         clear.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  977.                                         startPositionX++; startPositionXPl2++;
  978.                                     }
  979.                                 } print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  980.                             };
  981.                         };
  982.                     } //Control game
  983.                     Sleep(300);
  984.                     int previousX = startPositionX;
  985.                     int previousY = startPositionY;
  986.                     int previousX2 = startPositionXPl2;
  987.                     int previousY2 = startPositionYPl2;
  988.                     if (startPositionYPl2 == maxY - 1)
  989.                     {
  990.                         for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  991.                         {
  992.                             Pole[startPositionY][i] = 1;
  993.                         }
  994.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  995.                         {
  996.                             Pole[startPositionYPl2][i] = 1;
  997.                         }
  998.                         print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  999.                         goto end;
  1000.                     }
  1001.                     else if (Pole[startPositionY + 1][startPositionX] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 2] == 1)
  1002.                     {
  1003.                         for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  1004.                         {
  1005.                             Pole[startPositionY][i] = 1;
  1006.                         }
  1007.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1008.                         {
  1009.                             Pole[startPositionYPl2][i] = 1;
  1010.                         }
  1011.                         print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1012.                         goto end;
  1013.                     }
  1014.                     startPositionY++;
  1015.                     startPositionYPl2++;
  1016.  
  1017.                     clear.Block3(lenghtBlock, previousX, previousY, previousX2, previousY2);
  1018.                     if (startPositionYPl2 == maxY - 1)
  1019.                     {
  1020.                         for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  1021.                         {
  1022.                             Pole[startPositionY][i] = 1;
  1023.                         }
  1024.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1025.                         {
  1026.                             Pole[startPositionYPl2][i] = 1;
  1027.                         }
  1028.                         print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1029.                         goto end;
  1030.                     }
  1031.                     else if (Pole[startPositionY + 1][startPositionX] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 2] == 1)
  1032.                     {
  1033.                         for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
  1034.                         {
  1035.                             Pole[startPositionY][i] = 1;
  1036.                         }
  1037.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1038.                         {
  1039.                             Pole[startPositionYPl2][i] = 1;
  1040.                         }
  1041.                         print.Block3(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1042.                         goto end;
  1043.                     }
  1044.  
  1045.                 }
  1046.                 else
  1047.                 {
  1048.                     int startPositionXPl2 = startPositionX2 + 1;
  1049.                     int startPositionYPl2 = startPositionY2 + 1;
  1050.                     print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1051.                     if (_kbhit())
  1052.                     {
  1053.                         auto key{ _getch() };
  1054.                         if (key == 'j' or key == 'J') {
  1055.                             if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionYPl2][startPositionXPl2 - 1] != 1) {
  1056.                                 clear.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1057.                                 startPositionX2--; startPositionXPl2--;
  1058.                                 if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionYPl2][startPositionXPl2 - 1] != 1) {
  1059.                                     clear.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1060.                                     startPositionX2--; startPositionXPl2--;
  1061.                                     if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionYPl2][startPositionXPl2 - 1] != 1) {
  1062.                                         clear.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1063.                                         startPositionX2--; startPositionXPl2--;
  1064.                                     }
  1065.                                 } print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1066.                             };
  1067.                         };
  1068.                         if (key == 'l' or key == 'L') {
  1069.                             if (startPositionXPl2 + lenghtBlock < maxX + minX2 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1 and Pole[startPositionYPl2][startPositionXPl2 + lenghtBlock] != 1) {
  1070.                                 clear.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1071.                                 startPositionX2++; startPositionXPl2++;
  1072.                                 if (startPositionXPl2 + lenghtBlock < maxX + minX2 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1 and Pole[startPositionYPl2][startPositionXPl2 + lenghtBlock] != 1) {
  1073.                                     clear.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1074.                                     startPositionX2++; startPositionXPl2++;
  1075.                                     if (startPositionXPl2 + lenghtBlock < maxX + minX2 and Pole[startPositionY2][startPositionX2 + lenghtBlock] != 1 and Pole[startPositionYPl2][startPositionXPl2 + lenghtBlock] != 1) {
  1076.                                         clear.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1077.                                         startPositionX2++; startPositionXPl2++;
  1078.                                     }
  1079.                                 } print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1080.                             };
  1081.                         };
  1082.                     } //Control game
  1083.                     Sleep(300);
  1084.                     int previousX = startPositionX2;
  1085.                     int previousY = startPositionY2;
  1086.                     int previousX2 = startPositionXPl2;
  1087.                     int previousY2 = startPositionYPl2;
  1088.                     if (startPositionYPl2 == maxY - 1)
  1089.                     {
  1090.                         for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  1091.                         {
  1092.                             Pole[startPositionY2][i] = 1;
  1093.                         }
  1094.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1095.                         {
  1096.                             Pole[startPositionYPl2][i] = 1;
  1097.                         }
  1098.                         print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1099.                         goto end;
  1100.                     }
  1101.                     else if (Pole[startPositionY2 + 1][startPositionX2] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 2] == 1)
  1102.                     {
  1103.                         for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  1104.                         {
  1105.                             Pole[startPositionY2][i] = 1;
  1106.                         }
  1107.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1108.                         {
  1109.                             Pole[startPositionYPl2][i] = 1;
  1110.                         }
  1111.                         print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1112.                         goto end;
  1113.                     }
  1114.                     startPositionY2++;
  1115.                     startPositionYPl2++;
  1116.  
  1117.                     clear.Block3(lenghtBlock, previousX, previousY, previousX2, previousY2);
  1118.                     if (startPositionYPl2 == maxY - 1)
  1119.                     {
  1120.                         for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  1121.                         {
  1122.                             Pole[startPositionY2][i] = 1;
  1123.                         }
  1124.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1125.                         {
  1126.                             Pole[startPositionYPl2][i] = 1;
  1127.                         }
  1128.                         print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1129.                         goto end;
  1130.                     }
  1131.                     else if (Pole[startPositionY2 + 1][startPositionX2] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] == 1 or Pole[startPositionYPl2 + 1][startPositionXPl2 + 2] == 1)
  1132.                     {
  1133.                         for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
  1134.                         {
  1135.                             Pole[startPositionY2][i] = 1;
  1136.                         }
  1137.                         for (int i = startPositionXPl2; i < startPositionXPl2 + lenghtBlock; i++)
  1138.                         {
  1139.                             Pole[startPositionYPl2][i] = 1;
  1140.                         }
  1141.                         print.Block3(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1142.                         goto end;
  1143.                     }
  1144.  
  1145.                 }
  1146.             }
  1147.             else if (randBlock == 4)
  1148.             {
  1149.                 if (check == 1)
  1150.                 {
  1151.                     int startPositionXPl2 = startPositionX + 1;
  1152.                     int startPositionYPl2 = startPositionY + 1;
  1153.                     print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1154.                     if (_kbhit())
  1155.                     {
  1156.                         auto key{ _getch() };
  1157.                         if (key == 'a' or key == 'A') {
  1158.                             if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  1159.                                 clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1160.                                 startPositionX--; startPositionXPl2--;
  1161.                                 if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  1162.                                     clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1163.                                     startPositionX--; startPositionXPl2--;
  1164.                                     if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  1165.                                         clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1166.                                         startPositionX--; startPositionXPl2--;
  1167.                                     }
  1168.                                 } print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1169.                             };
  1170.                         };
  1171.                         if (key == 'd' or key == 'D') {
  1172.                             if (startPositionXPl2 < maxX - 1 and Pole[startPositionYPl2][startPositionXPl2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] != 1 and Pole[startPositionYPl2 + 2][startPositionXPl2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  1173.                                 clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1174.                                 startPositionX++; startPositionXPl2++;
  1175.                                 if (startPositionXPl2 < maxX - 1 and Pole[startPositionYPl2][startPositionXPl2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] != 1 and Pole[startPositionYPl2 + 2][startPositionXPl2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  1176.                                     clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1177.                                     startPositionX++; startPositionXPl2++;
  1178.                                     if (startPositionXPl2 < maxX - 1 and Pole[startPositionYPl2][startPositionXPl2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] != 1 and Pole[startPositionYPl2 + 2][startPositionXPl2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1) {
  1179.                                         clear.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1180.                                         startPositionX++; startPositionXPl2++;
  1181.                                     }
  1182.                                 } print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1183.                             };
  1184.                         };
  1185.                     } //Control game
  1186.                     Sleep(300);
  1187.                     int previousX = startPositionX;
  1188.                     int previousY = startPositionY;
  1189.                     int previousX2 = startPositionXPl2;
  1190.                     int previousY2 = startPositionYPl2;
  1191.                     if (startPositionY + lenghtBlock == maxY or startPositionYPl2 + lenghtBlock == maxY)
  1192.                     {
  1193.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  1194.                         {
  1195.                             Pole[i][startPositionX] = 1;
  1196.                         }
  1197.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1198.                         {
  1199.                             Pole[i][startPositionXPl2] = 1;
  1200.                         }
  1201.                         print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1202.                         goto end;
  1203.                     }
  1204.                     else if (((Pole[startPositionY + lenghtBlock][startPositionX] == 1) or (Pole[startPositionYPl2 + lenghtBlock][startPositionXPl2] == 1)))
  1205.                     {
  1206.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  1207.                         {
  1208.                             Pole[i][startPositionX] = 1;
  1209.                         }
  1210.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1211.                         {
  1212.                             Pole[i][startPositionXPl2] = 1;
  1213.                         }
  1214.                         print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1215.                         goto end;
  1216.  
  1217.  
  1218.                     }
  1219.                     startPositionY++;
  1220.                     startPositionYPl2++;
  1221.  
  1222.                     clear.Block4(lenghtBlock, previousX, previousY, previousX2, previousY2);
  1223.  
  1224.                     if (startPositionY + lenghtBlock == maxY or startPositionYPl2 + lenghtBlock == maxY)
  1225.                     {
  1226.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  1227.                         {
  1228.                             Pole[i][startPositionX] = 1;
  1229.                         }
  1230.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1231.                         {
  1232.                             Pole[i][startPositionXPl2] = 1;
  1233.                         }
  1234.                         print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1235.                         goto end;
  1236.                     }
  1237.                     else if (((Pole[startPositionY + lenghtBlock][startPositionX] == 1) or (Pole[startPositionYPl2 + lenghtBlock][startPositionXPl2] == 1)))
  1238.                     {
  1239.                         for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
  1240.                         {
  1241.                             Pole[i][startPositionX] = 1;
  1242.                         }
  1243.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1244.                         {
  1245.                             Pole[i][startPositionXPl2] = 1;
  1246.                         }
  1247.                         print.Block4(lenghtBlock, startPositionX, startPositionY, startPositionXPl2, startPositionYPl2);
  1248.                         goto end;
  1249.  
  1250.  
  1251.                     }
  1252.  
  1253.                 }
  1254.                 else
  1255.                 {
  1256.                     int startPositionXPl2 = startPositionX2 + 1;
  1257.                     int startPositionYPl2 = startPositionY2 + 1;
  1258.                     print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1259.                     if (_kbhit())
  1260.                     {
  1261.                         auto key{ _getch() };
  1262.                         if (key == 'j' or key == 'J') {
  1263.                             if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
  1264.                                 clear.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1265.                                 startPositionX2--; startPositionXPl2--;
  1266.                                 if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
  1267.                                     clear.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1268.                                     startPositionX2--; startPositionXPl2--;
  1269.                                     if (startPositionX2 > minX2 and Pole[startPositionY2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 - 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 - 1] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
  1270.                                         clear.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1271.                                         startPositionX2--; startPositionXPl2--;
  1272.                                     }
  1273.                                 } print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1274.                             };
  1275.                         };
  1276.                         //Here
  1277.                         if (key == 'l' or key == 'L') {
  1278.                             if (startPositionXPl2 < maxX + minX2 - 1 and Pole[startPositionYPl2][startPositionXPl2 + 1] != 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] != 1 and Pole[startPositionYPl2 + 2][startPositionXPl2 + 1] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
  1279.                                 clear.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1280.                                 startPositionX2++; startPositionXPl2++;
  1281.                                 if (startPositionXPl2 < maxX + minX2 - 1 and Pole[startPositionYPl2][startPositionXPl2 + 1] != 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] != 1 and Pole[startPositionYPl2 + 2][startPositionXPl2 + 1] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
  1282.                                     clear.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1283.                                     startPositionX2++; startPositionXPl2++;
  1284.                                     if (startPositionXPl2 < maxX + minX2 - 1 and Pole[startPositionYPl2][startPositionXPl2 + 1] != 1 and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionYPl2 + 1][startPositionXPl2 + 1] != 1 and Pole[startPositionYPl2 + 2][startPositionXPl2 + 1] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
  1285.                                         clear.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1286.                                         startPositionX2++; startPositionXPl2++;
  1287.                                     }
  1288.                                 } print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1289.                             };
  1290.                         };
  1291.                     } //Control game
  1292.                     Sleep(300);
  1293.                     int previousX = startPositionX2;
  1294.                     int previousY = startPositionY2;
  1295.                     int previousX2 = startPositionXPl2;
  1296.                     int previousY2 = startPositionYPl2;
  1297.                     if (startPositionY2 + lenghtBlock == maxY or startPositionYPl2 + lenghtBlock == maxY)
  1298.                     {
  1299.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  1300.                         {
  1301.                             Pole[i][startPositionX2] = 1;
  1302.                         }
  1303.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1304.                         {
  1305.                             Pole[i][startPositionXPl2] = 1;
  1306.                         }
  1307.                         print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1308.                         goto end;
  1309.                     }
  1310.                     else if (((Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1) or (Pole[startPositionYPl2 + lenghtBlock][startPositionXPl2] == 1)))
  1311.                     {
  1312.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  1313.                         {
  1314.                             Pole[i][startPositionX2] = 1;
  1315.                         }
  1316.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1317.                         {
  1318.                             Pole[i][startPositionXPl2] = 1;
  1319.                         }
  1320.                         print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1321.                         goto end;
  1322.  
  1323.  
  1324.                     }
  1325.                     startPositionY2++;
  1326.                     startPositionYPl2++;
  1327.  
  1328.                     clear.Block4(lenghtBlock, previousX, previousY, previousX2, previousY2);
  1329.  
  1330.                     if (startPositionY2 + lenghtBlock == maxY or startPositionYPl2 + lenghtBlock == maxY)
  1331.                     {
  1332.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  1333.                         {
  1334.                             Pole[i][startPositionX2] = 1;
  1335.                         }
  1336.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1337.                         {
  1338.                             Pole[i][startPositionXPl2] = 1;
  1339.                         }
  1340.                         print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1341.                         goto end;
  1342.                     }
  1343.                     else if (((Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1) or (Pole[startPositionYPl2 + lenghtBlock][startPositionXPl2] == 1)))
  1344.                     {
  1345.                         for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
  1346.                         {
  1347.                             Pole[i][startPositionX2] = 1;
  1348.                         }
  1349.                         for (int i = startPositionYPl2; i < startPositionYPl2 + lenghtBlock; i++)
  1350.                         {
  1351.                             Pole[i][startPositionXPl2] = 1;
  1352.                         }
  1353.                         print.Block4(lenghtBlock, startPositionX2, startPositionY2, startPositionXPl2, startPositionYPl2);
  1354.                         goto end;
  1355.                     }
  1356.  
  1357.                 }
  1358.             }
  1359.         }
  1360.     end:;
  1361.  
  1362.         for (int x = minX - 1; x < maxX; x++)
  1363.         {
  1364.             if (Pole[minY][x] == 1)
  1365.             {
  1366.                 goto endProg;
  1367.             }
  1368.         }
  1369.         for (int x = minX2 - 1; x < maxX + minX2; x++)
  1370.         {
  1371.             if (Pole[minY2][x] == 1)
  1372.             {
  1373.                 goto endProg;
  1374.             }
  1375.         }
  1376.         for (int y = 1; y < maxY; y++)
  1377.         {
  1378.             bool check1 = true;
  1379.             bool check2 = true;
  1380.             for (int x = minX; x < maxX; x++)
  1381.             {
  1382.                 if (Pole[y][x] == 1)
  1383.                 {
  1384.  
  1385.  
  1386.                     continue;
  1387.  
  1388.                 }
  1389.                 else
  1390.                 {
  1391.                     check1 = false;
  1392.                     //goto endCycle;
  1393.                 }
  1394.             }
  1395.             for (int x = minX2; x < maxX + minX2; x++)
  1396.             {
  1397.                 if (Pole[y][x] == 1)
  1398.                 {
  1399.  
  1400.  
  1401.                     continue;
  1402.  
  1403.                 }
  1404.                 else
  1405.                 {
  1406.                     check2 = false;
  1407.                     //goto endCycle;
  1408.                 }
  1409.             }
  1410.             //endCycle:;
  1411.             if (check1 == true)
  1412.             {
  1413.                 for (int x = 1; x < maxX; x++)
  1414.                 {
  1415.                     Pole[y][x] = 0;
  1416.                     gotoxy(x, y);
  1417.                     cout << "-";
  1418.                 }
  1419.                 Sleep(600);
  1420.                 for (int x = 1; x < maxX; x++)
  1421.                 {
  1422.  
  1423.                     gotoxy(x, y);
  1424.                     cout << " ";
  1425.                 }
  1426.                 scorePlayer += 50;
  1427.                 gotoxy(positionScoreX, positionScoreY);
  1428.                 cout << "Score = " << scorePlayer;
  1429.             }
  1430.             if (check2 == true)
  1431.             {
  1432.                 for (int x = minX2; x < maxX + minX2; x++)
  1433.                 {
  1434.                     Pole[y][x] = 0;
  1435.                     gotoxy(x, y);
  1436.                     cout << "-";
  1437.                 }
  1438.                 Sleep(600);
  1439.                 for (int x = minX2; x < maxX + minX2; x++)
  1440.                 {
  1441.  
  1442.                     gotoxy(x, y);
  1443.                     cout << " ";
  1444.                 }
  1445.                 scorePlayer2 += 50;
  1446.                 gotoxy(positionScoreX2, positionScoreY2);
  1447.                 cout << "Score = " << scorePlayer2;
  1448.             }
  1449.  
  1450.         }
  1451.     }
  1452. endProg:;
  1453.     gotoxy(50, maxY +1);
  1454.    
  1455.     if (scorePlayer == scorePlayer2)
  1456.     {
  1457.         cout << "Nobody win";
  1458.     }
  1459.     else if (scorePlayer > scorePlayer2)
  1460.     {
  1461.         cout << "Player 1 win. Score = " << scorePlayer;
  1462.     }
  1463.     else {
  1464.  
  1465.         cout << "Player 2 win. Score = " << scorePlayer2;
  1466.     }
  1467.  
  1468.     Sleep(2000);
  1469.     clearPole();
  1470.  
  1471. }
  1472. void main()
  1473. {
  1474.     int choice;
  1475.     int minX2{ maxX + 20 }, minY2{ 1 };
  1476.     do {
  1477.         menu();
  1478.         cin >> choice;
  1479.         if (choice == 1)
  1480.         {
  1481.             tetris();
  1482.             clearPole();
  1483.         }
  1484.         else if (choice == 2)
  1485.         {
  1486.             tetrisFor2Users(minX2, minY2);
  1487.             clearPole();
  1488.         }
  1489.         else if (choice == 3)
  1490.         {
  1491.             cout << "Enter maxX = ";
  1492.             cin >> maxX;
  1493.             cout << "Complete!";
  1494.             Sleep(800);
  1495.             clearPole();
  1496.         }
  1497.         else if (choice == 4)
  1498.         {
  1499.             cout << "Enter maxY = ";
  1500.             cin >> maxY;
  1501.             cout << "Complete!";
  1502.             Sleep(800);
  1503.             clearPole();
  1504.         }
  1505.         else if (choice == 5)
  1506.         {
  1507.             cout << "Bye";
  1508.             break;
  1509.         }
  1510.     } while (choice != 5);
  1511. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement