[سكربت] لعبة ترتيب الأرقام .. من برمجتي - نقطة التطوير
دخول




×

حسابٌ واحد لجميع خدماتنا !





إنشاء حساب
نقطة التطوير - dev-point.com













 تم تحميل الصفحة في 0,8111684 ثانية


[سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 31-Jan-2010, 04:16 AM بواسطة 1 1



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

طلب مننا دكتور برمجة النظم ان نعمل لعبة ترتيب الأرقام بلغة السي شل ..

والحمد لله استطعت برمجتها .. ليست بالمستوى الإحترافي ولكنها تفي بالغرض ..

وأحببت أن أضعها لكم هنا كنوع من المشاركة .. وكذلك لأخذ أرائكم وانتقاداتكم وكذلك تطويركم للعبة ..

فكرة اللعبة ..
توجد 8 مستويات .. من 3 إلى 10

كل مستوى يعني عدد الأعمدة والصفوف .. مثلا مستوى 5 يعني 5 أعمدة و5 صفوف ..
يتم ترتيب الأرقام في الحقول بشكل عشوائي أو يدوي ..

وتبقى خانه فارغة .. ويجب تحريك الأرقام وترتيبها الترتيب الصحيح .. ( الرقم واحد يكون في الخانة اليسرى في الأعلى .. وأكبر رقم يكون في الخانة قبل الأخيرة من اليمين أسفل الجدول ) والخانة الأخيرة طبعا تكون فارغة ..

ويمكن تحريك أي رقم موجود في نفس الصف أو العمود الذي فيه الخانة الفارغة ..

أنا أمتاز بالشرح السيء .. لكن أرجو أني أستطعت شرح طريقة عمل اللعبة بشكل واضح ..


كود:
#!/bin/csh # # # # # # # # # # # # # # # # # # # The Arrange Numbers Game # # Scripted By Abdulaziz Al-Asiri # # # # # # # # # # # # # # # # # # # #-------------------------------------# # Welcome screen # #-------------------------------------# clear # Clean the screen to start the game #----- Shows ( = ) one by one -----# set cntr = 1 # Counter echo -n "\t" while ( $cntr <= 37 ) sleep 0.02 echo -n "\e[0;31m=\e[m" @ cntr++ end echo "" #----- Shows welcome message word by word -----# sleep 0.2 echo -n "\t\e[0;34mWelcome \e[m" sleep 0.2 echo -n "\e[0;34mTo \e[m" sleep 0.2 echo -n "\e[0;34mThe \e[m" sleep 0.2 echo -n "\e[0;34mArrange \e[m" sleep 0.2 echo -n "\e[0;34mNumbers \e[m" sleep 0.2 echo "\e[0;34mGame\e[m" #----- Shows ( = ) one by one -----# @ cntr = 1 echo -n "\t" while ( $cntr <= 37 ) sleep 0.02 echo -n "\e[0;31m=\e[m" @ cntr++ end echo "" #-------------------------------------# # Cheack if the level is in the range # #-------------------------------------# check_level: echo -n "Chose a level (3-10) : " # Asks user to chose a level between 3 and 10 set level = $< if ($level > 10 || $level < 3) then # if the level is out of range re-ask the user again echo "\e[0;31mSorry the level must be between (3-10)\e[m" goto check_level endif #----------------------------------# # Set the blocks values # #----------------------------------# #----- Prepare to set the values set plate # Array Stores real values of blocks set i = 1 # Counter for loops set buffer # Array Stores temp values of plate @ j = $level * $level # The number of blocks @ range = $j - 1 # The number of blocks without blank (hole) set counter = 0 # Counts number of moves echo -n "Set the nambers randomly [R] or by hand [H] ? : " # default value is RANDOMLY set choice = $< #----- Set temp values of blocks -----# while ( $i < $j ) set buffer = ( $buffer $i ) @ i++ end #----- Set the blocks values BY HAND -----# @ i = 1 # Re-set the counter if ( $choice == h || $choice == H) then while ( $i < $j ) # Asks user to enter blocks values one by one echo -n "Enter value of block $i [1 - $range] : " set value = $< if ( $value > 0 && $value < $j ) then # Checks if the entry value is out of rangr if ( $buffer[$value] == $value ) then # Checks if value is not used set plate = ( $plate $value ) # Adds the number to the plate array @ buffer[$value] = 0 # Sets value as used @ i++ else echo "\e[0;31mThis number already exists .. enter another number \e[m" endif else echo "\e[0;31mThe number is out of range .. enter a number again \e[m" endif end #----- Set the blocks values RANDOMLY -----# else set rand = $$ # Give (rand) a random number (PID) while ( $i < $j ) # Generates a random number set Random = `awk ' BEGIN { srand( '$rand' ); print int( rand() * '$range' + 1 ) } ' ` @ rand++ if ( ($buffer[$Random]) == 0 ) then # Checks if value is used then go back to generates continue endif set plate = ( $plate $Random ) # Adds the number to the plate array set buffer[$Random] = 0 # Sets value as used @ i++ end endif set plate = ( $plate 0) # Add [ 0 ] at last block as a blank block (hole) #----------------------------------# # Shows the plate # #----------------------------------# set StartTime = `date +%s` # To save beginning time set min = 0 # To counts mins show_plate: clear @ i = 1 # Re-set the counter echo "" # New line (empty) while ( $i <= $j ) # Show the blocks and values if ( ( $i - 1 ) % $level == 0) then @ cntr = 1 # Re-set the counter echo -n "\t" # Prints tab at the beginning of horizontal lines while ( $cntr <= $level ) # Print the horizontal lines of plate echo -n "\e[0;31m+------\e[m" @ cntr++ end echo "\e[0;31m+\e[m" # Close the end of horizontal lines echo -n "\t" # Print tab at the beginning of rows endif if ($plate[$i] == 0) then echo -n "\e[0;31m| \e[m" # If block's value is 0 shows blank block (hole) else if ( $plate[$i] < 10 ) then echo -n "\e[0;31m|\e[m \e[0;34m $plate[$i] \e[m" # Print cell if the value just one digit else echo -n "\e[0;31m|\e[m \e[0;34m $plate[$i] \e[m" # Print cell if the value two digit endif if ( $i % $level == 0) then # Close the table and print a new line if the echo "\e[0;31m|\e[m" # elements in a row equal to the number of a level endif @ i++ end @ cntr = 1 # Re-set the counter echo -n "\t" # Prints tab at the beginning of last horizontal line while ( $cntr <= $level ) echo -n "\e[0;31m+------\e[m" # Print the last horizontal line of plate @ cntr++ end echo "\e[0;31m+\n\e[m" # Close the end of horizontal line and print new empty line #----------------------------------# # Check if the blocks are arranged # #----------------------------------# @ i = 1 # Re-set the counter set check_array = 1 while ( ($plate[$i] == $i) && $i < $j) # Checks if every block in the right position @ check_array++ @ i++ end if ($check_array == $j) then # if check_array = j that means the plate is arranged so, finish set EndTime = `date +%s` # To saves end time @ EndTime = $EndTime - $StartTime # find the real time while ($EndTime > 59) @ EndTime = $EndTime - 60 @ min++ end echo "\e[0;34mYou win !\e[m" echo "\e[0;34mYou Took (\e[1;31m $min min And $EndTime sec And $counter moves\e[0;34m) to arrange the blocks\e[m" goto OUT endif #----------------------------------# # Get next movement # #----------------------------------# CHOSE: echo -n "Enter block number to move it , or [Q] to quit : " set num = $< set block = 0 # If the value do not change that means choice is out of range if ($num == q || $num == Q) then goto OUT # Quit endif #----------------------------------# # Get the position of block # #----------------------------------# set chk_num = 1 # Set the counter while ($chk_num <= $j) if ( $num == $plate[$chk_num]) then @ block = $chk_num # Gets the real coordinate of the block break endif @ chk_num++ end #----------------------------------# # Check if the movement is correct # #----------------------------------# #----- First : check out the range -----# if ($block == 0) then goto wrong_movement endif #----- Second : check above the selected block -----# set temp_block = $block # Set temp_block set blocks_move = 0 # Set the counter # The selected block has to be between the second row and last row while ($temp_block > $level) @ temp_block = $temp_block - $level @ blocks_move++ if ( $plate[$temp_block] == 0 ) then # If fined 0 means fined the hole goto MOVE_UP endif end #----- Third : check down the selected block -----# set temp_block = $block # Re-set temp_block set blocks_move = 0 # Re-set the counter # The selected block has to be between the first row and before-last row while ( $temp_block <= ($j - $level) ) @ temp_block = $temp_block + $level @ blocks_move++ if ( $plate[$temp_block] == 0 ) then # If fined 0 means fined the hole goto MOVE_DOWN endif end #----- Fourth : check right the selected block -----# set temp_block = $block # Re-set temp_block set blocks_move = 0 # Re-set the counter # The selected block has to be between the first column and before-last one while ( $temp_block % $level > 0) @ temp_block++ @ blocks_move++ if ( $plate[$temp_block] == 0 ) then # If fined 0 means fined the hole goto MOVE_RIGHT endif end #----- Fivth : check Left the selected block -----# set temp_block = $block # Re-set temp_block set blocks_move = 0 # Re-set the counter # The selected block has to be between the first column and before-last one while ( $temp_block % $level > 1 || $temp_block % $level == 0 ) @ temp_block-- @ blocks_move++ if ( $plate[$temp_block] == 0 ) then # If fined 0 means fined the hole goto MOVE_LEFT endif end #----------------------------------# # movements # #----------------------------------# #----- Wrong movement -----# wrong_movement: echo "\e[0;31mSorry .. the movement is wrong! please chose again\e[m" goto CHOSE #----- Moves UP -----# MOVE_UP: set X = $temp_block # Temp variable while ($blocks_move > 0) # If there is still moves @ X = $X + $level @ plate[$temp_block] = $plate[$X] @ temp_block = $temp_block + $level @ blocks_move-- end @ counter++ # Increments the moves counter set plate[$X] = 0 # Sets the (hole) in the new position goto show_plate #----- Moves DOWN -----# MOVE_DOWN: set X = $temp_block # Temp variable while ($blocks_move > 0) # If there is still moves @ X = $X - $level @ plate[$temp_block] = $plate[$X] @ temp_block = $temp_block - $level @ blocks_move-- end @ counter++ # Increments the moves counter set plate[$X] = 0 # Sets the (hole) in the new position goto show_plate #----- Moves RIGHT -----# MOVE_RIGHT: set X = $temp_block # Temp variable while ($blocks_move > 0) # If there is still moves @ X = $X - 1 @ plate[$temp_block] = $plate[$X] @ temp_block = $temp_block - 1 @ blocks_move-- end @ counter++ # Increments the moves counter set plate[$X] = 0 # Sets the (hole) in the new position goto show_plate #----- Moves LEFT -----# MOVE_LEFT: set X = $temp_block # Temp variable while ($blocks_move > 0) # If there is still moves @ X = $X + 1 @ plate[$temp_block] = $plate[$X] @ temp_block = $temp_block + 1 @ blocks_move-- end @ counter++ # Increments the moves counter set plate[$X] = 0 # Sets the (hole) in the new position goto show_plate #----------------------------------# # F I N I S H # #----------------------------------# OUT: echo "\n\e[0;32m\t+-----------------+" echo "\t| B Y E |" echo "\t+-----------------+\n\e[m" exit 0 # Exit without errors # EOF #
أنتظر رأيكم ..

دمتم في خير ..

ملاحظة / تمت تجربة اللعبة على فيدورا وتعمل بشكل سليم ..
وتمت تجربتها على ريدهات واوبينتو ولم تعمل .. لا أدري ما السبب !!

لكن اذا كنت نستخدم اوبينتو جرب استبدال

كود:
echo
بـ

كود:
echo -e
وكذلك ..

كود:
echo -n
بـ

كود:
echo -en

ملاحظة هامة !!

يجب حذف الفراغ في بداية السطر الأول .. لأنه يسبب خطأ ..



كود:
 #!/bin/csh

الفراغ بسبب النسخ للمنتدى ..

وبالتوفيق للجيمع ..



Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 

المشاركات
125

+التقييم
73


العمر

الاقامة


84235




Linux Leader will become famous soon enough

Linux Leader غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 31-Jan-2010, 10:45 PM بواسطة 1 2
شي جميل وآصل إبداعتك



Dr.X3
VIP DeveloPer
 
الصورة الرمزية Dr.X3
 

المشاركات
755

+التقييم
1337


العمر

الاقامة


78212




Dr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud of

Dr.X3 غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 31-Jan-2010, 11:41 PM بواسطة 1 3
آلله يعطيكـ آلعافيه

تحيآتي



ฟ į ẕ ،’
VIP DeveloPer
 
الصورة الرمزية ฟ į ẕ ،’
 

المشاركات
6,907

+التقييم
40751


العمر

الاقامة


نظام التشغيل
Windows XP

@Danger




ฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond reputeฟ į ẕ ،’ has a reputation beyond repute

ฟ į ẕ ،’ غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 01-Feb-2010, 12:25 PM بواسطة 1 4
Dr.X3 .. اهلا بك ... الأجمل مرورك من هنا .. نورت الصفحة

~~~~~~~~~

{ سلتوح } .. الله يعافيك يالغالي .. أسعدني تواجدك ..

~~~~~~~~~

ملاحظة هامة !!

يجب حذف الفراغ في بداية السطر الأول .. لأنه يسبب خطأ ..

كود:
 #!/bin/csh

الفراغ بسبب النسخ للمنتدى ..

وبالتوفيق للجيمع ..



Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 

المشاركات
125

+التقييم
73


العمر

الاقامة


84235




Linux Leader will become famous soon enough

Linux Leader غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 01-Feb-2010, 01:11 PM بواسطة 1 5

المشاركة الأصلية كتبت بواسطة linux leader مشاهدة المشاركة

dr.x3 .. اهلا بك ... الأجمل مرورك من هنا .. نورت الصفحة

~~~~~~~~~

{ سلتوح } .. الله يعافيك يالغالي .. أسعدني تواجدك ..

~~~~~~~~~

ملاحظة هامة !!

يجب حذف الفراغ في بداية السطر الأول .. لأنه يسبب خطأ ..

كود:
 #!/bin/csh

الفراغ بسبب النسخ للمنتدى ..

وبالتوفيق للجيمع ..
تمت دمج الملاحظة في الموضوع ..



Dr.X3
VIP DeveloPer
 
الصورة الرمزية Dr.X3
 

المشاركات
755

+التقييم
1337


العمر

الاقامة


78212




Dr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud ofDr.X3 has much to be proud of

Dr.X3 غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 01-Feb-2010, 06:26 PM بواسطة 1 6
بيض الله وجهك أخوي Dr.X3

ويعطيك الف عافية ..,



Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 

المشاركات
125

+التقييم
73


العمر

الاقامة


84235




Linux Leader will become famous soon enough

Linux Leader غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 03-Feb-2010, 02:08 AM بواسطة 1 7
,,



مشكور ع آلطرح آلمميز يآلغلآ

سلمت آنآملك آلطيبه

وذآ مآهوب غريب عليك ولآ ع آحد من آلآخوآن بآلديف ,,

تقبل مرورىى ووردتي




,,



آلملكي
ExpErt DeveloPer
 
الصورة الرمزية آلملكي
 

المشاركات
3,121

+التقييم
1024


العمر
20

الاقامة


80030




آلملكي has much to be proud ofآلملكي has much to be proud ofآلملكي has much to be proud ofآلملكي has much to be proud ofآلملكي has much to be proud ofآلملكي has much to be proud ofآلملكي has much to be proud ofآلملكي has much to be proud of

آلملكي غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 06-Feb-2010, 07:22 AM بواسطة 1 8
أهلا بك أخي الملكي ..

مرورك أسعدني ..

~~~~~~~~~~~~~~~~~

قام أحد الأخوه مشكورا بعمل بعض التعديلات على السكربت .. وتقريبا السكربت الآن يعمل على جميع التوزيعات ..

لكن في هذه النسخة من السكربت تمت إزالة الألوان ..

تجدون السكربت بعد التعديل في هذه الصفحة http://pastebin.com/f7f49c731

ودمتم بخير ..



Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 

المشاركات
125

+التقييم
73


العمر

الاقامة


84235




Linux Leader will become famous soon enough

Linux Leader غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 06-Feb-2010, 06:38 PM بواسطة 1 9
مشكور يالغالي ولك من ي احلى تقييم



bashar husainat
Beginner Developer
 

المشاركات
77

+التقييم
64


العمر

الاقامة


87941




bashar husainat will become famous soon enough

bashar husainat غير متواجد حالياً



رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي اضيفت بتاريخ 06-Feb-2010, 06:40 PM بواسطة 1 10



bashar husainat
Beginner Developer
 

المشاركات
77

+التقييم
64


العمر

الاقامة


87941




bashar husainat will become famous soon enough

bashar husainat غير متواجد حالياً




مواقع النشر (المفضلة)


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع إبحث في الموضوع
إبحث في الموضوع:

البحث المتقدم
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is في
كود HTML معطلة
Trackbacks are معطلة
Pingbacks are معطلة
Refbacks are معطلة





خدماتنا

Devpoint community
Devpoint cloud
Devpoint HUB
Devpoint TV
شركة نقطة التطوير للخدمات البرمجية

صفحات مهمة

خصوصية الموقع NEW
الحسابات الموثوقة
نظام ترقية العضو

نقطة التطوير

About Devpoint LLC
[email protected]

الدعم الفني

Sitemap
/development.point
@devpointcom

v4

Devpoint community by Devpoint LLC
Development point © 2015
System by vBulletin Inc
Build: 4.1.2.03
الساعة الآن 06:04 AM



SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188