SFML 소개
SFML(Simple and Fast Multimedia Library)은 멀티미디어 애플리케이션 개발을 위한 크로스 플랫폼 C++ 라이브러리입니다. 주로 2D 게임 개발에 사용되며, 그래픽, 오디오, 네트워크, 입출력 등의 기능을 제공합니다.
SFML 설치 및 설정
SFML 설치
리눅스 환경에서 SFML을 설치하려면 다음 명령어를 사용합니다.
sudo apt-get install libsfml-dev
SFML 프로젝트 설정
SFML을 사용하여 간단한 게임을 개발하는 프로젝트를 설정합니다.
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(SFMLGame)
set(CMAKE_CXX_STANDARD 17)
find_package(SFML 2.5 COMPONENTS graphics audio REQUIRED)
add_executable(sfml_game main.cpp)
target_link_libraries(sfml_game sfml-graphics sfml-audio)
main.cpp
다음은 간단한 SFML 창을 생성하고 이벤트를 처리하는 예제입니다.
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Game");
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.clear();
window.display();
}
return 0;
}
빌드 및 실행
mkdir build
cd build
cmake ..
make
./sfml_game
이 코드는 800x600 해상도의 창을 생성하고, 닫기 버튼을 클릭하면 창을 닫습니다.
SDL 소개
SDL(Simple DirectMedia Layer)은 멀티미디어 애플리케이션 개발을 위한 크로스 플랫폼 C 라이브러리입니다. 주로 2D 게임 개발에 사용되며, 그래픽, 오디오, 이벤트 처리 등의 기능을 제공합니다.
SDL 설치 및 설정
SDL 설치
리눅스 환경에서 SDL을 설치하려면 다음 명령어를 사용합니다.
sudo apt-get install libsdl2-dev
SDL 프로젝트 설정
SDL을 사용하여 간단한 게임을 개발하는 프로젝트를 설정합니다.
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(SDLGame)
set(CMAKE_CXX_STANDARD 17)
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(sdl_game main.cpp)
target_link_libraries(sdl_game ${SDL2_LIBRARIES})
main.cpp
다음은 간단한 SDL 창을 생성하고 이벤트를 처리하는 예제입니다.
#include <SDL2/SDL.h>
#include <iostream>
int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl;
return 1;
}
SDL_Window* window = SDL_CreateWindow("SDL Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);
if (window == NULL) {
std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl;
return 1;
}
bool quit = false;
SDL_Event event;
while (!quit) {
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
quit = true;
}
}
SDL_SetRenderDrawColor(SDL_GetRenderer(window), 0, 0, 0, 255);
SDL_RenderClear(SDL_GetRenderer(window));
SDL_RenderPresent(SDL_GetRenderer(window));
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
빌드 및 실행
mkdir build
cd build
cmake ..
make
./sdl_game
이 코드는 800x600 해상도의 창을 생성하고, 닫기 버튼을 클릭하면 창을 닫습니다.
간단한 게임 구현
SFML과 SDL을 사용하여 간단한 게임을 구현해보겠습니다. 여기서는 SFML을 사용하여 간단한 "Pong" 게임을 구현합니다.
SFML로 Pong 게임 구현
main.cpp
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "Pong");
sf::RectangleShape paddle1(sf::Vector2f(25, 100));
sf::RectangleShape paddle2(sf::Vector2f(25, 100));
sf::CircleShape ball(10);
paddle1.setPosition(50, 250);
paddle2.setPosition(725, 250);
ball.setPosition(395, 295);
sf::Vector2f ballVelocity(0.3f, 0.3f);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Paddle1 control
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && paddle1.getPosition().y > 0) {
paddle1.move(0, -0.5f);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S) && paddle1.getPosition().y < 500) {
paddle1.move(0, 0.5f);
}
// Paddle2 control
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && paddle2.getPosition().y > 0) {
paddle2.move(0, -0.5f);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) && paddle2.getPosition().y < 500) {
paddle2.move(0, 0.5f);
}
// Ball movement
ball.move(ballVelocity);
if (ball.getPosition().y <= 0 || ball.getPosition().y >= 590) {
ballVelocity.y = -ballVelocity.y;
}
if (ball.getGlobalBounds().intersects(paddle1.getGlobalBounds()) ||
ball.getGlobalBounds().intersects(paddle2.getGlobalBounds())) {
ballVelocity.x = -ballVelocity.x;
}
window.clear();
window.draw(paddle1);
window.draw(paddle2);
window.draw(ball);
window.display();
}
return 0;
}
이 코드는 간단한 Pong 게임을 구현합니다. 플레이어는 W/S 키와 위/아래 키를 사용하여 패들을 제어하고, 공이 패들에 부딪히면 방향을 바꿉니다.
빌드 및 실행
mkdir build
cd build
cmake ..
make
./sfml_game
게임을 실행하여 Pong 게임을 플레이해볼 수 있습니다.
이제 28일차의 학습을 마쳤습니다. SFML과 SDL을 사용하여 간단한 게임을 구현하는 방법을 학습하고, SFML을 사용하여 Pong 게임을 구현해보았습니다.
질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "머신러닝을 위한 C++ 라이브러리 (TensorFlow, Caffe)"에 대해 학습하겠습니다.
'-----ETC----- > C++ 고급 프로그래밍과 응용 프로젝트 시리즈' 카테고리의 다른 글
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 29: 머신러닝을 위한 C++ 라이브러리 (TensorFlow, Caffe) (0) | 2024.08.01 |
---|---|
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 30: 오픈 소스 프로젝트 참여 방법 및 기여 (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 26: C++로 네트워크 프로그래밍 (소켓 프로그래밍) (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 27: C++에서의 데이터베이스 연동 (SQLite, MySQL) (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 24: gRPC를 이용한 분산 시스템 (0) | 2024.08.01 |