목록슈팅게임 알고리즘(pygame) (12)
개발이 취미인 개발자
조준탄이나 n-way탄보다 슈팅게임의 난이도를 높이는 방법은 유도탄을 게임에 추가하는 것이다. 플레이어가 피했다고 생각한 순간 각도를 틀어서 따라오는 탄은 플레이어의 움직임의 제한하여 실수를 유도하게 된다. 이로 인해 플레이어의 게임에 대한 긴장감과 집중도를 높일 수가 있다. 유도탄 알고리즘은 조준탄의 연장선에 있다. 조준탄은 발사되는 순간에 플레이어의 위치를 파악한 후 발사된다. 그에 비해 유도탄은 발사된 후에도 계속 플레이어 위치를 추적한다. 조준탄이 최초 한번하는 조준을 유도탄을 매 순간하도록 코드를 작성하면 된다. 물론 끝까지 플레이어를 조준하고 방향을 틀게 되면 플레이어가 영원히 피할 수 없는 유도탄이 되기 때문에 적절한 시점에 추적하는 것을 멈춰줘야 한다. 여기서 구현한 것은 유도탄이 아니라 ..
슈팅게임의 난이도를 높이기 위해서는 바로 이 n-way탄은 필수적인 요소이다. 한번에 여러발을 발사하여 플레이어가 피할 수 있는 공간 줄이고 움직임이 제한하여 게임의 긴장감을 높일 수가 있다. 여러발이 동시에 발사되어 꽤 어려운 것 같지만 기본 원리는 조준탄과 거의 유사하다. 정말 단순하다. 조준한 원래 탄에 좌우로 각도가 다른 총알만 생성해주면 끝이다. 처음 총알은 플레이어를 조준한 각도 θ로 만든다. 그리고 좌우로 θ₁, -θ₁각도를 더한 추가로 탄을 생성한다. 원하는 방향을 늘리고 싶다면 위의 각도 추가하는 걸 반복만 하면 된다. 여기서는 3방향, 5방향만 구현을 했다. 더 많은 방향으로 총알이 나가고 싶다면 그냥 소스에서 nway의 값만 늘려주면 된다. def createBullet(self, b..
슈팅게임 개발 시 레이저를 구현하는 거에 대해 알아보자. 최초 레이저의 발사되는 방향과 속도, 또 그에 따른 이동거리는 계산은 기존에 배운 조준탄과 동일하다. 조준탄의 경우 플레이어를 향해 발사되면 끝이 났다. 하지만 레이저의 경우에는 발사으로 끝이 나지 않는다. 위의 그림처럼 1번 레이저가 발사된 후 1번 레이저를 뒤 따라오는 2번과 3번 레이저를 만들어줘야한다. 자연스러운 레이저의 이동을 위해서는 1번 레이저가 그려진 후 다음 위치로 이동하기 전에 2번 레이저를 생성해 줘야한다. 1번 레이저가 이동한 후, 생성된 2번 레이저는 원래 1번 위치에 그려진다. 이를 위해서는 2번 레이저가 생성되는 시점에 1번 레이저의 원래 x, y, theta, angle의 값으로 생성되어야 한다. 3번 레이저를 생성할 ..
플레이어 위치를 향해 발사되는 총알(조준탄)을 구현해보자. 총알이 발사되는 위치 좌표를 sx, sy 라고 하고 플레이어의 위치를 tx, ty 라고 할 때 발사되는 위치와 플레이어의 위치는 아래와 같은 그림으로 나타낼 수 있다. 조준탄이 발사되면 위 그림의 삼각형의 빗변을 따라 위치가 이동하게 된다. atan2 함수를 이용하면 총알이 발사되는 각도를 구할 수가 있다. math.atan2를 통해 구해지는 값은 라디언 값으로 cos, sin 함수를 이용하면 위의 삼각형 빗변을 따라 이동하는 좌표 x, y를 구할 수가 있다. self.angle = math.atan2(ty - sy, tx - sx) self.theta = math.degrees(self.angle) * -1 총알이 발사되기 전 포탑이 플레이어 ..