#include
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define BALL_SIZE 10
#define PADDLE_WIDTH 100
#define PADDLE_HEIGHT 20
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_Rect ball, paddle;
int ballSpeedX = 2, ballSpeedY = -2;
void init() {
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow("Breakout Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
ball = (SDL_Rect){SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, BALL_SIZE, BALL_SIZE};
paddle = (SDL_Rect){SCREEN_WIDTH / 2 - PADDLE_WIDTH / 2, SCREEN_HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT};
}
void handleInput() {
const Uint8 *state = SDL_GetKeyboardState(NULL);
if (state[SDL_SCANCODE_LEFT] && paddle.x > 0) {
paddle.x -= 5;
}
if (state[SDL_SCANCODE_RIGHT] && paddle.x < SCREEN_WIDTH - PADDLE_WIDTH) {
paddle.x += 5;
}
}
void update() {
ball.x += ballSpeedX;
ball.y += ballSpeedY;
if (ball.x <= 0 || ball.x >= SCREEN_WIDTH - BALL_SIZE) {
ballSpeedX = -ballSpeedX;
}
if (ball.y <= 0) {
ballSpeedY = -ballSpeedY;
}
if (ball.y >= SCREEN_HEIGHT - BALL_SIZE) {
ball = (SDL_Rect){SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, BALL_SIZE, BALL_SIZE};
ballSpeedY = -2;
}
if (SDL_HasIntersection(&ball, &paddle)) {
ballSpeedY = -ballSpeedY;
}
}
void render() {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderFillRect(renderer, &ball);
SDL_RenderFillRect(renderer, &paddle);
SDL_RenderPresent(renderer);
}
void cleanUp() {
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
}
int main(int argc, char *argv[]) {
init();
SDL_Event e;
int quit = 0;
while (!quit) {
while (SDL_PollEvent(&e) != 0) {
if (e.type == SDL_QUIT) {
quit = 1;
}
}
handleInput();
update();
render();
SDL_Delay(16); // 控制帧率
}
cleanUp();
return 0;
}