آموزش ساخت بازی در پایتون: از بازی ترسناک اختلاف تصاویر تا ماجراجویی متنی

raspberri 8
19 بازدید
۱۴۰۵-۰۲-۰۵
10 دقیقه
  • نویسنده: بهاره بهرامی
  • درباره نویسنده: ---
چالش: مرحله بعدی چیست؟

آیا می‌توانید branche هایی با رنگ‌های مختلف رسم کنید؟ آیا می‌توانید یک تابع به نام snowflake تعریف کنید و از آن برای رسم تعداد زیادی دانه برف بر روی صفحه استفاده کنید؟ آیا می‌توانید برنامه را طوری تنظیم کنید که اندازه و رنگ دانه‌های برف را به صورت تصادفی تغییر دهد؟

پروژه 2: ساخت بازی ترسناک پیدا کردن تفاوت‌ها

پایتون علاوه بر آنچه تاکنون گفته شد، قابلیت اضافه کردن تصاویر و صداها را نیز دارد. هدف از این پروژه ساخت یک بازی ساده برای پیدا کردن تفاوت بین دو تصویر است. هنگامی که بازیکن روی نقطه‌ای خاص کلیک می‌کند، یک تصویر ترسناک ظاهر می‌شود و صدای ترسناکی پخش می‌شود تا فرد را بترساند.

در این پروژه به دو تصویر نیاز داریم: تصویر اصلی برای پیدا کردن تفاوت‌ها و یک تصویر ترسناک.همچنین به یک فایل صوتی هم نیاز است. روی آیکون رزبری کلیک کنید تا منوی سیستم‌عامل  Raspberry Pi باز شود، گزینه Internet را انتخاب کنید و سپس روی مرورگر وب Chromium کلیک کنید. وقتی این مرورگر باز شد، آدرس rpf.io/spot-pic را در نوار آدرس تایپ کنید و کلید ENTER را فشار دهید. سپس روی تصویر کلیک راست‌ و گزینه Save image as را انتخاب کنید. حال از لیست سمت چپ پوشه Home را انتخاب و روی Save کلیک کنید. دوباره روی نوار آدرس Chromium کلیک کنید، سپس آدرس rpf.io/scary-pic را تایپ کرده و کلید ENTER را فشار دهید. مثل قبل روی تصویر کلیک راست‌ کنید و گزینه Save image as  را انتخاب و سپس پوشه Home را انتخاب کنید و در نهایت روی Save کلیک کنید.

برای داشتن فایل صوتی، دوباره روی نوار آدرس کلیک کنید. آدرس rpf.io/scream را تایپ کنید و کلید ENTER را فشار دهید. این فایل صوتی در واقع یک صدای جیغ است که به طور خودکار پخش می‌شود و بازیکن را سورپرایز خواهد کرد. قبل از اینکه بتوانید از آن استفاده کنید، باید آن را ذخیره کنید. روی پلیر کلیک راست کنید و گزینه Save as را انتخاب کنید. سپس پوشه Home را انتخاب و روی Save کلیک کنید. حال می‌توانید پنجره Chromium را ببندید.

روی آیکون New در نوار ابزار Thonny کلیک کنید تا یک پروژه جدید را شروع کنید. مثل قبل باید از کتابخانه Pygame برای گسترش قابلیت‌های پایتون استفاده می کنیم. بدین منظور عبارت زیر را تایپ کنید:

علاوه بر کتابخانه Pygame به بخش‌هایی از کتابخانه‌های دیگر هم نیاز خواهید داشت. برای وارد کردن این کتابخانه‌ها عبارت‌های زیر را تایپ کنید:

دستور from عملکرد متفاوتی نسبت به دستور import دارد. با استفاده از دستور  from این امکان را دارید که فقط بخش‌های مورد نیاز از یک کتابخانه را وارد کنید، بنابراین نیازی به اضافه کردن کل کتابخانه نیست. در مرحله بعد، باید کتابخانه Pygame را تنظیم کنید. این فرآیند در واقع مقداردهی اولیه (initialization) است. برای این کار Pygame باید عرض و ارتفاع نمایشگر یا تلویزیون بازیکن را که همان رزولوشن است، بشناسد. پس باید عبارت زیر را تایپ کنید:

به خط خالی وسط توجه کنید. این خط خالی جایی است که قرار است کدها قرار گیرند. روی آیکون Run کلیک کنید، برنامه با اسم Spot the Difference ذخیره می‌شود. حال Pygame، یک پنجره جدید با پس‌زمینه سیاه باز می‌کند که بلافاصله پس از رسیدن به دستور خروج، محو می‌شود. به جز یک پیام کوتاه در پوسته پایتون (شکل 1 )، برنامه تا به اینجا خروجی خاصی نداشته است.

برنامه شما کاربردی است، اما هنوز کار زیادی انجام نمی‌دهد

شکل 1: برنامه شما کاربردی است، اما هنوز کار زیادی انجام نمی‌دهد

برای نمایش تصویر spot-the-difference، عبارت زیر را در فضای خالی بالای pygame.quit() تایپ کنید:

برای اینکه تصویر تمامِ صفحه مانیتور یا تلویزیون را بپوشاند، باید رزولوشن آن مطابق رزولوشن نمایشگر باشد. بدین منظور کد زیر را تایپ کنید:

شاید برای شما مفید باشد:
نصب پایتون در رزبری پای | آموزش گام‌به‌گام + نکات کاربردی

اکنون که تصویر در حافظه قرار دارد، باید به Pygame بگویید که آن را روی صفحه نمایش دهد. به این فرآیند blitting    یا bit block transfer  گفته می‌شود. برای این هدف کد زیر را تایپ کنید:

در خط اول تصویر از گوشه بالا و سمت چپ روی صفحه نمایش کپی می‌شود. خط دوم به Pygame می‌گوید که صفحه نمایش را رفرش کند تا تغییرات اعمال شوند. در غیر این صورت اگر چه تصویر به درستی در حافظه قرار گرفته اما روی صفحه نمایش نشان داده نمی‌شود.

روی آیکون Run کلیک کنید، برنامه اجرا می‌شود و تصویر spot-the-difference روی صفحه نمایش داده می‌شود. چون برنامه به سرعت به پایان می‌رسد، تصویر فقط برای یک لحظه ظاهر می‌شود و سپس پنجره بسته می‌شود.

تصویر spot-the-difference

شکل 2 : تصویر spot-the-difference

برای اینکه تصویر به مدت طولانی‌تری نمایش داده شود، خط زیر را دقیقاً بالای  pygame.quit()تایپ کنید:

دوباره روی Run کلیک کنید. خواهید دید که تصویر این بار به مدت طولانی‌تری روی صفحه نمایش داده می‌شود. برای اضافه کردن تصویر ترسناک، کد زیر را دقیقاً زیر عبارت pygame.display.update() تایپ کنید:

برای اینکه عکس زامبی بلافاصله نمایش داده نشود، باید یک تأخیر (delay) در نظر بگیرید:

برای این کار، تصویر زامبی را بر روی صفحه قرار دهید و سپس صفحه را به‌روزرسانی کنید تا تصویر به کاربر نمایش داده شود:

روی آیکون Run کلیک کنید و ببینید چه اتفاقی می‌افتد: Pygame تصویر spot-the-difference را لود خواهد کرد و پس از سه ثانیه، آن را با تصویر ترسناک زامبی جایگزین می‌کند.(شکل 3 )

 این عکس باعث ترساندن کاربر می‌شود

شکل 3: این عکس باعث ترساندن کاربر می‌شود

اینکه تأخیر همیشه سه ثانیه باشد، سبب می‌شود که بازی کمی قابل پیش‌بینی شود و چون هدف انتقال حس غافلگیری به کاربر است، خط sleep(3) را که بالای screen.blit(zombie, (0,0))  قرار دارد، به شکل زیر تغییر دهید:

در نتیجه به صورت تصادفی یک عدد بین 5 تا 15 انتخاب می‌شود و برنامه به همان اندازه در نمایش تصویر تأخیر خواهد داشت. سپس خط زیر را درست بالای دستور sleep اضافه کنید تا صدای جیغ لود شود:

حال زیر دستور sleep و در یک خط جدید، کد زیر را تایپ کنید تا پخش صدای ترسناک شروع شود. هدف این است که این صدا قبل از نمایش تصویر ترسناک پخش شود:

در نهایت باید به Pygame بگویید که پخش صدا را متوقف کند. بدین منظور خط زیر را بالای دستور pygame.quit() تایپ کنید:

روی آیکون Run کلیک کنید و ببینید کدهایی که تا اینجا نوشته‌اید، چگونه کار می‌کنند: پس از گذشت چند ثانیه از بازی پیدا کردن تفاوت‌ها، زامبی ترسناکی همراه با فریاد یک خون‌آشام ظاهر می‌شود. اگر متوجه شدید که تصویر زامبی قبل از پخش صدا ظاهر می‌شود، یک تأخیر بین دستور scream.play() و دستور screen.blit اضافه کنید.

برنامه کامل شده باید به صورت زیر باشد:

شاید برای شما مفید باشد:
معرفی کامپیوتر دستی BeepBerry با سیستم عامل لینوکس

حال تنها کاری که باید بکنید این است که دوستان خود را دعوت کنید تا بازی spot-the-difference را انجام دهند. مطمئن شوید که اسپیکرها روشن هستند.

چالش: تغییر تصاویر

آیا می‌توانید تصاویر را به گونه‌ای تغییر دهید تا برای مناسبت‌هایی مانند کریسمس  عید نوروز مناسب‌ باشند؟

 آیا می‌توانید تصاویر «پیدا کردن تفاوت‌ها» و تصاویر ترسناک را (با استفاده از یک ویرایشگر گرافیکی مانند GIMP) بکشید؟

پروژه 3: بازی نقش‌آفرینی ماز

حال که با برنامه‌نویسی پایتون آشنا شده‌اید، وقت آن است که از Pygame استفاده کنید تا پروژه‌های کمی پیچیده‌تر اجرا کنید: بازی ماز متنی. در این نوع بازی‌ها، بازیکن در یک محیط متنی به کاوش می‌پردازد و با استفاده از دستورات متنی با بازی تعامل می‌کند. در واقع این بازی‌ها به دورانی برمی‌گردند که کامپیوترها قادر به پردازش گرافیک نبودند. با این حال این بازی‌ها طرفدارانی دارند که معتقدند هیچ گرافیکی به اندازه تصاویری که در ذهن خود دارید، زنده و واقعی نیست.

این برنامه نسبت به دیگر برنامه‌های این فصل کمی پیچیده‌تر است، بنابراین برای آسان‌تر کردن کارها، با نسخه‌ای از برنامه که قسمتی از آن نوشته شده است، شروع کنید. مرورگر Chromium  را باز کنید و آدرس زیر را در نوار آدرس تایپ کنید:

rpf.io/rpg-code

مرورگر Chromium به صورت خودکار کد برنامه را در فولدر Downloads دانلود می‌کند اما به شما هشدار می‌دهد که این فایل – یک برنامه پایتون – ممکن است به کامپیوتر شما آسیب برساند. از آنجایی که این فایل را از بنیاد Raspberry Pi   دانلود کرده‌اید که یک منبع معتبر به حساب می‌آید، بر روی دکمه Keep که در پایین صفحه ظاهر می‌شود، کلیک کنید. سپس به Thonny بازگردید و روی آیکون Load کلیک کنید. فایل rpg-rpg.py را در پوشه Downloads  پیدا کنید و سپس روی دکمه Load کلیک کنید.

روی نماد Run کلیک کنید تا با نحوه کار با این بازی ماجراجویانه متنی آشنا شوید. خروجی بازی در قسمت پوسته در پایین پنجره Thonny نمایش داده می‌شود. برای مشاهده بهتر پنجره Thonny ، روی دکمه maximize کلیک کنید.

این بازی بسیار ساده است: دو اتاق وجود دارد که هیچ چیزی در آن‌ها نیست. بازیکن بازی را از سالن، که یکی از این دو اتاق است، شروع می‌کند. برای رفتن به آشپزخانه، کافی است go south را تایپ کنید و سپس کلید ENTER را بزنید (شکل 4). فرض کنید الآن در آشپزخانه هستید، برای بازگشت به سالن، عبارت go North را تایپ کنید. همچنین می‌توانید عبارت‌های go west و go east را تایپ کنید، اما از آنجایی که هیچ اتاقی در این جهت‌ها وجود ندارد، بازی یک پیام خطا نمایش می‌دهد.

 در حال حاضر تنها دو اتاق وجود دارد.

شکل 4: در حال حاضر تنها دو اتاق وجود دارد.

به خط 29 ام در قسمت اسکریپت بروید و متغیری به نام rooms را پیدا کنید. این متغیر مثل دیکشنری عمل می‌کند و اتاق‌ها، خروجی‌ها و خروجی مشخص هر اتاق را در بازی مشخص می‌کند.

برای جذاب‌تر کردن بازی، اتاق دیگری را اضافه کنید: یک اتاق غذاخوری در شرق سالن. متغیر rooms را در اسکریپت‌ها پیدا کنید. حال یک علامت کاما (,) بعد از } در خط 38 اضافه کنید و سپس عبارت زیر را تایپ کنید (تورفتگی در دیکشنری ضروری نیست):

همچنین به یک خروجی جدید در سالن نیاز دارید. از آنجا که این خروجی به طور خودکار ساخته نمی‌شود، به انتهای خط 33 بروید و یک کاما اضافه کنید. سپس عبارت زیر را اضافه کنید:

روی آیکون Run کلیک کنید و اتاق جدید خود را امتحان کنید: تصور کنید در سالن هستید، برای ورود به اتاق ناهارخوری (شکل 5) عبارت go east را تایپ کنید. حال در اتاق ناهارخوری هستید، برای ورود به سالن عبارت go west را تایپ کنید.

 تبریک! ساخت اتاق جدید با موفقیت انجام شد.

شما یک اتاق دیگر اضافه کرده‌اید

شکل 5: شما یک اتاق دیگر اضافه کرده‌اید

اتاق‌ خالی جذابیت چندانی ندارد. برای افزودن یک آیتم به یک اتاق، باید دیکشنری آن اتاق را تغییر دهید. بدین منظور ابتدا برنامه را با کلیک بر روی آیکون Stop متوقف کنید. دیکشنری Hall را در بخش اسکریپت‌ها پیدا کنید. سپس یک کاما در انتهای ‘east’ : ‘Dining Room’ اضافه کنید. قبل از فشار دادن کلید ENTER، عبارت زیر را تایپ کنید:

مجدداً روی Run کلیک کنید. حال بازی به شما می‌گوید که می‌توانید آیتم جدید را مشاهده کنید: یک کلید. دستور get key را تایپ کنید (شکل 6) تا بتوانید کلید را بردارید و به لیست آیتم‌هایی که دارید اضافه کنید. این آیتم‌ها تحت عنوان inventory  شناخته می‌شوند. inventory هنگام جابجایی از اتاقی به اتاق دیگر همراه شما خواهد بود.

شکل 19-5: کلید به inventory شما اضافه می‌شود

شکل 6: کلید به inventory شما اضافه می‌شود

 

شاید برای شما مفید باشد:
سیستم عامل یونیکسی FUZIX برای رزبری پای Pico و میکروکنترلر RP2040

روی آیکون Stop کلیک کنید و بازی را با اضافه کردن یک هیولا جذاب‌تر کنید. دیکشنری Kitchen را پیدا کنید و آیتم monster  را به همان روشی که برای آیتم key انجام دادید به inventory اضافه کنید. توجه کنید که باید یک کاما به انتهای خط بالا اضافه کنید.

برای اینکه هیولا بتواند به بازیکن حمله کند، باید منطق به بازی اضافه کنید. بدین منظور به انتهای برنامه و قسمت اسکریپت بروید و خط‌های زیر را اضافه کنید. همان‌طور که می‌بینید کد زیر با هشتگ (#) شروع می‌شود. این علامت به شما کمک می‌کند هر وقت دوباره به سراغ برنامه آمدید، آن را بهتر درک کنید. مطمئن شوید که خطوط، تورفتگی‌های درستی دارند.

روی Run کلیک کنید و ورود به Kitchen را تست کنید (شکل 7). در این حالت هیولا کاری انجام نخواهد داد.

شکل 20-5: اهمیتی به موش‌ها ندهید، یک هیولا در آشپزخانه حضور دارد.

شکل 7: اهمیتی به موش‌ها ندهید، یک هیولا در آشپزخانه حضور دارد.

برای تبدیل این ماجراجویی به یک بازی کامل، به آیتم‌های بیشتری مثل یک اتاق دیگر و قابلیت «برنده شدن» با خارج شدن از خانه و در اختیار داشتن تمامی آیتم‌های موجود در inventory نیاز دارید. این کار را با افزودن یک اتاق دیگر به اسم Garden و به همان شیوه‌ای که برای اتاق Dining Room انجام دادید، شروع کنید. با استفاده از دیکشنری Dining Room، یک خروجی اضافه کنید. به خاطر داشته باشید که باید یک کاما به انتهای خط بالا اضافه کنید.

برای اضافه کردن اتاق جدید به سراغ دیکشنری اصلی یعنی rooms بروید. حال یک ورودی جدید برایGarden   به دیکشنری اضافه کنید. به یاد داشته باشید که باید یک کاما بعد از }  در خط بالا اضافه کنید.

برای اضافه کردن یک آیتم جدید به نام potion به دیکشنری Dining Room، باید مانند قبل عمل کنید و یک کاما به انتهای خط بالا اضافه کنید.

حال باید منطق را به برنامه اضافه کنید. کاری که منطق انجام می‌دهید این است که بررسی کند آیا بازیکن تمامی آیتم‌ها را دارد؟

 و اگر دارد به بازیکن اعلام پیروزی کند. بدین منظور باید این چند خط را به انتهای برنامه اضافه کنید.

 روی دکمه Run کلیک کنید و سعی کنید قبل از رفتن به باغ، key   و potion  را به دست آورید. مراقب باشید که وارد آشپزخانه نشوید، هیولا آنجاست! آخرین کاری که قرار است برای این بازی انجام دهید، اضافه کردن دستورالعمل‌هایی برای راهنمایی بازیکن است. برای اضافه کردن این راهنمایی‌ها به بالای برنامه و جایی که تابع showInstructions() تعریف شده بروید و متن زیر را اضافه کنید:

یک‌بار دیگر بازی را Run کنید. خواهید دید که دستورالعمل‌های جدید در ابتدای بازی نمایش داده می‌شوند (شکل 8). تبریک. حال شما یک بازی ماجراجویانه تعاملی مبتنی بر متن ساخته‌اید.

حال بازیکن می‌داند که باید چه کاری در بازی انجام دهد

شکل 8: حال بازیکن می‌داند که باید چه کاری در بازی انجام دهد

 

چالش: بازی را گسترش دهید
  • آیا می‌توانید اتاق‌های بیشتری اضافه کنید تا بازی طولانی‌تر شود؟
  •  آیا می‌توانید یک آیتم برای محافظت از خود در برابر هیولا اضافه کنید؟
  •  چگونه می‌توان یک سلاح برای کشتن هیولا اضافه کرد؟
  • آیا می‌توانید چندین اتاق در طبقات بالا و پایین اضافه کنید که جابجایی بین طبقات از طریق پله باشد؟
اطلاعات
19
0
0
اشتراک و حمایت
profile نویسنده: بهاره بهرامی متخصص الکترونیک

ویراستار: حسین زنجانی زاده
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله