안녕하세요 JollyTree입니다 (•̀ᴗ•́)و
예전에 가지고 놀던 사이먼(Simon) 게임기가 생각이 나서 프로그램으로 만들어 보자는 생각을 했습니다. 일종의 기억력 테스트 게임이라고 알고 있었는데 정작 이름은 모르고 있었더라구요. 구글링 해서 찾아보니 위키에서 Simon Game이라고 알려주네요.
Simon(game) : en.wikipedia.org/wiki/Simon_(game)
그런데 장난감부터 컴퓨터 프로그램, 스마트폰 앱들이 많이 있긴 하지만 생각보다 알고리즘이 간결하여 스터디도 할겸 이미지 제작부터 코딩까지 해 보기로 하였습니다.
아무래도 이미지, 효과음 등을 표현하기에는 Visual Studio 2019만으로는 표현이 부족하다는 생각이 들어 관련 라이브러리들을 찾아봤습니다. 간단히 2D 이미지 정도만 처리할 수 있으면 될 것 같아서 찾아보았는데 개인적으로 Class, API 들이 직관적이라고 생각되는 SFML(SFML(Simple and Fast Multimedia Library)로 정하였습니다.
SFML은 여기서 다운로드 가능합니다. 개발자 포럼도 활발하게 운영 중이니 참고하세요.
SFML은 C++로 구현이 되어 있는데 라이브러리를 사용하기 위해서는 제공되는 클래스들을 알아야 합니다. 그래서 개인적으로 필요한 클래스들만을 간단히 정리해 보았습니다.
이미지 출력 및 효과 관련 클래스 : Texture, Sprite
텍스트(글자) 출력 및 효과 관련 클래스 : Text, Font
입력장치 처리 관련 클래스 : Mouse
윈도우 렌더링 관련 클래스 : RenderWindows
이 정도 일것 같구요. SFML에는 여러 헤더가 있는데, Graphics.hpp, Audio.hpp 정도 사용할 것 같습니다. 효과음을 넣지 않는다면 Audio.hpp는 필요없습니다.
게임 디자인
단순하게 디자인한 메인 윈도우 화면입니다.
사이먼 게임의 플레이 방법을 간략히 설명하면,
- (컴퓨터) 레벨 1에서 네가지 색 버튼 중 1개 색을 on 했다가 off한다.
- (인간) 마우스를 이용하여 on, off 된 색을 맞춘다. 맞으면 레벨 2로 진행
- (컴퓨터) 레벨 2에서 네가지 색 버튼 중 2개 색을 약 1초 간격으로 on 했다가 off한다.
- (인간) 마우스를 이용하여 순차적으로 on되었다가 off된 색을 맞춘다.
...
정도로 레벨이 올라갈 수록 인간이 맞춰야 할 색 버튼의 수가 증가하기 때문에 잘 기억을 해야 합니다. 프로그램의 흐름을 정리해 보면 아래와 같습니다.
1. 게임 초기화:
1.1 게임 윈도우 생성
1.2 이미지 파일과 폰트 파일 읽기
1.3 이미지 파일 출력
1.4 윈도우 출력
2. 반복 플레이:
2.1 1~4 중 랜덤번호 생성(반복시 랜덤번호는 +1씩 증가
2.2 랜덤 번호에 따라 해당 번호의 버튼을 약 0.5초 깜빡임
2.3 마우스 입력에 따라 버튼 눌림 효과 보여주기
2.4 마우스는 클릭위치를 판단하여 어떤 색의 버튼이 클릭 되었는지 식별
2.5 사용자가 클릭한 색의 번호가 랜덤 번호와 동일한 순서로 모두 입력되었으면 다음 레벨로 진행
2.6 사용자가 계속 버튼을 맞추면 2.1~2.5를 반복
이상 사이먼 게임을 만들기 위한 대략적인 스케치이구요. 이번 연재는 이번 포스팅(1.시작)을 시작으로 SFML 소개, 설정, 스터디, 게임 만들기 순으로 진행할 예정입니다. 물론 스터디하는 과정에서 연재 순서와 내용은 일부 변경될 수 있습니다.
연재 순서
1. 시작
2. SFML 라이브러리 Visual Studio 2019 설정
3. SFML 예제 스터디(이미지 출력, 효과음 등 예제)
3. 심플 게임 만들기(Simon)
이상 JollyTree였습니다 (•̀ᴗ•́)و
'Coding & Programming > C, C++, SFML' 카테고리의 다른 글
[C/C++, SFML] 6. 폰트(font) 파일 읽고 화면에 출력하기(Font, Text) (2) | 2021.03.29 |
---|---|
[C/C++, SFML] 5. 캐릭터, 배경 등 이미지(Texture, Sprite) 출력하기 (1) | 2021.03.28 |
[C/C++, SFML] 4. 타이머(Timer) 구현하기 (2) | 2021.03.27 |
[C/C++, SFML] 3. 기본 윈도우(RenderWindow) 출력하기 (0) | 2021.03.26 |
[C/C++, SFML] 2. SFML 라이브러리 소개 및 Visual Studio 2019 설정 (0) | 2021.03.25 |