• 0
مصفوفة

محرك ألعاب الورق

سؤال

محرك ألعاب الورق

السلام عليكم ورحمة الله وبركاته

هذا المحرك الجميل على الأقل بالنسبة لي لقد تم بناءه على Qt هو يتكون من 4 فئات

1- الفئة الرأس playPaper

وتحفظ بيانات ورقة اللعب مثلا رقم الورقة من 1 الى 13 حيث يمثل الشيبة ونوعها الذي يأخذ اما c او d او h او q وبها معامل "==" في حال المقارنة مع ورقة مطابقة لها في الرقم والنوع تعيد true بالإضافة الى دوال مثل aboveAaa و underAll لجعل ورقة اللعب في أسفل الأوراق او أعلاها ويتم توفير لكل ورقة لعب parent سوف يكون عبارة عن نقطة في منتصف ورقة اللعب ولايمكن رؤيتها وسوف تفيدنا في اجراء الحركات وهناك حالتين لأوراق اللعب حالة ورقة اللعب كانت مفتوحة أو كانت مغلقة وكل لها صورة انت تحددها راجع الدوال في ملف palayPaper.h.

2- فئة الخوارزميات MPapers

وهي تقوم بترتيب أوراق اللعب تصاعديا وتنازليا او حتى ترتيبها ترتيب عشوائي(تخبيص)

ويمكنك أيضا البحث عن ورقة اما عن طريق الرقم او النوع والتي تعيد QList لمؤشرات playPaper تطابق ماتريد البحث عنه وأيضا وفي دالة البناء تقوم هذه الفئة بصنع 52 playPaper بخوارزمية صغيرة وسوف تقوم بقراءة البيانات من خلال الصور في المجلد المرفق مع المحرك ويمكنك الحصول على QList مجموعة الأوراق بإستخدام الدالة getPapers() او يمكنك إضافة مجموعة أوراق لتطبق بعض الخوارزميات

بإستخدام الدالة setPapers() .

3- فئة الحركات MMoves

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

مثال على ماسبق

#include <QtGui>
#include "papers.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsView *GV=new QGraphicsView;
QGraphicsScene *scene=new QGraphicsScene;
scene->setSceneRect(QRect(0,0,500,800));
GV->setScene(scene);
MPapers papers;
papers.sort(MPapers::shuffle);
playPaper* paper=papers.getPapers().at(0);
scene->addItem(paper->parentItem());
paper->getMoves()->move(paper->parentItem(),300,500,720,1,50);
GV->show();
return a.exec();
}

upload2world_a8ac2.gif

4- فئة خوارزميات وحركات البكسلات وهي تتحكم مابداخل العنصر أي صورة غهي تعطيك حركات مشابهة لتلك المتوفرة في الباوربوينت وهي مع الفئة السابقة تعطي لك منظرا جميلا هناك الكثير من الحركات يمكن تنفيذها ولكن من اهمها هي الدالة overPix والتي توفر لك 4 حركات عن طريق التابع التعدادية حيث تقوم بغظهار صورة فقوق صورة مهما كان اختلاف حجم الصور فهي تقوم بتنسيقها لتناسب العنصر ومن ثم تقوم بتقطيع الصورة الى صفوف وأعمدة أنت تحددها فمثلا لو حددت 10 صفوف ومثلها أعمدة فينتج لديك 100 قطعة صغيرة انظر المثال

#include <QtGui>
#include "papers.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsView *GV=new QGraphicsView;
QGraphicsScene *scene=new QGraphicsScene;
scene->setSceneRect(QRect(0,0,500,500));
GV->setScene(scene);
MPapers papers;
papers.sort(MPapers::shuffle);
playPaper* paper=papers.getPapers().at(0);
scene->addItem(paper->parentItem());
paper->getMoves()->move(paper->parentItem(),200,200,720,1,50);
paper->getPixMoves()->overPix(paper,10,10,2,paper->getPathCloseState(),MPixMoves::upAndButtom);
GV->show();
return a.exec();
}

upload2world_29909.gif

في حال وجود افكار او تستطيعون المساعدة فإنه يسرني ان استقبل آراءكم ومساعداتكم

وفي امان الله محرك العاب الورق في المرفقات

playing_paper_engine.zip

تم تعديل بواسطه مصفوفة
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

بتنبيه من أحد الاخوان عن المرفقات جزاه الله خير

لقد تم تعديل المرفقات ووضع الشيفرة المصدرية

والسموحة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخى الكريم

يبدوا أننى حضرت متأخرا جدا

مشكور للمشاركة

و لكن ماذا عن كود إلتقاط الأوراق

مثلا 10 تلتقط 5 و 5

أو 4 و 6

و هكذا

هل هذا ممكن

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .