Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <dos.h>
- #include <stdlib.h>
- #include <string.h>
- #include <Windows.h>
- #include <time.h>
- #define SCREEN_WIDTH 52 //определяем ширину экрана
- #define SCREEN_HEIGHT 20 //определяем высоту экрана
- #define MINX 3
- #define MINY 2
- #define MAXX 49
- #define MAXY 19
- using namespace std;
- HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD CursorPosition;
- void setCursorPosition(int x, int y) //функция из Window.h для установки курсора в нужное положение (для создания аналога system("cls"))
- {
- static const HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
- cout.flush();
- COORD coord = { (SHORT)x, (SHORT)y };
- SetConsoleCursorPosition(hOut, coord);
- }
- void Cursor() { //убирает мерцание курсора консоли,делает его невидимым
- CONSOLE_CURSOR_INFO curs = { 0 };
- curs.dwSize = sizeof(curs);
- curs.bVisible = FALSE;
- ::SetConsoleCursorInfo(::GetStdHandle(STD_OUTPUT_HANDLE), &curs);
- }
- class Game //наша игра в виде класса
- {
- private:
- int bricks[24][2]; //блоки, которые сбиваем
- int visibleBricks[24]; //свойство, показывающее, видно ли блок (сбит или не сбит)
- int sliderPos[2];//координаты слайдера
- int ballPos[2];//координаты шара
- int startBall;//свойство "запущен ли шар"
- int dir;//направление движения мяча
- int bricksLeft;//количество оствашихся блоков
- int win;//победа ли
- int lose;//проигрыш ли
- int moving_rand;//случайный коэффициент движения
- void setCursorPosition(int x, int y);//функция от класса
- void setcursor(bool visible, DWORD size);//задает курсор
- void drawBorder();//рисование доски
- void drawBricks();//рисование блоков
- void ballHitSlider();//функция столкновения шарика с слайдером
- void ballHitBrick();//функция столкновения шарика с блоком
- void instructions();//функция показа инструкции
- void restart();//функция рестарта игры
- public:
- Game()
- {/////////////////СОЗДАЕМ БЛОКИ////////////////////////
- int i, j, k = 1, s = 0, t = 0;
- for (k = 1; k <= 3; k++)
- {
- for (i = 8*(k-1); i < 8*k; i++)
- {
- for (j = 0; j < 2; j++)
- {
- if (j == 0)
- bricks[i][j] = 2 * k;
- if (j == 1)
- bricks[i][j] = 7 + s * 5;
- }
- s++;
- }
- s = 0;
- }
- /////////////////////ПРИСВАИВАЕМ ЗНАЧЕНИЯ АРГУМЕНТАМ////////////////////////
- for (i = 0; i < 24; i++)
- {
- visibleBricks[i] = 1;
- }
- sliderPos[0] = 18;
- sliderPos[1] = 22;
- ballPos[0] = 17;
- ballPos[1] = 26;
- startBall = 0;
- srand(time(0));
- dir = rand()%2 + 1;
- bricksLeft = 24;
- win = 0;
- lose = 0;
- moving_rand = 2;
- }
- Game(const Game& ob)//Конструктор копирования
- {
- int i, j;
- for (i = 0; i < 24; i++)
- {
- for (j = 0; j < 2; j++)
- {
- bricks[i][j] = ob.bricks[i][j];
- }
- }
- for (i = 0; i < 24; i++)
- {
- visibleBricks[i] = ob.visibleBricks[i];
- }
- for (i = 0; i < 2; i++)
- {
- sliderPos[i] = ob.sliderPos[i];
- ballPos[i] = ob.ballPos[i];
- }
- startBall = ob.startBall;
- dir = ob.dir;
- bricksLeft = ob.bricksLeft;
- win = ob.win;
- lose = ob.lose;
- moving_rand = ob.moving_rand;
- }
- void start(); //фкнция старта
- void play();//функция непосредственно игры
- };
- void Game::setCursorPosition(int x, int y)
- {
- CursorPosition.X = x;
- CursorPosition.Y = y;
- SetConsoleCursorPosition(console, CursorPosition);
- }
- void Game::setcursor(bool visible, DWORD size)
- {
- if (size == 0)
- size = 20;
- CONSOLE_CURSOR_INFO lpCursor;
- lpCursor.bVisible = visible;
- lpCursor.dwSize = size;
- SetConsoleCursorInfo(console, &lpCursor);
- }
- void Game::restart()
- {
- int i, j, k = 1, s = 0, t = 0;
- for (k = 1; k <= 3; k++)
- {
- for (i = 8 * (k - 1); i < 8 * k; i++)
- {
- for (j = 0; j < 2; j++)
- {
- if (j == 0)
- bricks[i][j] = 2 * k;
- if (j == 1)
- bricks[i][j] = 7 + s * 5;
- }
- s++;
- }
- s = 0;
- }
- for (i = 0; i < 24; i++)
- {
- visibleBricks[i] = 1;
- }
- sliderPos[0] = 18;
- sliderPos[1] = 22;
- ballPos[0] = 17;
- ballPos[1] = 25;
- startBall = 0;
- srand(time(0));
- dir = rand() % 2 + 1;
- bricksLeft = 24;
- win = 0;
- lose = 0;
- }
- void Game::drawBorder()
- {
- setCursorPosition(0, 0);
- cout << "----------------------------------------------------";
- setCursorPosition(0, SCREEN_HEIGHT);
- cout << "----------------------------------------------------";
- for (int i = 0; i < SCREEN_HEIGHT; i++)
- {
- setCursorPosition(0, i);
- cout << '|';
- setCursorPosition(SCREEN_WIDTH, i);
- cout << '|';
- }
- }
- void Game::drawBricks()
- {
- for (int i = 0; i < 24; i++)
- {
- if (visibleBricks[i] == 1)
- {
- setCursorPosition(bricks[i][1], bricks[i][0]);
- cout << "####";
- }
- else
- {
- setCursorPosition(bricks[i][1], bricks[i][0]);
- cout << " ";
- }
- }
- }
- void Game::ballHitSlider()
- {
- srand(time(0));
- if (ballPos[0] == sliderPos[0] - 1)
- {
- if ((ballPos[1] >= (sliderPos[1] - 2)) && ballPos[1] <= sliderPos[1] + 8)
- {
- if ((ballPos[1] >= sliderPos[1] - 2) && (ballPos[1] <= sliderPos[1]))
- {
- if (ballPos[0] == sliderPos[0] - 1)
- {
- dir = 2;
- srand(rand());
- moving_rand = rand() % 2 + 1;
- }
- }
- else if ((ballPos[1] >= sliderPos[1] + 6) && (ballPos[1] <= sliderPos[1] + 8))
- {
- if (ballPos[0] == sliderPos[0] - 1)
- {
- dir = 1;
- srand(rand());
- moving_rand = rand() % 2 + 1;
- }
- }
- else if (ballPos[1] == sliderPos[1] + 3)
- {
- if (ballPos[0] == sliderPos[0] - 1)
- {
- dir = 0;
- }
- }
- else if (dir = 5 && (ballPos[1] < sliderPos[1] + 3))
- {
- if (ballPos[0] == sliderPos[0] - 1)
- {
- dir = 2;
- }
- }
- else if (dir = 5 && (ballPos[1] > sliderPos[1] + 3))
- {
- if (ballPos[0] == sliderPos[0] - 1)
- {
- dir = 1;
- }
- }
- else if (ballPos[0] == sliderPos[0] - 1)
- {
- if (dir == 3)
- {
- srand(rand());
- moving_rand = rand() % 2 + 1;
- dir = 2;
- }
- else if (dir == 4)
- {
- srand(rand());
- moving_rand = rand() % 2 + 1;
- dir = 1;
- }
- }
- }
- }
- }
- void Game::ballHitBrick()
- {
- for (int i = 0; i < 24; i++)
- {
- if (visibleBricks[i] == 1)
- {
- if (ballPos[1] >= bricks[i][1]-1 && ballPos[1] <= bricks[i][1] + 4)
- {
- if (ballPos[0] == bricks[i][0])
- {
- visibleBricks[i] = 0;
- bricksLeft--;
- }
- }
- }
- }
- }
- void Game::start()
- {
- do {
- setcursor(0, 0);
- system("cls");
- setCursorPosition(10, 5); cout << "-------------------------------";
- setCursorPosition(10, 6); cout << "| BRICK BREAKER |";
- setCursorPosition(10, 7); cout << "-------------------------------";
- setCursorPosition(10, 9); cout << "1. Start Game";
- setCursorPosition(10, 10); cout << "2. Instructions";
- setCursorPosition(10, 11); cout << "3. Quit";
- setCursorPosition(10, 13); cout << "Select option: ";
- char op = _getche();
- switch (op)
- {
- case '1':
- {
- play();
- break;
- }
- case '2':
- {
- instructions();
- break;
- }
- case '3':
- {
- exit(0);
- break;
- }
- }
- } while (1);
- }
- void Game::play()
- {
- restart();
- system("cls");
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << '0';
- setCursorPosition(sliderPos[1], sliderPos[0]);
- cout << "<==^==>";
- while (1)
- {
- setCursorPosition(0, 0);
- this->drawBricks();
- this->drawBorder();
- Cursor();
- if (_kbhit())
- {
- char ch = _getch();
- if (ch == 'D' || ch == 77 || ch == 'В' || ch == 'в')
- ch == 'd';
- if (ch == 'A' || ch == 75 || ch == 'Ф' || ch == 'ф')
- ch = 'a';
- switch (ch)
- {
- case 'd':
- {
- setCursorPosition(sliderPos[1], sliderPos[0]);
- cout << " ";
- if (sliderPos[1] < 44)
- sliderPos[1] = sliderPos[1] + 2;
- if (startBall == 0 && sliderPos[1] < 44)
- {
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << ' ';
- ballPos[1] += 2;
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << '0';
- }
- setCursorPosition(sliderPos[1], sliderPos[0]);
- cout << "<==^==>";
- break;
- }
- case 'a':
- {
- setCursorPosition(sliderPos[1], sliderPos[0]);
- cout << " ";
- if (sliderPos[1] > 2)
- sliderPos[1] = sliderPos[1] - 2;
- if ((startBall == 0) && sliderPos[1] > 2)
- {
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << ' ';
- ballPos[1] -= 2;
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << '0';
- }
- setCursorPosition(sliderPos[1], sliderPos[0]);
- cout << "<==^==>";
- break;
- }
- case 32:
- {
- startBall = 1;
- break;
- }
- case 27:
- {
- system("cls");
- exit(0);
- break;
- }
- }
- }
- if (startBall == 1)
- {
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << ' ';
- switch (dir)
- {
- case 0:
- {
- ballPos[0] = ballPos[0] - 1;
- ballPos[1] = ballPos[1];
- if (ballPos[0] < MINY)
- {
- dir = 5;
- }
- break;
- }
- case 1:
- {
- ballPos[0] = ballPos[0] - 1;
- ballPos[1] = ballPos[1] + moving_rand;
- if (ballPos[1] > MAXX)
- {
- dir = 2;
- }
- else if (ballPos[0] < MINY)
- {
- dir = 4;
- }
- break;
- }
- case 2:
- {
- ballPos[0] = ballPos[0] - 1;
- ballPos[1] = ballPos[1] - moving_rand;
- if (ballPos[0] < MINY)
- {
- dir = 3;
- }
- else if (ballPos[1] < MINX)
- {
- dir = 1;
- }
- break;
- }
- case 3:
- {
- ballPos[0] = ballPos[0] + 1;
- ballPos[1] = ballPos[1] - moving_rand;
- if (ballPos[0] > MAXY)
- {
- lose = 1;
- break;
- }
- else if (ballPos[1] < MINX)
- {
- dir = 4;
- }
- break;
- }
- case 4:
- {
- ballPos[0] = ballPos[0] + 1;
- ballPos[1] = ballPos[1] + moving_rand;
- if (ballPos[1] > MAXX)
- {
- dir = 3;
- }
- else if (ballPos[0] > MAXY)
- {
- lose = 1;
- break;
- }
- break;
- }
- case 5:
- {
- ballPos[0] = ballPos[0] + 1;
- ballPos[1] = ballPos[1];
- if (ballPos[0] > MAXY)
- {
- lose = 1;
- break;
- }
- break;
- }
- }
- ballHitSlider();
- setCursorPosition(ballPos[1], ballPos[0]);
- cout << '0';
- }
- ballHitBrick();
- if (bricksLeft == 0)
- {
- win = 1;
- }
- Sleep(100);
- if (lose == 1)
- {
- system("cls");
- setCursorPosition(10, 5); cout << "--------------------------";
- setCursorPosition(10, 6); cout << "| YOU LOSE |";
- setCursorPosition(10, 7); cout << "--------------------------";
- setCursorPosition(10, 9); cout << "Press any key to go back to Menu.";
- lose = 0;
- system("pause");
- Sleep(1000);
- _getch();
- break;
- }
- if (win == 1)
- {
- system("cls");
- setCursorPosition(10, 5); cout << "-------------------------";
- setCursorPosition(10, 6); cout << "| YOU WIN |";
- setCursorPosition(10, 7); cout << "-------------------------";
- setCursorPosition(10, 9); cout << "Press any key to go back to Menu.";
- win = 0;
- system("pause");
- Sleep(1000);
- _getch();
- break;
- }
- }
- }
- void Game::instructions()
- {
- system("cls");
- cout << "Instructions";
- cout << "\n------------------";
- cout << "\n1.Use 'a' key to move slider to left";
- cout << "\n2.Use 'd' key to move slider to right";
- cout << "\n3.Press spacebar to start game";
- cout << "\n4. Press any key to go back to menu";
- cout << "\n5.Press ESC to close game";
- _getch();
- }
- int main()
- {
- Game A;
- A.start();
- cout << endl << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement