Creating a Basic 2D Game in C++


Creating a 2D game in C++ can be a complex task, but we'll start with a simple example to introduce you to the concepts involved. We'll use the SDL (Simple DirectMedia Layer) library for graphics and input handling. This example will create a basic "Pong" game.


1. Setting Up the Environment

Before you start, make sure you have SDL installed and configured for your development environment. You can find installation instructions on the SDL website.


2. Sample Code: Basic Pong Game

Below is a simplified example of a "Pong" game using SDL:


#include <SDL.h>
const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 600;
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("Pong Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Rect paddle1 = { 50, SCREEN_HEIGHT / 2 - 50, 10, 100 };
SDL_Rect paddle2 = { SCREEN_WIDTH - 60, SCREEN_HEIGHT / 2 - 50, 10, 100 };
SDL_Rect ball = { SCREEN_WIDTH / 2 - 15, SCREEN_HEIGHT / 2 - 15, 30, 30 };
int ballSpeedX = 5;
int ballSpeedY = 5;
bool isRunning = true;
while (isRunning) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
isRunning = false;
}
}
const Uint8* state = SDL_GetKeyboardState(NULL);
if (state[SDL_SCANCODE_W] && paddle1.y > 0) {
paddle1.y -= 5;
}
if (state[SDL_SCANCODE_S] && paddle1.y < SCREEN_HEIGHT - paddle1.h) {
paddle1.y += 5;
}
if (state[SDL_SCANCODE_UP] && paddle2.y > 0) {
paddle2.y -= 5;
}
if (state[SDL_SCANCODE_DOWN] && paddle2.y < SCREEN_HEIGHT - paddle2.h) {
paddle2.y += 5;
}
ball.x += ballSpeedX;
ball.y += ballSpeedY;
if (ball.y <= 0 || ball.y >= SCREEN_HEIGHT - ball.h) {
ballSpeedY = -ballSpeedY;
}
if (ball.x <= paddle1.x + paddle1.w && ball.y >= paddle1.y && ball.y <= paddle1.y + paddle1.h) {
ballSpeedX = -ballSpeedX;
}
if (ball.x + ball.w >= paddle2.x && ball.y >= paddle2.y && ball.y <= paddle2.y + paddle2.h) {
ballSpeedX = -ballSpeedX;
}
if (ball.x < 0 || ball.x > SCREEN_WIDTH) {
// Ball out of bounds, reset position
ball.x = SCREEN_WIDTH / 2 - ball.w / 2;
ball.y = SCREEN_HEIGHT / 2 - ball.h / 2;
ballSpeedX = -ballSpeedX;
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderFillRect(renderer, &paddle1);
SDL_RenderFillRect(renderer, &paddle2);
SDL_RenderFillRect(renderer, &ball);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}

3. Conclusion

Creating a 2D game in C++ is a complex task that involves many aspects, including graphics, input handling, and game logic. The example provided is a simple starting point, and you can build upon it to create more sophisticated games. Game development in C++ offers a lot of control and flexibility for those looking to create their own games.