게임 진행 상황을 저장하고 로드하는 기능을 구현하는 것은 전반적인 사용자 경험을 크게 개선하고 플레이어의 참여를 유도하는 현대 게임 제작의 필수 요소입니다. 다행히도 2차원 게임 개발에 널리 사용되는 Python 라이브러리인 PyGame을 활용하면 이 기능을 게임 디자인 프로세스에 비교적 쉽고 효율적으로 통합할 수 있습니다.

간단한 게임 만들기

시작하기 전에 장치에 Pip이 반드시 설치되어 있어야 합니다. Pip이 설치되면 다음 명령을 실행하여 PyGame 모듈을 설치하세요:

 pip install pygame 

처음에 기본 게임을 기초로 개발하여 PyGame 내에서 저장 메커니즘을 활용하는 데모를 시연합니다.

이 출판물에 사용된 코드는 이 GitHub 리포지토리에서 액세스할 수 있으며 MIT 라이선스 조건에 따라 무료로 사용할 수 있습니다.

현재 게임의 반복은 플레이어에게 측면 이동 기능을 제공합니다. 게임의 기본 아키텍처를 예시하는 샘플 코드 세그먼트가 아래에 나와 있습니다: ”’python import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) font = pygame.font.SysFont(“Arial”, 32) running = True 실행 중입니다: pygame.event.get()의 event에 대해: event.type == pygame.QUIT: running = False # 플레이어 이동 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: # 왼쪽으로 이동 pass elif keys[pygame

 import pygame

# Initialize Pygame
pygame.init()

# Set up the game window
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("Save and Load System Tutorial")

# Game variables
player_x = 400
player_y = 500
player_speed = 5

# Game loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= player_speed
    if keys[pygame.K_RIGHT]:
        player_x += player_speed

    # Clear the screen
    window.fill((0, 0, 0))

    # Draw the player
    pygame.draw.rect(window, (255, 255, 255), (player_x, player_y, 50, 50))

    # Update the display
    pygame.display.flip()

# Quit the game
pygame.quit()

게임 상태 및 데이터 지속성 관리

게임 상태를 관리하고 저장 및 로드하기 전에 데이터를 저장하는 한 가지 가능한 방법은 파이썬 사전을 활용하는 것입니다. 이를 위해서는 다음과 같이 이전 코드를 변경하여 해당 기능을 통합해야 할 수 있습니다:

 # Game variables
game_state = {
    'player_x': 400,
    'player_y': 500
}

# Game loop
running = True
while running:
    # ...

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        game_state['player_x'] -= player_speed
    if keys[pygame.K_RIGHT]:
        game_state['player_x'] += player_speed

    # ...

    pygame.display.flip()

저장 및 로드 기능 구현

기본적으로 오브젝트를 직렬화 및 역직렬화할 수 있는 파이썬의 피클 모듈을 활용하면 게임 진행 상황을 저장 및 로드하는 기능을 쉽게 구현할 수 있습니다. 이를 위해 “save-game.py”라는 이름의 새 스크립트를 생성하고 다음과 같이 수정하여 필요한 코드를 통합하는 것이 좋습니다:

 game_state = {
    'player_x': player_x,
    'player_y': player_y
}

# Save game state
def save_game_state(game_state, file_name):
    try:
        with open(file_name, 'wb') as file:
            pickle.dump(game_state, file)
            print("Game state saved successfully!")
    except IOError:
        print("Error: Unable to save game state.")

# Load game state
def load_game_state(file_name):
    try:
        with open(file_name, 'rb') as file:
            game_state = pickle.load(file)
            print("Game state loaded successfully!")
            return game_state
    except (IOError, pickle.UnpicklingError):
        print("Error: Unable to load game state.")

# Game loop
running = True
while running:

    # ...

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= player_speed
        game_state['player_x'] = player_x
    if keys[pygame.K_RIGHT]:
        player_x += player_speed
        game_state['player_x'] = player_x

    if keys[pygame.K_s]:
        save_game_state(game_state, 'save_game.pickle')
    if keys[pygame.K_l]:
        game_state = load_game_state('save_game.pickle')
        player_x = game_state['player_x']
    
    # ...

# ...

고급 언어로 응답을 제공하도록 입력이 처리되었습니다.

이 글도 확인해 보세요:  Vite 시작하기: 최고의 빌드 툴

저장 슬롯을 위한 사용자 인터페이스 설계

데이터를 저장하고 로드하는 기능을 제공하려면 사용자에게 선택 가능한 저장 슬롯을 제시하는 것이 좋습니다. 이러한 선택 과정을 통해 게이머는 진행 상황을 저장하거나 로드할 특정 슬롯을 결정할 수 있습니다.현재 구현은 콘솔 내에서 이러한 선택 사항을 표시하지만, 파이썬의 그래픽 사용자 인터페이스 프레임워크를 활용하여 보다 직관적이고 시각적으로 매력적인 인터페이스를 개발할 수 있습니다.

사용 가능한 저장 슬롯의 열거 역할을 하는 `save_slots` 배열을 구현하고 `selected_slot` 변수를 유효하지 않은 값으로 초기화합니다.

“저장” 명령(K\_s)이 활성화되면 액세스 가능한 저장 모드 옵션(K\_1, K\_2 또는 K\_3)을 표시하고 사용자가 해당 숫자 키를 입력하여 하나를 선택할 수 있도록 합니다. 선택이 완료되면 현재 게임 상태를 선택한 세이브 모드의 제목으로 지정된 파일에 저장합니다.

“로드” 버튼(키 콤보 K\_l)을 클릭하면 사용 가능한 저장 슬롯이 표시됩니다. 사용자는 화살표 키(K\_a, K\_b, K\_c)를 사용하여 슬롯을 선택하거나 터치 기반 입력을 통해 슬롯을 선택할 수 있습니다. 슬롯이 선택되면 관련 파일에서 저장된 게임 상태를 불러옵니다.

‘interface.py’라는 파이썬 파일을 새로 생성하는 방법은 다음과 같습니다: 1. 텍스트 편집기 또는 원하는 IDE(예: Visual Studio Code, Sublime Text, PyCharm)를 엽니다. 2. 프로젝트 디렉토리에 파일을 저장할 폴더가 없는 경우 새 폴더를 만듭니다. 예를 들어, “src” 디렉토리 내에 “인터페이스라는 폴더를 만들 수 있습니다.

 # Game variables
save_slots = ['Slot 1', 'Slot 2', 'Slot 3']
selected_slot = None

# Game loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_s:
                # Show save slots
                selected_slot = None
                for i, slot in enumerate(save_slots):
                    print(f"Save Slot {i+1}: {slot}")
                print("Choose a slot to save the game.")

            if event.key == pygame.K_l:
               print("Select Slot:- a - Slot 1 , b - Slot 3, c - Slot 3")
               # Show save slots
               selected_slot = None
                for i, slot in enumerate(save_slots):
                    print(f"Save Slot {i+1}: {slot}")
                print("Choose a slot to load the game.")

            if event.key in [pygame.K_1, pygame.K_2, pygame.K_3]:
                # Save or load game based on the selected slot
                slot_index = event.key - pygame.K_1
                selected_slot = save_slots[slot_index]
                
                save_game_state(game_state, f"{selected_slot}.pickle")
                print(f"Game saved in {selected_slot}!")

            if event.key in [pygame.K_a, pygame.K_b, pygame.K_c]:
               
               slot_index = event.key - pygame.K_a
               selected_slot = save_slots[slot_index]
               game_state = load_game_state(f"{selected_slot}.pickle")
               player_x = game_state['player_x']
               print(f"Game loaded from {selected_slot}!")
    # ...

    pygame.display.flip()

# ...

이 연구는 사람과 로봇의 상호작용 방식을 이해하기 위한 프레임워크를 개발할 때 고려해야 할 몇 가지 주요 측면을 강조하며, 보다 인간과 유사한 기계를 만들기 위해 기능적 반응과 정서적 반응을 모두 고려하는 것이 중요하다는 점을 포함합니다.

저작자 표시 필요 없음: Imran의 스크린샷

이 글도 확인해 보세요:  Reqwest로 Rust에서 HTTP 요청 만들기

덮어쓰기 옵션 처리

현재 게임 세이브를 덮어쓸 수 있는 대안을 제공하려면 게임 저장 파일을 교체하기 전에 사용자의 동의를 요청하는 알림 메시지를 통합하는 것이 좋습니다. 이를 위해 `overwriting-save.py`라는 새 스크립트를 생성하고 다음과 같이 내용을 조정합니다:

 # Save game state
def save_game_state(game_state, file_name):
    if os.path.exists(file_name):
        # Prompt for confirmation to overwrite existing save file
        overwrite = input("Save file already exists. Do you want to overwrite? (y/n): ")
        if overwrite.lower() != 'y':
            print("Save cancelled.")
            return

    try:
        with open(file_name, 'wb') as file:
            pickle.dump(game_state, file)
            print("Game state saved successfully!")
    except IOError:
        print("Error: Unable to save game state.")

# ...

# Load game state
def load_game_state(file_name):
    if not os.path.exists(file_name):
        print("Error: Save file does not exist.")
        return None

    try:
        with open(file_name, 'rb') as file:
            game_state = pickle.load(file)
            print("Game state loaded successfully!")
            return game_state
    except (IOError, pickle.UnpicklingError):
        print("Error: Unable to load game state.")
        return None

# ...

현재 게임 상태를 디스크에 저장하는 함수를 실행하기 전에 코드에서는 먼저 `os.path.exists()` 메서드를 사용하여 지정된 디렉터리에 같은 이름의 파일이 이미 있는지 확인합니다. 파일이 발견되면 프로그램은 경고 메시지와 해당 응답 선택을 통해 사용자의 승인을 요청합니다. 사용자가 기존 파일을 덮어쓰지 않기로 선택하면 백업 복사본 생성 작업이 무효화됩니다.

게임 상태를 로드하기 전에 저장 파일의 존재 여부를 확인할 때 파일이 없는 경우 적절한 조치가 취해지도록 하는 것이 중요합니다.이는 지정된 경로가 존재하면 ‘True’를 반환하고 그렇지 않으면 ‘False’를 반환하는 `os.path.exists()` 함수를 사용하여 구현할 수 있습니다. 저장 파일이 존재하지 않는 경우 오류 메시지를 표시하여 플레이어에게 적절히 경고하는 것이 좋습니다.

저장 및 로드 시스템 모범 사례

파이게임 또는 유사한 게임 개발 벤처 내에서 저장 및 로드 메커니즘을 통합할 때 최적의 기술을 통합하는 것이 가장 중요합니다.

구조화된 데이텀 표현을 사용하여 게임 상태를 표현하고 피클과 같은 직렬화 유틸리티를 함께 사용하면 전체 게임 상태를 손쉽게 저장하고 로드할 수 있습니다.

이 글도 확인해 보세요:  파이썬을 사용하여 FLAMES 게임 플레이하기

보관된 자료의 정리를 유지하고 기본 게임 디렉토리 내에 불필요한 항목이 쌓이는 것을 방지하기 위해 지정된 파일 저장 저장소를 구축해야 합니다

오류 관리를 통합하고 간결한 오류 알림을 제공하여 사용자가 데이터를 저장하거나 로드하는 동안 발생하는 기술적 어려움을 디버깅하고 해결하는 과정을 용이하게 하는 것이 필수적입니다. 이러한 정보를 제공함으로써 플레이어는 이러한 작업 중에 발생할 수 있는 문제를 보다 쉽게 이해할 수 있습니다.

여러 저장 옵션을 포함하면 게임 전반에 걸쳐 플레이어의 진행 상황을 다양하게 반복해서 보존할 수 있으므로 유리할 수 있습니다. 이를 통해 플레이어는 전체 진행 상황에 영향을 주지 않으면서도 다른 경로를 선택하거나 특정 구간을 다시 경험할 수 있는 자유를 누릴 수 있습니다.

저장 및 로드 시스템으로 게임의 몰입도 향상

저장 및 로드 기능의 통합은 게임의 참여도와 재미를 크게 높일 수 있는 잠재력을 가지고 있습니다. 사용자가 진행 상황을 보존하고 나중에 자신에게 더 적합한 시간에 게임을 다시 시작할 수 있기 때문입니다. 또한 이 기능은 플레이어의 결정과 행동이 오래 지속되는 영향을 미치는 복잡한 게임 세계를 만드는 데 도움이 됩니다.

저장 및 로딩 기능 구현을 통해 플레이어는 더욱 풍성하고 만족스러운 게임 경험을 할 수 있습니다.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.