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

الناقل : elmasry | الكاتب الأصلى : خبير QT | المصدر : www.arabteam2000-forum.com

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

Posted Image
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();
}

Posted Image

في حال وجود افكار او تستطيعون المساعدة فإنه يسرني ان استقبل آراءكم ومساعداتكم
وفي امان الله محرك العاب الورق في المرفقات
 
ملف مرفق(ملفات)
 
ملف مرفق  playing_paper_engine.zip (224.9كيلو )