ブロック崩し

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

#define WIDTH 50
#define HEIGHT 20

int paddleX = WIDTH / 2;
int ballX = WIDTH / 2;
int ballY = HEIGHT - 2;
int ballDirX = 1;
int ballDirY = -1;
int bricks[WIDTH][HEIGHT] = {0};

void drawPaddle()
{
   printf("\033[%d;%dH=", HEIGHT, paddleX - 3);
   printf("\033[%d;%dH=====\n", HEIGHT, paddleX - 2);
}

void drawBall()
{
   printf("\033[%d;%dHO\n", ballY, ballX);
}

void drawBricks()
{
   for (int y = 0; y < HEIGHT / 2; y++)
   {
       for (int x = 0; x < WIDTH; x++)
       {
           if (bricks[x][y])
           {
               printf("\033[%d;%dH#\n", y, x);
           }
       }
   }
}

void updateBall()
{
   ballX += ballDirX;
   ballY += ballDirY;

   if (ballX == 0 || ballX == WIDTH - 1)
   {
       ballDirX *= -1;
   }

   if (ballY == 0)
   {
       ballDirY *= -1;
   }

   if (ballY == HEIGHT - 1)
   {
       exit(0);
   }

   if (ballY == HEIGHT - 2 && ballX >= paddleX - 2 && ballX <= paddleX + 2)
   {
       ballDirY *= -1;
   }

   if (ballY < HEIGHT / 2 && bricks[ballX][ballY])
   {
       bricks[ballX][ballY] = 0;
       ballDirY *= -1;
   }
}

void updatePaddle()
{
   if (_kbhit())
   {
       char key = _getch();
       if (key == 'a' && paddleX > 3)
       {
           paddleX--;
       }
       else if (key == 'd' && paddleX < WIDTH - 4)
       {
           paddleX++;
       }
   }
}

void clearScreen()
{
   printf("\033[2J");
   printf("\033[0;0H");
}

int main()
{
   for (int y = 0; y < HEIGHT / 2; y++)
   {
       for (int x = 0; x < WIDTH; x++)
       {
           bricks[x][y] = 1;
       }
   }

   while (1)
   {
       clearScreen();

       updateBall();
       updatePaddle();

       drawBricks();
       drawPaddle();
       drawBall();

       Sleep(100);
   }

   return 0;
}

この記事が気に入ったらサポートをしてみませんか?