인프런 커뮤니티 질문&답변

souplus님의 프로필 이미지
souplus

작성한 질문수

파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)

충돌 처리

#충돌된 공 or 무기 없애기 부분인 if ball_to_remove > -1: del balls[ball_to_remove] ball_to_remove = -1 부분이 도저히 이해가 안됩니다.

작성

·

172

0

지금   # 충돌된 공 or 무기 없애기

    if ball_to_remove > -1:

        del balls[ball_to_remove]

        ball_to_remove = -1  부분이 도저히 이해가 안됩니다.

balls.append 해서 최초의 공 (=가장 큰 공) 이 있는건 알겠는데 도대체 어느코드에서 balls의 인덱스 수가 ball_images

만큼 늘어난건가요......제 생각에는 # 최초 발생하는 큰 공 추가 만 되있어서 인덱스는 0이고 값은 딕셔너리의 내용인데요..

(프린트 문으로 이 부분은 확인했습니다!)

아래가 balls 가 포함되있는 코드인데 어디서 ball_images 만큼의 인덱수가 늘어난건가요.

# 최초 발생하는 큰 공 추가

balls.append({  

    "pos_x" : 50, # 공의 x좌표

    "pos_y" : 50, # 공의 y좌표

    "img_idx" : 0, # 공의 이미지 인덱스,ball_image 리스트 안에서의 이미지의 인덱스 넘버

    "to_x": 3, # x축 이동방향

    "to_y": -6, # y축 이동방향

    "init_spd_y": ball_speed_y[0] # y의 최초 속도

})

  # 공 위치 정의 

    for ball_idx, ball_val in enumerate(balls): 

        ball_pos_x = ball_val["pos_x"]

        ball_pos_y = ball_val["pos_y"]

        ball_img_idx = ball_val["img_idx"]

        ball_size = ball_image[ball_img_idx].get_rect().size # 해당 ball의 x,y값이 묶여진 리스트

        ball_width = ball_size[0]

        ball_height = ball_size[1]

... ...

# 4. 충돌 처리

... ...

    for ball_idx, ball_val in enumerate(balls):

        ball_pos_x = ball_val["pos_x"]

        ball_pos_y = ball_val["pos_y"]

        ball_img_idx = ball_val["img_idx"]

        # 공 rect 정보 업데이트 

        ball_rect = ball_images[ball_img_idx].get_rect() # 공의 크기와 좌표(x,y = left,top)

        ball_rect.left = ball_pos_x

        ball_rect.top = ball_pos_y

... ...

                   # 왼쪽으로 튕겨나가는 작은 공

                    balls.append({

                        "pos_x": ball_pos_x + (ball_width/2) -(small_ball_width/2),

                        "pos_y": ball_pos_y + (ball_height/2) -(small_ball_height/2),

                        "img_idx": ball_img_idx + 1,

                        "to_x": -3,

                        "to_y": -6,

                        "init_spd_y": ball_speed_y[ball_img_idx + 1]})

                    # 오른쪽으로 튕겨나가는 작은 공

                    balls.append({

                        "pos_x": ball_pos_x + (ball_width/2) -(small_ball_width/2),

                        "pos_y": ball_pos_y + (ball_height/2) -(small_ball_height/2),

                        "img_idx": ball_img_idx + 1,

                        "to_x": 3,

                        "to_y": -6,

                        "init_spd_y": ball_speed_y[ball_img_idx + 1]})

                break

        else:

            continue

        break

... ... 

  # 충돌된 공 or 무기 없애기

    if ball_to_remove > -1:

        del balls[ball_to_remove]

        ball_to_remove = -1 

 # 모든 공을 없앴다면 게임 종료

    if len(balls) == 0: 

        game_result = "Mission Complete"

        running = False

답변 1

0

이거 뒷부분 보고 오신건가요?? 아님 이 강의 내에서만 질문하시는건가요?
이 수업 내에서의 질문이라면, 

여기 에서는 처음 있는 공만 지우는게 맞아요. 초기값인 0번 인덱스 

쪼개 진 것에 대해서는 다음 수업에서 진행 해요. 

거기서 작아진걸 리스트에 추가하는 과정에서, 그 추가된게, 자동으로 리스트의 1 번 2 번 3 번으로 들어가게 되는 거죠. 

souplus님의 프로필 이미지
souplus

작성한 질문수

질문하기