벽돌깨기에서 공 반사각이 이상해지는 문제는 생각보다 단순한 원인에서 시작됩니다. 패들에 맞았는데도 거의 수직으로만 튀거나, 특정 각도에서 무한 반복처럼 갇히는 상황이 대표적입니다. 코드를 조금씩 덧붙이다 보면 충돌은 되는데 플레이 감이 망가지는 경우가 많죠.
이 글은 파이썬 벽돌깨기 패들 충돌 구현을 처음부터 다시 정리한 버전입니다. 핵심은 “충돌 감지”가 아니라 “충돌 후 속도 재계산 규칙”입니다. 이 기준이 고정되면 난이도 조절도 쉬워지고, 같은 버그를 반복해서 잡는 시간을 크게 줄일 수 있습니다.
![[파이썬] 벽돌깨기 패들 충돌 구현: 공 반사 각도가 이상할 때 바로 고치는 방법 2 파이썬 벽돌깨기 패들 충돌 구현 본문 이미지 1](https://www.shindeacon.co.kr/wp-content/uploads/2026/04/b1.jpg)
Table of Contents
벽돌깨기 패들 충돌은 맞은 위치 기반 반사각을 먼저 고정해야 안정됩니다
중앙 기준 오프셋으로 반사각을 계산하세요
패들 충돌에서 가장 흔한 실수는 단순히 vy *= -1만 적용하는 방식입니다. 이렇게 하면 반사 방향이 단조로워서 플레이가 지루해지고, 특정 패턴에서 공이 계속 같은 궤적만 반복합니다. 패들 중심 대비 충돌 지점 오프셋을 이용하면 이 문제를 바로 줄일 수 있습니다.
offset = (ball_x - paddle_center_x) / (paddle_width / 2)
offset = max(-1.0, min(1.0, offset))
ball_vx = offset * max_vx
ball_vy = -abs(base_vy)
오프셋이 0이면 거의 수직, 양끝에 가까울수록 사선이 커집니다. 플레이어가 각도를 의도적으로 만들 수 있기 때문에 게임성이 확실히 좋아집니다.
속도 크기는 별도로 정규화
반사각 계산만 하고 전체 속도 크기를 방치하면 후반에 공이 너무 느리거나 너무 빨라질 수 있습니다. 충돌 후 speed = sqrt(vx^2 + vy^2)를 기준값에 맞춰 보정해두면 안정성이 올라갑니다.
패들 관통 버그는 좌표 보정으로 해결
프레임 간 이동량이 큰 경우 공이 패들 내부로 들어간 뒤 충돌이 여러 번 발생할 수 있습니다. 이때 공 위치를 패들 위로 강제 보정하지 않으면 떨림과 연타 충돌이 발생합니다.
if collide_ball_paddle:
ball_y = paddle_y - ball_radius - 1
# 이후 속도 재계산 수행
충돌 직후 위치 보정은 필수입니다. 충돌 계산보다 먼저 넣어도 될 정도로 중요합니다.
벽돌 충돌은 축 분리 판정으로 오작동을 줄입니다
벽돌 모서리에 닿을 때 x/y를 동시에 반전하면 공이 비정상적인 방향으로 튀는 경우가 많습니다. 이전 좌표를 기준으로 어느 축에서 먼저 침투했는지 판단해 한 축만 반전하는 방식이 안전합니다.
if prev_right <= brick_left or prev_left >= brick_right:
ball_vx *= -1
else:
ball_vy *= -1
이 로직은 구현이 단순한데도 체감 개선이 큽니다. 특히 빠른 공속에서 효과가 확실합니다.
![[파이썬] 벽돌깨기 패들 충돌 구현: 공 반사 각도가 이상할 때 바로 고치는 방법 3 파이썬 벽돌깨기 패들 충돌 구현 본문 이미지 2](https://www.shindeacon.co.kr/wp-content/uploads/2026/04/b2.jpg)
난이도 조절은 반사각이 아니라 속도 단계로
난이도를 올린다고 반사각 최대치를 과하게 키우면 조작 난이도만 급격히 올라갑니다. 실무적으로는 속도 테이블을 단계별로 운영하는 편이 예측 가능하고 밸런스 조정이 쉽습니다.
speed_table = [6.0, 6.5, 7.0, 7.6, 8.2]
level = min(stage, len(speed_table)-1)
base_speed = speed_table[level]
최소 수직 성분 제한
공이 거의 수평으로만 이동하면 진행이 느려집니다. abs(vy) 최소값을 2.0~2.5 정도로 고정하면 템포가 유지됩니다.
자주 터지는 버그 체크리스트
공이 패들에 붙어서 떨림
충돌 후 위치 보정 누락 가능성이 큽니다.
한 번 충돌에 벽돌 여러 개 파괴
같은 프레임에서 다중 충돌을 모두 처리해서 생길 수 있습니다. 첫 충돌만 반영하거나 우선순위를 정하세요.
후반부에서 속도 폭주
반사 때마다 속도 누적이 일어나는 구조인지 확인하고 정규화 단계를 넣으세요.
정리
파이썬 벽돌깨기 패들 충돌 구현의 본질은 맞은 위치 기반 각도 계산, 충돌 직후 좌표 보정, 그리고 속도 정규화입니다. 이 세 가지를 고정하면 공 궤적이 안정되고, 플레이 감을 의도대로 설계할 수 있습니다.