الجمعة، 13 يوليو 2012

مكتبة turtle البرمجية في لغة البايثون

بسم الله الرحمن الرحيم

تحتوي لغة البايثون على العديد من المكتبات البرمجية لجميع الغايات مثل أرسال البريد الألكتروني و التعامل مع الملفات , و لكن المكتبة التي سأكتب عنها اليوم سيكون وظيفتها الرسم و صنع الأنماط , و لكن الهدف الحقيقي منها هو تعلم البرمجة بطريقة ممتعة و بسيطة ,  و يعود أصلها إلى لغة اللوغو الشهيرة .


  • البرنامج الأول :

import turtle # أستيراد المكتبة البرمجية

wn = turtle.Screen() # أنشاء كائن خاص بالمكتبة 

alex = turtle.Turtle() # أنشاء كائن "turtle"  


alex.forward(50) # تحريك السلحفاة للأمام مسافة 50

alex.left(90) # لكي تستدير السلحفاة بأتجاه اليسار مقدار 90 درجة

alex.forward(30) # لكي تتحرك السلحفاة بأتجاه الأمام مسافة 30 



wn.mainloop(# أنتظر المستخدم لكي ينهي النافذة الخاصة بالبرنامج



سيكون ناتج هذا البرنامج هو الصورة التالية :

السطر الأول مألوف لجميع مبرمجي لغة بايثون و يستخدم لتحميل مكتبة Turtle ,  أما السطر الثاني فينشأ نافذة جديدة بأسم wn , و السطر الثالث ينشأ مؤشر رسم بأسم alex .

السطور البرمجية من الرابع للسطر السادس تحتوي على وظائف لتحكم بتحرك المؤشر , و كما يظهر فأسم الوظيفة البرمجية يدل على عملها مثل الوظيفة البرمجية left التي تجعل المؤشر يستدير بأتجاه اليسار بدرجة مقدرة من قبل المبرمج لذا منطقيا يجب أن تكون هنالك و ظيفة بالاسم right ليستدير المؤشر لجهة اليمين و ظيفة أخرى بأسم backward لرجوع للخلف .

  • تحديد لون الخلفية و الخط :
لتحديد لون الخلفية يجب أستخدام الوظيفة البرمجية bgcolor , و لتحديد لون الخط الوظفية البرمجية color :
import turtle

wn = turtle.Screen()

wn.bgcolor("LightBlue") #تحديد لون الخلفية

alex = turtle.Turtle()

alex.color("white") #تحديد لون الخط

alex.forward(50)

alex.left(90)

alex.forward(30)

wn.mainloop()

 
هذه صورة لنتيجة تنفيذ البرنامج :
 

للمزيد من أسماء الألوان زر هذه الصفحة (http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm) ستجد قائمة مفصلة للألوان التي يمكنك أستخدمها .
 
 
  •  تغيير شكل مؤشر الرسم :
يمكن تغيير الشكل الأفتراضي لمؤشر الرسم بواسطة الوظيفة البرمجية shape :

import turtle

wn = turtle.Screen()

alex = turtle.Turtle()

alex.shape("turtle") # تحديد شكل المؤشر


alex.forward(50)

alex.left(90)

alex.forward(30)

wn.mainloop()

 

 
 و هذه قائمة بالأشكال المتوافرة :
  1. سهم ( arrow )
  2. إلغاء المؤشر ( blank )
  3. المؤشر الأفتراضي ( classic )
  4. دائرة ( circle )
  5. مربع ( square )
  6. مثلث ( triangle )
  7.  سلحفاة ( turtle )
  •  تحديد سرعة حركة المؤشر :
تستطيع تحديد السرعة بين المؤشر بواسطة الوظيفة البرمجية speed و يمكن تحديد القيمة بين 1 ( أبطأ سرعة ) إلى 10 ( السرعة القصوى ) .
import turtle

wn = turtle.Screen()

alex = turtle.Turtle()

alex.speed(1) # تحديد سرعة المؤشر


alex.forward(50)

alex.left(90)

alex.forward(30)

wn.mainloop()

  • ايقاف و أعادة عمل المؤشر :
في برمجنا السابقة يقوم المؤشر برسم الخط في أثناء تحركه بشكل أفتراضي , و يمكن أيقاف المؤشر عن الرسم بواسطة الوظيفة penup و أعادة تشغيلها بواسطة pendown :

import turtle

wn = turtle.Screen()

alex = turtle.Turtle()

alex.penup() # أيقاف عمل المؤشر

alex.forward(50)

alex.pendown() # تشغيل المؤشر

alex.left(90)

alex.forward(30)

wn.mainloop()


  • الخاصية stamp :
عند أستخدام هذه الوظيفة سيترك المؤشر أثر مطابق له في مكان تطبيق الوظيفة : 

import turtle

wn = turtle.Screen()

alex = turtle.Turtle()

alex.stamp() #ترك أثر للمؤشر

alex.forward(50)

alex.stamp() #ترك أثر للمؤشر

alex.left(90)

alex.forward(30)

wn.mainloop()


 
مع دمج هذه المكتبة مع إمكانية لغة بايثون ( الحلقات التكرارية و الوظائف البرمجية ) يمكنك أنتاج إبداعات رائعة مثل هذا المثال :

#!/usr/bin/python

import turtle



def draw_multicolor_square(t, sz):

    """Make turtle t draw a multi-color square of sz."""

    for i in ["red", "purple", "hotpink", "blue"]:

        t.color(i)

        t.forward(sz)

        t.left(90)



wn = turtle.Screen()        # Set up the window and its attributes

wn.bgcolor("lightgreen")



tess = turtle.Turtle()      # Create tess and set some attributes

tess.pensize(3)



size = 20                   # Size of the smallest square

for i in range(15):

    draw_multicolor_square(tess, size)

    size = size + 10        # Increase the size for next time

    tess.forward(10)        # Move tess along a little

    tess.right(18)          #    and give her some extra turn



wn.mainloop()



و هذه نهاية هذا الدرس , أذا عندك أي تعديل أو أقتراح لا تترد شاركنا :-)
 

هناك 15 تعليقًا:

  1. السلام عليكم
    بدايةً مرحباً بعودتك غانماً بإذن الله تعالي من وطيس الإمتحانات ^_^

    البايثون من اللغات الجميلة و التي أحبها بشكلٍ شخصي جداً، و من مميزاتها إمكانية برمجة مكتباتٍ تعمل علي كافة أنظمة التشغيل المدعومة.
    المكتبة التي ذكرتَها في المقال تُفيد جداً في الأمور التعليمية، و خاصةً إذا لأنها تُستخدم مع لغةٍ غايةٍ في السهولة مثل البايثون :)

    ردحذف
  2. و عليكم السلام و رحمة الله

    جزاك الله خيراً

    كما قلت البايثون من أسهل و أقوى اللغات البرمجية , لذا أن شاء الله سوف أبدأ سلسلة سوف تكون الأولى عربياً أن شاء الله عن مكتبة opencv المتخصصة في التعرف على الأشكال في الصور و الفيديو و ذلك بأستخدام أكواد البايثون .

    ردحذف
  3. لو سمحت كنت عايزة أعرف انت نزلتها ازاى عشان بحاول أعمل زيك بس بيظهرلى خطأ

    ردحذف
  4. رائع جداً , شرح سلس و سهل لسطور البرنامج استمر رعاك الله

    ردحذف
  5. شكرا لك انا في المدرسه الان

    ردحذف
  6. كيف اعرف ايش فيه في مكتبتي
    وكيف احمل المكتبات اذا ماكانت عندي المكتبة

    ردحذف
    الردود
    1. تقدر تستخدم الأمر pip , الموضوع في لينكس بسيط بس ويندوز يحتاج شرح في موضوع مفرد له
      pip install turtle

      حذف
  7. ليه بالذات يختاروا السلحفاه في البرمجيات؟

    ردحذف
    الردود
    1. هذه المكتبة مستوحاه من لغة البرمجة logo اللي استلهمها مخترعها من حركة السلاحف على الشاطىء و الاُثر التي تتركه .
      https://en.wikipedia.org/wiki/Logo_(programming_language)

      حذف
  8. ياريت لو صوره لنتيجة الكود الاخير لنرى ماذا حصل

    ردحذف
    الردود
    1. تم التعديل , شكرا على الملاحظة

      حذف
  9. شرح ممتاز وواضحز وسهل الفهمز يا ريت تستمرز ويعطيك العافيهز

    ردحذف