mirror of
https://github.com/lov3b/Pong.git
synced 2024-09-20 05:40:14 +02:00
95 lines
2.5 KiB
C
95 lines
2.5 KiB
C
|
//
|
||
|
// Created by love on 2024-01-18.
|
||
|
//
|
||
|
|
||
|
#pragma
|
||
|
|
||
|
#include "SdlWrapper.h"
|
||
|
#include "SDL.h"
|
||
|
#include "VisibleObjects/Ball.h"
|
||
|
#include "VisibleObjects/PlayerPaddle.h"
|
||
|
|
||
|
|
||
|
class Game : public SdlWrapper {
|
||
|
private:
|
||
|
Ball *ball;
|
||
|
|
||
|
PlayerPaddle *leftPaddle, *rightPaddle;
|
||
|
|
||
|
public:
|
||
|
explicit Game(SDL_Point screenSize) : SdlWrapper("Pong", screenSize, 60) {
|
||
|
leftPaddle = new PlayerPaddle(&this->screenSize, Side::LEFT);
|
||
|
rightPaddle = new PlayerPaddle(&this->screenSize, Side::RIGHT);
|
||
|
ball = new Ball(&this->screenSize, leftPaddle, rightPaddle);
|
||
|
}
|
||
|
|
||
|
~Game() override {
|
||
|
delete ball;
|
||
|
delete leftPaddle;
|
||
|
delete rightPaddle;
|
||
|
}
|
||
|
|
||
|
void draw(SDL_Renderer *renderer) override {
|
||
|
// Background
|
||
|
SDL_SetRenderDrawColor(renderer, 128, 0, 128, 0);
|
||
|
SDL_RenderClear(renderer);
|
||
|
|
||
|
ball->draw(renderer);
|
||
|
leftPaddle->draw(renderer);
|
||
|
rightPaddle->draw(renderer);
|
||
|
SDL_RenderPresent(renderer);
|
||
|
}
|
||
|
|
||
|
bool update() override {
|
||
|
ball->update();
|
||
|
leftPaddle->update();
|
||
|
rightPaddle->update();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool handleEvents() override {
|
||
|
SDL_Event event;
|
||
|
while (SDL_PollEvent(&event) != 0) {
|
||
|
if (event.type == SDL_QUIT)
|
||
|
return false;
|
||
|
|
||
|
if (event.type == SDL_KEYDOWN) {
|
||
|
switch (event.key.keysym.sym) {
|
||
|
case SDLK_w:
|
||
|
leftPaddle->startMoving(true);
|
||
|
break;
|
||
|
case SDLK_s:
|
||
|
leftPaddle->startMoving(false);
|
||
|
break;
|
||
|
|
||
|
case SDLK_UP:
|
||
|
rightPaddle->startMoving(true);
|
||
|
break;
|
||
|
case SDLK_DOWN:
|
||
|
rightPaddle->startMoving(false);
|
||
|
break;
|
||
|
}
|
||
|
} else if (event.type == SDL_KEYUP) {
|
||
|
switch (event.key.keysym.sym) {
|
||
|
case SDLK_w:
|
||
|
leftPaddle->stopMoving(true);
|
||
|
break;
|
||
|
case SDLK_s:
|
||
|
leftPaddle->stopMoving(false);
|
||
|
break;
|
||
|
|
||
|
case SDLK_UP:
|
||
|
rightPaddle->stopMoving(true);
|
||
|
break;
|
||
|
case SDLK_DOWN:
|
||
|
rightPaddle->stopMoving(false);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
};
|