BlocosIA Wiki Editor

كيف تبرمج سيارات ودراجات ثلاثية الأبعاد (السباق والموتوكروس)

داخل مثالَي السباق والموتوكروس ثلاثيَّي الأبعاد: فيزياء المركبة، كاميرا المطاردة، نقاط المسار (قوائم الأرقام تلك)، القيادة الآلية للمنافسين، اللفّات والجبل.

1. اللاعب يتحوّل إلى المركبة

في اللعبتين لا تتحكم في شخصية تمشي: لبنة اللاعب يقود تستبدل لاعب العالم ثلاثي الأبعاد بسيارة أو دراجة.

• evt_bandeira
• m3d_jog_veiculo [VEIC: carro, COR: #3B6FD8]
• m3d_camera [MODO: perseguicao]
• m3d_jog_vel [VEL: 4.3]
• m3d_controles [MODO: sim]

في الداخل، تحتفظ المركبة بـ سرعة (سرعة إلى الأمام)، وفي كل إطار (60 مرة في الثانية):

  • W يضيف تسارعًا؛ S يكبح (وعند التوقف يرجع إلى الخلف)؛ وبدون أي مفتاح، يوقف الاحتكاك السيارة ببطء. هذا هو الإحساس بـ القصور الذاتي.
  • A/D يديران الاتجاه، لكن الدوران يتناسب مع السرعة: السيارة المتوقفة لا تدور (مثل السيارة الحقيقية).
  • السرعة تتحول إلى خطوة إلى الأمام: يتغير x بمقدار جيب(الاتجاه) × السرعة، ويتغير z بمقدار −جيب التمام(الاتجاه) × السرعة.
  • على درجة بارتفاع كتلة واحدة تصعد المركبة؛ وعند الجدار تفقد سرعتها وتطلق عندما تصطدم مركبة اللاعب.
  • الدراجة تتسارع أكثر، وتدور أسرع، وتقفز بالمسافة؛ وتميل في المنعطفات وتدور عجلاتها حسب السرعة.

كاميرا المطاردة تبقى خلف المركبة وتدور بتأخير (فهي "تطارد" اتجاه السيارة)، لذلك تبدو المنعطفات سلسة.

2. المنافسون: ما هذه الأرقام؟

في أحد المنافسين سترى قائمة مثل هذه:

36, 41, 46.1, 51.1, 56.2, 61.2, 66.3, 71.3, 76.4, 81.6, 86.6, 91, 94.3, 96.4, 97, 96.1, 93.9, 90.3, 85.9, 80.8, 75.6, 70.5, 65.5, 60.4, 55.4, 50.3, 45.3, 40.2, 35.2, 30.1, 25, 19.8, 15.1, 11.2, 8.5, 7.1, 7.3, 8.8, 11.8, 15.8, 20.6, 25.9, 31

إنها إحداثيات x لنقاط المسار (waypoints) للمنافس الأخضر. وقائمة ثانية، المسار Z، فيها إحداثيات z. الرقم الأول في كل قائمة هو النقطة 1، والثاني في كل منهما هو النقطة 2، وهكذا: 43 نقطة حول المضمار، مثل فتات الخبز.

اقرأ القائمة وسترى المضمار فيها:

  • 36 ← 91 يزيد بمقدار 5: الطريق المستقيم العلوي، والسيارة تتحرك يمينًا (x يزداد).
  • 94.3 ← 97 ← 85.9 يزيد ببطء، ويصل إلى 97 (أبعد نقطة يمينًا) ثم يعود: المنعطف الأيمن (نصف دائرة). في المنعطف يتغير x قليلًا، لأن السيارة تتحرك أكثر في z.
  • 80.8 ← 15.1 ينقص بمقدار 5: الطريق المستقيم السفلي، عائدًا نحو اليسار.
  • 11.2 ← 7.1 ← 31: المنعطف الأيسر (7.1 هي أبعد نقطة يسارًا) ثم العودة قرب البداية.

من أين جاءت؟ المضمار بيضاوي على شكل "ملعب": طريقان مستقيمان طول كل منهما 52 كتلة ونصفا دائرة نصف قطرهما 18 (نحو 217 كتلة حول المضمار). سار البرنامج عليه وسجّل نقطة كل ~5 كتل (217 ÷ 5 ≈ 43). في الطرق المستقيمة يجمع فقط؛ وفي المنعطفات يستخدم جيب التمام والجيب (x = المركز + نصف القطر × cos(الزاوية)). كل منافس يقود في حارة مختلفة (قليلًا إلى الداخل أو إلى الخارج)، لذلك القوائم الثلاث متشابهة لكنها غير متطابقة. تُخزَّن القوائم كنص مفصول بفواصل، ولبنة قسّم النص بـ "," تحوّل النص إلى قائمة.

3. القيادة الآلية (لبنات المنافس)

• evt_bandeira
• m3d_corpo [FORMA: carro, COR: #3E9E3A, TAM: 100]
• m3d_corpo_fisica [MODO: sim]
• var_definir [VAR: caminhoX, VALOR: (arr_dividir)]
• var_definir [VAR: caminhoZ, VALOR: (arr_dividir)]
• var_definir [VAR: ponto, VALOR: 1]

• evt_receber
• ctl_repetir_ate [COND: (op_maior)]
  • m3d_corpo_dirigir [X: (arr_item), Z: (arr_item), VEL: 12]
  • ctl_se [COND: (op_menor)]
    • var_adicionar [VAR: ponto, VALOR: 1]
    • ctl_se [COND: (op_maior)]
      • var_definir [VAR: ponto, VALOR: 1]
      • var_adicionar [VAR: voltas, VALOR: 1]
  1. قُد إلى x z بسرعة تدير السيارة قليلًا نحو النقطة الحالية (مثل عجلة القيادة) وتتحرك. لا تنتقل فجأة، لذلك تصنع منعطفات جميلة.
  2. عندما تصبح مسافتي إلى x z أقل من 3.5 كتلة، يكون المنافس قد وصل وينتقل إلى النقطة التالية (النقطة + 1).
  3. تجاوز النقطة الأخيرة؟ يعود إلى النقطة 1 ويضيف لفّة.
  4. بعد 3 لفّات يضيف 1 إلى "المنافسون الذين أنهوا السباق". وعندما تعبر الخط، يكون ترتيبك هو "المنافسون الذين أنهوا السباق + 1".

السرعات المختلفة (12 / 12.6 / 13.2) تعطي المنافسين مستويات مختلفة. تريد منافسًا أصعب؟ ارفع سرعته.

4. اصنع مضمارك وسجّل المسار بالقيادة

لا حاجة إلى الرياضيات! قُد السيارة حول مضمارك ودع مقطعًا برمجيًا يسجّل النقاط كل نصف ثانية:

• evt_tecla [TECLA: g]
• var_definir [VAR: caminhoX, VALOR: (arr_vazia)]
• var_definir [VAR: caminhoZ, VALOR: (arr_vazia)]
• ctl_repetir [VEZES: 60]
  • arr_adicionar [VALOR: (m3d_jog_pos), VAR: caminhoX]
  • arr_adicionar [VALOR: (m3d_jog_pos), VAR: caminhoZ]
  • ctl_esperar [SEG: 0.5]

ثم اعرض المتغيرين caminhoX و caminhoZ على المنصة (أو استخدم "قل") واستخدم تلك الأرقام في المنافسين.

5. اللفّات والعشب والاصطدامات (سيارتك)

  • عدّ اللفّات بلا غش: لا تُحتسب اللفّة إلا إذا مررت بـ منتصف المضمار (الطريق المستقيم السفلي) ثم بـ خط المربعات. هكذا لا يمكنك الذهاب والإياب فوق الخط.
  • العشب يبطئك: تفحص اللعبة الكتلة تحت السيارة (y − 0.5). إذا كانت عشبًا، تنخفض السرعة.
• ctl_sempre
  • ctl_se_senao [COND: (op_igual)]
    • m3d_jog_vel [VEL: 2.4]
    …:
    • m3d_jog_vel [VEL: 4.3]
  • الوقت وأفضل لفّة يستخدمان لبنة المؤقت (الاستشعار)، وهي دقيقة. أما انتظار 0.1 ثانية وإضافة 0.1 فيتأخر، لأن كل تكرار يستغرق وقتًا أطول قليلًا.

6. الدراجة والجبل

بُني الجبل بالبرمجة: يصعد الدرب من اليسار إلى اليمين وارتفاعه نحو 8 + x × 0.2 (كتلة واحدة للأعلى كل 5). يتأكد البرنامج أن الدرب لا يصعد أبدًا أكثر من كتلة واحدة من عمود إلى العمود التالي، وإلا علقت الدراجة. في جانب يوجد جدار صخري (لتبقى على الدرب) وفي الجانب الآخر الهاوية.

• evt_bandeira
• m3d_jog_veiculo [VEIC: moto, COR: #FF8C1A]
• m3d_camera [MODO: perseguicao]
• ctl_sempre
  • ctl_se [COND: (op_menor)]
    • m3d_jog_inicio
  • ctl_se [COND: (op_maior)]
    • m3d_jog_marcar
  • سقطت؟ إذا كانت الدراجة أسفل الدرب بكثير (أقل من 4 + x × 0.2)، تعود إلى آخر نقطة تفتيش.
  • نقطة التفتيش: بعد العمود الأصفر (x أكبر من 41)، تحفظ اجعل نقطة البداية حيث يوجد اللاعب نقطة البداية الجديدة هناك.
  • الكاميرا الجانبية: اضغط C. ترى الكاميرا الجبل من الجانب، مثل ألعاب صعود التلال.

7. تحديات

  • اصنع مضمارًا على شكل الرقم 8 وسجّل مسار المنافسين بالقيادة (القسم 4).
  • أنشئ تيربو: عند الضغط على Shift، "سرعة اللاعب 6" لمدة ثانيتين.
  • في الموتوكروس، أضف منافسًا "شبحًا" يتبع نقاط الدرب.
  • غيّر الكاميرا إلى من الأعلى واصنع لعبة سيارة بجهاز تحكم عن بُعد.

افتح في المحرر