در دهه ۱۹۷۰، یک زبان برنامه نویسی بسیار ساده اما قدرتمند به نام Logo وجود داشت که فقط توسط چند محقق استفاده می شد.
این تا زمانی بود که شخصی، چیزی به نام “گرافیک لاک پشتی” را به زبان اضافه کرد و “لاک پشت” را در دسترس قرار داد که روی صفحه قابل مشاهده بود و دستوراتی مانند حرکت به جلو، گردش به راست، گردش به چپ و غیره را پاسخ میداد.
با استفاده از لاک پشت، افراد قادر به ترسیم اشکال جالب روی صفحه بودند. این باعث شد که این زبان فوراً برای افراد در هر سنی قابل دسترس و جذاب شده و تا حد زیادی عامل محبوبیت آن در دهه ۱۹۸۰ شود.
Small Basic نیز دارای شیئی به نام Turtle با دستورات زیاد است که می توان آن را از داخل برنامه های Small Basic فراخوانی کرد. در این فصل، از شی ء Turtle (لاک پشت) برای ترسیم گرافیک روی صفحه استفاده می کنیم.
لاک پشت (Turtle)
برای شروع، باید لاک پشت را روی صفحه نمایش نمایان کنیم. این کار را می توانیم با یک برنامه ساده یک خطی انجام دهیم:
()Turtle.Show
هنگامی که این برنامه را اجرا می کنید، متوجه یک پنجره سفید خواهید شد، درست مانند آنچه در فصل قبل دیدیم، با این تفاوت که این پنجره یک لاک پشت در مرکز خود دارد. این لاک پشت است که دستورات ما را دنبال می کند و هر چه از او بخواهیم ترسیم می نماید.
شکل ۱-۸ : لاک پشت قابل مشاهده است
حرکت و ترسیم
یکی از دستورالعمل هایی که لاک پشت می فهمد، Move است.
این عملیات یک عدد را به عنوان ورودی می گیرد. این عدد به لاک پشت می گوید که چقدر باید حرکت کند.
در مثال زیر، از لاک پشت می خواهیم که ۱۰۰ پیکسل حرکت دهد.
Turtle.Move(100)
هنگامی که این برنامه را اجرا می کنید، در واقع می توانید ببینید که لاک پشت به آرامی ۱۰۰ پیکسل به سمت بالا حرکت می کند.
همانطور که حرکت می کند، متوجه خواهید شد که پشت آن یک خط کشیده می شود.
توجه: هنگام استفاده از عملیات روی Turtle، لازم نیست ()Show را فراخوانی کنید. هر زمان که عملیات لاک پشت انجام شود، لاک پشت به طور خودکار قابل مشاهده خواهد بود.
رسم یک مربع:
یک مربع چهار ضلع دارد، دو ضلع عمودی و دو ضلع افقی.
برای رسم مربع باید بتوانیم با لاک پشت یک خط را بکشیم، بعد به راست بپیچیم و خط دیگری بکشیم و این کار را ادامه دهیم تا هر چهار طرف تمام شود.
برنامه رسم مربع با عملیات گرافیک لاک پشتی به صورت زیر است:
Turtle.Move(100)
()Turtle.TurnRight
Turtle.Move(100)
()Turtle.TurnRight
Turtle.Move(100)
()Turtle.TurnRight
Turtle.Move(100)
()Turtle.TurnRight
هنگامی که این برنامه را اجرا می کنید، می توانید لاک پشت را ببینید که یک مربع را با رسم خطوط آن ترسیم می کند که نتیجه مانند شکل زیر است:
شکل ۲-۸ : لاک پشت یک مربع رسم می کند
در برنامه ای نوشتیم ، دو دستورالعمل ، چهار بار تکرار می شود.
قبلاً آموخته ایم که چنین دستورات تکراری را می توان با استفاده از حلقه ها اجرا کرد.
بنابراین، اگر بخواهیم برنامه بالا را طوری تغییر دهیم که از حلقه For..EndFor استفاده کند، در نهایت به برنامه ساده تر زیر خواهیم رسید:
For i = 1 To 4
Turtle.Move(100)
()Turtle.TurnRight
EndFor
تغییر رنگ
Turtle دقیقاً از همان خصوصیات GraphicsWindow استفاده می کند که در فصل قبل دیدیم. این بدان معنی است که تمام عملیاتی که در فصل قبل یاد گرفتیم هنوز در اینجا معتبر هستند.
به عنوان مثال، برنامه زیر مربعی را رسم می کند که هر ضلع آن به رنگی متفاوت می باشد:
لاک پشت علاوه بر عملیات TurnRight و TurnLeft دارای عملیات Turn نیز می باشد.
این عملیات یک ورودی می گیرد که زاویه چرخش را مشخص می کند. با استفاده از این عمل می توان هر چند ضلعی را رسم کرد.
برنامه زیر یک شش ضلعی توسط عملیات Turn ترسیم می کند:
For i = 1 To 6
Turtle.Move(100)
Turtle.Turn(60)
EndFor
این برنامه را اجرا کنید تا ببینید آیا واقعاً یک شش ضلعی ترسیم می کند یا خیر.
توجه کنید که از آنجایی که زاویه بیرونی اضلاع ۶۰ درجه است، از Turn(60) استفاده کرده ایم.
برای چنین چند ضلعی که اضلاع آن همه با هم برابر هستند، با تقسیم ۳۶۰ بر تعداد اضلاع، می توان به راحتی زاویه بیرونی بین اضلاع را به دست آورد.
با این روش و با استفاده از متغیرها، میتوانیم یک برنامه بسیار کلی بنویسیم که میتواند هر چند ضلعی منتظمی را ترسیم کند.
sides = 12
length = 400 / sides
angle = 360 / sides
For i = 1 To sides
Turtle.Move(length)
Turtle.Turn(angle)
EndFor
شکل ۴-۸ : رسم یک ۱۲ ضلعی منتظم
با استفاده از این برنامه می توانید هر چند ضلعی را فقط با تغییر متغیر sides رسم کنید.
قرار دادن ۴ در این برنامه مربعی را که با آن شروع کردیم به ما می دهد.
با قرار دادن یک مقدار بزرگ، مثلاً ۵۰، نتیجه یک ۵۰ ضلعی خواهد بود که بیشتر شبیه یک دایره می باشد.
با استفاده از تکنیکی که اخیراً یاد گرفتیم، میتوانیم توسط لاکپشت با هر بار کمی جابهجایی، دایرههای متعدد بکشیم که در نتیجه خروجی جالبی به دست میآید:
sides = 50
length = 400 / sides
angle = 360 / sides
Turtle.Speed = 9
For j = 1 To 20
For i = 1 To sides
Turtle.Move(length)
Turtle.Turn(angle)
EndFor
Turtle.Turn(18)
EndFor
برنامه بالا دارای دو حلقه For..EndFor تو در تو است.
حلقه داخلی (i = 1 to sides) شبیه برنامه ترسیم چند ضلعی است و وظیفه رسم دایره را بر عهده دارد.
حلقه بیرونی (j = 1 To 20) مسئول چرخاندن لاک پشت به ازای هر دایره ای است که ترسیم می شود. این به لاک پشت می گوید که ۲۰ دایره بکشد.
برنامه را نوشته و اجرا نمایید تا خروجی جالب آن را ببینید.
نکته: در برنامه بالا با تنظیم Speed روی ۹ سرعت حرکت لاک پشت را افزایش داده ایم. شما می توانید این ویژگی را روی هر مقداری بین ۱ تا ۱۰ تنظیم کنید تا لاک پشت به همان سرعتی که می خواهید، حرکت کند.
حرکت به اطراف
با فراخوانی عملیات PenUp می توانید کاری کنید که لاک پشت نقاشی نکند.
این دستور به شما این امکان را می دهد که لاک پشت را بدون کشیدن خط به هر نقطه ای از صفحه نمایش منتقل کنید.
فراخوانی PenDown باعث می شود لاک پشت دوباره نقاشی کند.
از این قابلیت می توان برای ترسیم برخی جلوه های جالب مانند خطوط نقطه چین استفاده کرد.
در اینجا برنامه ای وجود دارد که در آن از این دستور برای ترسیم چند ضلعی خط چین استفاده شده است.
sides = 6
length = 400 / sides
angle = 360 / sides
For i = 1 To sides
For j = 1 To 6
Turtle.Move(length / 12)
()Turtle.PenUp
Turtle.Move(length / 12)
()Turtle.PenDown
EndFor
Turtle.Turn(angle)
EndFor
باز هم این برنامه دو حلقه تو در تو دارد.
حلقه داخلی یک خط چین را ترسیم میکند، در حالی که حلقه بیرونی مشخص میکند که چند خط رسم شود.
در این مثال ما از عدد ۶ برای متغیر sides استفاده کردیم و از این رو یک شش ضلعی خط چین دار به دست آوردیم، مانند زیر:
شکل ۵-۸ : استفاده از PenUp و PenDown
موقعیت لاک پشت در صفحه
شما می توانید از X و Y برای تنظیم موقعیت لاک پشت در صفحه استفاده کنید.
توجه: اگر Turtle.X = 0 و Turtle.Y = 0 را قرار دهید، مکان لاک پشت به گوشه سمت چپ بالای صفحه منتقل می شود.
همچنین شما همیشه می توانید موقعیت فعلی لاک پشت را با صداکردن Turtle.X و Turtle.Y بدست آورید.