#include #include #include #include #include #include #define SCREEN_WIDTH 11 #define SCREEN_HEIGHT 10 #define PADDLE_SIZE 1 #define SLEEP_TIME_MS 100 * 1000 #define PADDLE_HEIGHT SCREEN_HEIGHT-1 #define Y_BLOCK_LAYERS 4 #define X_BLOCK_LAYERS SCREEN_WIDTH uint8_t screen[SCREEN_WIDTH][SCREEN_HEIGHT]; enum PIXEL_TYPE { PIXEL_EMPTY=0u, PIXEL_BALL=1u, PIXEL_BLOCK=2u, PIXEL_PADDLE=3u } PIXEL_TYPE; void clearScreen() { for (int y = 0; y < SCREEN_HEIGHT; y++) { for (int x=0; x"); } else if(screen[x][y]==PIXEL_PADDLE) { printf("=="); } else if(screen[x][y]==PIXEL_BLOCK) { printf("[]"); } } printf("|\n"); } for (int x =0; x<=SCREEN_WIDTH; x++) { printf("--"); } printf("\n"); //detect when ball hits the edge of the screen if (ball.xPOS==0||ball.xPOS==(SCREEN_WIDTH-1)) { ball.xVEL=ball.xVEL*-1; } if (ball.yPOS==0||ball.yPOS==(SCREEN_HEIGHT-1)) { ball.yVEL=ball.yVEL*-1; } //detect when ball hits a block if (screen[ball.xPOS+ball.xVEL][ball.yPOS]==PIXEL_BLOCK) { blockArr[ball.xPOS+ball.xVEL][ball.yPOS].visable=false; ball.xVEL = ball.xVEL *-1; blockFlushHit=true; } if (screen[ball.xPOS][ball.yPOS+ball.yVEL]==PIXEL_BLOCK) { blockArr[ball.xPOS][ball.yPOS+ball.yVEL].visable=false; ball.yVEL = ball.yVEL *-1; blockFlushHit=true; } if (screen[ball.xPOS+ball.xVEL][ball.yPOS+ball.yVEL]==PIXEL_BLOCK&&blockFlushHit==false) { blockArr[ball.xPOS+ball.xVEL][ball.yPOS+ball.yVEL].visable=false; if(ballOnXEdge(ball)==false) { ball.xVEL = ball.xVEL *-1; } if (ball.yPOS!=0) { ball.yVEL=ball.yVEL *-1; } } //detect when ball hits paddle if(screen[ball.xPOS+ball.xVEL][ball.yPOS]==PIXEL_PADDLE) { ball.xVEL = ball.xVEL *-1; } if (screen[ball.xPOS][ball.yPOS+ball.yVEL]== PIXEL_PADDLE) { //hit detection y direction ball.yVEL= ball.yVEL*-1; } if (screen[ball.xPOS+ball.xVEL][ball.yPOS+ball.yVEL]==PIXEL_PADDLE) { //diagonal hit detection ball.xVEL = ball.xVEL *-1; ball.yVEL=ball.yVEL *-1; } //update ball position ball.xPOS=ball.xPOS+ball.xVEL; ball.yPOS= ball.yPOS+ball.yVEL; } }