Académique Documents
Professionnel Documents
Culture Documents
-لعبة الكلمات المتقاطعة أصبحت من أشهر ألعاب الكلمات هذه األيام وإن
عملية توليدها يدويا صعب جدا و يستغرق الكثير من الوقت والطاقة و إن
أتمتة عملياتها أثارت اهتمام الباحثين من حين ألخر ,في هذا التقرير
سنالحظ مقتطف عن نتائج ما وصل إليه العلم في خوارزميات الكلمات
المتقاطعة وسنوضح الهدف وأهمية هذه اللعبة و خوارزمياتها وكيف يمكنها
إفادة األبحاث األخرى أواألعمال األخرى ,ثم سنقدم الخوارزمية والعمليات
المساعدة لها وما يمكن فعله لتطوير هذه الخوارزمية أو تطوير عمليات
أخرى بالخوارزمية .
|Page1
-سيقوم المشروع باستخدام قاعدة بيانات ( قاموس ) والذي يحوي على الكلمة
وترجمتها (الكلمة هي اللغز و الترجمة هي السؤال ) وسيقوم بمقاطعة
الكلمات مع بعضها باستخدام خوارزميات سنقوم بشرحها ومن ثم انتظار من
الالعب إدخال األحرف المناسبة وإظهار النتيجة باألحرف الصحيحة و
الخاطئة .
-نعم يمكن لإلنسان أن يولد رقعة بسيطة لكن هل يمكنه توليد رقعة 40 * 40
ببساطة ؟؟؟؟؟ خوارزمية الكلمات المتقاطعة يمكن استخدامها بتغيير القيود و
بعض العمليات إلى الكثير من األمور المفيدة مثل توليد برنامج إسبوع
لجامعة أو توليد احتماالت لمخططات أو أمور تنظيمية .....
|Page2
-كلمة كلمة :
-والتي تقوم بوضع كلمة ما ثم وضع كلمة أخرى بحيث تالئم الكلمات
األخرى المحيطة و تتمتع هذه الخوارزمية بسرعتها عن الخوارزمية السابقة
بسبب اختصار الحاالت العودية (التراجع عن كلمة أقل من التراجع من
حرف ) و لذلك استخدمنا هذه الخوارزمية .
-وستقوم هذه الخوارزمية بتوليد جميع احتماالت أي رقعة كانت مهما كان
بعديها اعتمادا على معالجة الحاسب وقدرته على الدخول باستدعاءات عودية
عميقة وكثيرة و اختياره من بين عدد معين يمكنه معالجته من الكلمات .
|Page3
.1الكالس األساسي :
|Page4
.2الكالس الثاني :
Class -The Qustion Object
name
|Page5
– 4الكالس الربع :
Class -Propable char
name
-Arraylist<Arraylist<character>>listolists:
قائمة من األحرف التي يمكن وضعها في كل المواقع
مثال :
-يوجد ثالث مربعات فارغة
يمكن وضع في المربع األول aأو bأو . c
و يمكن وضع في المربع الثاني fأو . d
و يمكن وضع في المربع الثالث . z
Data ][0 a,b,c
member
][1 d,f
][2 z
|Page6
: – الكالس السادس6
Class name Copy two Dimensional Array
Loop {
addTheword()
gowithNewTry()
backThelatestword()
If(checksolution()) {
Addsolution()
|Page7
void tryy(TheGame GameObject){
int k = 0;
int NumberOfEmptyBox = 0;
boolean returnBack;
do {
do {
returnBack = false;
Row_FirstColumns_LastColumns =
FindThePlaceThatWeNeedToAdd_A_New_Word(GameObject);
if (Row_FirstColumns_LastColumns[0] == 0) {
break;
NumberOfEmptyBox = numberOfBox(GameObject,
Row_FirstColumns_LastColumns);
|Page8
if (returnBack =
checkNumberOfEmptyBox(NumberOfEmptyBox,
Row_FirstColumns_LastColumns, GameObject, BlankPoints))
continue;
if (returnBack = checkPropableChar(propableChar,
Row_FirstColumns_LastColumns, GameObject, BlankPoints))
continue;
do {
if (GameObject.numberOfBlankBox >=
GameObject.foundedSolution) break;
Row_FirstColumns_LastColumns[2] =
Row_FirstColumns_LastColumns[2] - k;
if (Row_FirstColumns_LastColumns[2] <
Row_FirstColumns_LastColumns[1])
break;
NumberOfEmptyBox = NumberOfEmptyBox - k;
if (returnBack =
checkNumberOfEmptyBox(NumberOfEmptyBox,
Row_FirstColumns_LastColumns, GameObject, BlankPoints))
continue;
ObjLetterToAdd = GetTheQuestionToAdd(propableChar,
NumberOfEmptyBox, BlankPoints, GameObject,
Row_FirstColumns_LastColumns);
|Page9
int numberOfBlankBox1 = BlankPoints.size();
if(returnBack =
checkNumberOfBlankBox(numberOfBlankBox1, numberOfBlankBox))
break;
if (nothing) {
GameObject.TheGame[Row_FirstColumns_LastColumns[0]][Row_FirstColu
mns_LastColumns[2]] = '#';
BlankPoints.add(new
BlankPoint(Row_FirstColumns_LastColumns[0],
Row_FirstColumns_LastColumns[2]));
returnBack = true;
break;
propableChar.listOLists.remove(propableChar.listOLists.size() - 1);
k++;
} while (returnBack);
if (!var.getWord().equals("#")) {
if (checkRepitedly(GameObject, var.getWord())) {
| P a g e 11
System.out.println("here : " + var.getWord());
AddWord(GameObject, var,
Row_FirstColumns_LastColumns, BlankPoints);
tryy(GameObject);
backTheLatestAnswer(GameObject,
Row_FirstColumns_LastColumns, BlankPoints);
numberOfTry++;
if (checkIfThisAnAnswer(GameObject)) {
System.out.println("valid : ");
GameObject.PrinInfo();
if (GameObject.ValidAswer.size() <
GameObject.OptimalSolution) {
GameObject.addd(GameObject.TheGame);
} else {
GameObject.numberOfBlankBox++;
optimalSolution(GameObject.TheGame, GameObject,
GameObject.numberOfBlankBox(GameObject.TheGame));
int nn = Row_FirstColumns_LastColumns[2];
| P a g e 11
int nnn = NumberOfEmptyBox;
if (nnn < 3) {
break;
if (nnn >= 3) {
GameObject.TheGame[Row_FirstColumns_LastColumns[0]][Row_FirstColu
mns_LastColumns[2]] = '#';
BlankPoints.add(new
BlankPoint(Row_FirstColumns_LastColumns[0],
Row_FirstColumns_LastColumns[2]));
}while(GameObject.numberOfBlankBox <
GameObject.foundedSolution && numberOfTry <
((numberOfGame*rows*column*5*4) / 1000));
| P a g e 12
أوال سنقوم بشرح التوابع المستخدمة قي تابع ال Tryثم سنعرض الحاالت التي تمت مناقشتها:
Stop ] ? [ 1, 1 ,
الخوارزمية -2يمر حتى يصل إلى عنصر #
0 1 2 3 4
# # # # #
# $ $ $ #
Stop ][1,1,3
| P a g e 13
التابع الثالث :
a d g
b e h
c f I ihg ghi
الخوارزمية $$
cba abc
fed def
| P a g e 14
التابع الخامس :
| P a g e 15
عمل التابع -إيجاد الكلمات المناسبة و تحويلها إلى أو أوبجيكتات السؤال
-1إيجاد الكلمات المناسبة باستدعاء التابع :
الخوارزمية Findcompatibleword
-2البحث عن الكلمات باستدعاء التابع searchلتحويل الكلمات إلى
أوبجيكتات سؤال
األحرف المحتملة
الخوارزمية تخرج جميع الكلمات بالقاموس التي تتألف من 3أحرف مثال :
C e y
| P a g e 16
التابع التاسع :
| P a g e 17
البارامترات الذي يجب إضافته
مصفوفة الموقع -InT [] Row-FirsT column-Last columns :
وهي ليست للمربعات السود -List<Blankpoint> Blankpoint :
الخرج -Void
عمل التابع -يقوم بإضافة الكلمة إلى اندكسات الرقعة
الخوارزمية -1إضافة الكلمة إلى اندكسات الرقعة
-2وضع #بعد الكلمة (يمثل نهاية الكلمة )
| P a g e 18
التابع الرابع عشر :
| P a g e 19
الخرج : Trueالكلمة غير مكررة (أكمل)
: Falseالكلمة مكررة ( التكمل التضعها )
عمل التابع -ضمان عدم وجود كلمات مكررة بالرقعة
| P a g e 21
Quest 1 و القائمة :
والمصفوفة
= ][][posArray2
-1 -1 - 1 - 1
-1 1 2 -1
-1 1 2 -1
-1 -1 -1 -1
والقائمة :
QuesT2
| P a g e 21
# a b # 10 11 12 13
# c d # 20 21 22 23
# # # # 30 31 32 33
إذا ضغطنا على العنصر 12سنبحث عن العناصر التي تحوي
القيمة 1في posArray1و القيمة 2في posArray2و منه :
# # # #
# a b #
# c d #
# # # #
-التوابع التالية متشابهة وتقوم بطبع وقراءة للمعلومات إلى الفايالت المناسبة :
-read-Numberic-List
-Write-Numberic-List
-Write-Temp
)-Write-TwoDimensional(Array
)-Write-oneDimensional(Array
-Read-Two-Dimensional Array
-Read-Temp
| P a g e 22
و ختاما سوف نقوم بمقارنة مشروعنا بتطبيقين:
-تطبيقنا يقوم بتوليد رقع الكلمات المتقاطعة بكلمات من قاعدة بيانات تحوي على
60000كلمة ويمكنه توليد رقع تصل إلى 40 * 40و أكثر ( أي ال حدود لبعد
الرقعة )و لكن ذكرنا 40 * 40ألن الحاسب سيقع في عدم تحمل االستدعاءات
العودية بأبعاد أكثر من ذلك و هذا ما يمكن العمل عليه لتحسين عمل الخوارزمية (
أي يمكن للخوارزمية توليد أي بعد لكن يجب مراعاة ال stackالذي يسجل
العمليات العودية لتطوير العملية ) .
-و يمكن أيضا العمل على جعل الخوارزميات المستخدمة generalأكثر لنستطيع
استخدامها بتطبيقات أخرى و أيضا استحدام اللعبة في أمور رائعة أخرى كتعليم لغة
معينة ( انكليزي ) عن طريق نص قراءة و يكون ال testعنه عبارة عن لعبة
بسيطة من الكلمات المتقاطعة .
| P a g e 23