Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctime>
- #include<iostream>
- #include"windows.h"
- #include <chrono>
- #include <thread>
- #include <conio.h>
- using namespace std;
- const int minX{ 1 };
- const int minY{ 1 };
- const int maxX{ 79 };
- const int maxY{ 24 };
- const char* CSI{ "\033[" };
- const char* hideCursor{ "?25l" };
- const char* clearScreen{ "2J" };
- const int kbDeltaY{ 1 };
- void gotoxy(int xpos, int ypos)
- {
- COORD scrn;
- HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
- scrn.X = xpos; scrn.Y = ypos;
- SetConsoleCursorPosition(hOuput, scrn);
- }
- void printPole()
- {
- for (int i = 0; i <= maxX; i++)
- {
- gotoxy(i, 0);
- cout << "=";
- gotoxy(i, maxY);
- cout << "=";
- }
- for (int i = 0; i <= maxY; i++)
- {
- gotoxy(0, i);
- cout << "|";
- gotoxy(maxX, i);
- cout << "|";
- }
- }
- void tetris()
- {
- cout << CSI << hideCursor;
- srand(time(NULL));
- int startPositionX = minX+5;
- int startPositionY = 1;
- printPole();
- int coords = startPositionY;
- int** Pole = new int* [maxY];
- int* bigArr = new int[maxY * maxX];
- for (int i = 0; i < maxY; i++)
- {
- Pole[i] = bigArr + i * maxX;
- }
- int lenghtBlock = 3;
- //Block 1 | and ---
- // |
- // |
- //Block 1
- //Block 3 ---
- // ---
- //Block 3
- //Block 4 |
- // | |
- // | |
- // |
- while (coords != maxY)
- {
- int randBlock = 3;//rand() % 4 + 1;
- startPositionX = minX + 5;
- startPositionY = 1;
- while (true)
- {
- if (randBlock == 1)
- {
- char* board = new char[lenghtBlock];
- for (int i = 0; i < lenghtBlock; i++)
- {
- board[i] = '-';
- }
- board[lenghtBlock] = '\0';
- gotoxy(startPositionX, startPositionY += 1);
- cout << board;
- if (_kbhit())
- {
- auto key{ _getch() };
- if (key == 'a' or key == 'A') {
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) {
- gotoxy(startPositionX + lenghtBlock - 1, startPositionY); cout << " "; startPositionX--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) {
- gotoxy(startPositionX + lenghtBlock - 1, startPositionY); cout << " "; startPositionX--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1) { gotoxy(startPositionX + lenghtBlock - 1, startPositionY); cout << " "; startPositionX--; }
- } gotoxy(startPositionX, startPositionY); cout << board;
- };
- };
- if (key == 'd' or key == 'D') {
- if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) {
- gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++;
- if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) {
- gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++;
- if (startPositionX + lenghtBlock < maxX and Pole[startPositionY][startPositionX + lenghtBlock] != 1) { gotoxy(startPositionX, startPositionY); cout << " "; startPositionX++; }
- } gotoxy(startPositionX, startPositionY); cout << board;
- };
- };
- } //Control game
- Sleep(300);
- int previousX = startPositionX;
- int previousY = startPositionY;
- gotoxy(previousX, previousY);
- for (int i = 0; i < lenghtBlock; i++)
- {
- cout << " ";
- }
- if (startPositionY == maxY - 1)
- {
- for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
- {
- Pole[startPositionY][i] = 1;
- }
- gotoxy(startPositionX, startPositionY);
- cout << "---";
- goto end;
- }
- else if (((Pole[startPositionY + 1][startPositionX] == 1) or (Pole[startPositionY + 1][startPositionX + 1] == 1) or (Pole[startPositionY + 1][startPositionX + 2] == 1)))
- {
- for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
- {
- Pole[startPositionY][i] = 1;
- }
- gotoxy(startPositionX, startPositionY);
- cout << "---";
- goto end;
- }
- }
- else if (randBlock == 2)
- {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- }
- if (_kbhit())
- {
- auto key{ _getch() };
- if (key == 'a' or key == 'A') {
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- } startPositionX--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- } startPositionX--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 2][startPositionX - 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- } startPositionX--;
- }
- } for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- }
- };
- };
- if (key == 'd' or key == 'D') {
- if (startPositionX < maxX and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- } startPositionX++;
- if (startPositionX < maxX and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- } startPositionX++;
- if (startPositionX < maxX and Pole[startPositionY][startPositionX + 1] != 1 and Pole[startPositionY + 1][startPositionX + 1] != 1 and Pole[startPositionY + 2][startPositionX + 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- } startPositionX++;
- }
- } for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- }
- };
- };
- } //Control game
- Sleep(300);
- int previousX = startPositionX;
- int previousY = startPositionY;
- startPositionY++;
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(previousX, previousY + i);
- cout << " ";
- }
- if (startPositionY + lenghtBlock == maxY)
- {
- for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
- {
- Pole[i][startPositionX] = 1;
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- }
- goto end;
- }
- else if (Pole[startPositionY + lenghtBlock][startPositionX] == 1)
- {
- for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
- {
- Pole[i][startPositionX] = 1;
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- }
- goto end;
- }
- }
- else if (randBlock == 3)
- {
- int startPositionX2 = startPositionX + 1;
- int startPositionY2 = startPositionY + 1;
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << "-";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << "-";
- }
- if (_kbhit())
- {
- auto key{ _getch() };
- if (key == 'a' or key == 'A') {
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << " ";
- } startPositionX--; startPositionX2--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << " ";
- } startPositionX--; startPositionX2--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY2][startPositionX2 - 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << " ";
- } startPositionX--; startPositionX2--;
- }
- } for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << "-";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << "-";
- }
- };
- };
- if (key == 'd' or key == 'D') {
- if (startPositionX2 < maxX and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << " ";
- } startPositionX++; startPositionX2++;
- if (startPositionX2 < maxX and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << " ";
- } startPositionX++; startPositionX2++;
- if (startPositionX2 < maxX and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY][startPositionX + 1] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << " ";
- } startPositionX++; startPositionX2++;
- }
- } for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << "-";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << "-";
- }
- };
- };
- } //Control game
- Sleep(300);
- int previousX = startPositionX;
- int previousY = startPositionY;
- int previousX2 = startPositionX2;
- int previousY2 = startPositionY2;
- startPositionY++;
- startPositionY2++;
- cout << startPositionY<<"\t";
- cout << startPositionY2<<"\t";
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(previousX + i, previousY);
- cout << " ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(previousX2 + i, previousY2);
- cout << " ";
- }
- //HERE PROBLEM
- if (startPositionY2 == maxY-1)
- {
- for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
- {
- Pole[startPositionY][i] = 1;
- cout << "Pole["<<startPositionY<<"]["<<startPositionX+i<<"] - Complete ";
- }
- for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
- {
- Pole[startPositionY2][i] = 1;
- cout << "Pole["<<startPositionY<<"]["<<startPositionX+i<<"] - Complete ";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << "-";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << "-";
- }
- goto end;
- }
- else if (((Pole[startPositionY + 1][startPositionX] == 1) or (Pole[startPositionY + 1][startPositionX + 1] == 1) or (Pole[startPositionY + 1][startPositionX + 2] == 1 or Pole[startPositionY2 + 1][startPositionX2] == 1) or (Pole[startPositionY2 + 1][startPositionX2 + 1] == 1) or (Pole[startPositionY2 + 1][startPositionX2 + 2] == 1)))
- {
- for (int i = startPositionX; i < startPositionX + lenghtBlock; i++)
- {
- Pole[startPositionY][i] = 1;
- }
- for (int i = startPositionX2; i < startPositionX2 + lenghtBlock; i++)
- {
- Pole[startPositionY2][i] = 1;
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX + i, startPositionY);
- cout << "-";
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX2 + i, startPositionY2);
- cout << "-";
- }
- goto end;
- }
- else if (randBlock == 4)
- {
- int startPositionX2 = startPositionX + 1;
- int startPositionY2 = startPositionY + 1;
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << "|";
- }
- if (_kbhit())
- {
- auto key{ _getch() };
- if (key == 'a' or key == 'A') {
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1 and Pole[startPositionY + 3][startPositionX] != 1 and Pole[startPositionY2 + 3][startPositionX2] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << " ";
- } startPositionX--; startPositionX2--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1 and Pole[startPositionY + 3][startPositionX] != 1 and Pole[startPositionY2 + 3][startPositionX2] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << " ";
- } startPositionX--; startPositionX2--;
- if (startPositionX > minX and Pole[startPositionY][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + 1][startPositionX - 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1 and Pole[startPositionY + 3][startPositionX] != 1 and Pole[startPositionY2 + 3][startPositionX2] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << " ";
- } startPositionX--; startPositionX2--;
- }
- } for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << "|";
- }
- };
- };
- if (key == 'd' or key == 'D') {
- if (startPositionX2 < maxX and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << " ";
- } startPositionX++; startPositionX2++;
- if (startPositionX2 < maxX and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << " ";
- } startPositionX++; startPositionX2++;
- if (startPositionX2 < maxX and Pole[startPositionY2][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 1][startPositionX2 + 1] != 1 and Pole[startPositionY2 + 2][startPositionX2 + 1] != 1 and Pole[startPositionY + lenghtBlock][startPositionX] != 1 and Pole[startPositionY2 + lenghtBlock][startPositionX2] != 1) {
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << " ";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << " ";
- } startPositionX++; startPositionX2++;
- }
- } for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << "|";
- }
- };
- };
- } //Control game
- Sleep(300);
- int previousX = startPositionX;
- int previousY = startPositionY;
- int previousX2 = startPositionX2;
- int previousY2 = startPositionY2;
- startPositionY++;
- startPositionY2++;
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(previousX, previousY + i);
- cout << " ";
- gotoxy(previousX2, previousY2 + i);
- cout << " ";
- }
- if (startPositionY + lenghtBlock == maxY or startPositionY2 + lenghtBlock == maxY)
- {
- for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
- {
- Pole[i][startPositionX] = 1;
- }
- for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
- {
- Pole[i][startPositionX2] = 1;
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << "|";
- }
- goto end;
- }
- else if (((Pole[startPositionY + lenghtBlock][startPositionX] == 1) or (Pole[startPositionY2 + lenghtBlock][startPositionX2] == 1)))
- {
- for (int i = startPositionY; i < startPositionY + lenghtBlock; i++)
- {
- Pole[i][startPositionX] = 1;
- }
- for (int i = startPositionY2; i < startPositionY2 + lenghtBlock; i++)
- {
- Pole[i][startPositionX2] = 1;
- }
- for (int i = 0; i < lenghtBlock; i++)
- {
- gotoxy(startPositionX, startPositionY + i);
- cout << "|";
- gotoxy(startPositionX2, startPositionY2 + i);
- cout << "|";
- }
- goto end;
- }
- }
- };
- end:;
- }
- }
- }
- void main()
- {
- tetris();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement