هل يمكن أن تحل لوحة الألعاب محل لوحة المفاتيح؟ محاولة البرمجة بالعصي

صورة


المقدمة



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



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



ومع ذلك ، فإن العصي التناظرية (ومعظم لوحات الألعاب تحتوي على اثنين) لديها القدرة على توفير خيارات إدخال لا نهاية لها. يعود السؤال إلى اختيار الإيماءات الصحيحة لتحقيق أقصى قدر من الكفاءة وأقل توتر على الإبهام.



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





إدخال النص على الشاشة في Legend of Zelda



في Legend of Zelda ، يجب أن يتناوب اللاعب في اختيار الحروف باستخدام D-pad مع الأسهم وفي كل مرة يضغط على زر التأكيد لإضافة حرف إلى حقل إدخال النص.



منذ ذلك الحين ، تم تطوير طرق إدخال أكثر كفاءة. إذا كنت مهتمًا ، فاقرأ المقال عن Gamasutra .



لسوء الحظ ، كل طرق الإدخال التي وجدتها بها عيبان رئيسيان تجعلهما غير مناسبين للعمل الجاد:



  • إنهم ليسوا بالسرعة الكافية
  • إنها تتطلب ملاحظات بصرية


الحاجة إلى السرعة واضحة. التعليقات المرئية غير مقبولة لأنها تشغل مساحة قيمة على الشاشة وتشتت انتباه المستخدم ، مما قد يتداخل مع التدفق ويبطئ.



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



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



اتخاذ قرار بشأن الإيماءات



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



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





تصور أنماط حركة العصي التناظرية



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



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





تحركت العصا اليسرى لأعلى وللخلف إلى المركز.



كم عدد الاتجاهات وأي الاتجاهات يمكن تحديدها بدقة عمياء؟ تأمل المثال التالي.





تحركت العصا اليسرى لأعلى ولأسفل وللمنتصف ولليسار ولليمين ، وتحركت العصا اليمنى قطريًا.



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



كانت أبسط طرق الإدخال التالية هي الحركات الدائرية ذات المرحلة الواحدة والمرحلة الثانية.





تحركت العصا اليسرى لأعلى ولليسار وعادت إلى المركز





تحركت العصا اليسرى لأعلى ولليسار ولأسفل وللعودة إلى المركز.



مع مراعاة جميع الإيماءات التي تم اختراعها حتى الآن ، حصلنا على 4 + 8 + 8 = 20 خيار إدخال على كل عصا.



بالطبع ، يمكن تحريك كلتا العصا في نفس الوقت ، وإنشاء إيماءات إدخال مجمعة.





تتحرك كلتا العصا للأعلى وللخلف إلى المركز في نفس الوقت.



يعطي الجمع بين الإيماءات إجمالي 20 * 20 + 20 + 20 = 440 خيار إدخال ، وهو في رأيي أكثر من كافٍ.



إيماءات الترميز



قسمت مساحة الإدخال لكل عصا إلى 4 قطاعات وخصصت رقمًا لكل قطاع.



مساحات الإدخال مقسمة إلى قطاعات


تم تقسيم مساحات الإدخال إلى قطاعات



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





عتبة دائرية حول المركز



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



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



حركات العصا للإدخال ((0 ،) ، (2 ، 3))


تحريك العصي للإدخال ((0 ،) ، (2 ، 3))



ربط الإيماءات بالأفعال



في هذه الحالة ، تكون الإجراءات مجرد مفاتيح لوحة مفاتيح. يمكن ربط أزرار تشغيل لوحة الألعاب بمفاتيح Shift و Ctrl و Alt و Super ، وهو أمر ملائم لأن هذه المفاتيح تُستخدم في مجموعات (على سبيل المثال ، Ctrl-C).



لتحديد الارتباط الأمثل للإيماءة والمفتاح المُدخلين ، استخدمت أداة تسجيل المفاتيح لتسجيل جميع ضغطات المفاتيح وتحليل تكرار كل مفتاح لعدة أسابيع.



يجب ربط المفاتيح الأكثر ضغطًا بأبسط الإيماءات (وبالتالي الأسرع). لقد قدرت مدى تعقيد الإيماءة عن طريق إضافة أطوال مدخلات كل عصا. على سبيل المثال ، المدخل الموضح أعلاه ((0 ،) ، (2 ، 3)) له تعقيد 1 + 2 = 3.



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



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



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



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



تأمل المثال التالي. تتكون المجموعة الأولى من التعقيد من جميع المدخلات ذات التعقيد 1 ، أي ((0,), ()), ((1,), ()), ((2,), ()), ((3,), ()), ((), (0,)), ((), (1,)), ((), (2,)), ((), (3,)).



هناك 8 مدخلات في هذه المجموعة ، لذلك نأخذ المفاتيح الثمانية الأكثر شيوعًا من القائمة المصنفة. هذا هو 'e', 'o', 't', 'a', 'i', 's', 'j', 'r'. قم بإنشاء رسم بياني باستخدام هذه المفاتيح كعقد وقم بتعيين أوزان للحواف بين هذه العقد وفقًا لتكرار كل مجموعة مفاتيح.



غالبًا ما يتم الجمع بين المفتاحين e و r ، لذا يجب إرفاقهما بعصي مختلفة.



عند إزالة الحواف الضعيفة من الرسم البياني ، سيتحول عاجلاً أم آجلاً إلى غير مرتبط.

المفتاح j متكرر ولكنه منعزل.


مفتاح j شائع ، لكنه معزول.



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



نظرًا لأن الرسم البياني غير متصل ، أستمر في تطبيق الخوارزمية على المكونات المتصلة. jرسم بياني فرعي يتكون فقط من عقدة هو بالفعل ثنائي الجزء ( j+ مجموعة فارغة). أقوم بتطبيق الخوارزمية بشكل متكرر على مكون آخر.

المكون ثنائي الأجزاء بعد إزالة الحواف الأضعف


بعد إزالة أضعف الحواف ، يصبح المكون ثنائي



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

رسم ثنائي للمكون


مخطط المكون



الثنائي في النهاية ، أقوم بدمج المجموعات ثنائية الأجزاء.

التجميع النهائي لأول 8 مفاتيح


التجميع الذي تم الحصول عليه للمفاتيح الثمانية الأولى



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



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



لقد استخدمت حزمة pyautoguiPython لإنشاء أحداث لوحة المفاتيح عند تشغيل الإجراءات.



ممارسة



لقد استخدمت نفس مدرب اللمس الذي ktouchاستخدمته بالفعل لتعليم الكتابة منذ ما يقرب من عقدين من الزمن. لهذا الغرض ، قمت بإنشاء دروس متخصصة.



ممارسة الكتابة باللمس في لوحة الألعاب ktouch


التدرب على المدخلات التناظرية على لوحة الألعاب في ktouch



ملاحظات



  • على الرغم من أن عملية Python التي تشغل نظام الإدخال هذا لا تستهلك عادةً أكثر من 10٪ من موارد المعالج ، إذا كان لا بد من تشغيلها باستمرار في الخلفية ، فسأقوم بإعادة تطبيقها وتحسينها بلغة ذات مستوى أدنى حتى يتمكن المعالج من القيام بالمزيد مهام مكلفة.
  • بعد شراء لوحة ألعاب DualShock4 ، أدركت أنه يمكنني عمل إدخال قطري بدقة تامة. سيؤدي تكامل المدخلات القطرية إلى تقليل عدد خيارات الإدخال الأكثر تعقيدًا ، وبالتالي زيادة السرعة.
  • , . , . , , , .
  • , . , , .
  • . .




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



All Articles