نقطة التطوير  
المستخدم
كلمة المرور
غير مسجل
تنويهات الاعضاء
قبل بدء مشاركتك في المنتدى اضغط هنا


العودة   [ Dev-PoinT ] > أنظمة التشغيل > جنو / لينكس - GNU / Linux



جنو / لينكس - GNU / Linux كل ما يتعلق حول جنو / لينكس والبرمجيات الحُرة

!  قم بقراءة قوانين الموقع قبل اضافة رد , اضغط هنا

 
LinkBack أدوات الموضوع انواع عرض الموضوع
قديم 31-Jan-2010, 04:16 AM   #1
Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 


Linux Leader will become famous soon enough

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



أضافة كصديق
افتراضي [سكربت] لعبة ترتيب الأرقام .. من برمجتي

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

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

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

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

فكرة اللعبة ..
توجد 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

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

وبالتوفيق للجيمع ..
قديم 31-Jan-2010, 10:45 PM   #2
Dr.X3
VIP DeveloPer
 
الصورة الرمزية Dr.X3
 


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 غير متواجد حالياً



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي

شي جميل وآصل إبداعتك
توقيع Dr.X3


???? ???? ??????????? ???????? - ????? ??? ????? ??? ??????????

??? ??? ????? ?? ??? ??? - ???? ????? ?? ??? ?????????

???? ?????? ?? ???? ?????? - ???? ????? ?? ??? ???????


قديم 31-Jan-2010, 11:41 PM   #3
ฟ į ẕ ،’
' Dangerous , ♥ !
 
الصورة الرمزية ฟ į ẕ ،’
 


ฟ į ẕ ،’ 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

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



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي

آلله يعطيكـ آلعافيه

تحيآتي
توقيع ฟ į ẕ ،’

All took his advantage and gone
No one reminds me of
am not mean one never





قديم 01-Feb-2010, 12:25 PM   #4
Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 


Linux Leader will become famous soon enough

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



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي

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

~~~~~~~~~

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

~~~~~~~~~

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

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

كود:
 #!/bin/csh

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

وبالتوفيق للجيمع ..
قديم 01-Feb-2010, 01:11 PM   #5
Dr.X3
VIP DeveloPer
 
الصورة الرمزية Dr.X3
 


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 غير متواجد حالياً



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي



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

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

~~~~~~~~~

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

~~~~~~~~~

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

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

كود:
 #!/bin/csh

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

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


???? ???? ??????????? ???????? - ????? ??? ????? ??? ??????????

??? ??? ????? ?? ??? ??? - ???? ????? ?? ??? ?????????

???? ?????? ?? ???? ?????? - ???? ????? ?? ??? ???????


قديم 01-Feb-2010, 06:26 PM   #6
Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 


Linux Leader will become famous soon enough

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



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي

بيض الله وجهك أخوي Dr.X3

ويعطيك الف عافية ..,
قديم 03-Feb-2010, 02:08 AM   #7
آلملكي
ExpErt DeveloPer
 
الصورة الرمزية آلملكي
 


آلملكي 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   #8
Linux Leader
Beginner Developer
 
الصورة الرمزية Linux Leader
 


Linux Leader will become famous soon enough

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



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي

أهلا بك أخي الملكي ..

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

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

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

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

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

ودمتم بخير ..
قديم 06-Feb-2010, 06:38 PM   #9
bashar husainat
Beginner Developer
 


bashar husainat will become famous soon enough

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



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي

مشكور يالغالي ولك من ي احلى تقييم
قديم 06-Feb-2010, 06:40 PM   #10
bashar husainat
Beginner Developer
 


bashar husainat will become famous soon enough

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



أضافة كصديق
افتراضي رد: [سكربت] لعبة ترتيب الأرقام .. من برمجتي


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


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

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

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



Creative Commons License
Services by Devpoint, Inc. is licensed under a Creative Commons Attribution-NoDerivatives 4.0 International License.


الساعة الآن 03:19 AM

Powered by vBulletin , Devpoint community system
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.

[ Dev-PoinT ] الأعلى  
نقطة التطوير - Dev-point.com Copyright ©2006 - 2014
نظام الترقية - الحسابات الموثوقة - خصوصية الموقع - Devpoint v2.1.1 Final

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