إنشاء الذكاء الاصطناعي للعبة Pong + الفهم الأساسي لخوارزمية السرعة

StackOverflow https://stackoverflow.com//questions/11706756

  •  13-12-2019
  •  | 
  •  

سؤال

أنا أقوم بصنع لعبة كرة الطاولة لصف تطوير البرمجيات الخاص بي، وربما يجب أن أذكر أن هذا واجب منزلي، ومن هنا فهمي المحدود.وأواجه بعض المشاكل في إنشاء الذكاء الاصطناعي لمجداف NPC الخاص بي.أنا أستخدم Kivy وPython.

حاليا يمكنني إنشاء من المستحيل الفوز الذكاء الاصطناعي بالقيام بذلك:

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

أين self.player2.center_y هو الإحداثي y لـ NPC (يتحرك فقط على المحور y) و self.ball.y هو إحداثي y للكرة.لقد اتبعت البرنامج التعليمي على موقع Kivy لإنشاء أساس اللعبة.

الآن ليس لدي أي فكرة عن كيفية إنشاء ذكاء اصطناعي يمكن التغلب عليه.أعلم أنني سأحتاج إلى الحد من سرعة الذكاء الاصطناعي، لذلك عندما تصبح الكرة سريعة جدًا، فلن يتمكن من الإمساك بها.لكن المشكلة هي أنني لا أملك في الواقع وظيفة السرعة.

مشكلة البرنامج التعليمي الذي اتبعته هو أنه لا يشرح كل شئ.أعتقد أنه يمكنني تقديم وظيفة السرعة بالقول"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)): يعني على الأرجح، نقل 10 بكسل X و0 بكسل Y، قم بتعيين ذلك لـ 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 بكسل × و0 ص، كل 1/300 ثانية؟إذا قمت بتغييره إلى شيء مثل 1/20، فإنه يتحرك أبطأ بكثير ...لذلك سأفترض ذلك.

الآن أنا بحاجة إلى إنشاء وظيفة للاحتفاظ بالذكاء الاصطناعي ...ربما

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

self.player1. يشير إلى مجداف بلدي.

و نعم..الآن أنا عالقة.ليس لدي أي فكرة عن كيفية استخدام هذه السرعة للتحكم في تحريك المجداف.هل لدي احد اى افكار؟وبما أن سؤالي على الأرجح غامض للغاية، فسوف أقدم مصدر اللعبة إذا كنت بحاجة إلى فهم أفضل.شكرًا لك.

http://pastebin.com/8wTLbH21

ملاحظة.أدرك أن هذا سؤال كبير وكثير لطرحه، ولكن آمل أن يتمكن شخص ما من الإجابة عليه.شكرًا.

هل كانت مفيدة؟

المحلول

نظرًا لأن هذا سؤال كبير، لم أختبره أو أي شيء من هذا القبيل، ولكن يبدو أنك تريد أن يكون لديك نوع من الوظائف التي تحرك الذكاء الاصطناعي (سأسميها self.player2.move()).إذا قمت باستدعاء هذه الوظيفة في game.update()، فمن المفترض أن تكون قادرًا على تحريك مجداف الذكاء الاصطناعي بشكل تدريجي أقرب إلى المكان الذي يجب أن يكون فيه لضرب الكرة.

بعض التعليمات البرمجية الزائفة الأساسية لـ self.player2.move():

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

قد تحتاج إلى ضبط سرعة الذكاء الاصطناعي بشكل أكبر لإنجاز هذا العمل، ولكن أعتقد أنها يجب أن تكون الفكرة العامة الصحيحة.إذا فكرت في الأمر، فستجد أن الذكاء الاصطناعي الذي لا يهزم هو في الأساس سريع للغاية.

هل يساعد ذلك في إحباطك؟

نصائح أخرى

بفضل 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 للأسفل بمقدار 3y في كل مرة حتى يصبح هو نفسه أو أكبر.نفس الشيء إذا كان أكثر من مركز مجداف NPC، فأنا أقوم بزيادته فقط.

يحدد هذا بعد ذلك سرعة المجداف (3 مواضع لكل 1/300 من الثانية) وسيسمح لي بزيادة الصعوبة في الأوضاع الأصعب.

شكرًا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top