محرك ألعاب الورق
السلام عليكم ورحمة الله وبركاته
هذا المحرك الجميل على الأقل بالنسبة لي لقد تم بناءه على 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();
}
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();
}
في حال وجود افكار او تستطيعون المساعدة فإنه يسرني ان استقبل آراءكم ومساعداتكم
وفي امان الله محرك العاب الورق في المرفقات
ملف مرفق(ملفات)
playing_paper_engine.zip (224.9كيلو )