[파이썬] `pygame`에서의 클라우드 저장

pygame logo

소개

pygame은 파이썬으로 게임 개발을 위한 모듈입니다. 게임 그래픽, 소리, 입력 처리 등 다양한 기능을 제공하여 게임 개발을 쉽게 할 수 있습니다. 이번에는 pygame을 사용하여 클라우드 저장 기능을 구현해보겠습니다.

클라우드 저장이란?

클라우드 저장은 인터넷을 통해 데이터를 서버에 저장하고 필요할 때마다 그 데이터를 다시 불러올 수 있는 기능을 말합니다. 이는 사용자의 게임 데이터를 안전하게 보관하고 여러 기기에서 접속하여 같은 게임 데이터를 사용할 수 있게 해줍니다.

pygame에서의 클라우드 저장 구현

pygame에서 클라우드 저장을 구현하기 위해서는 클라우드 서비스와의 연동이 필요합니다. 여기서는 Google Drive API를 사용하여 구현해보겠습니다. 아래는 클라우드 저장 기능을 갖는 Game 클래스입니다.

import os
import pickle
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

class Game:
    def __init__(self):
        self.saved_data = {}

    def load_saved_data(self):
        creds = None
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    'credentials.json', ['https://www.googleapis.com/auth/drive.file']
                )
                creds = flow.run_local_server(port=0)
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)

        service = build('drive', 'v3', credentials=creds)
        file_id = None
        results = service.files().list(
            q="name = 'saved_data'",
            fields="files(id)"
        ).execute()
        items = results.get('files', [])
        if len(items) > 0:
            file_id = items[0]['id']

        if file_id:
            request = service.files().get_media(fileId=file_id)
            with open('saved_data.pickle', 'wb') as file:
                file.write(request.execute())

        with open('saved_data.pickle', 'rb') as file:
            self.saved_data = pickle.load(file)

    def save_data(self):
        with open('saved_data.pickle', 'wb') as file:
            pickle.dump(self.saved_data, file)

        service = build('drive', 'v3', credentials=creds)
        file_id = None
        results = service.files().list(
            q="name = 'saved_data'",
            fields="files(id)"
        ).execute()
        items = results.get('files', [])
        if len(items) > 0:
            file_id = items[0]['id']

        media_body = build_http_media_request('saved_data.pickle', 'application/octet-stream')

        if file_id:
            service.files().update(
                fileId=file_id,
                media_body=media_body
            ).execute()
        else:
            service.files().create(
                body={
                    'name': 'saved_data',
                    'mimeType': 'application/octet-stream'
                },
                media_body=media_body
            ).execute()

        print("Data saved successfully.")

사용법

위의 코드를 사용하여 게임에서 클라우드 저장 기능을 사용할 수 있습니다. 아래는 사용 예시입니다.

game = Game()
game.load_saved_data()

# 게임 진행

game.save_data()

이제 pygame으로 게임을 개발하면서 클라우드 저장 기능을 손쉽게 구현할 수 있습니다.

마무리

pygame을 사용하는 개발자들은 게임에 클라우드 저장 기능을 추가하여 사용자 데이터를 안전하게 보관하고 여러 기기에서 사용할 수 있도록 할 수 있습니다. 이번 글에서는 Google Drive API를 사용하여 클라우드 저장 기능을 구현하는 방법을 살펴보았습니다. 이제 pygame을 이용하여 만드는 게임에 클라우드 저장 기능을 추가해보세요!

Happy coding! :tada: