جدول المحتويات:

2 لاعب تنافسي مقابل لعبة التوقيت: 4 خطوات
2 لاعب تنافسي مقابل لعبة التوقيت: 4 خطوات

فيديو: 2 لاعب تنافسي مقابل لعبة التوقيت: 4 خطوات

فيديو: 2 لاعب تنافسي مقابل لعبة التوقيت: 4 خطوات
فيديو: تعلم كيف تشوت فاول من كرستيانو رونالدو💪🏻 2024, يوليو
Anonim
2 لاعب تنافسي مقابل لعبة التوقيت
2 لاعب تنافسي مقابل لعبة التوقيت

سوف تحتاج:

1. Digilent Basys 3 ، لوحة FPGA (أو أي FPGA أخرى ،)

2. إصدار حديث نسبيًا من Vivado ، أو بعض بيئة VHDL الأخرى

3. جهاز كمبيوتر يمكنه تشغيل البرنامج المذكور.

الخطوة 1: اللعبة نفسها

اللعبة نفسها
اللعبة نفسها

كيف تتفاعل ولايات ميكرونيزيا الموحدة مع الوحدات.

كيف ألعب

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

الخطوة 2: ولايات ميكرونيزيا الموحدة

ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة
ولايات ميكرونيزيا الموحدة

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

الحالة 1: القائمة الحالة الأولى هي شاشة القائمة ، وهي واحدة من أبسط الحالات. يتضمن العرض المكون من سبعة أجزاء التي تعرض كلمة "PLAY" ، والزر الذي يؤدي إلى بدء اللعبة. يقودنا الزر ، BTN ، إلى الحالة التالية ، وهي دور اللاعب.

الحالة 2: دور اللاعب الأول

يقوم دور اللاعب الأول بتنشيط إشارة تؤدي إلى عرض الأجزاء السبعة لعرض صحة اللاعب الثاني. يتم تشغيل إشارة أخرى لتنشيط سجل التحول الذي تم استيراده من وحدة أخرى أنشأناها (Pone.vhd). يعمل سجل التحول هذا على جعل إضاءة LED مثل زيادة مقياس الطاقة في الألعاب الأخرى ، ثم يتم إعادة تعيينه إلى 0 عندما يصل إلى الحد الأقصى من مصابيح LED التي يمكن إضاءتها. يتم تحديثه على الحافة الصاعدة للساعة التي تم الحصول عليها من barclock.vhd ، والتي تم تعديلها من ملف معمل مستعار. كان لدينا شريط اللاعب الأول يبدأ من اليمين ، ويمتلئ إلى اليسار ، لأن مفتاح اللاعب الأول موجود أيضًا على اليسار (لتجربة مستخدم بديهية). بمجرد قلب المفتاح ، تنتقل الحالة إلى الخصم الأول للاعب ، ويتم حفظ مقدار LED النشط في إشارة.

الحالة 3: خصم اللاعب الأول تحدد الإشارة التي تحتوي على مقدار LED النشط مقدار الصحة التي يتم خصمها. يتم ذلك من خلال وجود سجل تحول آخر (deductor1.vhd) والذي بدلاً من زيادة مؤشرات LED ، يقوم بتقليلها. يتناقص هذا عند الحافة الصاعدة لإحدى وحدات div على مدار الساعة التي استعرناها وعدلناها (downcounterclock.vhd). بمجرد إيقاف تشغيل مؤشر LED واحد ، يتم خصم نقطة صحية واحدة من الصحة الإجمالية للاعب الثاني. إذا بلغ مستوى صحة اللاعب الثاني 0 أثناء هذه العملية ، فإننا نتوقف وننتقل فورًا إلى حالة "انتهت اللعبة". خلاف ذلك ، بمجرد أن يصل متجه LED إلى "0000000000000000" ، ننتقل إلى دور اللاعب الثاني.

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

المرحلة 5: الخصم من اللاعب الثاني تمامًا مثل دور اللاعب الثاني ، يتصرف اللاعب الثاني بشكل كبير مثل الخصم الأول للاعب. يتمثل الاختلاف الرئيسي في أن سجل التغيير الذي يتحكم في إيقاف تشغيل LED يسير في الاتجاه المعاكس ، وهو تعديل يسهل إجراؤه بمجرد حصولك على خصم اللاعب الذي يعمل بشكل صحيح.

المرحلة 6: انتهت اللعبة إذا وصل أي من اللاعبين في أي وقت إلى حالة صحية صفرية ، فستتحول اللعبة إلى هذه الحالة. لا شيء يعرض الهوى. إذا تم الضغط على BTN one ، فسيتم إعادة تعيين الحالة الصحية إلى 99 ، وتعود الحالة إلى القائمة ، لتبدأ اللعبة بشكل فعال.

الخطوة 3: الوحدات

الوحدات
الوحدات

مخطط الصندوق الأسود للعبة

Downcounterclock (بناءً على وحدة clk_div.vhd بواسطة Bryan Mealy):

هذه هي الساعة التي تتعامل مع توقيت الخصوم. الثابت المسمى max_count هو 3x أكثر من ثابت max_count في barclock. هذا سيجعل المقتطفات أبطأ 3 مرات من سرعة العارضة.

Barclock - (بناءً على وحدة clk_div.vhd بواسطة Bryan Mealy):

تتعامل هذه الساعة مع توقيت مقاييس الطاقة ، والتي قمنا بزيادتها بسرعة لإضافة صعوبة إلى اللعبة. يمكن ضبط هذا التوقيت حسب رغبتك ، وزيادة السرعة عن طريق جعل عدد max_count الثابت رقمًا أكبر ، أو تقليله عن طريق جعل max_count عددًا أصغر. Sseg_dec - (بقلم Bryan Mealy): تأخذ هذه الوحدة رقمًا مكونًا من 8 بتات كمدخلات ، والتي تقوم بفك تشفيرها ، وتحويل الرقم إلى مكافئته العشرية ، ثم إخراجها إلى عرض الأجزاء السبعة. لكي يعمل هذا الملف ، يجب أن تتأكد من أن قيودك تتوافق مع قيودنا.

رغيف:

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

Ptwo:

هذه نسخة مقلوبة من الوحدة النمطية P1.

المخصم 1:

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

Deductor2: هذه نسخة مقلوبة من الوحدة Deductor1.

PlayDecoder (تم استعارته وتعديله بشكل سلغي من ekchen35649 الخاص به 133 القابل للتوجيه): يستخدم هذا في حالة القائمة لعرض كلمة "PLAY" على وحدة فك ترميز الأجزاء السبعة.

الخطوة 4: الاختبار

هذه اللعبة مستوحاة في الأصل من إحدى الألعاب الصغيرة من Kirby. إنها لعبة بسيطة للاعبين يمكن لعبها على لوحة Basys 3 أو أي FPGA.

الخطوة 1: المواد المطلوبة

سوف تحتاج إلى: Digilent Basys 3 أو FPGA Board (أو أي لوحة أخرى) إصدار حديث نسبيًا من Vivado أو بعض بيئة vhdl الأخرى جهاز كمبيوتر يمكنه تشغيل البرنامج المذكور دماغ

الخطوة الثانية: اللعبة نفسها

كيف ألعب

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

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

الخطوة 3: ولايات ميكرونيزيا الموحدة

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

(الرسم التخطيطي للدولة)

الدولة 1: القائمة

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

الحالة 2: دور اللاعب الأول

يقوم دور اللاعب الأول بتنشيط إشارة تؤدي إلى عرض الأجزاء السبعة لعرض صحة اللاعب الثاني. يتم تشغيل إشارة أخرى لتنشيط سجل التحول الذي تم استيراده من وحدة أخرى أنشأناها (Pone.vhd). يعمل سجل التحول هذا على جعل إضاءة LED مثل زيادة مقياس الطاقة في الألعاب الأخرى ، ثم يتم إعادة تعيينه إلى 0 عندما يصل إلى الحد الأقصى من مصابيح LED التي يمكن إضاءتها. يتم تحديثه على الحافة الصاعدة للساعة التي تم الحصول عليها من barclock.vhd ، والتي تم تعديلها من ملف معمل مستعار. كان لدينا شريط اللاعب الأول يبدأ من اليمين ، ويمتلئ إلى اليسار ، لأن مفتاح اللاعب الأول موجود أيضًا على اليسار (لتجربة مستخدم بديهية). بمجرد قلب المفتاح ، تنتقل الحالة إلى الخصم الأول للاعب ، ويتم حفظ مقدار LED النشط في إشارة.

الحالة 3: خصم اللاعب الأول

تحدد الإشارة بكمية LED النشطة مقدار الصحة التي يتم خصمها. يتم ذلك من خلال وجود سجل تحول آخر (deductor1.vhd) والذي بدلاً من زيادة مؤشرات LED ، يقوم بتقليلها. يتناقص هذا عند الحافة الصاعدة لإحدى وحدات div على مدار الساعة التي استعرناها وعدلناها (downcounterclock.vhd). بمجرد إيقاف تشغيل مؤشر LED واحد ، يتم خصم نقطة صحية واحدة من الصحة الإجمالية للاعب الثاني. إذا بلغ مستوى صحة اللاعب الثاني 0 أثناء هذه العملية ، فإننا نتوقف وننتقل فورًا إلى حالة "انتهت اللعبة". خلاف ذلك ، بمجرد أن يصل متجه LED إلى "0000000000000000" ، ننتقل إلى دور اللاعب الثاني.

الحالة 4: دور اللاعب الثاني

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

المرحلة 5: خصم اللاعب الثاني

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

المرحلة 6: انتهت اللعبة إذا وصل أي من اللاعبين في أي وقت إلى حالة صحية صفرية ، فستتحول اللعبة إلى هذه الحالة. لا شيء يعرض الهوى. إذا تم الضغط على BTN one ، فسيتم إعادة تعيين الحالة الصحية إلى 99 ، وتعود الحالة إلى القائمة ، لتبدأ اللعبة بشكل فعال.

صندوق اسود

الخطوة 4: الوحدات

Downcounterclock (بناءً على وحدة clk_div.vhd بواسطة Bryan Mealy):

هذه هي الساعة التي تتعامل مع توقيت الخصوم. الثابت المسمى max_count هو 3x أكثر من ثابت max_count في barclock. هذا سيجعل المقتطفات أبطأ 3 مرات من سرعة العارضة.

Barclock - (استنادًا إلى وحدة clk_div.vhd بواسطة Bryan Mealy): تتعامل هذه الساعة مع توقيت مقاييس الطاقة ، والتي قمنا بزيادةها بسرعة لإضافة صعوبة إلى اللعبة. يمكن ضبط هذا التوقيت حسب رغبتك ، وزيادة السرعة عن طريق جعل عدد max_count الثابت رقمًا أكبر ، أو تقليله عن طريق جعل max_count عددًا أصغر. Sseg_dec - (بقلم Bryan Mealy): تأخذ هذه الوحدة رقمًا مكونًا من 8 بتات كمدخلات ، والتي تقوم بفك تشفيرها ، وتحويل الرقم إلى مكافئته العشرية ، ثم إخراجها إلى عرض الأجزاء السبعة. لكي يعمل هذا الملف ، يجب أن تتأكد من أن قيودك تتوافق مع قيودنا.

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

Ptwo: هذه نسخة مقلوبة من الوحدة النمطية P1.

Deductor1: هذا هو مزيج من سجل التحول وطرح. يسير سجل التحول في الاتجاه المعاكس لسجل التحول الخاص بـ P1 ، مما يشير إلى الخصم. يؤدي هذا أيضًا إلى طرح 1 من صحة اللاعب 2 لكل دورة ساعة ، لذلك مع الجمع بين هاتين الوظيفتين ، سيبدو أن صحة الخصم تتناقص بمقدار 1 لكل مؤشر يؤدي إلى انخفاض شريط الصحة.

Deductor2: هذه نسخة مقلوبة من الوحدة Deductor1.

PlayDecoder (تم استعارته وتعديله قليلاً من ekchen35649 له 133 تعليمات):

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

المهام الواجبة: الصور والفيديو

موصى به: