کتابخانه Turtle در پایتون به همراه ویژگیهای خاصی عرضه شده تا برای کسانی که بهتازگی وارد دنیای برنامهنویسی شدهاند فعالیت لذتبخشی فراهم کند. در این مطلب از مجله فرادرس تلاش کردیم تا بهطور کامل با تمام امکانات کتابخانه جذاب Turtle آشنا شوید و با مثالهایی روش کار با Turtle و استفاده از امکانات هیجان انگیزش را ببینید. اگر در ارتباط با زبان برنامهنویسی پایتون تازهکار هستید، برای برداشتن اولین قدمها به دنیای برنامهنویسی، این مطلب آموزشی با کمک کتابخانه Turtle در پایتون کمک بسزایی برایتان خواهد بود.
اگر بخواهیم سرفصلهایی که هدف نوشتن این مطلب در مجله فرادرس بودهاند را بهطور خلاصه بیان کنیم باید اول درک کنیم که کتابخانه Turtle در پایتون چیست. سپس یاد میگیریم که چگونه Turtle را در کامپیوتر خود نصب کنیم. بعد با کتابخانه Turtle در پایتون کدنویسی میکنیم و درباره چندین مفهوم مهم در پایتون و فرمانهای اصلی Turtle صحبت خواهیم کرد و آنها را میآموزیم. در آخر نیز با کمک تمام چیزهایی که آموختیم یک بازی کوچک و سرگرم کننده را با استفاده از کتابخانه Turtle در پایتون کدنویسی میکنیم.
آشنایی با کتابخانه Turtle در پایتون
Turtle کتابخانهای از پیش نصب شده است یعنی بهصورت استاندارد همراه با پایتون روی کامپیوتر نصب میشود. کاربران به کمک این کتابخانه میتوانند تصاویر و اشکال مختلفی را بهصورت کشیدن بر روی بوم مجازی بسازند. قلم روی صفحه نمایشی که از آن برای رسم اشکال استفاده میکنید «لاک پشت» (Turtle) نام دارد و نام کتابخانه هم از این نام گرفته شده است. به عبارت سادهتر، کتابخانه «لاکپشت» یا Turtle در پایتون به برنامهنویسان تازهکار کمک میکند که برنامهنویسی با زبان پایتون را به روشی سرگرمکننده و تعاملی بیآموزند.
از Turtle بیشتر برای آشنا کردن کودکان با دنیای کامپیوتر استفاده میشود. همچنین کار با Turtle روش بسیار سر راست و کاملی برای درک مفاهیم پایتون است. استفاده از Turtle مثل جاده بسیار مناسبی است که کودکان میتوانند اولین قدمهای آشنایی با زبان برنامهنویسی پایتون را در آن بردارند. همانطور که گفته شد، کاربرد کتابخانه Turtle در پایتون تنها به کودکان محدود نمیشود. همچنین ثابت شده کار با این کتابخانه برای بزرگسالانی که برای کسب مهارت در پایتون تلاش میکنند نیز به شدت مفید است و به این دلایل Turtle برای افراد تازهکار گزینهای بسیار عالی است.
میتوانید انواع گوناگونی از شکلها و تصاویر را با استفاده از کتابخانه Turtle در پایتون طراحی و تولید کنید. نمونهای از انواع مختلف طرحهایی که میتوان به وسیله Turtle رسم کرد را در تصویر زیر نمایش دادهایم.
تصویر بالا طراحی بسیار جالبی دارد. این تصویر فقط یکی از انواع گسترده و گوناگونی است که میتوانید با Turtle در پایتون رسم کنید. بیشتر توسعهدهندگان از Turtle برای نقاشی اشکال هندسی، ساخت طرحهای مختلف و تولید تصاویر استفاده میکنند. اما توسعهدهندهگان دیگری نیز هستند که از Turtle برای ساخت «بازیهای کوچک» (Mini-Games) و «پویانمایی» (Animation) استفاده میکنند، دقیقا همانند همان که در تصویر بالا دیدیم.
شروع کار با Turtle
قبل از اینکه ادامه دهیم دو کار مهم هست که برای استفاده از این مطلب آموزشی باید انجام دهید.
- آشنایی با محیط توسعهی پایتون: مطمئن شوید که با «محیط برنامهنویسی» (Programming Environment) خود آشنایی دارید. برای برنامهنویسی با Turtle میتوانید از اپلیکیشنهایی استفاده کنید که به عنوان محیط برنامهنویسی کاربرد دارند. برای مثال میتوان از IDLE یا Jupyter Notebook نام برد. به هر حال، اگر با استفاده از این محیطها احساس آرامش نمیکنید میتوانید از برنامه REPL استفاده کنید که در این راهنمای آموزشی مورد استفاده قرار میگیرد و ما نیز کدها را در محیط REPL مینویسیم.
- کنترل ورژن پایتون: مطمئن شوید که پایتون روی سیستم شما از ورژن 3 به بالا باشد. اگر اینچنین نبود میتوانید نسخه جدید پایتون را از سایت اصلی پایتون دانلود کنید. برای کمک به انجام تنظیمات پایتون میتوانید از راهنمای نصب این زبان برنامهنویسی هم در سایت فرادرس استفاده کنید.
امتیاز بسیار خوب Turtle این است که کتابخانهای «دورنی» (Built-In) است. همراه با پایتون روی سیستم نصب میشود و نیازی به نصب هیچ پکیج اضافهای ندارد. تنها کاری که باید بکنید این است که Turtle را داخل محیط برنامهنویسی خود «وارد» (Import) کنید. در این دوره آموزشی از محیط برنامهنویسی REPL استفاده میکنیم و Turtle را در این محیط Import میکنیم. به محض اینکه برنامه REPL را روی سیستمتان نصب کنید، میتوانید با کد زیر نسخه ۳ پایتون را روی این محیط اجرا کنید.
کدی که در بالا میبینید پایتون۳ را به محیط کدنویسی REPL وارد میکند و محیط را برای کار با پایتون باز میکند. توجه کنید که در برنامهای مثل Jupyter Notebook نیازی به اجرای این کد ندارید.
قبل از شروع به کدنویسی با پایتون، باید مفهوم کتابخانه را در پایتون درک کنیم. در جهان غیر کامپیوتری، کتابخانه به مکانی میگویند که انواع مختلف کتاب را در آنجا نگهداری میکنند. همیشه میتوان به این کتابها دسترسی داشت، تمام اطلاعات درون آنها به سادگی در دسترساند و بعد از استفاده هر کتاب را میتوان به سرجای خود بازگرداند.
کتابخانهها نیز در دنیای کامپیوتر به همین صورت کار میکنند. کتابخانه چنین تعریف میشود به مجموعهای از تابعها و متدهای مهم و کاربردی که برای آسانتر کردن برنامهنویسی در دسترس توسعهدهندگان قرارگرفتهاند کتابخانه میگویند. کتابخانه Turtle در پایتون شامل همه متدها و توابعی میشود که برای ساخت تصاویر خود نیاز خواهید داشت. در پایتون برای اینکه به کتابخانهای دسترسی داشته باشید باید ابتدا کتابخانه را در محیط برنامهنویسی خود Import کنید.
حالا که Turtle را در محیط برنامهنویسی خود وارد کردهاید، میتوانید برنامهنویسی را با این کتابخانه جالب شروع کنید. Turtle کتابخانهای گرافیکی است. گرافیکی بودن کتابخانه Turtle به معنی این است که برای اجرای هر فرمان طراحی نیاز به ساخت پنجرهای جداگانه به نام «صفحه» (Screen) دارد. میتوانید این صفحه را با مقداردهی اولیه متغیری برای آن ایجاد کنید.
در پایتون از متغیرها برای ذخیره اطلاعات مورد نیاز در برنامه استفاده میکنیم. اطلاعاتی که بعدا در برنامه خود استفاده خواهیم کرد. وقتی که مقداری را برای شروع کار به متغیری اختصاص میدهیم یعنی آن متغیر را مقداردهی اولیه کردهایم. از آنجا که مقدار متغیرها ثابت نیست، در طول اجرای برنامه محتوای هر متغیر میتواند بارها تغییر کند.
الان برای اینکه صفحه Turtle را باز کنیم، باید متغیری را – به شکلی که در زیر نشان دادهایم – مقداردهی اولیه کنیم.
بعد از اجرای کد باید پنجره جداگانهای بهصورت زیر باز شود.
به این پنجره، صفحه میگویند. صفحه جایی است که میتوانید خروجی کد خود را ببینید. شکل مثلثی کوچک سیاه وسط صفحه، همان «لاکپشت» (Turtle) مشهور است.
نکته: به یاد داشته باشید وقتی متغیری را نامگزاری میکنید، باید نامی را انتخاب کنید که توسط هر کسی که به برنامه نگاه میکند به آسانی قابل درک باشد. به هر حال نامی که انتخاب میکنید باید برای خودتان هم از جهت استفاده راحت باشد، مخصوصا که در طول فرایند ایجاد برنامه، این متغیرها را بهطور متناوب فراخوانی خواهید کرد.
برای نمونه، انتخاب نامی مانند my_turtle_screen_name برای تایپ کردنهای متوالی خسته کننده خواهد بود، در حالی که نامهای آسانی مانند Joe و a بسیار تصادفی به نظر میرسند. درچنین موقعیتهایی استفاده از حروف الفبای تنها مانند s بهنظر مناسبتر میرسد. به دلیل اینکه حرف s کوتاه و بامزه است. مشخص است، حرف s از کلمه «صفحه» (Screen) گرفته شده پس حفظ کردنش هم بسیار آسان است.
بعد از ساخت صفحه باید متغیر t را مقداردهی کنیم. از این به بعد از متغیر t در سراسر برنامه خود برای دسترسی مستقیم به Turtle استفاده خواهیم کرد. به کد زیر برای ساخت Turtle توجه کنید.
دقیقا مثل صفحه، به این متغیرهم میتوانیم نام دیگری مانند a یا Jane یا حتی my_turtle نیز بدهیم اما در این مطلب آموزشی حرف t را حفظ خواهیم کرد.
تا اینجای کار صفحه و Turtle خود را ساختیم. صفحه نقش بوم و Turtle نقش قلم را بازی میکنند. میتوانید Turtle را برنامهنویسی کنید تا روی صفحه حرکت کند. Turtle چند ویژگی قابل تغییر خاص مانند سایز، رنگ و سرعت دارد. همیشه به مسیر مشخصی اشاره میکند و در آن مسیر حرکت خواهد کرد مگر اینکه دستور دیگری به Turtle بدهید.
- وقتی که قلم بالا باشد به اصطلاح قلم روی بوم نباشد به این معنا است که در زمان حرکت Turtle هیچ خطی رسم نخواهد شد.
- وقتی که رو به پایین باشد یعنی قلم روی بوم قرار داشه باشد به این معناست که همزمان با حرکت خطی نیز رسم خواهد کرد.
در بخش بعدی به بررسی روشهای مختلف برنامهنویسی با Turtle در پایتون خواهیم پرداخت و درباره قلم و کدهای آن مثل کدهای بالا و پایین کردن قلم بحث خواهیم کرد.
برنامهنویسی با Turtle
اولین چیزی که در طول دوره برنامهنویسی با Turtle در پایتون یاد میگیرید این است که Turtle را در جهت مورد نظر خود حرکت دهید. سپس یاد میگیرید چگونه Turtle و محیط اطرافش را شخصیسازی کنید و درنهایت چند فرمان بیشتر هم برای انجام وظایف خاص و حرفهای خواهید آموخت.
حرکت دادن Turtle
۴ جهت کلی برای حرکت Turtle وجود دارند.
- جلو
- عقب
- چپ
- راست
Turtle نسبت به جهتی که نگاه میکند به سمت جلو .forward()
یا عقب .backward()
حرکت میکند. میتوانید این مسیر را با چرخاندن Turtle تغییر دهید. توابع چپ .left()
و راست .right()
به وسیله درجه پارامتردهی شده و باعث چرخیدن Turtle میشوند. در ادامه برای پیادهسازی و تمرین هر کدام کدهایی را نوشتهایم که میتوانید استفاده کنید.
1t.right(90)
2t.forward(100)
3t.left(90)
4t.backward(100)
وقتی که کدهای نوشته شده در بالا را اجرا کنید ابتدای کار Turtle به اندازه 90
درجه به سمت راست میچرخد، 100
واحد به سمت جلو حرکت میکند، 90
درجه به سمت چپ حرکت میکند و در نهایت 100
واحد به سمت عقب حرکت میکند. میتوانید در تصویر زیر فرم حرکت این Turtle را ببینید.
میتوانیم از فرم کوتاه شده این کدهای دستوری نیز استفاده کنیم. در ادامه، حالت کوتاه شده هر کد را فهرست کردهایم.
- t.rt()
به جای t.right()
- t.fd()
به جای t.forward()
- t.lt()
به جای t.left()
- t.bk()
به جای t.backward()
همچنین میتوانید از موقعیت فعلی Turtle تا هر نقطه دلخواهی روی صفحه خطی رسم کنید. این کار را با کمک مختصات نقاط مختلف صفحه میتوان انجام داد.
صفحه مورد نمایش توسط Turtle به چهار بخش اصلی تقسیم میشود. مختصات نقطهای که Turtle بصورت پیشفرض در شروع برنامه آنجا قرار میگیرد (0,0) است. به این نقطه «خانه» (Home) گفته میشود. برای حرکت دادن Turtle به هر ناحیه دیگری در صفحه از تابع .goto()
استفاده میکنیم و مختصات مقصد را به این تابع میدهیم. به کدی که برای نمونه در زیر آمده دقت کنید.
خروجی کد بالا به صورت زیر خواهد بود.
با استفاده از کد بالا همانطور که در تصویر هم میبینید، خطی از محل قرار گرفتن Turtle تا موقعیت (100,100)
روی صفحه کشیدیم. برای اینکه Turtle را به موقعیت خانه برگردانیم از کد نمایش داده شده در زیر استفاده میکنیم.
این کد مانند یک دستور میانبر برای انتقال Turtle به نقطه (0,0) استفاده میشود. نوشتن کد t.home()
سریع تر از نوشتن کد t.goto(0,0)
انجام میشود.
رسم شکل
الان که با اصول حرکت در Turtle آشنا شدیم میتوانیم با حرکت دادن Turtle به رسم اشکال واقعی بپردازیم. از آنجا که همه چندضلعیها از خطوط مستقیم بین زوایای بهم متصل تشکیل شدهاند میتوان با رسم چند ضلعیها شروع کرد. در ادامه مثالی آوردهایم که میتوانید در سیستم خود به سادگی پیاده کنید.
1t.fd(100)
2t.rt(90)
3t.fd(100)
4t.rt(90)
5t.fd(100)
6t.rt(90)
7t.fd(100)
خروجی کد بالا به شکل زیر خواهد بود.
بسیار عالی به همین راحتی مربعی رسم کردید. با همین روش میتوان Turtle را برای رسم شکلها و تصاویر مختلف برنامهنویسی کرد.
الان با استفاده از این کد به عنوان الگو تلاش کنید مستطیلی رسم کنید. فقط به یاد داشته باشید، در مستطیل همه اضلاع به یک اندازه نیستند و لازم است که کد را بر این اساس تغییر دهید. یک بار که این کار را بکنید از آن به بعد میتوانید حتی چندضلعیهای دیگری نیز با اضافه کردن اضلاع بیشتر و تغییر دادن زاویهها ایجاد کنید.
رسم شکل های موجود
فرض کنید میخواهید دایرهای رسم کنید. اگر سعی کنید همانطور که مربع رسم کردید، دایره را هم ترسیم کنید، مجبور خواهید شد زمان بسیاری را فقط برای رسم همان شکل صرف کنید. درضمن بسیار خسته کننده هم خواهد بود. با تشکر از کتابخانه Turtle در پایتون که برای این مسئله هم راه حل خوبی فراهم کرده است، فقط با استفاده از یک دستور میتوانید دایره رسم کنید. به کد نوشته شده در زیر توجه کنید.
خروجی کد بالا بهصورت زیر خواهد بود.
در تصویر کد بالا عدد داخل پرانتز شعاع دایره را مشخص میکند. با تغییردادن مقدار شعاع دایره میتوانید اندازه آن را بزرگتر یا کوچکتر کنید.
به همین طریق میتوانید نقطه هم رسم کنید. هر نقطه در واقع دایرهای تو پُر است که با کمک کد زیر به آسانی رسم میشود.
با کمک کد بالا دایرهی تو پُری مانند تصویر زیر بدست خواهید آورد.
عدد داخل پرانتز کد بالا قُطر نقطه را نمایش میدهد. توجه کنید عددی که به عنوان پارامتر به تابع رسم دایره میدادیم شعاع دایره را مشخص میکرد اما اینجا عدد داخل پرانتز قطر نقطه را تعیین میکند. دقیقا مانند دایره اندازه نقطه را هم میتوان با تغییر دادن قُطر آن یعنی مقدار عدد داخل پرانتز بزرگتر یا کوچکتر کرد.
تا اینجای کار یادگرفتیم که چگونه Turtle را روی صفحه حرکت دهیم و اشکال مختلفی درون صفحه ایجاد کنیم. در چند بخش آینده یادمیگیریم که چگونه Turtle و صفحه را با توجه به نیازهای خود شخصیسازی کنیم.
تغییر رنگ صفحه
بهطور پیشفرض Turtle همیشه کار خود را در صفحهای با رنگ پس زمینه سفید شروع میکند. اگرچه هر وقت که بخواهید میتوانید با بکار بردن دستور آمده در پایین رنگ صفحه را تغییر دهید.
میتوانید کلمه blue
به معنای آبی را با نام هر رنگ دیگری عوض کنید. کلمههای «Green» یا «Red» را امتحان کنید. نتیجهای مانند تصویر زیر خواهید گرفت.
میتوانید از طیف گستردهای از رنگها برای صفحه استفاده کنید، فقط کافیست که شماره «کد هکس» (Hex Code) مربوط به هر رنگ را در داخل پرانتز بنویسید.
برای اینکه درباره استفاده از رنگهای مختلف مطالب بیشتری یاد بگیرید میتوانید به سایت رسمی کتابخانه Turtle در پایتون بروید و به راهنمای کتابخانه مراجعه کنید.
تغییر تیتر بالای صفحه
بعضی وقتها شاید بخواهید تیتر بالای پنجرهای که به عنوان صفحه میشناسیم را تغییر دهید. میتوانید از نامهای خیلی سلیقهایتری حتی به زبان فارسی مانند «برنامه Turtle من» استفاده کنید یا نامهای مناسبتری باتوجه به پروژهای که طراحی میکنید مانند «Drawing Shapes With Turtle» را روی پنجره صفحه خود بگزارید. میتوانید از کدی که در ادامه نوشته شده برای تغییر نام صفحه خود استفاده کنید.
1turtle.title("My Turtle Program")
«نوار تیتر» (Title Bar) صفحه با استفاده از کد بالا به شکل زیر خواهد شد.
با این روش میتوانید تیتر بالای پنجره صفحه را مطابق سلیقه خود تغییر دهید.
تغییر دادن اندازه Turtle
میتوانید برای اینکه شکل Turtle روی صفحه بزرگتر یا کوچکتر شود اندازه آن را تغییر دهید. این کد فقط اندازه شکل Turtle را تغییر میدهد و تاثیری روی اندازه خروجی قلم در زمان طراحی روی صفحه ندارد. کدهایی که در پایین نمایش دادهایم مثالهایی از تغییر اندازه Turtle هستند.
1t.shapesize(1,5,10)
2t.shapesize(10,5,1)
3t.shapesize(1,10,5)
4t.shapesize(10,1,5)
خروجی کدهای بالا به صورت زیر خواهد بود.
اعداد داده شده به تابع t.shapesize()
، پارامترهاییاند که اندازه Turtle را کنترل میکنند. این پارامترها شامل موارد زیر هستند.
- عرض کشش شکل
- طول کشش شکل
- عرض کلی شکل خروجی
میتوانید هر کدام از این پارامترها را با توجه به خواسته خود تغییر دهید. مثالی که در بالا نمایشداده شده با هر تغییر تفاوت مشهودی را در ظاهر Turtle به نمایش میگزارد. برای اینکه درباره استفاده از پارامترهای مختلف برای تغییر دادن شکل Turtle مطالب بیشتری یاد بگیرید میتوانید به راهنمای کتابخانه Turtle در پایتون در سایت رسمی این کتابخانه مراجعه کنید.
تغییر اندازه قلم
دستور قبلی که دیدیم فقط اندازه شکل Turtle را تغییر میداد. اما بعضی وقتها لازم داریم که ضخامت قلم را بیشتر یا کمتر کنیم. میتوان با دستور آمده در پایین این کار را انجام داد.
1t.pensize(5)
2t.forward(100)
کد بالا در صفحه Turtle به شکل زیر عمل خواهد کرد.
همینطور که میبینید در تصویر بالا ضخامت قلم 5 برابر حالت معمولی شده است. تلاش کنید که خطهای بیشتری با ضخامتهای متفاوتی رسم کنید و تفاوت ضخامت آنها را مقایسه کنید.
تغییر دادن رنگ Turtle و قلم
در ابتدای کار وقتی که صفحه جدیدی باز میکنید نشانگر Turtle در پایتون و خطی که این نشانگر رسم میکند بهطور پیشفرض به رنگ سیاه هستند. با توجه به نیازتان میتوانید رنگ هر دو اینها را بهصورت جدا از هم تغییر دهید.
- وقتی که رنگ Turtle را تغییر میدهید، رنگ داخل Turtle تغییر میکند.
- وقتی که رنگ قلم را تغییر میدهید رنگ دور Turtle تغییر میکند. در واقع رنگ دور Turtle کمک میکند که بدون رسم خط رنگ قلم را تشخیص دهید.
درصورت نیاز حتی میتوانید رنگ هر دو را باهم تغییر دهید. قبل از تغییر رنگها اندازه Turtle را بزرگ کنید تا بهصورت واضحتری تاثیر کدها و تغییر رنگها را ببینید. در ابتدا با کد زیر اندازه Turtle را کمی تغییر میدهیم.
الان برای تغییر رنگ Turtle از کد زیر استفاده میکنیم.
بعد از نوشتن و اجرای کدهای بالا، Turtle به شکل زیر درمیآید.
برای تغییر دادن رنگ قلم نیز از کدی که در ادامه میآید استفاده میکنیم.
بر اثر رنگ بالا Turtle به شکل زیر درمیآید.
برای اینکه بتوانیم رنگ هر دو، یعنی قلم و Turtle را همزمان تغییر دهیم باید از کد زیر استفاده کنیم.
بعد از اجرای این کد Turtle به شکل زیر خواهد شد.
در اینجا اولین پارامتر، رنگ قلم و دومین پارامتر هم رنگ داخل Turtle را تعیین میکند. توجه کنید که با تغییر رنگ قلم و رنگ داخل آن، رنگ Turtle روی صفحه نمایش هم مطابق با آنها تغییر خواهد کرد.
پر کردن داخل شکل رسم شده
معمولا رنگآمیزی تصاویر باعث میشود که ظاهر بهتری داشته باشند. برای رنگ کردن داخل اشکالی که رسم شدهاند کتابخانه Turtle در پایتون گزینهای در اختیار برنامهنویسان قرار میدهد که از دو تابع به هم مرتبط تشکیل میشود. برای نمونه، به کد نوشته شده در پایین نگاه کنید.
1t.begin_fill()
2t.fd(100)
3t.lt(120)
4t.fd(100)
5t.lt(120)
6t.fd(100)
7t.end_fill()
وقتی که کد بالا را اجرا کنیم مثلثی خواهیم داشت که داخلش با رنگ یکدستی پر شده است. کدهای مربوط به رسم مثلث در میان توابع t.begin_fill()
و t.end_fill()
قرار گرفتهاند. تصویر اجرای کد بالا را در زیر آوردهایم.
هنگامی که از متد .begin_fill()
استفاده میکنید در واقع به برنامه خود میگویید که قصد ساخت شکل بستهای را دارید و در آخر باید داخل شکل را پر کند. سپس از تابع .end_fill()
استفاده میکنید به این معنا که کار ساخت شکل تمام شده و برنامه میتواند داخل شکل را پر کند.
تغییر شکل Turtle
در واقع شکل اولیه Turtle در صفحه به شکل لاکپشت نیست بلکه شبیه مثلثی کوچک است. اگر چه میتوانید شکلی را که Turtle نمایش داده میشود تغییر دهید. برای تغییر شکل Turtle چندین گزینه مختلف در دسترس قرار دارد. با استفاده از کدهایی که در پایین نوشتهایم میتوانید چندتا از شکلهای مختلف Turtle را ببینید و تست کنید.
1t.shape("turtle")
2t.shape("arrow")
3t.shape("circle")
شکل Turtle مطابق تصویر زیر تغییر خواهد کرد.
تغییراتی را که دربالا میبینید به خواطر انواع گزینههایی هست که به عنوان پارامتر به Turtle ارسال کردهایم. در ادامه چند گزینه دیگر را فهرست کردهایم که با ارسال هر کدام به عنوان پارامتر به تابع t.shape()
میتوانید چند شکل مختلف ممکن دیگر برای Turtle را ببینید.
- Square – برای شکل مربع
- Arrow – برای شکل پیکان
- Circle – برای شکل دایره
- Turtle – برای شکل لاکپشت
- Triangle – برای شکل مثلث
- Classic – برای شکل کلاسیک Turtle
شکل کلاسیک همان شکل پیشفرض Turtle است. راهنمای Turtle را در سایت اصلی کتابخانه Turtle در پایتون مطالعه کنید تا با انواع شکلهای قابل استفاده آشنا شوید.
تغییر سرعت قلم
در حالت عادی، Turtle با سرعت معمولی حرکت میکند. میتوانید با افزایش یا کاهش سرعت Turtle باعث شوید که بر روی صفحه سریعتر یا کندتر حرکت کند. برای تغییر سرعت Turtle از تابع t.speed()
به شکلی که در زیر مثال زدهایم، استفاده میشود.
1t.speed(1)
2t.forward(100)
3t.speed(10)
4t.forward(100)
کد بالا در ابتدا سرعت Turtle را کاهش میدهد و سپس به سمت جلو حرکت میدهد سپس سرعت را افزایش میدهد و Turtle را دوباره به حرکت وامیدارد. خروجی ناشی از اجرای کد بالا به صورت زیر خواهد بود.
پارامتر تعیین کننده سرعت هر عددی از 0 به معنای کمترین سرعت تا 10 یعنی بیشترین سرعت قابل تغییر است. میتوانید در کدهای خود با تغییر دادن این عدد سرعت Turtle را در شرایط مختلف باهم مقایسه کنید.
شخصی سازی در یک خط
فرض کنیم برای رسم شکل مورد نظرمان باید مشخصات Turtle را بهصورتی تنظیم کنیم که در زیر فهرست کردهایم.
- رنگ قلم: بنفش
- رنگ داخل شکل: نارنجی
- اندازه قلم: 10
- سرعت قلم: 9
طبق مطالبی که تا به اینجای کار آموختهایم، در نهایت باید کدی به شکل زیر بنویسیم.
1t.pencolor("purple")
2t.fillcolor("orange")
3t.pensize(10)
4t.speed(9)
5t.begin_fill()
6t.circle(90)
7t.end_fill()
خوب کد تولید شده برای کار ما بسیار طولانی است اما چندان هم بد نیست. این کد کامل و واضح است.
حالا فقط فرض کنید که ۱۰، Turtle متفاوت داشتیم. تغییر دادن ویژگیهای همه آنها به شدت خستهکننده و وقتگیر خواهد بود. خبر خوب این است که میتوانید با جایگزین کردن همه این پارامترها فقط در یک خط بار کاری خود را کاهش دهید. برای انجام این کار به کد زیر توجه کنید.
1t.pen(pencolor="purple", fillcolor="orange", pensize=10, speed=9)
2t.begin_fill()
3t.circle(90)
4t.end_fill()
خروجی کد بالا به صورت زیر خواهد بود.
بدون اینکه مجبور باشیم هر کدام از مشخصات قلم را بهصورت مجزا در خطوط کد جداگانه تغییر دهیم با همین یک خط کد کل مشخصات قلم را تغییر دادهایم. برای اینکه بیشتر درباره این دستور اطلاعات بدست بیاورید به راهنمای کتابخانه Turtle در پایتون مراجعه کنید.
تا اینجای کار که به خوبی اطلاعاتی درباره Turtle بدست آوردیم و فهمیدیم که چگونه مشخصات Turtle و صفحه را تغییر دهیم باید نگاهی به سایر دستورات مهمی که برای رسم تصاویر توسط کتابخانه Turtle در پایتون وجود دارد بیاندازیم.
برداشتن و گذاشتن قلم روی صفحه
بعضی وقتها لازم است که قلم را روی صفحه حرکت دهیم، از مکان فعلی قلم به جای دیگری بریم بدون اینکه در طول حرکت خطی روی صفحه کشیده شود. برای اینکه بتوانیم قلم را از روی صفحه برداریم از دستور .penup()
استفاده میکنیم. سپس هر وقت که بخواهیم چیزی رسم کنیم باید با بکاربردن دستور .pendown()
دوباره قلم را روی صفحه قرار دهیم. از کدی که قبلا برای رسم مربع استفاده کردهایم دوباره برای آزمودن دستورات .penup()
و .pendown()
استفاده خواهیم کرد. به کدی که در زیر آمده توجه کنید و سعی کنید بر روی ادیتور خود پیادهسازی کنید.
1t.fd(100)
2t.rt(90)
3t.penup()
4t.fd(100)
5t.rt(90)
6t.pendown()
7t.fd(100)
8t.rt(90)
9t.penup()
10t.fd(100)
11t.pendown()
بعد از اجرای کد بالا خروجی زیر ایجاد خواهد شد.
در تصویر بالا با اضافه کردن چند خط کد اضافی بین خطوط کد مربوط به رسم مربع، تصویر خروجی را به جای مربع به صورت دو خط موازی بدست آوردیم.
برگرداندن تغییرات به حالت قبل
مهم نیست که چقدر با دقت کار کنید همیشه احتمال ایجاد اشتباه وجود دارد. اما نگران نباشید. کتابخانه Turtle در پایتون گزینهای را در اختیار کاربران قرارداده که در صورت نیاز، تغییرات را به عقب برگردانند یا به اصطلاح undo کنند. اگر بخواهیم به عقب برگردیم، به آخرین کاری که انجام داده بودیم، باید از کدی که در زیر آمده استفاده کنیم.
این کد آخرین دستوری را که اجرا کردهاید به عقب برمیگرداند. اگر بخواهید به تعداد بیشتری دستور عقب برگردید مثلا به حالت قبل از اجرای ۳ دستور اَخیرتان باید کد بالا را ۳ بار بنویسید.
پاک کردن صفحه
فرض کنیم همراه با ما از اول این مطلب همه کدها را روی صفحه خود اجرا کردهاید. پس حتما صفحه شلوغی خواهید داشت. برای اینکه صفحه خود را پاک کنید تا جا برای تمرینات بیشتر باز شود، کافی است فقط دستور زیر را تایپ کنید.
کد بالا صفحه را پاک میکند تا بتوانید به رسم کردن بیشتر با Turtle ادامه دهید. توجه کنید که اجرای این دستور متغیرهای شما را تغییر نخواهد داد و Turtle نیز در محلی که قرار داشت باقی خواهد ماند. اگر Turtle-های دیگری نیز به غیر از Turtle اصلی روی صفحه داشته باشید که چیزهایی رسم کرده باشند، تصاویری که توسط آنها رسم شده از روی صفحه پاک نخواهند شد مگر اینکه آنها را هم برای دستور .clear()
بهطور مشخص نامببرید.
بازنشانی دوباره تنظیمات محیط کار
بهجز پاک کردن صفحه با استفاده از دستور .clear()
، گزینهای دیگری هم دارید. میتوانید با استفاده از دستور reset()
تنظیمات محیط کار خود را به حالت اول برگردانید تا همه چیز از روی صفحه پاک شوند. این دستور صفحه را بهطور کامل پاک خواهد کرد و تمام تنظیمات Turtle به حالت پیشفرض برخواهند گشت. تنها کاری که باید بکنید تایپ کردن دستور به شکل زیر است.
این دستور صفحه را بهطور کامل پاک میکند و Turtle را به جایگاه اول خودش در موقعیت پیشفرض «Home» انتقال میدهد. همه تنظیمات پیشفرض مانند اندازه، شکل، رنگ و دیگر ویژگیهای Turtle و صفحه به حالت اولیه خودشان باز خواهند گشت.
تا اینجای کار تقریبا تمام نکات بنیادین برنامهنویسی با کتابخانه Turtle را در پایتون دیدیم و آموختیم. از این به بعد، برخی از ویژگیهای جالب و خاصی که شاید در زمان برنامهنویسی لازم داشته باشیم را بررسی خواهیم کرد.
ردپا برجا گذاشتن
پایتون گزینهای فراهم کرده که بتوانید ردپای Turtle خود را روی صفحه برجای بگذارید که چیزی نیست بهجز ردی از Turtle در هر قدم که برمیدارد. در کد زیر نمونهای از این رفتار را برای Turtle پیادهسازی کردهایم.
1t.stamp()
2
3t.fd(100)
4t.stamp()
5
6t.fd(100)
خروجی کد بالا به صورت زیر خواهد بود.
اعدادی که ظاهر میشود محل Turtle یا «شماره شناسایی ردپا» (Stamp ID) مربوط به Turtle هستند. پس اگر بخواهیم که ردپای خاصی را پاک کنیم کافیست که از Stamp ID به عنوان پارامتر دستور clearstamp()
استفاده کنیم. در کد زیر برای این دستور نمونهای آوردهایم.
کد بالا ردپای شماره ۸ را پاک خواهد کرد.
تکثیر Turtle
بعضی وقتها برای انجام پروژه خود نیاز به استفاده از بیش از یک Turtle در صفحه داریم. از این حالت خاص در پروژه نهایی همین مطلب مثالی آوردهایم که خواهید دید اما الان، میتوانید با تکثیر Turtle فعلی خود روی صفحه، Turtle دیگری به وجود بیاورید. برای این کار باید از متد .clone()
استفاده کنیم. با کمک مثال نوشته شده در پایین، تلاش کنید Turtle را تکثیر کنید و Turtle جدیدی به نام «c» ایجاد کنید. سپس هر دو Turtle را روی صفحه به حرکت در آورید.
1c = t.clone()
2t.color("magenta")
3c.color("red")
4t.circle(100)
5c.circle(60)
خروجی کد بالا به صورت زیر خواهد بود.
تا اینجای مطلب که درباره چند عدد از دستورات مهم کتابخانه Turtle در پایتون شناخت کافی بدست آوردهایم، آمادهایم چند مفهوم مهمتر درباره کدنویسی در این کتابخانه را هم یاد بگیریم. وقتی نوبت به برنامهنویسی برسد، داشتن دانش درباره این مفاهیم در هر زبان برنامهنویسی، بسیار ضروری است.
استفاده از حلقه ها و عبارت های شرطی
وقتی به مرحله بالاتری در برنامهنویسی وارد میشوید میبینید که تقریبا در هر برنامهای از حلقهها و عبارتهای شرطی استفاده میشود. به همین دلیل، در این بخش به سراغ برنامههایی از کتابخانه Turtle خواهیم رفت که از این نوع دستورات و عبارتها استفاده میکنند. به کمک این برنامهها به رویکردی عملی دست خواهید یافت که برای درک این مفاهیم برنامهنویسی بسیار مفید است. قبل از اینکه شروع کنیم، ۳ تعریف مهم از این مفاهیم وجود دارند که باید به ذهن بسپاریم.
- حلقهها: به مجموعه دستوراتی میگویند که داعما پشت سر هم تکرار میشوند و این تکرار تا زمان وقوع شرایطی خاص ادامه دارد.
- عبارتهای شرطی: این عبارتها بر اساس شرایط مختلفی که محقق میشوند وظایف خواصی را انجام میدهند.
- دندانهگزاری: از این مفهوم برای مشخص کردن بلاکهای کد استفاده میشود، مخصوصا زمانی که حلقهها و عبارتهای شرطی مورد استفاده قرار میگیرند. به همین صورت، برای ساخت دندانهها در هر خط کدی که نیاز است، از دکمه «Tab» روی کیبورد استفاده میکنیم.
در ادامه به بررسی و استفاده از این دستورات در برنامههای پیچیدهتر خواهیم پرداخت.
حلقه for
برنامهای را که برای ایجاد شکل مربع نوشته بودیم را به یاد بیاورید. خطوط مشابهی از کد را چهار بار تکرار کرده بودیم. مثال زیر شبیه همان کدها است.
1t.fd(100)
2t.rt(90)
3t.fd(100)
4t.rt(90)
5t.fd(100)
6t.rt(90)
7t.fd(100)
8t.rt(90)
برای نوشتن کدهای بالا راه بسیار کوتاهتری وجود دارد.
1for i in range(4):
2 t.fd(100)
3 t.rt(90)
برای اینکه در کد بالا مربعی رسم کنیم از حلقه for استفاده کردیم. این حلقه همانطور که میبینید طول کدها را بسیار کمتر و مدیریت کدها را بسیار آسانتر کرده است. در کدهای بالا حرف i
مانند شمارندهای عمل میکند که از صفر شروع میکند و به صورت یکی یکی اضافه میشود. وقتی که از کد in range(4)
استفاده میکنید، در واقع به برنامه میگویید که مقدار i
باید کمتر از چهار باشد. این قانون باعث میشود به محض اینکه شمارنده i
به عدد ۴ برسد برنامه متوقف شود و دستورات درون حلقه دیگر اجرا نشوند.
در ادامه روش کار برنامه را بهصورت تفکیک شده مرحله به مرحله بررسی کردهایم.
- مرحله اول i = 0، در این مرحله Turtle به اندازه ۱۰۰ واحد به جلو حرکت میکند و بعد از آن ۹۰ درجه به سمت راست میچرخد.
- مرحله دوم i = 0 + 1 = 1، دوباره در این مرحله Turtle به اندازه ۱۰۰ واحد به جلو حرکت میکند و بعد از آن ۹۰ درجه به سمت راست میچرخد.
- مرحله سوم i = 1 + 1 = 2، در این مرحله نیز Turtle به اندازه ۱۰۰ واحد به جلو حرکت میکند و بعد از آن ۹۰ درجه به سمت راست میچرخد.
- مرحله چهارم i = 2 + 1 = 3، در این مرحله هم Turtle به اندازه ۱۰۰ واحد به جلو حرکت میکند و بعد از آن ۹۰ درجه به سمت راست میچرخد ولی در پایان این محله i
به سقف مجاز خود برای استفاده در حلقه رسیده است.
در آخر مرحله چهار چون اگر i
دوباره وارد حلقه شده، مقدار 4 پیدا میکند و از رنج مجاز خارج میشود، i
دیگر وارد حلقه نخواهد شد، حلقه به پایان میرسد و Turtle از حلقه خارج میشود. برای بررسی مقدار i
، از کد زیر استفاده کنید. مقدار i
را برابر ۳ خواهید دید.
در این ادیتور با زدن دکمه Enter مقدار i
نمایش داده میشود ولی در ادیتورهای دیگر میتوانید از تابع pritn()
استفاده کنید.
توجه کنید که فضای خالی که قبل از خطهای دوم و سوم کد دیده میشوند همان دندانهگزاری هستند که در بالا توضیح دادیم. این دندانهها بیان میکنند که همه این ۳ خط جزیی از یک بلاک را در کد تشکیل میدهند.
حلقه while
از حلقه while برای این استفاده میشود که وظیفه خاصی را تا وقتی که شرط حلقه برقرار است تکرار کند. به محض اینکه شرط از اعتبار ساقط شود، کد بهصورت خودکار اجرای فرایند را متوقف میکند. از حلقه while بیشتر برای مدیریت اتفاقات شرطی استفاده میکنند که زمان منقضی شدن شرط مشخص نیست. به عنوان مثال نمیتوان تعیین کرد که اتفاق X فقط ۱۰ بار روی دهد نه بیشتر و نه کمتر. اما در رابطه با حلقههای با تکرار مشخص هم میتوان از این حلقه استفاده کرد. برای مثال میتوانید با بکاربردن حلقه while چندین دایره ایجاد کنید. کد این عملیات را در ادامه آوردهایم.
1n=10
2while n <= 40:
3 t.circle(n)
4 n = n+10
بعد از اجرای این کد خواهید دید که دایرهها یکی پس از دیگری بروی صفحه ساخته میشوند و هربار دایرهی بعدی بزرگتر از دایرهی قبل رسم میشود.
در این کد از متغیر موقتی به نام n
به عنوان شمارنده استفاده شده است. باید مشخص کنید که در هر حلقه میخواهید مقدار n
چقدر بزرگتر شود. در ادامه بهصورت قدم به قدم اما کلی و ساده روش کار برنامه را بررسی کردهایم.
- مرحله اول n = 10، در این مرحله Turtle دایرهای را با شعاع ۱۰ واحد رسم میکند. بعد از آن مقدار n را بهعلاوه ۱۰ میکند.
- مرحله دوم n = 20، این دفعه Turtle دایرهای را با شعاع ۲۰ واحد رسم میکند و یکبار دیگر مقدار n را بهعلاوه ۱۰ میکند.
- مرحله سوم n = 30، اینبار Turtle دایرهای را با شعاع ۳۰ واحد رسم میکند و برای بار سوم مقدار n را بهعلاوه ۱۰ میکند.
- مرحله چهارم n = 40، اینبار نیز Turtle دایرهای را با شعاع ۴۰ واحد رسم میکند و برای بار آخر مقدار n را بهعلاوه ۱۰ میکند.
- مرحله پنجم n = 50، چونکه مقدار n
دیگر با شرط کوچکتر مساوی ۴۰ همخوانی ندارد حلقه به پایان میرسد و Turtle از حلقه خارج میشود.
عبارت های شرطی
از عبارتهای شرطی به این صورت استفاده میکنند که دستوراتی را در بلاکهای شرطی قرار میدهند، اگر شرط برقرار بود دستور مورد نظر اجرا میشود و گرنه از روی بلاک رد میشویم. برای نمونه، کدی در ادامه آورده شده که بهتر است شما هم در محیط کدنویسی خود وارد کنید.
1u = input("Would you like me to draw a shape? Type yes or no: ")
2if u == "yes":
3 t.circle(50)
در این کد از تابع input()
استفاده شده است تا از کاربر داده ورودی بگیرد. پاسخ کاربر را در متغیر u
ذخیره کردهایم. سپس بلاک شرطی if مقدار متغیر u
را با شرط تعیین شده مقایسه میکند و بررسی میکند که آیا u
برابر با «yes» است یا نه. اگر متغیر u
مقدار «yes» را در خود داشت برنامه دایرهای رسم خواهد کرد و اگر کاربر هرچیزی به غیر از «yes» وارد کرده باشد، برنامه دستور را نادیده میگیرد و کاری نمیکند.
به این نکته توجه کنید که «عملگر مقایسهای» (Comparison Operator)، ==
برای عمل مقایسه کردن بکار میرود. بررسی میکند که آیا مقدار دو چیز با یکدیگر مساوی اند یا نه. از «عملگر تخصیصی» (Assignment Operator)، =
برای اختصاص دادن مقداری به چیزی استفاده میشود. برای مطالع درباره انواع عملگرها به مطلب عملگرها در پایتون از مجله فرادرس مراجعه کنید.
میتوانید دو عکس العمل مختلف را درباره اینکه شرط برقرار باشد -True- یا نباشد -False- برای بلاک if
برنامهنویسی کنید. برای این کار باید بندی به نام else
به بلاک شرطی if
اضافه کنید. در مثال آمده در زیر این حالت را پیادهسازی کردهایم.
1u = input("Would you like me to draw a shape? Type yes or no: ")
2if u == "yes":
3 t.circle(50)
4else:
5 print("Okay")
در کد بالا به برنامه میگوییم که خروجی خاصی را نمایش دهد. حتی وقتی که کاربر کلمه «yes» را وارد نکرده است و از تابع print()
برای نمایش چند کاراکتر از پیش تعریف شده استفاده میکنیم.
توجه کنید که کاربر نیازی ندارد حتما کلمه «no» را تایپ کند. کاربران هر چیزی میتوانند تایپ کنند که در این مورد همیشه نتیجه نمایش کلمه «Okay» خواهد بود. زیرا بهطور واضح به برنامه نگفتیم که کلمه «Okay» را فقط وقتی نمایش دهد که کاربر واژه «no» را تایپ کرده باشد. جای نگرانی نیست، به هرحال این مشکل هم قابل حل شدن است. میتوانیم بند elif
را به برنامه اضافه کنیم تا برای برنامه چندین شرط مختلف فراهم کنیم و به ترتیب برای هر شرط خروجی متناسب با آن را تعریف کنیم.
میتوانید برای نمونه به کد زیر نگاه کنید.
1u = input("Would you like me to draw a shape? Type yes or no: ")
2if u == "yes":
3 t.circle(50)
4elif u == "no":
5 print("Okay")
6else:
7 print("Invalid Reply")
همانطور که میبینید الان این برنامه بسته به ورودی که میگیرد بیش از یک خروجی دارد. روش کار بلاک if
کد بالا را در ادامه توضیح دادهایم.
- اگر کاربر کلمه «yes» وارد کند، کد داده ورودی را پردازش میکند و دایرهای با مشخصات تنظیم شده، رسم میکند.
- اگر کاربر کلمه «no» وارد کند، کد کلمه «Okay» را به عنوان خروجی روی نمایشگر چاپ میکند و اجرای برنامه متوقف میشود.
- اگر کاربر هر چیز دیگری مانند «Sandwich»، «Hello» و غیره وارد کرده باشد، کد عبارت «Invalid Reply» را به عنوان خروجی روی نمایشگر چاپ میکند و اجرای برنامه متوقف میشود.
توجه کنید که این برنامه «حساس به حروف کوچک و بزرگ» (Case-Sensitive) است. پس وقتی که در حال استفاده از این کدها هستید مطمئن شوید که بزرگی یا کوچکی حروف رشته ورودی را مطابق چیزی که کدنویسی شده رعایت کنید.
پروژه نهایی مسابقه لاک پشت ها در پایتون
تا اینجای کار یادگرفتیم که چگونه محیط کار خود را شخصیسازی کنیم، Turtle را طوری برنامهنویسی کنیم که بتواند در سراسر صفحه حرکت کند و از حلقهها و عبارتهای شرطی برای گسترش کد خود استفاده کنیم. الان در مهمترین بخش مسیر یادگیری برنامهنویسی هستیم. در این بخش همه چیزی که یادگرفتیم را برای ساخت برنامهای مجزا پیادهسازی خواهیم کرد. این برنامه بازی سرگرمکنندهای است که میتوان با افراد دیگر نیز انجام داد.
تمام اطلاعات ضروری را که درباره بازی نیاز داریم، قبل از شروع بکار فهرست کردهایم.
- هدف بازی: اولین بازیکنی که قبل از همه لاکپشتش را به خانه رسانده برنده است.
- روش بازی: در این بخش قوانین بازی را طراحی کردهایم.
- هر بازیکن یکبار تاس میاندازد تا شماره بگیرد.
- بعد از آن هر بازیکن به اندازه شمارهای که با تاس آورده است به جلو حرکت میکند.
- به ترتیب، بازیکنان نوبت عوض میکنند تا یکی از آنها به خانه برسد و برنده شود.
- ساختار بازی: در این بخش ساختار کلی بازی و شکل محیط بازی را تعریف میکنیم.
- هر بازیکن لاکپشتی دارد که با رنگ متفاوتی مشخص شده است. میتوانید تعداد بازیکن بیشتری داشته باشیم اما به خاطر این راهنمای آموزشی، بازی را بهصورتی خواهیم ساخت که فقط دو بازیکن وجود داشته باشند.
- هر بازیکن از تاسی استفاده میکند که وقتی نوبت آنها میرسد عددی را بهصورت تصادفی به بازیکن نشان میدهد. در این برنامه تاس بهصورت لیستی از اعداد ۱ تا ۶ نمایشداده میشود.
حالا که با منطق بازی آشنا شدیم میتوانیم شروع به کار ساختن بازی کنیم. اولین کار ما راهاندازی محیط کار است.
راه اندازی محیط بازی
کار را با وارد کردن کتابخانه Turtle در پایتون شروع میکنیم. بعد از آن کتابخانهای «درونی» (Built-In) به نام random
را وارد میکنیم که برای انتخاب تصادفی آیتمهای درون لیست استفاده خواهد شد. به کد زیر توجه کنید.
1import turtle
2import random
وقتی که این کتابخانهها با موفقیت به محیط کار شما فراخوانده شدند، میتوانید به ساخت بقیه برنامه خود بپردازید.
راه اندازی لاک پشت ها و Home ها
الان باید ۲ عدد Turtle ایجاد کنید که هر کدام نماینده لاکپشت یکی از بازیکنان هستند. هر لاکپشتی باید رنگی متفاوت از دیگری داشته باشد. هر رنگ متعلق به یک بازیکن خواهد بود. در اینجا بازیکن شماره یک را سبز و بازیکن شماره دو را آبی رنگ کردیم.
1player_one = turtle.Turtle()
2player_one.color("green")
3player_one.shape("turtle")
4player_one.penup()
5player_one.goto(-200,100)
6player_two = player_one.clone()
7player_two.color("blue")
8player_two.penup()
9player_two.goto(-200,-100)
در ابتدای کار که Turtle-ها را به شکل لاکپشت ایجاد کردیم، هر Turtle را در موقعیت شروع مربوط به خودش قرار میدهیم. مطمئن میشویم که موقعیت شروع مربوط به هر دو هم طراز باشند. توجه کنید که Turtle مربوط به بازیکن شماره دو را به وسیله تکثیر Turtle مربوط به بازیکن شماره یک ایجاد کردهایم سپس به تغییر رنگ و قرار دادن آن در نقطه شروع متفاوتی پرداختیم.
باید خانه را برای لاکپشتها تنظیم کنیم. این خانهها همانند محل پایان مسابقه برای هر لاکپشت عمل میکنند. خانه هر کدام از لاکپشتها با دایرهای نمایش داده میشود. در اینجا باید مطمئن شویم که فاصله هر دو خانه تا محل شروع مسابقه کاملا مساوی هم باشند. برای این منظور کدهای زیر را نوشتهایم.
1player_one.goto(300,60)
2player_one.pendown()
3player_one.circle(40)
4player_one.penup()
5player_one.goto(-200,100)
6player_two.goto(300,-140)
7player_two.pendown()
8player_two.circle(40)
9player_two.penup()
10player_two.goto(-200,-100)
بعد از تنظیم کردن خانههای مرتبط با هر لاکپشت، آنها را به موقعیت شروع مسابقه مربوط به خودشان باز میگردانیم.
بسیار خوب است. تا اینجای کار جنبههای بصری بازی کامل شدهاند. الان میتوانیم تاسی را بسازیم که از آن برای بازی استفاده خواهیم کرد.
ساخت تاس
میتوانیم به کمک لیستی که از صف منظمی از اعداد تشکیل شده، تاسی مجازی برای بازی خود طراحی کنیم. در دنیای واقعی برای اینکه بتوانید منظم زندگی کنید، نیاز دارید فهرستی از مواد غذایی که باید خریداری شوند و لیستی از کارهایی که باید انجام شوند را تهیه کنید. در پایتون هم لیستها به همین روش کار میکنند.
در این مورد خاص، از لیستی برای ساخت تاس مورد نیاز خود استفاده خواهیم کرد. اول از همه لیست خودمان را با اعداد 1 تا 6 به صورت صعودی ایجاد میکنیم. برای تعریف لیست میتوانیم نامی برای آن انتخاب کنیم و سپس عناصر لیست را درون براکت قرار میدهیم و با کمک کاما این عناصر را از یکدیگر جدا میکنیم. به لیستی که در پایین آماده کردهایم توجه کنید.
این لیست الان تاس ما شده است. برای اینکه تاس بریزیم تنها کاری که باید انجام شود این است، برنامه خود را چنان کدنویسی کنیم که بهصورت تصادفی عددی را از عناصر لیست انتخاب کند. عدد انتخاب شده به عنوان خروجی تاس در نظر گرفته خواهد شد.
توسعه دادن بازی
زمان آن فرا رسیده که برای بقیه کارهای بازی به توسعهدادن کد بپردازیم. در این مرحله از حلقهها و عبارتهای شرطی استفاده خواهیم کرد. پس لازم است که درباره دندانهگزاری و فاصلههای بین کدها تا اول خط دقیق باشیم. برای شروع نگاهی میاندازیم به قدمهایی که برنامهی ما برای اجرای بازی باید طی کند.
- قدم اول: به اینصورت شروع میکنیم، در ابتدای کار به برنامه خود میگوییم که بررسی کند آیا لاکپشتی به خانه خود رسیده است یا نه.
- قدم دوم: به برنامه میگوییم که اگر هیچ کدام از لاکپشتها به خانه نرسیدهاند به بازیکنان اجازه دهد که دوباره تلاش کنند.
- قدم سوم: در هر حلقه به برنامه میگوییم که به وسیله انتخاب تصادفی عدد از درون لیست، تاس بریزد.
- قدم چهارم: سپس با توجه به عددی که بهصورت تصادفی از لیست انتخاب شده است به برنامه میگوییم که لاکپشتها را به نوبت حرکت دهد. تعداد قدمی که هر لاکپشت حرکت میکند برابر با همان عدد خروجی تاس است.
برنامه به تکرار این فرایند ادامه میدهد و فقط زمانی متوقف میشود که یکی از لاکپشتها به خانه خود برسد. در کد پایین تمام این فرایند را پیادهسازی کردهایم.
1for i in range(20):
2 if player_one.pos() >= (300,100):
3 print("Player One Wins!")
4 break
5 elif player_two.pos() >= (300,-100):
6 print("Player Two Wins!")
7 break
8 else:
9 player_one_turn = input("Press 'Enter' to roll the die ")
10 die_outcome = random.choice(die)
11 print("The result of the die roll is: ")
12 print(die_outcome)
13 print("The number of steps will be: ")
14 print(20*die_outcome)
15 player_one.fd(20*die_outcome)
16 player_two_turn = input("Press 'Enter' to roll the die ")
17 die_outcome = random.choice(die)
18 print("The result of the die roll is: ")
19 print(die_outcome)
20 print("The number of steps will be: ")
21 print(20*die_outcome)
22 player_two.fd(20*die_outcome)
خروجی نهایی کد بازی که طراحی کردیم تقریبا شبیه تصویر زیر خواهد بود.
مراحل پایین کاری را که کد میکند بهطور خلاصه توضیح میدهند.
- خط 1: حلقه for را در محدوده ۱ تا ۲۰ راه اندازی میکند.
- خط 2 تا 7: بررسی میکند که آیا بازیکنی به هدف رسیده یا نه. اگر یکی از بازیکنان به هدف رسیده باشد، برنامه عبارت متناسب با موقعیت را نمایش میدهد و از حلقه خارج میشود.
- خط 8: در صورتی که هیچ بازیکنی برنده نشده بود، برنامه روند بازی را به مجموعه بعدی مراحلی که باید طی شوند هدایت میکند.
- خط 9: عبارتی را چاپ میکند که از بازیکن شماره یک میخواهد با زدن دکمه Enter تاس بریزد.
- خط 10: مقداری را بهصورت تصادفی از لیست die
برمیدارد و در متغیر die_outcome
ذخیره میکند.
- خط 11: قبل از اینکه نتیجه تاس را نمایش دهد عبارتی چاپ میکند.
- خط 12: خروجی تاس را نمایش میدهد.
- خط 14: مقدار بدست آمده از تاس را ضرب در عدد ۲۰ میکند تا اندازه قدمهای مورد نیاز برای تکمیل کردن بازی را کمتر کند.
- خط 15: به تعداد قدمهایی که در خطوط بالاتر محاسبه شد، لاکپشت بازیکن شماره یک را حرکت میهد.
- خطوط 16 تا 22: تمام مراحل بالا را برای بازیکن شماره ۲ هم تکرار میکنند.
تا وقتی که لاکپشت یکی از بازی کنان به موقعیت نهایی برسد تمام مراحل حلقه for طی خواهند شد.
به این نکته توجه کنید که در زبان برنامهنویسی پایتون از نماد ستاره *
به عنوان نمایانگر علامت ضرب استفاده میشود. این نماد به عنوان «عملگر ریاضی» (Arithmetic Operator) شناخته میشود. همچنین میتوانید از علامت مثبت +
برای عمل جمع، از علامت منفی –
برای عمل منها و از علامت اسلش /
برای تقسیم در پایتون استفاده کنید.
به یاد داشته باشید هر چقدر که بخواهید میتوانید به این بازی شاخ و برگ بدهید. پس شروع کنید به سرو کله زدن با کدها. در ابتدا ببینید آیا امکان نوشتن کدها به صورت بهینهتر وجود دارد یا نه. میتوان به این بازی لاکپشتهای بیشتری اضافه کرد، رنگها را تغییر داد، سرعت را تغییر داد یا حتی برای به چالش کشیدن بازی کنانتان موانعی بر سر راه لاکپشتها طراحی کنید. به عنوان توسعهدهنده بازی، همه اینها به شما بستگی دارد.
سوالات متداول
در این بخش به سوالاتی میپردازیم که بیشترین تکرار را بین کاربران داشته اند و ممکن است برای شما هم پیش بیاید.
آیا می توان برای کار با کتابخانه Turtle در پایتون برنامه نویسی کرد؟
بله کتابخانه Turtle در پایتون دارای شلی است که همان شل کامل پایتون است. به غیر از شِل موجود، در همه محیطهای کدنویسی که میتوان در آنها برای پایتون کد نوشت برای کتابخانه Turtle هم میتوان کد نوشت، حلقه ایجاد کرد، تابع تعریف کرد، کلاس ساخت و هر کار دیگری که پایتون میتواند را انجام داد.
آیا برای استفاده از Turtle باید حتما پایتون نصب باشد؟
نه نیازی نیست. البته همزمان با نصب پایتون کتابخانه Turtle هم نصب میشود اما نرم افزار PythonTurtle محیطی نیمه گرافیکی برای کار با Turtle فراهم کرده است که به صورت مستقیم نصب میشود و نیاز به نصب هیچ چیز دیگری به غیر از این نرمافزار، برای کار نخواهید داشت.
جمع بندی
در این مطلب از مجله فرادرس، آموختیم که چگونه با کتابخانه Turtle در پایتون برنامهنویسی کنیم و مرور بسیار مفید و سریعی بر بعضی از مهمترین مفاهیم در برنامهنویسی داشتیم. حالا میدانیم که چگونه با مقداردهی اولیه متغیرها، حلقهها، عبارات شرطی، دندانهگزاریها، لیستها و عملگرها کار کنیم. این کتابخانه شروع بزرگی است مخصوصا اگر با زبان برنامهنویسی پایتون بهتازگی آشنا شده باشید.
با مطالبی که در این مطلب بیان کردیم، حالا میتوانیم کارهای زیر را انجام دهیم.
- کتابخانه Turtle در پایتون را راه اندازی کنیم.
- Turtle خود را بر روی صفحه حرکت دهیم.
- Turtle و محیط آن را متناسب با نیازمان تنظیم کنیم.
- Turtle خود را برنامهنویسی کنیم.
- بتوانیم از مفاهیم پایهای و اصلی برنامهنویسی استفاده کنیم.
- بازی درست کنیم که بتوانیم با دوستان خود سرگرم شویم و به صورت چند نفره بازی کنیم.
بعد از این مطلب میتوان گفت که آماده هستید تا از مطالب پیشرفتهتر درباره برنامه نویسی با زبان پایتون استفاده کنید.
source