문제

나는 소프트웨어 개발 수업을 위해 탁구 게임을 만들고 있는데 아마도 이것이 숙제라고 말해야 하므로 이해가 제한적입니다.NPC 패들용 AI를 생성하는 데 문제가 있습니다.저는 Kivy와 Python을 사용하고 있습니다.

현재 나는 만들 수 있습니다 이길 수 없다 AI는 다음을 수행합니다.

#ai
self.player2.center_y = self.ball.y 

어디 self.player2.center_y NPC의 y 좌표입니다(y축으로만 움직입니다). self.ball.y 공의 y 좌표입니다.Kivy 사이트의 튜토리얼을 따라 게임의 기초를 만들었습니다.

이제 나는 이길 수 있는 AI를 어떻게 만들 수 있는지 전혀 모릅니다.나는 AI의 속도를 제한해야 한다는 것을 알고 있습니다. 그러면 공이 너무 빨라지면 공을 잡을 수 없게 됩니다.그런데 문제는 실제로 속도 기능이 없다는 것입니다.

내가 따랐던 튜토리얼의 문제점은 설명하지 않는다는 것입니다. 모든 것.나는 다음과 같이 속도 기능을 만들 수 있다고 믿습니다."Every x seconds, the paddle will move x pixels in the y axis."

이것은 kivy 튜토리얼에 따라 공이 제공되는 방식입니다.

def serve_ball(self, vel=(10,0)):
    self.ball.center = self.center
    self.ball.velocity = vel

알았어, 이제 이해하려고 노력할게... vel=(10,0)): 아마도 X로 10픽셀, Y로 0픽셀을 이동하여 할당한다는 뜻일 것입니다. ball.velocity, 그리고 분명히 그것은 속도를 제어합니다 ...

class PongApp(App):
    def build(self):
        game = PongGame()
        game.serve_ball()
        Clock.schedule_interval(game.update, 1.0/300.0)
        return game

Clock.schedule_interval(game.update, 1.0/300.0) 이와 관련하여 다음과 같이 가정하는 것이 안전합니까?그게 공이 움직이는 속도인가요?즉.10픽셀 x와 0y, 1/300초마다?1/20 정도로 바꾸면 훨씬 느려지는데...그래서 나는 그렇게 가정할 것이다.

이제 AI를 담을 함수를 만들어야 하는데...아마도

def AI(self):
    self.AI_Speed = self.ball.velocity - 10

self.player1. 내 패를 가리킨다.

그리고 응..이제 나는 막혔습니다.패들의 움직임을 제어하기 위해 이 속도를 어떻게 사용할 수 있는지 전혀 모르겠습니다.누구든지 아이디어가 있나요?그리고 내 질문은 매우 모호할 가능성이 높으므로 더 나은 이해가 필요할 경우를 대비해 게임 소스를 제공하겠습니다.감사합니다.

http://pastebin.com/8wTLbH21

추신.나는 이것이 큰 질문이고 물어볼 것이 많다는 것을 알고 있지만 누군가 대답할 수 있기를 바랍니다.감사해요.

도움이 되었습니까?

해결책

이것은 너무 큰 질문이기 때문에 이것저것 테스트해보지는 않았지만 AI를 움직이는 일종의 함수(저는 self.player2.move()라고 부르겠습니다)를 갖고 싶어하는 것 같습니다.game.update()에서 이 함수를 호출하면 AI 패들을 공을 쳐야 하는 위치에 점점 더 가깝게 이동할 수 있습니다.

self.player2.move()에 대한 몇 가지 기본 의사코드:

figure out if ball is above or below paddle
move self.AI_Speed units in the direction of the ball

이 작업을 수행하려면 AI 속도를 더 조정해야 할 수도 있지만 이것이 올바른 일반적인 아이디어라고 생각합니다.생각해 보면 무적의 AI는 기본적으로 무한히 빠릅니다.

그게 당신을 풀어주는 데 도움이 되나요?

다른 팁

seaseaotternerd 덕분에 저는 이길 수 있는 AI를 만드는 글을 쓸 수 있었습니다.

if self.ball.y < self.player2.center_y:
    self.player2.center_y = self.player2.center_y - 3
if self.ball.y > self.player2.center_y:
    self.player2.center_y = self.player2.center_y + 3

나는 공의 y 위치를 얻었고, 그것이 NPC 패들의 중심보다 작다면, 같거나 커질 때까지 매번 NPC를 3y씩 아래로 이동시킬 것입니다.NPC 패들의 중심보다 크면 그냥 늘리는 것도 마찬가지입니다.

그러면 패들 속도(1/300초당 3개의 y 위치)가 정의되고 더 어려운 모드의 난이도를 높일 수 있습니다.

감사해요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top