게임제작

2020TermProject - COVID19 Game by using Python

깜냥c 2020. 11. 6. 14:12

학교 텀 프로젝트 과제로 COVID19 시뮬레이션 게임을 만들었습니다.

python의 모듈인 pygame을 이용하여 제작하였고, 관련 데이터를 모으기 위해 정부기관의 API를 이용해 크롤링하였습니다.

아래는 Jupyter notebook으로 작성한 보고서를 일부 수정한 내용입니다.

주제

주제 : 코로나19 데이터를 분석, 이를 바탕으로 게임을 제작하여 사회적 거리두기의 필요성을 인지하도록 한다.

인터넷을 통한 데이터의 획득

코로나 19 정보들은 http://ncov.mohw.go.kr/ 사이트와 http://www.data.go.kr/index.do 에서 코로나19 국내 현황을 얻는다. api를 통해 정보를 얻고 그 외의 정보들은 파이썬에 쉽게 적용할 수 있게 csv형식으로 바꾸어준다.

코로나 19 감염, 시도별 감염, 연령별 성별 감염 API를 활용하였다.

이후 python에서 url, request, json, xmltodict 등의 모듈을 추가하여 코로나 19 API에서 필요한 데이터만을 추출했다.

-코로나 19 감염 API에서 코로나 19 확진자 수, 사망자 수 , 기준 날짜 등을 얻었다.

-코로나 19 시도별 감염 API에서는 지역에 따른 확진자 수 데이터를 얻었다.

-코로나 19 연령별, 성별 감염 API에서 연령, 성별에 따른 확진자 수를 얻었다.

위에서 얻은 데이터들은 csv모듈을 활용하여 csv파일로 저장하였다.

추가적으로 행정안전부 사이트(http://27.101.213.4/) 에서 전체 인구수 통계를 얻었다.

Pygame 라이브러리에 대한 정보는 https://pythonprogramming.net/https://www.pygame.org/docs/ 를 비롯한 사이트에서 정보를 얻는다.

분석을 위한 데이터의 가공

먼저 python 에서 matplotlib.pyplot 모듈을 임포트 한 후 연령에 따른 확진자 수/인구수 그래프를 생성했다

같은 방식으로 지역별 확진자를 통해 확진자 수 / 인구수 그래프를 생성하였다.

그리고 코로나19 확진자 수, 기준 날짜 등을 토대로 해당 날짜에 맞추어 계산 후 그래프를 생성하였다.

게임 제작 결과

 

COVID-19 게임은 pygame 라이브러리 함수인 pygame.event, pygame.K 등을 이용하고 또 리스트, 랜덤 모듈, 반복문과 조건문 등을 사용했다

횡스크롤 게임
- 위,앞 등에서 장애물이 날아오며 플레이어는 점프, 앞 뒤 이동을 통해 피할 수 있다.
- 게임을 클리어하면 하루가 지나고 다시 시뮬레이션 화면으로 전환된다.
- 총 3번의 기회가 있으며, 장애물에 부딪히면 기회가 한 번 소진되고 감염도가 증가하며 게임을 다시 시작한다.
- 모든 기회를 소진하면 감염된 상태가 되며, 더 어려워진 횡스크롤 게임을 진행한다.
- 감염된 상태에서 횡스크롤 게임을 클리어하면, 감염도는 0으로 되고 하루가 지난 채 시뮬레이션을 진행한다.
- 만약 감염된 상태에서 게임오버가 되면, 시뮬레이션에서 게임오버 창으로 이동하며 감염 엔딩으로 끝이 난다.

시뮬레이션 게임
- 맨 처음 화면에서 나이를 설정할 수 있다. 나이에 따라 매일 지루함, 배고픔 등의 변화 수치가 다르다.
- 나이 선택 이후 게임의 대한 간략한 설명 창이 나오며 스페이스바로 창을 넘긴다.
- 메인 화면에서는 이동, 휴식, 요리 세 가지의 선택을 할 수 있다.
- 이동 선택 시, 다른 지역과 클럽 중 하나를 고를 수 있다.
- 다른 지역 이동 시, 랜덤으로 지역이 하나 골라지며 각 지역에 따라 난이도가 다른 횡스크롤 게임을 진행한다.
- 다른 지역 이동시 지루함이 꽤 감소하며, 지역 난이도는 코로나 19 지역별 확진자 수에 기반하여 조정하였다.
- 클럽 이동시, 지루함이 줄어드는 대신 감염도가 증가한다. 또한 어려운 난이도로 횡스크롤 게임을 진행한다.
- 휴식 선택 시, 게임과 유튜브 중 하나를 고를 수 있다.
- 게임 선택 시, 리그 오브 레전드 게임을 플레이하며 지루함이 조금 감소한다.
- 유튜브 선택 시, 사회적 거리두기 영상을 시청하며 지루함이 조금 감소한다.
- 요리 선택 시, 라면과 스팸 볶음밥 중 하나를 고를 수 있다.
- 라면 선택 시, 라면을 먹으며 배고픔이 약간 감소한다.
- 스팸볶음밥 선택 시, 스팸을 먹으며 배고픔이 꽤 감소한다.
- 플레이어는 감염도, 지루함, 배고픔 수치를 가지고 있으며 이는 화면 우측 상단에 표시된다
- 지루함, 배고픔 수치가 100을 넘어가면 게임오버가 된다. 하루가 지날 때마다, 지루함과 배고픔은 일정 수치 증가한다.
- 감염도 수치는 감염될 확률을 의미하며, 감염될 경우 매우 어려운 난이도의 횡스크롤 게임을 진행한다.
- 화면 좌측에 날짜별 코로나 확진자 수, 사망자 수 등이 나온다. 만약 확진자 수가 증가한 날에 밖을 나가는 등의 행동을 하면, 감염도 증가 수치는 커진다.
- 총 31일을 생존하여 넘기면 승리한다.

화면 전환 구성
- 횡스크롤 게임과 시뮬레이션 게임 사이의 화면 전환은 각 initGame, runGame 등의 함수를 실행시켜 새로운 화면을 출력하여 구현했다.
- 혹은 함수의 반환 값을 0으로 지정하여 함수를 종료시키고 다른 함수를 불러들이는 방식도 사용하였다.

(7) 참고문헌

관련 코드 및 기타 내용은 아래 깃헙 링크에 있습니다.

Github : github.com/bubbletok/2020_TermProject

'게임제작' 카테고리의 다른 글

[Unreal 5] Fallen Knight (2023 G-STAR 출품작)  (4) 2024.02.28
[Unity] 한글 워들(Korean Wordle) 출시  (0) 2024.02.26
[Unreal 5] Hallucination  (0) 2024.01.07
[2023 GIGDC] Photo Forge  (1) 2023.12.27
[Unity] 식중독을 부탁해  (0) 2023.11.29