كيفية محاكاة ذراع تحكم Xbox باستخدام لوحة المفاتيح والفأرة في Python

مقدمة

في هذا الدرس، سنتعلم كيفية استخدام مكتبة vgamepad مع مكتبات pynput و pyautogui لمحاكاة ذراع تحكم Xbox باستخدام لوحة المفاتيح والفأرة. سنقوم بإنشاء كود Python يلتقط حركات الفأرة وضغطات المفاتيح ويحولها إلى أوامر يتم إرسالها إلى ذراع تحكم Xbox.

لماذا نقوم بذلك؟

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

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

المتطلبات

  • Python 3 مثبت على جهازك.
  • تنصيب مكتبات pynput، pyautogui، و vgamepad باستخدام pip:
pip install pynput pyautogui vgamepad

الكود الكامل

فيما يلي الكود الكامل لمحاكاة ذراع تحكم Xbox:

import threading
import pyautogui
from pynput.mouse import Listener as MouseListener
from pynput.keyboard import Listener as KeyboardListener
import vgamepad as vg

# إنشاء ذراع التحكم Xbox بشكل عام
gamepad = vg.VX360Gamepad()

# خريطة ربط مفاتيح لوحة المفاتيح مع أزرار ذراع التحكم
keyboard_mapping = {
    'w': vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_UP,
    'a': vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT,
    's': vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_DOWN,
    'd': vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_RIGHT,
    'space': vg.XUSB_BUTTON.XUSB_GAMEPAD_A,
    'shift': vg.XUSB_BUTTON.XUSB_GAMEPAD_B
}

# تحويل حركة الفأرة إلى محاور ذراع التحكم
def map_mouse_to_joystick(x, y):
    joystick_x = int((x / pyautogui.size().width) * 65535) - 32768
    joystick_y = int((y / pyautogui.size().height) * 65535) - 32768
    return joystick_x, joystick_y

# معالج لوحة المفاتيح
def on_press(key):
    try:
        if key.char in keyboard_mapping:
            print(f"Key Pressed: {key.char}")
            gamepad.press_button(button=keyboard_mapping[key.char])
            gamepad.update()
    except AttributeError:
        if str(key).lower() in keyboard_mapping:
            print(f"Special Key Pressed: {key}")
            gamepad.press_button(button=keyboard_mapping[str(key).lower()])
            gamepad.update()

def on_release(key):
    try:
        if key.char in keyboard_mapping:
            print(f"Key Released: {key.char}")
            gamepad.release_button(button=keyboard_mapping[key.char])
            gamepad.update()
    except AttributeError:
        if str(key).lower() in keyboard_mapping:
            print(f"Special Key Released: {key}")
            gamepad.release_button(button=keyboard_mapping[str(key).lower()])
            gamepad.update()

# معالج الفأرة
def on_move(x, y):
    joystick_x, joystick_y = map_mouse_to_joystick(x, y)
    print(f"Mouse Moved to: {x}, {y} | Mapped to Joystick: {joystick_x}, {joystick_y}")
    gamepad.left_joystick_float(joystick_x, joystick_y)
    gamepad.update()

# نقطة الدخول الرئيسية
if __name__ == '__main__':
    # بدء مستمع الفأرة
    mouse_listener = MouseListener(on_move=on_move)
    mouse_listener.start()

    # بدء مستمع لوحة المفاتيح
    keyboard_listener = KeyboardListener(on_press=on_press, on_release=on_release)
    keyboard_listener.start()

    # الانتظار لحين إغلاق البرنامج
    mouse_listener.join()
    keyboard_listener.join()

شرح الكود

نبدأ باستيراد المكتبات الضرورية threading، pyautogui، وpynput للتحكم في لوحة المفاتيح والفأرة. ثم نستخدم مكتبة vgamepad لإنشاء ذراع تحكم Xbox افتراضي.

1. ربط مفاتيح لوحة المفاتيح بأزرار ذراع التحكم

قمنا بإنشاء قاموس keyboard_mapping لربط مفاتيح W، A، S، و D مع الاتجاهات في ذراع التحكم. كما تم ربط مفتاح Space بزر A، ومفتاح Shift بزر B.

2. تحويل حركة الفأرة إلى محاور ذراع التحكم

يتم حساب إحداثيات الفأرة وتحويلها إلى قيم تتناسب مع محاور Joystick لذراع التحكم باستخدام دالة map_mouse_to_joystick.

3. مستمع لوحة المفاتيح والفأرة

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

كيفية اختبار الكود

بمجرد الانتهاء من كتابة الكود، يجب التأكد من أن كل شيء يعمل بشكل صحيح. اتبع الخطوات التالية لاختبار الكود والتحقق من أن لوحة المفاتيح والفأرة تقوم بمحاكاة ذراع تحكم Xbox بنجاح:

1. تشغيل الكود

بعد كتابة الكود بالكامل، قم بتشغيله باستخدام Python. يمكنك استخدام المحرر المفضل لديك مثل Visual Studio Code أو حتى تشغيله مباشرة من نافذة طرفية. لتشغيل الكود، استخدم الأمر التالي في الطرفية:

python your_script_name.py

2. استخدام أداة Joy.CPL

لاختبار محاكاة ذراع التحكم الافتراضي، اتبع الخطوات التالية:

  • افتح مربع التشغيل (Run) في Windows باستخدام اختصار Ctrl + R.
  • اكتب joy.cpl ثم اضغط على Enter. ستفتح نافذة “إعدادات أجهزة الألعاب”.
  • ابحث عن جهاز Xbox 360 Controller (أو الجهاز الافتراضي) في القائمة.
  • حدد جهاز Xbox الافتراضي، ثم اضغط على “خصائص” (Properties).
  • في نافذة الخصائص، ستتمكن من رؤية المحاور والأزرار التي يتم ضغطها أو تحريرها أثناء تشغيل الكود واستخدام لوحة المفاتيح والفأرة.

حاول تحريك الفأرة أو الضغط على مفاتيح لوحة المفاتيح (مثل W، A، S، D، Space، أو Shift) وتأكد من أن ذراع التحكم الافتراضي يستجيب بشكل صحيح.

الخاتمة

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

التعليقات

اترك تعليقاً