2. 해외선물/2-2. 해외선물 알고리즘 연구

(해외선물 자동매매) 차트 지지/저항 구하기 (1) 벽돌깨기 게임 구현하기(BricksBreak)

봄이오네 2024. 10. 4. 08:00
반응형

 

목 차
1. 들어가며
2. 사전설명
 1) 구현하여야 할 내용

 2) pygame 라이브러리 활용하기
3. 코드설명
4. 전체코드
5. 마치며

 

 

1. 들어가며

필자가 코딩을 하는 이유는 자동매매로 해외선물에서 수익을 올려보자는 것이다. 수동매매(직접매매)를 하면서 느끼는건, 나스닥 차트를 하염없이 지켜보아도... 손실이 계속 누적되었다.

 

수동매매(직접매매)에 대해 회의적이고, 진입/청산에 대해 내 자신을 신뢰할 수 없게 되었다. 자동매매가 답인걸 알면서도, 실력이 부족해서일까? 코딩을 할 때 계속 막히니 답답한 마음 뿐이다.

 

뭔가 막혔을 때는, 다른 방법을 찾는 편이다. 2024년 1월~8월까지, 기술적 매매(차트)만 고집하면서 알고리즘(패턴)을 찾으려니, 나스닥의 화려(?)한 움직임(moving)에 질려 버렸다. 그래서 관심을 가지게 된 것은 몬테카를로 트리 서치(MCTS)였다. 하지만 MCTS를 코드로 구현하기에는 필자의 코딩 실력이 너무 부족해서, 지금은 생각만 하고 있다.

 

AI 공부를 안하려고 했는데, 나스닥 차트의 변화무쌍한 움직임을 고려한다면, AI를 이용한 매매는 지금의 필자에게 유일한 탈출구라는 생각을 하면서 공부를 하고 있다.

 

필자가 쓰는 글에는 알파고나 퀀트매매에서 나오는 알고리즘이 설명하지 않는다. 그런 알고리즘을 알고 있지도 않고, 필지가 이해를 해야 설명을 할 수 있는데, 필자가 이해할 수 없는 내용들이 많다. ^^;

 

총 6개 정도의 글을 쓸 것이다. 글을 쓰다보면 글의 분량이 길어질 수 있다. 필자 생각에는 10개 정도 글을 쓸 것 같다.

 

1번글 : 벽돌깨기 게임 구현하기

2번글 : 벽돌깨기 패턴 기록하기

3번글 : 패턴 파악을 통해 벽돌깨기 게임 구현하기

 

4번글 : 나스닥 차트의 지지/저항 구하기

5번글 : 나스닥 차트의 지지/저항 업데이트 하기

6번글 : 봉 패턴 구하기 (피보니치 되돌림 활용)

 

이글에서는 벽돌깨기 게임 구현을 할 것이다. 향후 3번째 글의 "패턴 파악"을 통한 게임을 구현하기 위해서는, 먼저 "게임"을 이해해야 하기 때문이다.

 

본격적으로 들어가기에 앞서, 벽돌깨기 게임 코드의 출처는 아래와 같다. ai-creator님께 감사드린다.

   ※ ai-creator 님 코드 출처 : https://ai-creator.tistory.com/534

   ※ 토닥토닥 파이썬 출처   : https://wikidocs.net/65737

 

우리가 구현하려는 게임은 아래 <그림1>이다. 원본의 코드를 크게 수정하지 않았다. 원본의 코드에서 speed, time 정도만 추가하였다.

 

그림1. 벽돌깨기 게임을 실행한 화면

 

그리고 반드시 명심하자! 우리는 벽돌깨기 게임을 구현하는 것이 최종 목표는 아니다. AI 학습을 위한 하나의 수단으로 벽돌깨기를 구현하는 것이다. 즉, 게임에 대한 설명은 링크한 사이트에 가면, 정말 자세히 설명해 준다. 게임에 대한 구현도 중요하지만, 이걸 나스닥 자동매매에서 어떻게 활용할지 생각하면서 글을 보는게 좋을 것이다. 결론은 게임은 대략적으로만 설명하겠다는 것이다.

 

※ 파일은 이 글의 제일 하단에 업로드해 두었다.

 


2. 사전설명

1) 구현하여야 할 내용

벽돌깨기 게임에서 구현하여야 할 것들은 무엇이 있을까? < 그림1 >에서 잠깐 확인해 보자. 벽돌(bricks), 공(ball), 패들(paddle)만 있으면 되는 것일까? 추가로 설정해 주어야 하는 것은?

 

① 첫번째는 공(ball)과 벽(wall)의 관계이다. 왼쪽(left), 오른쪽(right), 위쪽(top)을 벽으로 설정해서 공과 부딪히면 팅겨낸다. 또한, 아래(bottom)로 공이  내려가면, 공을 팅겨내지 않고 기회가 1회 줄어든다. (여기서는 missed가 1이 추가된다)

 

② 두번째는 공(ball)과 벽돌(bricks)의 관계이다. 공이 상단에 있는 벽돌에 부딪히면, 벽돌은 없어지면서, 공은 x축, y축이 바뀐다. 

 

③ 세번째는 공(ball)과 패들(paddle)의 관계이다. 공이 하단에 있는 패들에 부딪히면, 패들은 없어지지 않고, 공은 x축, y축이 바뀐다.

 

2) pygame 라이브러리 활용하기

다시 한번 말하지만, 우리의 목표는 해외선물 자동매매에서 패턴을 만드는 것이지, 벽돌깨기 게임을 구현하는 것이 최종 목표는 아니다. pygame 라이브러리에 대해 간략히 설명한다. 이 정도만 알아도 pygame 라이브러리를 이용하여 게임을 만드는 것은 어렵지 않을 것이다. 게임 구현을 위해 필요한 내용만 설명한다.

 

① 게임화면 크기를 설정하기

게임의 화면크기를 설정한다. display.set_mode의 명령어를 활용하여 게임화면의 가로, 세로를 설정해 준다.

  • 활용형태 : pygame.display.set_mode(가로, 세로)
  • 활용예시 : pygame.display.set_mode(600, 800)

 

② 게임의 글씨 폰트 설정

게임에서 사용될 글자 크기 및 폰트를 설정한다. 폰트명에 None을 쓰면 기본폰트가 적용된다. 글자크기 36은 < 그림1 >의 상단 노란색 글자크기에서 확인 가능하다.

  • 활용형태 : pygame.font.SysFont(폰트명, 글자 크기)
  • 활용예시 : pygame.font.SysFont(None, 36)

 

③ 공, 벽돌, 패들을 구현

벽돌깨기의 주요 구성물을 구현한다. 공을 둥글게, 벽돌은 사각형, 패들은 사각형을 만든다. pygame.Rect(위치, 길이) 형태이다. 위치는 x축, y축이며, 길이도 x축 길이, y축 길이의 총 4가지로 이루어진다. (단위는 픽셀이다)

  • 활용형태 : pygame.Rect( x축 위치의 시작좌표, y축 위치의 시작좌표, x축 길이, y축 길이)
  • 활용예시 : pygame.Rect(292, 392, 16, 16) → x축 292지점, y축 392 지점에 공이 위치하되, 크기는 가로 16, 세로 16이다

 

④ 공, 벽돌, 패들이 부딪혔을 때 구현

벽돌깨기 게임에서는 공/벽돌, 공/패들이 부딪힌 이후의 상황을 구현하여야 한다. 이때 활용하는 함수가 colliderect 함수이다. 

  • 함수정의 : Rect()로 생성된 객체 간 사용하는 함수이며, 객체끼리 겹치면(overlap), true를 반환해 주는 함수이다.
  • 활용형태 : if.객체.colliderect(객체):
  • 활용예시 : if.ball.colliderect(brick): → 공이 벽돌에 부딪혔을 때

 

⑤ 공, 벽돌, 패들 그리기

공, 벽돌, 패들은 ③에서 이미 구현하였다. 여기서는 공/벽돌/패들을 화면에 그릴 것(draw)이다. 아래의 색깔(GREEN, WHITE)는 이미 설정(255,255,255 RGB 형태)하였다는 가정하에 예시를 기재하였다.

  • 활용형태 : pygame.draw.rect(게임화면, 색깔, 객체)
  • 활용예시 : pygame.draw.rect(screen, GREEN, brick), pygame.draw.circle(screen, WHITE, 위치, 볼 객체)

 

⑥ 객체를 복사해서 화면에 넣는다

객체(이미지, 텍스트)를 복사해서 화면에 넣는다. 여기서는 스코어(point), 시간(time), 공 스피드(speed), 시도횟수(missed)를 화면에 넣는다.

  • 활용형태 : screen.blit(객체, 복사할 대상) → 첫번째 매개변수는 복사할 개체, 두번째는 복사할 대상
  • 활용예시 : screen.blit(시간, 시간.get_rect(x축 위치, y축 위치))

 


3. 코드설명

코드를 출처는 아래와 같다. 총 157줄의 코드이다. 사진에서 짤린 부분은 "4번 전체코드"에서 확인할 수 있다.

 

그림2-1. 게임 진행을 위한 기본설정 화면

 

1줄 : pygame 라이브러리를 호출한다.

3줄 : time 라이브러리를 활용하여, 34줄(시작시간), 130줄(종료시간)을 이용하여

        131줄에서 소요시간을 계산한 결과를 137줄~138줄에서 게임화면에 출력한다.

7줄 : pygame를 초기화한다. 참고로 pygame 라이브러리를 사용하는 경우, pygame.init()를 코드 초반에 선언해주어야 한다.

 

10줄~15줄 : 게임에 나타난 객체의 색깔을 RGB 방식의 튜플 형태로 설정한다.

17줄~18줄 : 화면에 출력되는 글 크기를 설정한다.

 

19줄~20줄 : X축은 600픽셀, Y축은 800픽셀로 설정한다.

21줄 : pygame.display.set_mode를 사용하여 게임화면의 X축, Y축을 설정한다.

23줄 : FPS(Frame Per Second)를 설정한다. 1초에 몇번을 화면에 출력할지 설정한다.(56줄에서 활용한다)

 

그림2-2. 스코어, 게임시도횟수, 벽돌 등을 선언한다.

 

28줄 : 벽돌을 하나 깨면, 스코어(score, point)가 +1 올라간다.

29줄 : 공이 아래(bottom)로 내려가면 +1이 올라간다.

30줄~31줄 : 146줄~152줄에서 활용된다. 성공이면 1, 실패면 2를 변수에 담는다.

32줄 : 게임이 종료(0)이면, 124줄에서 공을 화면에 출력한다.

 

34줄 : 4줄의 time 라이브러를 활용하여, 게임시작 시간을 저장한다. 130줄~131줄을 사용하여 게임소요시간을 체크한다.

 

36줄~42줄 : 게임시작 할 때 최초로 벽돌 56개(7행 x 8열)를 선언한다.

36줄 : 벽돌을 담을 리스트를 선언한다. 104줄(공과 벽돌 충돌시 없앰), 121줄(현재의 벽돌 상태를 화면에 출력)에서 활용한다.

37줄~38줄 : 8열, 7행을 선언한다.

 

39줄~42줄 : 2중 for문을 활용하여 벽돌을 그린다.

41줄 : 벽돌 1개의 크기는 x는 60픽셀, y는 16픽셀로 설정한다. pygame.Rect는 4가지(x시작위치, y시작위치, x길이, y길이)를 설정한다.

42줄 : 36줄의 리스트(bricks)에 41줄의 벽돌(brick)를 담는다.

 

44줄 : pygame.Rect를 활용하여 볼(ball)을 정의한다.

47줄 : 1프레임당 x축 이동거리 10픽셀을 설정한다. +10으로 설정하면 오른쪽으로 이동한다.

48줄 : 1프레임당 y축 이동거리 -10픽셀을 설정한다. -10으로 설정하면 위쪽(top)으로 이동한다. +10으로 설정하면 아래쪽(bottom)으로 공이 이동한다.

 

47줄 : pygame.Rect를 활용하여 패들(paddle)을 정의한다.

48줄 : 패들은 x축으로만 이동하므로, 최초에는 0으로 선언한다.

 

그림2-3. 패들의 이동 및 공이 벽면에 닿을 때 등을 설정한다.

 

56줄 : 23줄(pygame.time.Clock)에서 선언한 clock 변수를 활용하여 1초당 30번의 화면을 띄워준다.

57줄 : 10줄에서 선언한 검정색(0,0,0)을 21줄의 스크린에 채운다.

 

59줄~73줄 : pygame에서는 공식처럼 쓰이는 코드이다. 사용자(user)가 패들을 조정한다.

    ※ pygame 라이브러리를 사용해 게임을 만들고 싶다면, 59줄~73줄은 많이 나오는 패턴이니 숙지하도록 하자.

 

59줄 : pygame 라이브러리의 pygame.event.get() 안에 event를 하나씩 꺼낸다.

60줄~61줄 : event.type이 pygame.QUIT이면, 게임을 종료한다(break)

 

62줄 : 키를 눌렀을 때(=pygame.KEYDOWN)

63줄~64줄 : 방향키 왼쪽(pygame.K_LEFT)를 눌렀을 때, 패들을 왼쪽(-10)으로 이동한다.

65줄~66줄 : 방향키 오른쪽(pygame.K_RIGHT)를 눌렀을 때, 패들을 오른쪽(+10)으로 이동한다.

 

69줄 : 62줄에서 눌렀던 키를, 땠을 때

70줄~73줄 : 왼쪽/오른쪽을 눌렀던 것을 멈춘다(패들의 X축 이동을 0으로 만든다)

 

75줄 : 패들의 왼쪽을 기준으로 62줄~73줄의 x축 패들의 이동거리를 더한다.

77줄~78줄 : 볼의 x축 위치, y축 위치를 볼의 왼쪽(ball.left)과 볼의 위쪽(ball.top)에 저장한다.

 

80줄~93줄 : 볼의 왼쪽(ball.left)을 기준으로 벽면의 왼쪽/오른쪽/천장/바닥에 닿은 경우를 정의한다.

80줄~85줄 : 공이 왼쪽/오른쪽 벽면에 닿은 경우, 볼의 x축 위치를 바꾼다. (=게임 내에서는 팅겨낸다)

86줄~88줄 : 공이 천장에 닿은 경우, 볼의 y축 위치를 바꾼다. (=아래로 팅겨낸다)

89줄~93줄 : 공이 바닥(bottom)에 닿은 경우, missed를 1 더해주고, y축 위치를 바꾸어준다.

 

그림2-4. 공과 벽돌 충돌 등을 설정한다.

 

95줄~96줄 : missed가 3이상이면 게임은 종료(FAILURE)된다. 150줄에서 "실패"로 출력된다.

98줄~101줄 : 이동한 패들이 좌우 벽면을 벗어나지 않게 설정한다.

 

98줄~99줄 : 패들이 왼쪽의 0보다 작으면, 패들을 0으로 만든다(=패들이 왼쪽 벽면을 넘어가지 못하게 한다)

100줄~101줄 : 패들의 왼쪽이 "스크린 x축 길이 - 패들의 넓이"보다 크면, 패들의 왼쪽은 "스크린 x축 길이 - 패들의 넓이"를 저장한다. (=패들이 오른쪽 벽면을 넘어가지 못하게 한다)

 

104줄~109줄 : 공과 벽돌이 충돌하는 경우이다.

105줄 : 공(ball)과 벽돌(brick)이 부딪혔을 때(=겹쳤을 때, colliderect),

106줄 : 벽돌의 모음(bricks)에서 벽돌(brick)을 제거한다.

107줄 : 공이 벽돌에 부딪혔 을 때(=105줄), 공의 y방향을 바꾸어준다.

108줄 : 스코어를 1점 더한다(+1)

 

111줄~114줄 : 공(ball)과 패들(paddle)이 부딪힌 경우이다.

111줄 : 공과 패들이 부딪힌 경우,

112줄 : 공의 y축 방향을 바꾸어준다. (패들이 공을 위로 팅겨내는 화면을 구현한다)

113줄~114줄 : 공의 중심이 패들의 왼쪽보다 작거나, 패들의 오른쪽보다 크다면, 볼의 방향을 바꾼다. (=공이 패들의 좌우 벽면에 닿을 경우, x의 방향을 바꾸어준다)

 

116줄~118줄 : 벽돌 모음(bricks)가 0이면, 게임을 성공으로 종료한다.

 

121줄~122줄 : 벽돌 모음(bricks)의 리스트를 화면에 출력한다.

124줄~125줄 : 게임이 종료이면 공을 화면에 출력한다.

127줄 : 패들을 출력한다.

 

그림2-5. 화면에 객체 그리기 및 점수, 시간 등을 화면에 설정한다.

 

130줄~131줄 : 게임의 진행시간을 설정한다.

134줄~144줄 : 게임화면에 스코어(point), 시간(time), 공 스피드(speed), 시도횟수(missed)를 화면에 출력한다.

146줄~162줄 : game_over이 0보다 크면 게임을 성공/실패를 게임화면에 출력한다.

154줄 : 게임화면을 업데이트한다.

 


4. 전체 코드

전체코드는 157줄이다.

 

더보기
# 1. pygame 선언
import pygame
import random
import time

# 2. pygame 초기화
pygame.init()

# 3. pygame에 사용되는 전역변수 선언
BLACK = (0, 0, 0)           # 화면색 설정
RED = (255, 0, 0)           # 성공/실패시 출력된 글씨 색 설정
GREEN = (0, 255, 0)         # 벽돌색 설정
BLUE = (0, 0, 255)          # 패들색 설정
WHITE = (255, 255, 255)     # 공색깔 설정
YELLOW = (255, 255, 0)      # 화면상단에 글씨 색 설정

large_font = pygame.font.SysFont(None, 72)
small_font = pygame.font.SysFont(None, 36)
screen_width = 600
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

clock = pygame.time.Clock()     # FPS 설정 (Frame Per Second) : 초당 움직이는 횟수 설정 (여기서는 56줄에서 초당 30번의 화면을 띄워준다)

# 4. pygame 무한루프
def runGame():
    ### 초기화 시작 (스코어, 성공 여부 등을 설정한다)
    score = 0
    missed = 0
    SUCCESS = 1
    FAILURE = 2
    game_over = 0

    start_time = time.time()        # 133줄

    bricks = []
    COLUMN_COUNT = 8
    ROW_COUNT = 7
    for column_index in range(COLUMN_COUNT):
        for row_index in range(ROW_COUNT):
            brick = pygame.Rect(column_index * (60 + 10) + 35, row_index * (16 + 5) + 35, 60, 16)
            bricks.append(brick)

    ball = pygame.Rect(screen_width // 2 - 16 // 2, screen_height // 2 - 16 // 2, 16, 16)   # pygame.Rect(x시작좌표, y시작좌표, x오른쪽 이동, y아래로 이동)
    # ball_dx = 5     # 기본 이동 속도
    # ball_dy = -5    # 기본 이동 속도
    ball_dx = 10     # 기본 이동 속도
    ball_dy = -10    # 기본 이동 속도

    paddle = pygame.Rect(screen_width // 2 - 80 // 2, screen_height - 16, 80, 16)
    paddle_dx = 0       # 패들은 좌우로만 이동 (패들의 y축 이동인 dy는 사용하지 않아 설정하지 않는다)
    ##### 초기화 끝 #####

    ##### 게임 시작 #####
    while True:
        clock.tick(30)          # 초당 30프레임 설정 (초당 30번의 화면을 띄워준다) / FPS 설정 (Frame Per Second)
        screen.fill(BLACK)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:       # 창 닫기 버튼을 눌렀을 떄
                break
            elif event.type == pygame.KEYDOWN:   # 키를 눌렀을 때
                if event.key == pygame.K_LEFT:      # 패들의 왼쪽 이동속도
                    # paddle_dx = -5
                    paddle_dx = -10
                elif event.key == pygame.K_RIGHT:      # 패들의 오른쪽 이동속도
                    # paddle_dx = 5
                    paddle_dx = 10
            elif event.type == pygame.KEYUP:        # 키를 눌렀다가 뗐을 때
                if event.key == pygame.K_LEFT:      # 눌러졌던 키보드가 다시 떨어졌을 때, 패들의 이동 속도를 0으로 설정하여 키보드가 떨어졌을 때는 더 이상 움직이지 않도록 한다.
                    paddle_dx = 0
                elif event.key == pygame.K_RIGHT:
                    paddle_dx = 0

        paddle.left += paddle_dx    # 해당 이동속도를 패들의 위치 값인 left에 적용하여 이후 패들을 화면에 출력할 때, 이동 거리를 움직이도록 한다.

        ball.left += ball_dx
        ball.top  += ball_dy

        if ball.left <= 0:                              # 공이 왼쪽 벽면을 닿은 경우
            ball.left = 0
            ball_dx = -ball_dx
        elif ball.left >= screen_width - ball.width:    # 공이 오른쪽 벽면에 닿은 경우
            ball.left = screen_width - ball.width
            ball_dx = -ball_dx
        if ball.top < 0:                                # 공이 천장에 닿은 경우
            ball.top = 0
            ball_dy = -ball_dy
        elif ball.top >= screen_height:                 # 공이 바닥에 닿은 경우
            missed += 1
            ball.left = screen_width // 2 - ball.width // 2
            ball.top = screen_height // 2 - ball.width // 2
            ball_dy = -ball_dy

        if missed >= 3:
            game_over = FAILURE

        if paddle.left < 0:                             #  이동한 패들이 좌우 벽면을 벗어나지 않게 설정하도록 하는 코드
            paddle.left = 0
        elif paddle.left > screen_width - paddle.width:
            paddle.left = screen_width - paddle.width

        # 공과 벽돌 충돌 처리
        for brick in bricks:            # 공과 벽돌의 충돌을 감지하는 라인
            if ball.colliderect(brick):
                bricks.remove(brick)
                ball_dy = -ball_dy      # 공이 y축 방향을 바꾸어준다.
                score += 1
                break

        if ball.colliderect(paddle):    # 공이 벽면이 아닌 패들에 충돌했을 때 이동 방향을 뒤집어 주도록하는 코드
            ball_dy = -ball_dy
            if ball.centerx <= paddle.left or ball.centerx > paddle.right:  # 공이 패들의 좌,우측 벽면에 닿았을 경우를 감지하며, 이때는 y 이동 방향을 뒤집는 것이 아닌 x 이동 방향을 뒤집어 줌
                ball_dx = ball_dx * -1

        if len(bricks) == 0:
            print('success')
            game_over = SUCCESS

        ### 화면 그리기
        for brick in bricks:        # bricks 리스트들의 모든 벽돌들을 출력
            pygame.draw.rect(screen, GREEN, brick)

        if game_over == 0:      # 게임 종료이면(0이면), 공을 화면에 출력
            pygame.draw.circle(screen, WHITE, (ball.centerx, ball.centery), ball.width // 2)

        pygame.draw.rect(screen, BLUE, paddle)      # 패들을 출력

        ### 소요되는 시간을 출력한다.
        end_time = time.time()
        game_time = int(end_time - start_time)      # 초 단위      # 33줄

        ### 화면에 포인트 및 미스(missed)를 출력한다.
        score_image = small_font.render('Point {}'.format(score), True, YELLOW)
        screen.blit(score_image, (10, 10))

        game_time_image = small_font.render('time {}'.format(game_time), True, YELLOW)       # 73줄
        screen.blit(game_time_image, game_time_image.get_rect(right=screen_width // 2 + 80, top=10))

        ball_speed_image = small_font.render('speed {}'.format(abs(ball_dx)), True, YELLOW)       # 73줄
        screen.blit(ball_speed_image, ball_speed_image.get_rect(right=screen_width // 2 - 40, top=10))

        missed_image = small_font.render('Missed {}'.format(missed), True, YELLOW)
        screen.blit(missed_image, missed_image.get_rect(right=screen_width - 10, top=10))

        if game_over > 0:
            if game_over == SUCCESS:
                success_image = large_font.render('성공', True, RED)
                screen.blit(success_image, success_image.get_rect(centerx=screen_width // 2, centery=screen_height // 2))
            elif game_over == FAILURE:
                failure_image = large_font.render('실패', True, RED)
                screen.blit(failure_image, failure_image.get_rect(centerx=screen_width // 2, centery=screen_height // 2))

        pygame.display.update()

runGame()
pygame.quit()

 


5. 마치며

글이 상당히 길었다. 이 글을 읽는 사용자(user)의 취향에 따라 필요한 부분만 읽으면 될 것 같다. 벽돌깨기 게임이 이렇게 고려해야할 내용이 많은지 몰랐다. 특히 pygame 라이브러리의 내용을 이해하려는 시간이 상당히 많이 걸렸다. 그래도 이번 기회에 제대로 알게 되어서 다행이다.

 

이번 글에서는 벽돌깨기 게임을 설명하느라 글이 상당히 길었다. 다음 글부터는 "벽돌깨기 게임"을 이해했다면 가정하에, 필요한 내용만 설명하도록 할 예정이다.

 

마지막으로 강조하지만, 우리의 목표는 AI 학습을 위한 하나의 수단으로 벽돌깨기를 구현하는 것이지, 벽돌깨기 게임을 구현하는 것이 목표는 아니라는 것이다. 벽돌깨기 게임 구현에 너무 에너지를 소모하지 말자.

 

bricksBreak (edit_2).py
0.01MB

 

다음 글에서는 벽돌깨기 게임을 할 때, 공으로 벽돌을 깨는 데이터를 만드는 방법을 알아보자.

 

반응형