먼지 키우기 다마고치

프로젝트 소개


본 프로젝트는 파이게임(Pygame) 라이브러리의 다양한 기능을 학습하고 실무적으로 활용해보기 위해 기획되었습니다. '다마고치'라는 친숙한 주제를 선정하여, 귀여운 캐릭터를 직접 키우고 사용자의 상호작용 방식에 따라 다르게 진화하는 시스템을 구현했습니다. 클래스 기반의 구조적 설계를 통해 프로그램을 체계적으로 만드는 방법을 익혔으며, 게임 실행에 필요한 시각적 요소들을 직접 제작하여 완성도를 높였습니다.

프로젝트 기획


파이썬과 Pygame 라이브러리를 기반으로 개발되었으며, 객체 지향 프로그래밍(OOP) 방식을 적용하여 캐릭터, 버튼, 게임 관리 기능을 각각의 클래스로 분리했습니다. 게임은 이벤트 루프 구조를 중심으로 작동하며, 사용자의 마우스 클릭 이벤트를 감지하여 캐릭터의 상태를 변화시키고 이를 화면에 실시간으로 반영합니다. Visual Studio Code의 Live Share 기능을 통해 팀원과 실시간으로 협업하며 개발을 진행했습니다.

개발 환경 및 사용 기술


개발언어

Python을 사용하여 게임의 모든 로직을 구현했습니다. 파이썬의 간결한 문법과 강력한 라이브러리 지원으로 게임 개발을 효율적으로 진행할 수 있었습니다.

주요 라이브러리

Pygame (2D 게임 제작, 이벤트 처리, 이미지/폰트 출력)은 2D 게임 제작을 위한 핵심 라이브러리로 사용되었습니다. Pygame은 이벤트 처리, 이미지 및 폰트 출력 기능을 제공하여 게임의 시각적 요소와 사용자 상호작용을 구현하는 데 매우 유용했습니다.

개발도구

Visual Studio Code에서 개발을 진행했으며, Live Share 기능을 사용하여 팀원과 실시간 공동 작업을 수행했습니다. 팀원과 함께 작업하는 과정에서 어려움이 발생했을 때는 인공지능의 도움을 받아 문제를 해결했습니다. 또한 한글 폰트(malgun.ttf)를 적용하여 게임 내 텍스트가 올바르게 표시되도록 했으며, 이미지 에셋을 활용하여 캐릭터와 배경을 구성했습니다.

시스템 구조 및 주요 코드


1. 버튼 시스템 (Button Class)

게임 내 상호작용을 담당하는 버튼 클래스입니다. H(밥), C(청소), G(진화) 버튼을 구성하며, 원형으로 그려지고 클릭 시 연결된 액션을 실행합니다.

Button 클래스 코드

Button 클래스의 초기화 및 드로잉 로직

2. 캐릭터 상태 관리 (Dusty Class)

메인 캐릭터인 Dusty의 상태를 관리하는 클래스입니다. 배고픔(hunger)과 청결도(cleanliness) 수치를 관리하며, 각 수치를 회복시키는 feed()와 clean() 메서드를 포함하고 있습니다. 상태 변화 시 캐릭터의 대사가 말풍선으로 표시됩니다.

Dusty 클래스 코드

상태 회복 및 반응 처리 로직

3. 메인 루프 (Main Loop)

게임의 전체 흐름을 제어하는 메인 함수입니다. Pygame 초기화부터 에셋 로드, 이벤트 처리, 상태 업데이트 및 화면 렌더링이 반복적으로 수행됩니다.

Main 함수 코드

게임 이벤트 루프 및 렌더링 구조

주요 기능


실시간 상태 관리 및 자동 감소

캐릭터의 생존에 필수적인 배고픔과 청결도 수치를 관리하고, 시간이 지날수록 이 수치가 자동으로 감소하게 하는 기능입니다. 이 기능은 Dusty 클래스에서 주로 담당하고 있습니다.

사용자 상호작용 및 피드백 시스템

사용자가 버튼 클릭을 통해 캐릭터의 상태를 즉시 회복시키고, 그 결과를 눈으로 바로 확인할 수 있게 하는 기능입니다. 이 기능은 버튼 클래스와 게이지 회복 메서드들에서 주로 담당하고 있습니다.

조건부 진화 시스템

캐릭터가 단순히 시간이 아닌, 플레이어의 관리 성과에 따라 다른 모습으로 성장하도록 만드는 기능입니다. 성장도가 100%에 도달하면 진화가 가능해지며, 행복한 시간이 더 길면 '프렌들리'로, 화난 시간이 더 길면 '와일드'로 진화합니다. 이 기능은 진화 관련 메서드와 출력 부분에서 주로 담당하고 있습니다.

실행 화면 및 게임 플레이


게임을 실행하면 Tamagotchi DUSTY ADVENTURE 형태의 UI가 나타납니다. 화면 중앙에는 먼지 캐릭터가 위치하며, 좌측 상단에는 배고픔, 청결도 등을 나타내는 게이지 바가 있습니다. 화면 하단에는 빨강(밥), 초록(청소), 파랑(진화) 세 개의 버튼이 배치되어 있습니다. 캐릭터는 게이지 상황에 따라 다양한 표정과 행동으로 자신의 상태를 표현하며, 사용자와의 상호작용에 즉시 반응합니다.

다마고치 프로젝트 실제 플레이 시연 영상

어려웠던 점과 해결 방법


어려웠던 점

프로젝트를 진행하면서 여러 가지 어려움을 마주했습니다. 먼저 UI 배치와 해상도 맞추기가 매우 어려웠습니다. 투명 배경을 가진 캐릭터 이미지를 정확하게 처리해야 했으며, 한글 폰트가 제대로 표시되지 않는 문제와 에셋 경로 오류도 발생했습니다.

해결 방법

이러한 문제들을 해결하기 위해 좌표를 여러 번 수정하여 직접 눈으로 확인하면서 조정했습니다. 폰트 파일을 지정된 폴더에 배치하고 경로를 수정하여 경로 오류를 해결했습니다. 구현 중 막히는 부분이 있을 때는 인공지능과 팀원과 협력하여 문제를 해결했으며, 이 과정에서 많은 것을 배울 수 있었습니다.

프로젝트를 통해 배운 점


Pygame의 다양한 기능과 이벤트 루프 구조를 깊이 있게 이해하게 되었습니다. 시험 기간과 겹쳐 시간적 여유는 부족했지만, 팀원과의 협력을 통해 프로젝트를 성공적으로 완성할 수 있었습니다. 객체 지향 프로그래밍의 중요성과 팀 협업의 가치를 깨달았으며, 향후 더 다양한 진화 형태, 아이템 시스템, 사운드 효과 등을 추가하여 게임의 완성도를 높이고 싶습니다.