문제 1. Life Game 구현하기

Proj 1에서는 pygame을 이용하여 콘웨이의 Life Game을 구현하는 것입니다.

Life Game이 무엇인지에 대해서는 외부 자료를 참고해주세요. 여기서는 간단히 설명합니다.

셀이 가로 세로 100칸인 필드가 있습니다. 각 칸에는 세포의 존재를 나타냅니다.

https://youtu.be/1eZ_iVWU5aA

한 칸에 대해서 인접한 8칸(상하좌우,대각선)을 조사합니다. 만약 세포가 있을 때, 인접 세포 수가 2개 또는 3개이라면 해당 세포는 살고(live), 그렇지 않으면 다음 step에 죽습니다(death). 만약 세포가 없을 때, 인접 세포 수가 3개이라면 다음 step에서 그 자리에 세포가 새로 생깁니다(birth).

Untitled

Untitled

Untitled

Untitled

이것을 모든 칸에 대해서 시행하고, 다음 step으로 진행되게 됩니다. 이것을 반복합니다.

1) pygame 알아보기

pygame은 Python으로 작성된 멀티미디어 라이브러리로 오디오, 이미지, 비디오, 2D 그래픽, 텍스트 등 다양한 미디어를 사용하고 조작할 수 있도록 하는 게임 인터페이스를 제공합니다. pygame 라이브러리를 사용하면 일반적으로 사용하는 다양한 게임을 개발할 수 있습니다. 이는 컴퓨터 게임과 비교해 보면 보다 간단하고 다양한 기능들을 제공합니다.

pygame을 사용하기 위해 설치를 먼저 수행합니다. 터미널에서 해당 명령어를 입력하여 pygame을 설치합니다.

pip install pygame

pygame을 이용한 프로그램들은 대부분 아래 코드 주석과 같은 구조를 가집니다.

import pygame
import numpy as np

# pygame 파라미터 선언
FPS = 10

# pygame 초기화
pygame.init()

# 게임 초기화
field = np.zeros((100, 100))
mode = "edit"

while True:
    # 화면 그리기

    # 게임 처리하기

    # 마우스, 키보드로부터 이벤트 감지 
        # 게임 이벤트 처리하기

    # 프레임 속도 조절 기능
    clock = pygame.time.Clock()
    clock.tick(FPS)

(1) pygame 파라미터 선언

pygame에 사용할 파라미터를 선언합니다. 보통 전부 대문자로 변수 이름을 만듭니다.

(2) pygame 초기화

(3) 게임 초기화

(4) 화면 그리기

(5) 게임 처리하기

(6) 마우스, 키보드로부터 이벤트 감지

이외에도 세세한 조건을 따질 수도 있습니다. 외부 자료에서 pygame 기본 예제를 살펴보며 기능들이 어떻게 사용되는지 확인해보세요.

2) 하나의 step 진행해보기

본격적으로 pygame을 사용해보기 전에, 한 step만 진행되는 간단한 예제를 만듭니다. 아래 예제 코드를 올바르게 했다면, next_field에서는 뒤집어진 7 모양으로 출력이 됩니다.

모서리에서는 인접한 셀이 8개가 아니므로 일단 업데이트 대상에서 제외하도록 합니다.

Untitled

import numpy as np
board_size = 5

field = np.zeros((board_size, board_size))
field[1, 2] = 1
field[2, 1] = 1
field[2, 2] = 1
field[2, 3] = 1
field[3, 1] = 1

print("privious field:")
print(field)

#################################################
# Your code here
#################################################

print("next field:")
print(next_field)

3) pygame을 이용하여 life game 구현

(1) 구현 사항