اجعل ألعاب الآركيد أكثر إمتاعًا وإثارة من خلال إضافة كائنات عشوائية متحركة.

يمكن للأشياء المتحركة العشوائية أن تجلب الإثارة وعدم القدرة على التنبؤ للألعاب. يجعلهم أكثر جاذبية وتحديًا للاعبين. توفر مكتبة Python Arcade طريقة بسيطة وفعالة لدمج الكائنات المتحركة العشوائية في ألعابك.

قم بإنشاء لعبة بسيطة

قبل أن تبدأ ، تأكد من أن لديك نقطة مثبتة على جهازك. استخدم هذا الأمر لتثبيت ملف ممر مكتبة:

نقطة تثبيت الممرات

بعد ذلك ، قم بإنشاء نافذة باستخدام ملف ممر. نافذة او شباك class وتعيين لون الخلفية إلى الأبيض.

الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.

اضبط موضع اللاعب على منتصف الشاشة أفقيًا وأضف مسافة صغيرة من الأعلى. يمكنك التحكم في حركة اللاعب باستخدام مفاتيح الأسهم.

هذا هو رمز لعبتنا الأساسية:

يستورد ممر

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
arcade.set_background_color (arcade.color. أبيض)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

instagram viewer

defon_draw(الذات):
arcade.start_render ()
arcade.draw_circle_filled (self.player_x، self.player_y، PLAYER_RADIUS، arcade.color. أزرق)

defتحديث(ذاتي ، delta_time):
يمر

defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = 5
أليف مفتاح == arcade.key. يمين:
self.player_x + = 5

لو __name__ == "__رئيسي__":
اللعبة = MyGame (SCREEN_WIDTH ، SCREEN_HEIGHT)
arcade.run ()

إضافة كائنات متعددة

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

في رمز لعبتك ، أضف قائمة تسمى أشياء لتخزين مواضع الأجسام المتحركة العشوائية. بعد ذلك ، قم بإنشاء عدد الكائنات (NUM_OBJECTS) مع إحداثيات x و y عشوائية داخل حدود الشاشة. يتم رسم الكائنات كدوائر حمراء باستخدام arcade.draw_circle_filled وظيفة.

يستورد ممر
يستورد عشوائي

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
OBJECT_RADIUS = 10
NUM_OBJECTS = 10

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
arcade.set_background_color (arcade.color. أبيض)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
ل _ في النطاق (NUM_OBJECTS):
x = random.randint (0، عرض الشاشة)
y = random.randint (0، ارتفاع الشاشة)
self.objects.append ((x، y))

defon_draw(الذات):
arcade.start_render ()
arcade.draw_circle_filled (self.player_x، self.player_y، PLAYER_RADIUS، arcade.color. أزرق)

ل الهدف في الكائنات الذاتية:
س ، ص = الهدف
arcade.draw_circle_filled (x ، y ، OBJECT_RADIUS ، arcade.color. أحمر)

defتحديث(ذاتي ، delta_time):
يمر

defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = 5
أليف مفتاح == arcade.key. يمين:
self.player_x + = 5

لو __name__ == "__رئيسي__":
اللعبة = MyGame (SCREEN_WIDTH ، SCREEN_HEIGHT)
arcade.run ()

أدناه هو الإخراج:

تطبيق خوارزمية الحركة العشوائية

لجعل الكائنات تتحرك بشكل عشوائي ، قم بتحديث مواضعها في ملف تحديث طريقة باستخدام خوارزمية الحركة العشوائية.

كرر خلال كل كائن وأنشئ قيمًا عشوائية لـ dx و دى، يمثل التغيير في إحداثيات x و y. ثم قم بتحديث موضع الكائن بإضافة هذه القيم. ها هو الكود المعدل:

defتحديث(ذاتي ، delta_time):
ل أنا في النطاق (NUM_OBJECTS):
x، y = self.objects [i]
dx = random.randint (-5, 5)
dy = random.randint (-5, 5)
س + = dx
ص + = دي
كائنات ذاتية [i] = (س ، ص)

أدناه هو الإخراج:

تتحرك الكائنات نحو اللاعب

لإضافة المزيد من التفاعل ، اجعل الكائنات تتحرك نحو اللاعب. يمكنك تحقيق ذلك عن طريق حساب متجه الاتجاه بين الكائن واللاعب وتعديل موضع الكائن وفقًا لذلك.

لهذا ، احسب الاختلافات في إحداثيات x و y بين الكائن واللاعب. من خلال تسوية هذه القيم ، تحصل على متجه اتجاه. ثم اضرب هذا المتجه في عامل السرعة (3 في هذه الحالة) وأضفه إلى موضع الكائن. هنا هو المحدث تحديث طريقة:

defتحديث(ذاتي ، delta_time):
ل أنا في النطاق (NUM_OBJECTS):
x، y = self.objects [i]
dx = self.player_x - x
dy = self.player_y - y
المسافة = math.sqrt (dx ** 2 + دى ** 2)
dx / = المسافة
دى / = المسافة
س + = dx * 3
ص + = دى * 3
كائنات ذاتية [i] = (س ، ص)

أدناه هو الإخراج:

تبدأ الكائنات في التحرك عندما يدخل اللاعب إلى المحيط

لإضافة المزيد من الديناميكيات ، قم بتعديل الكود بحيث تبدأ الكائنات في التحرك فقط عندما يدخل اللاعب المنطقة المحيطة بها. أضف ال رمز لحركة اللاعب وتحديد نصف القطر الذي تصبح الكائنات فيه نشطة.

defتحديث(ذاتي ، delta_time):
ل أنا في النطاق (NUM_OBJECTS):
x، y = self.objects [i]
dx = self.player_x - x
dy = self.player_y - y
المسافة = math.sqrt (dx ** 2 + دى ** 2)

لو المسافة < 100: # اضبط نصف القطر حسب الحاجة
dx / = المسافة
دى / = المسافة
س + = dx * 3
ص + = دى * 3
كائنات ذاتية [i] = (س ، ص)

كشف الاصطدام والتفاعل

الآن ، أضف اكتشاف التصادم بين المشغل والأشياء ، وحدد السلوك عند حدوث تصادم. تعديل تحديث طريقة التعامل مع الاصطدامات:

defتحديث(ذاتي ، delta_time):
ل أنا في النطاق (NUM_OBJECTS):
x، y = self.objects [i]
dx = self.player_x - x
dy = self.player_y - y
المسافة = math.sqrt (dx ** 2 + دى ** 2)

لو المسافة # في حالة حدوث تصادم ، تعامل معه هنا
self.objects.pop (i)
self.objects.append ((random.randint (0، SCREEN_WIDTH) ، random.randint (0، ارتفاع الشاشة)))

أليف المسافة < 100:
dx / = المسافة
دى / = المسافة
س + = dx * 3
ص + = دى * 3
كائنات ذاتية [i] = (س ، ص)

موازنة العشوائية

لإنشاء تجربة لعب متوازنة ، من المهم ضبط الحركة العشوائية وتكاثر الكائنات. فيما يلي بعض الأمثلة عن كيفية ضبط الكود لتحقيق توازن أفضل في لعبتك:

تحديد السرعة القصوى

لمنع الأشياء من التحرك بسرعة كبيرة ، يمكنك إدخال حد أقصى للسرعة. تعديل تحديث طريقة لتضمين قيود السرعة:

defتحديث(ذاتي ، delta_time):
ل أنا في النطاق (NUM_OBJECTS):
x، y = self.objects [i]
dx = self.player_x - x
dy = self.player_y - y
المسافة = math.sqrt (dx ** 2 + دى ** 2)

لو المسافة self.objects.pop (i)
self.objects.append ((random.randint (0، SCREEN_WIDTH) ، random.randint (0، ارتفاع الشاشة)))
أليف المسافة < 100:
dx / = المسافة
دى / = المسافة

السرعة = 3# اضبط قيمة السرعة حسب الحاجة
dx = min (max (dx * speed، -MAX_SPEED)، MAX_SPEED)
dy = min (max (dy * speed، -MAX_SPEED)، MAX_SPEED)

س + = dx
ص + = دي
كائنات ذاتية [i] = (س ، ص)

التحكم في معدل النشر

يمكنك أيضًا التحكم في معدل ظهور الكائنات الجديدة في اللعبة. اضبط الشفرة لتتضمن تأخيرًا بين إنتاج كائنات جديدة:

يستورد وقت

فصللعبتي(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
arcade.set_background_color (arcade.color. أبيض)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
self.last_spawn_time = time.time ()

defتحديث(ذاتي ، delta_time):
# التحكم في معدل التفريخ هنا
لو time.time () - self.last_spawn_time> SPAWN_DELAY:
لو len (الكائنات الذاتية) self.objects.append ((random.randint (0، SCREEN_WIDTH) ، random.randint (0، ارتفاع الشاشة)))
self.last_spawn_time = time.time ()

ل أنا في النطاق (لين (الكائنات الذاتية)):
x، y = self.objects [i]
dx = self.player_x - x
dy = self.player_y - y
المسافة = math.sqrt (dx ** 2 + دى ** 2)

لو المسافة self.objects.pop (i)
self.objects.append ((random.randint (0، SCREEN_WIDTH) ، random.randint (0، ارتفاع الشاشة)))
أليف المسافة < 100:
dx / = المسافة
دى / = المسافة

س + = dx * 3
ص + = دى * 3
كائنات ذاتية [i] = (س ، ص)

أضبط ال SPAWN_DELAY و MAX_OBJECTS القيم لإيجاد التوازن الصحيح للعبتك. سيؤدي التأخير الطويل أو الحد الأقصى لعدد العناصر إلى جعل اللعبة أقل ازدحامًا. في حين أن التأخير الأقصر أو الحد الأقصى الأكبر سيزيد من الصعوبة.

اجعل الألعاب أكثر متعة باستخدام الكائنات المتحركة

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