2012-07-29 4 views
0

저는 소프트웨어 개발 수업을위한 탁구 게임을 만들고 있습니다. 숙제이므로 제한적으로 이해해야합니다. 내 NPC 패들에 AI를 만드는 데 문제가 있습니다. Kivy와 Python을 사용하고 있습니다.Pong 게임 AI 생성하기 + 속도 알고리즘에 대한 기본적인 이해

현재 I는 이렇게 AI 이길 불가능 을 만들 수

#ai 
self.player2.center_y = self.ball.y 
self.player2.center_y은 Y가 (단지 Y 축 상에 이동)이 NPC 좌표이다

self.ball.y는 y는 좌표이며 공. 나는 Kivy 사이트의 튜토리얼을 따라 게임의 기초를 만들었다.

이제 beatable 될 수있는 인공 지능을 어떻게 만들 수 있는지 잘 모르겠습니다. AI의 속도를 제한해야 할 필요가 있다는 것을 알고 있습니다. 그래서 공이 너무 빨라지면 공을 잡을 수 없습니다. 실제로 속도 기능이 없다는 것이 있습니다.

내가 따라 한 튜토리얼의 문제점은 모두를 설명하지 않는다는 것입니다..

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

좋아, 지금은 시도하고 ... vel=(10,0)):이를 이해하게 될 것입니다 : 나는이 볼이 kivy 튜토리얼에 따라 제공되는 방식이다 "Every x seconds, the paddle will move x pixels in the y axis."

을 말함으로써 속도 기능을 할 수 있으리라 생각합니다 가능성이 수단은

이에 관해서
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 0 픽셀 Y 이동 ball.velocity에 그를 할당하고, 그게 ... 공이 움직이는 속도입니까? 즉 10 픽셀 x 및 0 y, 1/300 초마다? 만약 내가 1/20과 같은 것으로 바꾸면 훨씬 더 느리게 움직입니다 ... 그래서 그렇게 할 것입니다.

은 지금은 아마도

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

self.player1.

내 패를 말합니다 ... 인공 지능을 유지하는 기능을 작성해야합니다.

그리고 이제 .. 내가 붙어 있습니다. 나는이 속도를 사용해 외륜을 움직이는 것을 어떻게 제어 할 수 있는지 잘 모른다. 누구나 아이디어가 있습니까? 그리고 내 질문은 매우 모호 할 가능성이 높기 때문에 더 나은 이해가 필요한 경우 게임의 근원을 제공 할 것입니다. 고맙습니다.

http://pastebin.com/8wTLbH21

추신 나는 이것이 큰 질문이며 많은 질문이지만, 누군가가 대답 할 수 있기를 바랍니다. 감사.

답변

2

이것은 매우 큰 질문이므로이 부분을 테스트하지는 않았지만 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 속도를 조정해야 할 수도 있지만 올바른 생각 일 것입니다. 당신이 그것에 대해 생각한다면, 탁월한 인공 지능은 기본적으로 무한히 빠릅니다.

당신이 풀리는 데 도움이 되나요?

+0

감사합니다. 덕분에 많은 도움이되었습니다 ... 나는 당신의 대답을 최고라고 표시했으며, 솔루션이 매우 쉽기 때문에 실제로는 어리석은 느낌을 받았습니다! > _ <내가 대답 한 것을 게시 할 것입니다. – Anteara

+0

감사! 나는 그것이 도움이 되었기 때문에 기쁘다! 이러한 것들은 항상 되돌아 보면 더 명확하게 보입니다. – seaotternerd

+0

이것은 제 버전의 Pong을 파이썬에서 CS 클래스로 만들 때 사용한 프로세스와 정확하게 같습니다. 나는 그것이 구현하기 쉬운 알고리즘이기 때문에 많은 버전에서 사용하는 것이 겠지요. –

2

seaseaotternerd 덕분에 나는 경쾌한 인공 지능을 만드는 무언가를 쓸 수있었습니다.

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를 이동할 수 있습니다. NPC의 외륜의 중심보다 더 큰 경우 동일한 작업을 수행합니다.

그러면 패들의 속도가 정의됩니다 (1/300 초당 3 y 위치). 그러면 더 힘든 모드에서 어려움이 증가 할 수 있습니다.

감사합니다.