نحوه برنامه ریزی بازی های رایانه ای (همراه با تصاویر)

فهرست مطالب:

نحوه برنامه ریزی بازی های رایانه ای (همراه با تصاویر)
نحوه برنامه ریزی بازی های رایانه ای (همراه با تصاویر)
Anonim

آیا ایده ای برای یک بازی رایانه ای دارید و می خواهید آن را واقعی کنید؟ یا تا به حال به این فکر کرده اید که بازی های رایانه ای چگونه نوشته می شوند؟ این wikiHow به شما می آموزد که چگونه سه بازی اصلی رایانه ای را در پایتون بنویسید. برای توسعه اولین بازی خود نیاز به درک اولیه از پایتون و مفاهیم کلی برنامه نویسی دارید.

مراحل

قسمت 1 از 3: ساخت بازی مبتنی بر متن

5692759 1
5692759 1

مرحله 1. یک زبان برنامه نویسی انتخاب کنید

همه زبان های برنامه نویسی متفاوت هستند ، بنابراین شما باید تصمیم بگیرید که از کدام زبان برای نوشتن بازی خود استفاده کنید. هر زبان برنامه نویسی اصلی از ورودی متن ، خروجی متن و ساختارهای if (اصلی ترین چیزهایی که برای یک بازی ساده مبتنی بر متن نیاز دارید) پشتیبانی می کند ، بنابراین گزینه ها را کاوش کنید و تصمیم بگیرید که با کدام یک بیشتر احساس راحتی می کنید و به یادگیری اختصاص داده اید. در اینجا برخی از عوامل را باید در نظر گرفت:

  • بیشتر از چه زبانی استفاده می شود؟

    برخی از زبان های برنامه نویسی مانند جاوا اسکریپت برای استفاده در وب طراحی شده اند ، در حالی که برخی دیگر مانند Python ، C یا C ++ برای اجرای برنامه های کامپیوتری طراحی شده اند. برای بازی خود ، زبانی با طیف وسیع تری از استفاده ، مانند Python ، C ، C ++ یا جاوا اسکریپت.

  • یادگیری چقدر سخت است؟

    اگرچه نوشتن یک برنامه پس از تمرین در هر زبان برنامه نویسی معمولی (به عنوان مثال ، مانند Malbolge گیج کننده نیست) باید به اندازه کافی آسان باشد ، برخی از آنها برای مبتدیان دوستانه تر از دیگران است. به عنوان مثال ، جاوا و سی از شما می خواهند مفاهیم برنامه نویسی عمیق تری را نسبت به چیزی مانند پایتون درک کنید ، که به نحوی در دسترس تر و ساده تر مشهور است.

  • کجا می توانم از آن استفاده کنم؟

    احتمالاً می خواهید افرادی که در سیستم های مختلف مانند لینوکس ، مک یا ویندوز هستند بتوانند بازی شما را انجام دهند. بنابراین نباید از زبانی استفاده کنید که فقط در چند سیستم پشتیبانی می شود ، مانند Visual Basic که فقط در ویندوز پشتیبانی می شود.

در این مقاله از پایتون برای مثال های یک بازی مبتنی بر متن استفاده می شود ، اما می توانید نحوه انجام مفاهیم در هر زبان برنامه نویسی دیگر را بررسی کنید.

5692759 2
5692759 2

مرحله 2. کامپیوتر خود را آماده کنید

دو جزء اصلی مورد نیاز شما یک ویرایشگر متن است که در آن کد خود را می نویسید و یک کامپایلر که از آن برای تبدیل آن به یک بازی استفاده خواهید کرد. اگر می خواهید از مثال این مقاله پیروی کنید ، باید Python را نصب کرده و نحوه اجرای برنامه ها را بیاموزید. در صورت تمایل ، می توانید یک IDE (Integraded Desktop Environment) را تنظیم کنید که شامل ویرایش ، کامپایل و اشکال زدایی در یک برنامه واحد است. IDE پایتون IDLE نامیده می شود. اما می توانید از هر ویرایشگر متنی که از متن ساده پشتیبانی می کند ، مانند Notepad برای Windows ، TextEdit برای macOS یا Vim برای Linux استفاده کنید.

5692759 3
5692759 3

مرحله 3. برای خوشامدگویی به پخش کننده ، چند کد بنویسید

بازیکن می خواهد بداند چه اتفاقی می افتد و باید چه کار کند ، بنابراین باید مقداری متن برای آنها چاپ کنید.

  • این کار با تابع print () در پایتون انجام می شود. برای امتحان کردن ، یک فایل جدید با پسوند.py باز کنید ، کد زیر را در آن وارد کنید ، ذخیره و اجرا کنید:

    print ("به بازی حدس زدن اعداد خوش آمدید!") print ("یک عدد کامل بین 1 تا 1000 وارد کنید:")

5692759 4
5692759 4

مرحله 4. یک عدد تصادفی ایجاد کنید

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

  • پایتون دارای یک عدد تصادفی داخلی نیست ، اما دارای یک کتابخانه استاندارد است (این بدان معناست که کاربر مجبور نیست هیچ چیز اضافی نصب کند). بنابراین به ابتدای کد خود (قبل از توابع print ()) بروید و خط واردات را تصادفی تایپ کنید.
  • از تابع تصادفی استفاده کنید. به آن randint () می گویند ، در کتابخانه تصادفی است که شما تازه وارد کرده اید ، و حداقل و حداکثر مقداری را که تعداد می تواند به عنوان آرگومان داشته باشد ، می گیرد. بنابراین به انتهای کد خود بازگردید و خط زیر را وارد کنید:

    rightNum = random.randint (0 ، 1000)

5692759 5
5692759 5

مرحله 5. از پخش کننده ورودی بگیرید

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

  • از آنجایی که کدی که وارد کرده اید دستور ورود شماره به پخش کننده را چاپ می کند ، باید عددی را که وارد می کنید نیز بخواند. این کار با ورودی () در پایتون 3 و raw_input () در پایتون 2 انجام می شود. باید در پایتون 3 بنویسید ، زیرا پایتون 2 به زودی منسوخ می شود. برای ذخیره ورودی پخش کننده در متغیری به نام شماره ، خط زیر را به کد خود اضافه کنید:

    userNum = ورودی ()

5692759 6
5692759 6

مرحله 6. ورودی پخش کننده را به یک نوع داده قابل استفاده تبدیل کنید

بازیکن شماره ای وارد کرده است-حالا چه؟

  • ورودی پخش کننده را یک عدد کنید. در حال حاضر ، ممکن است گیج کننده به نظر برسد زیرا آنها فقط یک عدد وارد کرده اند. اما یک دلیل خوب وجود دارد: پایتون فرض می کند که همه ورودی ها متن هستند ، یا "رشته" ، همانطور که در برنامه نویسی نامیده می شود. این متن شامل عددی است که می خواهید دریافت کنید. پایتون یک تابع دارد که رشته ای را که فقط شامل یک عدد است به عدد داخل تبدیل می کند. نوع:

    userNum = int (userNum)

5692759 7
5692759 7

مرحله 7. شماره بازیکن را با شماره صحیح مقایسه کنید

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

در حالی که userNum! = rightNum: userNum = int (ورودی ())

5692759 8
5692759 8

مرحله 8. بازخورد را به بازیکن بدهید

در حالی که شما قبلاً ورودی آنها را پردازش کرده اید ، پخش کننده این را نمی بیند. شما باید واقعاً نتایج را برای پخش کننده چاپ کنید تا آنها بفهمند چه اتفاقی می افتد.

  • مطمئناً می توانید به بازیکن بگویید که شماره آنها درست است یا غلط. اما با چنین رویکردی ، ممکن است بازیکن در بدترین حالت 1000 بار حدس بزند ، که بسیار خسته کننده خواهد بود.
  • بنابراین به بازیکن بگویید که تعداد آنها خیلی کم است یا خیلی زیاد. این امر تعداد حدس آنها را به میزان قابل توجهی کاهش می دهد. به عنوان مثال ، اگر بازیکن ابتدا 500 را حدس بزند ، و بازی پاسخ دهد "خیلی بزرگ است. دوباره امتحان کنید" ، به جای 1000 فقط 500 عدد ممکن وجود دارد. این کار با ساخت های if انجام می شود ، بنابراین چاپ را جایگزین کنید ("اشتباه است. دوباره امتحان کنید. ") با یکی.
  • توجه داشته باشید که آیا یکسان بودن دو عدد با == انجام می شود ، نه با =. = مقدار راست آن را به متغیر سمت چپ آن اختصاص می دهد!
  • if userNum <rightNum: print ("خیلی کوچک است. دوباره امتحان کنید:") if userNum> rightNum: print ("خیلی بزرگ است. دوباره امتحان کنید:")

5692759 9
5692759 9

مرحله 9. کد خود را آزمایش کنید

به عنوان یک برنامه نویس ، باید مطمئن شوید که کد شما قبل از درنظر گرفتن کامل بودن آن کار می کند.

  • هنگام برنامه نویسی در پایتون ، مطمئن شوید که تورفتگی ها به درستی انجام شده است. کد شما باید به این شکل باشد:

    وارد کردن چاپ تصادفی ("به بازی حدس زدن اعداد خوش آمدید!") چاپ ("وارد کردن یک عدد کامل بین 1 و 1000:") rightNum = random.randint (0، 1000) userNum = input () userNum = int (userNum) در حالی که userNum! = rightNum: if userNum <rightNum: print ("خیلی کوچک است. دوباره امتحان کنید:") if userNum> rightNum: print ("خیلی بزرگ است. دوباره امتحان کنید:") userNum = int (input ()) print ("حدس زدید به درستی.")

5692759 10
5692759 10

مرحله 10. ورودی را اعتبارسنجی کنید

بازیکن نباید بتواند بازی شما را به سادگی با وارد کردن یک چیز اشتباه شکست دهد. "تأیید ورودی" به این معنی است که مطمئن شوید پخش کننده چیز صحیح را قبل از پردازش وارد کرده است.

  • بازی را دوباره باز کنید و هر چیزی را که عدد نیست وارد کنید. بازی با ValueError خارج می شود. برای جلوگیری از این امر ، می توانید روشی را برای بررسی اینکه آیا ورودی یک عدد بوده است پیاده سازی کنید.
  • یک تابع تعریف کنید. از آنجا که اعتبارسنجی ورودی بسیار طولانی است و شما باید آن را چندین بار انجام دهید ، باید یک تابع را تعریف کنید. بدون هیچ گونه استدلال و بازگرداندن شماره است. ابتدا def numInput () را بنویسید: در بالای کد ، مستقیماً در زیر واردات تصادفی.
  • یکبار ورودی پخش کننده را دریافت کنید. از تابع input () استفاده کنید و نتیجه را به متغیر inp اختصاص دهید.
  • وقتی ورودی بازیکن یک عدد نیست ، از آنها بخواهید که یک عدد وارد کنند. برای بررسی اینکه آیا یک رشته یک عدد است یا خیر ، از توابع isdigit () استفاده کنید که فقط یک عدد کامل را مجاز می کند ، بنابراین مجبور نیستید آن را جداگانه بررسی کنید.
  • اگر ورودی یک عدد است ، آن را از رشته به عدد تبدیل کنید و نتیجه را برگردانید. برای تبدیل رشته به عدد صحیح از تابع int () استفاده کنید. این کار تبدیل کد اصلی را غیر ضروری می کند و باید آن را از آنجا حذف کنید.
  • همه تماس های ورودی () در کد اصلی را با فراخوانی به numInput () جایگزین کنید.
  • کد تابع numInput () به شکل زیر خواهد بود:
  • def numInput (): inp = input () while not inp.isdigit (): print ("به شما گفته شد که یک عدد کامل وارد کنید! یک عدد کامل وارد کنید:") inp = input () int (inp)

5692759 11
5692759 11

مرحله 11. بازی را دوباره آزمایش کنید

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

سعی کنید وقتی برنامه از شما شماره می خواهد مقداری متن وارد کنید. اکنون ، به جای خروج با پیام خطا ، برنامه دوباره از شما شماره می خواهد

5692759 12
5692759 12

مرحله 12. پیشنهاد کنید که بازی را پس از اتمام راه اندازی مجدد کنید

به این ترتیب ، بازیکن می تواند بازی شما را برای مدت طولانی تری بدون نیاز به راه اندازی مجدد بازی انجام دهد.

  • همه کدها به جز واردات و تعریف تابع را در یک حلقه while قرار دهید. True را به عنوان شرط تنظیم کنید: این همیشه صادق است ، بنابراین حلقه برای همیشه ادامه خواهد داشت.
  • بعد از اینکه شماره را درست حدس زد آیا می خواهید دوباره بازی کنید یا نه. از تابع print () استفاده کنید.
  • اگر آنها "نه" پاسخ دادند ، از ظاهر خارج شوید. اگر آنها پاسخ دیگری دادند ، ادامه دهید. خروج از حلقه با دستور break انجام می شود.
  • "خوش آمدید به بازی حدس زدن اعداد" را به خارج از حلقه while منتقل کنید. بازیکن احتمالاً نمی خواهد هر بار که بازی را انجام می دهد از او استقبال شود. چاپ دستورالعمل ("به بازی حدس زدن اعداد خوش آمدید!") را در حالی که True:
5692759 13
5692759 13

مرحله 13. بازی را آزمایش کنید

هر بار که یک ویژگی جدید را پیاده می کنید ، باید بازی خود را آزمایش کنید.

  • اطمینان حاصل کنید که هر دو "بله" و "نه" را حداقل یکبار پاسخ دهید تا مطمئن شوید که هر دو گزینه کار می کنند. کد زیر باید به این شکل باشد:

    وارد کردن تصادفی def numInput (): inp = ورودی () در حالی که نه ("به بازی حدس زدن اعداد خوش آمدید!") در حالی که True: print ("یک عدد کامل بین 1 تا 1000 وارد کنید:") rightNum = random.randint (0، 1000) userNum = numInput () در حالی که userNum! = rightNum: اگر userNum <rightNum: print ("خیلی کوچک است. دوباره امتحان کنید:") if userNum> rightNum: print ("خیلی بزرگ است. دوباره امتحان کنید:") userNum = numInput () print ("شما درست حدس زدید") print ("آیا شما می خواهید دوباره بازی کنید؟ برای خروج شماره را وارد کنید. ") if input () ==" No ": break

5692759 14
5692759 14

مرحله 14. سایر بازی های مبتنی بر متن را بنویسید

نوشتن ماجراجویی متنی بعدی چطور؟ یا یک بازی مسابقه ای؟ خلاق بودن.

نکته: اگر مطمئن نیستید که چگونه کاری انجام می شود یا چگونه از یک تابع استفاده می شود ، گاهی اوقات به اسناد مراجعه کنید. اسناد پایتون 3 در https://docs.python.org/3/ یافت می شود. گاهی اوقات جستجوی هر کاری که می خواهید در اینترنت انجام دهید نیز نتایج خوبی را به دنبال دارد.

قسمت 2 از 3: ساخت بازی با گرافیک دو بعدی

5692759 15
5692759 15

مرحله 1. یک کتابخانه گرافیکی انتخاب کنید

ساخت گرافیک بسیار پیچیده است و اکثر زبانهای برنامه نویسی (از جمله پایتون ، C ++ ، C ، جاوا اسکریپت) از گرافیک موجود در هسته اصلی یا کتابخانه های استاندارد حداقل یا حتی هیچ پشتیبانی نمی کنند. بنابراین شما باید از یک کتابخانه خارجی استفاده کنید تا بتوانید گرافیک بسازید ، به عنوان مثال Pygame برای پایتون.

حتی با وجود یک کتابخانه گرافیکی ، شما باید نگران مواردی مانند نحوه نمایش منو ، نحوه بررسی آنچه که پخش کننده روی آن کلیک کرده است ، نحوه نمایش کاشی ها و غیره باشید. اگر ترجیح می دهید بر توسعه بازی واقعی تمرکز کنید ، می توانید از کتابخانه موتور بازی مانند Unity استفاده کنید که این موارد را به راحتی پیاده سازی می کند

در این مقاله از پایتون با Cocos2D برای نشان دادن نحوه ساخت یک پلتفرمر ساده دو بعدی استفاده می شود. برخی از مفاهیم ذکر شده ممکن است در موتورهای بازی دیگر وجود نداشته باشد. برای اطلاعات بیشتر به اسناد آنها مراجعه کنید.

5692759 16
5692759 16

مرحله 2. کتابخانه گرافیکی را که انتخاب کرده اید نصب کنید

نصب Cocos2D برای پایتون آسان است. می توانید آن را از https://python.cocos2d.org/index.html دریافت کنید یا اگر از لینوکس استفاده می کنید sudo pip3 را نصب کنید cocos2d.

5692759 17
5692759 17

مرحله 3. یک فهرست جدید برای بازی و رسانه خود ایجاد کنید

شما از چیزهایی مانند تصاویر و صداها در بازی خود استفاده خواهید کرد. این موارد را در همان فهرست برنامه ذخیره کنید. این فهرست نباید حاوی چیز دیگری باشد تا بتوانید به راحتی ببینید چه دارایی هایی در بازی دارید.

5692759 18
5692759 18

مرحله 4. یک فایل کد جدید در فهرست جدید ایجاد کنید

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

در این مثال ، ما فایلی به نام main.py ایجاد می کنیم که شامل تمام کد ما می شود

5692759 19
5692759 19

مرحله 5. پنجره بازی را ایجاد کنید

این پیش نیاز اصلی بازی با گرافیک است.

  • زیر واحد های لازم cocos2d را وارد کنید: cocos.director ، cocos.scene و cocos.layer. این کار از subModuleName import *انجام می شود ، جایی که نام زیر ماژول ، فرعی است که می خواهید وارد کنید. تفاوت بین… import * و import… در این است که نیازی نیست نام ماژول را در جلوی همه چیزهایی که از آن ماژول با مورد قبلی استفاده می کنید قرار دهید.
  • یک زیر کلاس MainMenuBgr از ColorLayer تعریف کنید. این اساساً بدان معناست که هر پس زمینه منوی اصلی که ایجاد می کنید با تغییراتی که ایجاد می کنید مانند یک لایه رنگ رفتار می کند.
  • مدیر cocos را شروع کنید. این یک پنجره جدید به شما می دهد. اگر زیرنویس را تنظیم نکنید ، پنجره همان عنوان را با نام فایل (main.py) خواهد داشت که ظاهری حرفه ای ندارد. با تنظیم مجدد اندازه روی True ، اجازه دهید اندازه پنجره تغییر کند.
  • یک تابع showMainMenu تعریف کنید. شما باید کد نمایش منوی اصلی را در یک تابع قرار دهید زیرا این امر به شما این امکان را می دهد تا با فراخوانی مجدد عملکرد به راحتی به منوی اصلی بازگردید.
  • صحنه ای ایجاد کنید. صحنه فعلاً از یک لایه تشکیل شده است ، که شیئی از کلاس MainMenuBgr است که شما تعریف کرده اید.
  • این صحنه را در پنجره اجرا کنید.
  • از cocos.director import * از cocos.scene import * از cocos.layer import * کلاس MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenu، self)._ init _ (0، 200، 255، 255) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) Director.run (menuSc) Director.init (caption = "IcyPlat - platformer simple"، resizable = True) showMainMenu ()

5692759 20
5692759 20

مرحله 6. منوی اصلی را به پنجره اضافه کنید

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

  • cocos.menu (دوباره با دستور from) و pyglet.app (این بار با وارد کردن) وارد کنید.
  • MainMenu را به عنوان زیر کلاس منو تعریف کنید.
  • تراز منوی اصلی را تنظیم کنید. شما باید تراز عمودی و افقی را جداگانه تنظیم کنید.
  • لیستی از موارد منو ایجاد کرده و آنها را به منو اضافه کنید. حداقل موارد منو "شروع بازی" و "خروج" را حداقل داشته باشید. هر مورد منو باید داخل براکت ها قرار گیرد. هر مورد باید دارای برچسب و عملکرد callback باشد که تعیین می کند وقتی پخش کننده روی آن کلیک می کند چه اتفاقی می افتد. برای مورد "شروع بازی" ، از عملکرد startGame (به زودی آن را خواهید نوشت) ، و برای مورد "Quit" ، از "pyglet.app.exit" (موجود است) استفاده کنید. با تماس با self.create_menu (menuItems) منوی واقعی را ایجاد کنید.
  • startGame () را تعریف کنید. در حال حاضر فقط گذر را در تعریف قرار دهید ، وقتی بازی واقعی را می نویسید ، آن را جایگزین می کنید.
  • به محلی در کد خود که در آن صحنه menuSc ایجاد کرده اید بروید و یک شیء MainMenu را به آن اضافه کنید.
  • کل کد شما باید به شکل زیر باشد:

    از cocos.director import * از cocos.menu واردات * از cocos.scene import * از cocos.layer import * import pyglet.app کلاس MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr ، self)._ init _ (0 ، 200 ، 255 ، 255) کلاس MainMenu (منو): def _init _ (self): super (MainMenu، self)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("شروع بازی ("، startGame))، (MenuItem (" Quit "، pyglet.app.exit))] self.create_menu (menuItems) def startGame (): pass def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) Director.init (caption = "IcyPlat - platformer simple"، resizable = True) showMainMenu ()

5692759 21
5692759 21

مرحله 7. کد خود را آزمایش کنید

کد را زود تست کنید ، در حالی که هنوز کوتاه و نسبتاً ساده است. سپس می توانید قبل از پیچیده شدن همه چیز ، اشتباهات موجود در ساختار اصلی را شناسایی و تصحیح کنید.

کد دستورالعمل ها باید پنجره ای تحت عنوان "IcyPlat - platformer ساده" باز کند. پس زمینه آبی روشن است و می توانید اندازه پنجره را تغییر دهید. وقتی روی "شروع بازی" در منو کلیک می کنید ، هیچ اتفاقی نمی افتد (هنوز). وقتی روی "ترک" کلیک می کنید ، پنجره بسته می شود

5692759 22
5692759 22

مرحله 8. یک اسپریت ایجاد کنید

Sprite یک "شی بازی" یا یک تصویر دو بعدی است. Sprites می تواند اشیاء درون بازی ، نمادها ، تزئینات پس زمینه ، شخصیت ها و هر چیز دیگری باشد که می توانید با یک تصویر در بازی نشان دهید. ما با ایجاد یک اسپریت برای شخصیتی شروع می کنیم که بازیکن می تواند با آن تعامل داشته باشد.

  • زیرمجموعه cocos.sprite را با عبارت import-import وارد کنید.
  • تصویری را برای نمایش اسپریت پیدا کنید. اگر تصویری برای آن ندارید ، نمی توانید آن را نمایش دهید. می توانید یکی را ترسیم کنید یا می توانید از اینترنت دریافت کنید (هرچند ، اگر قصد انتشار بازی خود را دارید ، مراقب مجوزها باشید). برای این مثال ، به https://opengameart.org/content/tux-classic-hero-style بروید و تصویر-p.webp" />
  • یک لایه به عنوان یک شیء جدید از کلاس ScrollableLayer ایجاد کنید. سپس ، Sprite را به عنوان یک شی Sprite ایجاد کرده و موقعیت آن را روی (8 ، 250) تنظیم کنید. برای مرجع ، نقطه (0 ، 0) در گوشه پایین سمت چپ است. این مقدار بسیار بالا است ، اما مطمئن می شود که پنگوئن در یخ گیر نمی کند.
  • اسپریت را به لایه اسپریت اضافه کنید.
  • یک صحنه جدید از لایه Sprite ایجاد کرده و آن را اجرا کنید.
  • def startGame (): figLayer = ScrollableLayer () fig = Sprite ('pingu.png') fig.position = (75، 100) figLayer.add (fig) # gameSc = Scene (figLayer) Director.run (gameSc)

  • کد را اجرا کنید. بعد از کلیک باید یک تصویر کوچک پنگوئن (یا هر چیزی که کشیده اید) را در پس زمینه سیاه مشاهده کنید شروع بازی.
5692759 23
5692759 23

مرحله 9. چشم انداز خود را رویایی کنید

در بیشتر بازی ها ، اسپریت های شما نباید فقط در خلأ شناور باشند. آنها در واقع باید روی سطحی بایستند و چیزی در اطرافشان باشد. در بازی های دو بعدی ، این کار اغلب با مجموعه کاشی و نقشه کاشی انجام می شود. مجموعه کاشی اساساً می گوید که چه نوع مربع های سطحی و مربع های زمینه وجود دارد و چگونه به نظر می رسند.

  • مجموعه کاشی ایجاد کنید.کاشی مجموعه برای این بازی بسیار اساسی خواهد بود: یک کاشی برای یخ و یک کاشی برای آسمان. کاشی یخ استفاده شده در این مثال از اینجا ، تحت CC-BY-SA 3.0 است.
  • ایجاد یک تصویر مجموعه کاشی. این تصویری از همه کاشی ها است که باید همه یک اندازه باشند (در صورت نبودن آنها را ویرایش کنید) و اندازه ای را که می خواهید در بازی مشاهده کنید ، در کنار یکدیگر داشته باشید. تصویر خود را به عنوان icyTiles-p.webp" />
  • توضیحات مجموعه کاشی را ایجاد کنید. این یک فایل XML است. فایل XML حاوی اطلاعاتی در مورد اندازه کاشی ها در تصویر مجموعه کاشی است ، از کدام تصویر استفاده کنید و کجا کاشی را در آنجا پیدا کنید. یک فایل XML با نام icyTiles.xml با کد زیر ایجاد کنید:

         
    
5692759 24
5692759 24

مرحله 10. یک نقشه کاشی برای چشم انداز خود تهیه کنید

نقشه کاشی نقشه ای است که مشخص می کند کدام کاشی در کدام موقعیت در سطح شما قرار دارد. در مثال ، شما باید یک تابع برای ایجاد نقشه های کاشی تعریف کنید زیرا طراحی نقشه های کاشی با دست بسیار خسته کننده است. یک بازی پیشرفته تر معمولاً دارای نوعی ویرایشگر سطح است ، اما برای آشنایی با توسعه بازی دو بعدی ، یک الگوریتم می تواند سطوح مناسبی را ارائه دهد.

  • پیدا کنید که چند سطر و ستون مورد نیاز است. برای این منظور ، اندازه صفحه را بر اندازه کاشی به صورت افقی (ستون) و عمودی (ردیف) تقسیم کنید. گرد کردن عدد به بالا ؛ برای این کار به یک تابع از ماژول ریاضی نیاز دارید ، بنابراین از سقف واردات ریاضی به واردات در بالای کد خود اضافه کنید.
  • یک فایل برای نوشتن باز کنید. با این کار همه محتویات قبلی فایل پاک می شود ، بنابراین نامی را انتخاب کنید که هنوز هیچ فایلی در فهرست موجود نیست ، مانند levelMap.xml.
  • برچسب های اولیه را در فایل بنویسید.
  • مطابق الگوریتم ، یک نقشه کاشی ایجاد کنید. شما از کد موجود در کد زیر استفاده می کنید ، یا می توانید به تنهایی یکی را تهیه کنید. اطمینان حاصل کنید که تابع randint را از ماژول تصادفی وارد کنید: برای کار کد زیر لازم است ، و هر چیزی که به آن برسید احتمالاً به اعداد صحیح تصادفی نیز نیاز دارد. همچنین ، مطمئن شوید که کاشی های آسمانی و کاشی های یخ را در لایه های مختلف قرار دهید: یخ جامد است ، آسمان نیست.
  • تگ های پایانی را در فایل بنویسید و فایل را ببندید.
  • def generateTilemap (): colAmount = سقف (800 /16) * 3 # (عرض صفحه / اندازه کاشی) * 3 rowAmount = سقف (600 /16) # ارتفاع صفحه / اندازه کاشی tileFile = open ("levelMap.xml" ، " w ") tileFile.write ('\ n / n / n') iceHeight = randint (1، 10) for i in range (0، colAmount): tileFile.write ('') makeHole = False if randint (0، 50) == 10 و i! = 0: # اجازه ایجاد حفره در spawnpoint makeHole = برای j در محدوده (0، rowAmount): if makeHole: tileFile.write ('\ n') else: if j <= iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5، iceHeight+5) if iceHeight <0: # کاشی ها را از یخ بسیار پایین برداریدHeight = randint (1 ، 5) if iceHeight> rowAmount: # محدود کردن کاشی ها از یخ زیاد بالا ('\ n / n') برای i در محدوده (0 ، colAmount): tileFile.write ('') برای j در محدوده (0، rowAmount): tileFile.write ('\ n') tileFile.write ('\ n ') tileFile.write (' / n / n ') tileFile.close ()

5692759 25
5692759 25

مرحله 11. نمایش نقشه کاشی

همه چیز را از cocos.tiles وارد کنید و سپس برای آن وارد تابع startGame شوید.

  • در ابتدای عملکرد startGame خود ، با استفاده از تابعی که برای آن تعریف کرده اید ، نقشه کاشی ایجاد کنید.
  • یک مدیر پیمایش جدید ایجاد کنید. این کار را مستقیماً زیر خطی که اسپریت را به لایه آن اضافه می کنید ، انجام دهید.
  • یک لایه جدید حاوی کاشی ها ایجاد کنید ، که از روی نقشه کاشی levelMap.xml بارگیری می شود که عملکرد شما ایجاد می کند.
  • لایه غیر جامد ، لایه جامد و لایه Sprite را دقیقاً به این ترتیب به مدیر پیمایش اضافه کنید. در صورت تمایل می توانید موقعیت z را اضافه کنید.
  • به جای ایجاد صحنه از لایه Sprite ، آن را از مدیر پیمایش ایجاد کنید.
  • تابع startGame شما باید به این شکل باشد:

    def startGame (): generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8، 500) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # scrMang = ScrollingManager () scrMang.add (nsoliTiles، z = -1) scrMang.add (solidTiles، z = 0) scrMang.add (figLayer، z = 1) # gameSc = Scene (scrMang) Director.run (gameSc)

5692759 26
5692759 26

مرحله 12. کد خود را آزمایش کنید

شما باید کد خود را اغلب آزمایش کنید تا مطمئن شوید که ویژگی های جدیدی که پیاده کرده اید واقعاً کار می کند.

کد موجود در مثال اکنون باید چشم انداز یخی پشت پنگوئن را نشان دهد. اگر به نظر می رسد که پنگوئن در حال حرکت بر فراز یخ است ، شما هیچ اشتباهی نکرده اید و در مرحله بعدی این مشکل برطرف می شود

5692759 27
5692759 27

مرحله 13. کنترل ها را اضافه کنید

بازیکن روشهای بیشتری برای تعامل با برنامه در یک بازی دو بعدی نسبت به یک بازی مبتنی بر متن دارد. یک مورد رایج شامل حرکت دادن شکل آنها هنگام فشار دادن کلید صحیح است.

  • همه چیز را از cocos.mapcolliders و از cocos.actions وارد کنید. همچنین کلید را از pyglet.window وارد کنید.
  • "اعلام" برخی از متغیرهای جهانی. متغیرهای جهانی بین توابع تقسیم می شوند. شما واقعاً نمی توانید متغیرها را در پایتون اعلام کنید ، اما قبل از استفاده باید بگویید که یک متغیر سراسری در کد اصلی وجود دارد. شما می توانید 0 را به عنوان مقدار تعیین کنید زیرا یک تابع بعداً مقدار صحیح را تخصیص می دهد. بنابراین عبارات زیر را وارد کنید:

    # "اعلام" متغیرهای جهانی صفحه کلید = 0 scrMang = 0

  • عملکرد startGame خود را تنظیم کنید:

    • بگویید که از متغیرهای جهانی صفحه کلید و scrMang استفاده می کنید. این کار را با نوشتن صفحه کلید جهانی ، scrMang در بالای عملکرد انجام دهید.
    • پنجره را مجبور کنید به رویدادهای صفحه کلید گوش دهد.
    • به شکل بگویید که بر اساس PlatformerController عمل کند. شما به زودی آن PlatformerController را پیاده سازی می کنید.
    • برای برخورد برخورد بین کاشی های جامد و شکل ، یک برخورد کننده نقشه ایجاد کنید.

    def startGame (): صفحه کلید جهانی ، scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8، 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml ') solidTiles = tileLayer [' solid '] nsoliTiles = tileLayer [' not_solid '] # keyboard = key. KeyStateHandler () Director.window.push_handlers (keyboard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider_ veumpity_on = 'slide') fig.collision_handler = make_collision_handler (mapcollider، solidTiles) # scrMang = ScrollingManager () scrMang.add (nsoliTiles، z = -1) scrMang.add (solidTiles، z = 0) scrMang.add (figLayer، z = 1) # gameSc = Scene (scrMang) Director.run (gameSc)

  • یک کنترلر platformer ایجاد کنید. این همان چیزی است که شکل را مطابق فشارهای کلیدی شما جابجا می کند.

    • کنترل کننده platformer را به عنوان یک زیر کلاس Action تعریف کنید.
    • سرعت حرکت ، سرعت پرش و گرانش را تعریف کنید.
    • تابع شروع را تعریف کنید. هنگامی که کنترل کننده platformer به شکل متصل است ، این عملکرد یکبار فراخوانی می شود. باید سرعت خود را در جهت x و y برابر 0 قرار دهد.
    • تابع گام را تعریف کنید. تا صحنه در حال اجرا باشد تکرار می شود.
    • به تابع step بگویید که از متغیرهای جهانی صفحه کلید و scrMang استفاده کند.
    • بدست آورید و سرعت را تغییر دهید. سرعت x و y را در متغیرهای جداگانه ذخیره کنید. سرعت x را روی 1 یا -1 (بسته به فشار دادن کلید چپ یا راست) با سرعت حرکت ضرب کنید. گرانش را به سرعت y اضافه کنید. آن را با زمان خرابی ضرب کنید تا در دستگاه های کندتر به همان شیوه کار کند. اگر کلید فاصله فشار داده شده و شکل روی زمین ایستاده است ، با تغییر سرعت y به سرعت پرش ، جهش کنید.
    • محاسبه کنید که شکل باید کجا حرکت کند. سپس اجازه دهید کنترل کننده برخورد آن موقعیت را در داخل کاشی جامد تنظیم کند. در نهایت ، شکل را به موقعیت تنظیم شده جدید منتقل کنید.
    • تمرکز مدیر پیمایش را روی شکل تنظیم کنید. این باعث می شود که دوربین هنگام حرکت تصویر به شکل معقولی حرکت کند.

    class PlatformerController (Action): صفحه کلید جهانی ، scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 شروع شروع (خود): self.target.velocity = (0 ، 0) def def (self، dt): صفحه کلید جهانی ، scroller if dt> 0.1: # هنگام خرابی به بازگشت بزرگ vx هیچ کاری انجام ندهید ، vy = self.target.velocity vx = (صفحه کلید [key. RIGHT] - صفحه کلید [key. LEFT]) * self. MOVE_SPEED vy + = self. GRAVITY * dt if self.on_ground و صفحه کلید [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y += dy self.target.velocity = self.target.collision_handler (last، new، vx، vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (*new.center)

5692759 28
5692759 28

مرحله 14. کد خود را آزمایش کنید

اگر از مثال پیروی کردید ، اکنون باید بتوانید پنگوئن را با کلیدهای جهت دار حرکت دهید و با فشار دادن نوار فاصله پرش کنید. همچنین ، پنگوئن اکنون باید بجای معلق ماندن بر روی زمین به زمین بیفتد.

5692759 29
5692759 29

مرحله 15. یک پایان برای بازی ایجاد کنید

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

  • در داخل کنترل کننده platformer ، پس از تنظیم فوکوس ، موقعیت x و y شکل را بدست آورید. اگر موقعیت y کمتر از 0 باشد ، تابع finishGame () (بعداً آن را خواهید نوشت) را با "Game Over" به عنوان آرگومان فراخوانی کنید. اگر موقعیت x بزرگتر از اندازه صفحه نمایش ضربدر 3 باشد (قبلاً آن را به عنوان اندازه سطح تنظیم کرده بودید).

    posX، posY = self.target.position if posY <0: finishGame ("Game Over") در صورت بازگشت posX> 800*3: # اندازه سطح پایان بازی ("Level Completed") بازگشت

  • منوی کلاس را تعریف کنید. باید مانند کلاس منوی اصلی باشد که قبلاً تعریف کرده اید ، اما به جای داشتن یک رشته خالی به عنوان عنوان ، باید از متنی متغیر استفاده کند که تابع _init_ آن را به عنوان آرگومان در نظر می گیرد. برچسب های منو باید "سعی کنید دوباره" و "خروج" را برچسب گذاری کنید ، اما عملکردهایی که آنها می نامند ثابت می مانند.

    class FinishMenu (Menu): def _init _ (self، text): super (FinishMenu، self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("دوباره امتحان کنید" ، شروع بازی)) ، (MenuItem ("Quit" ، pyglet.app.exit))] self.create_menu (menuItems)

  • تابع finishGame () را تعریف کنید. باید متن را به عنوان استدلال در نظر بگیرد. باید صحنه ای از پس زمینه منوی اصلی ایجاد کند ، یک FinishMenu با آرگومان متن به این منو منتقل می شود. سپس باید این صحنه را اجرا کند.

    def finishGame (text): menuSc = Scene (MainMenuBgr ()) menuSc.add (FinishMenu (متن)) Director.run (menuSc)

5692759 30
5692759 30

مرحله 16. اعتبارات را اضافه کنید

اینجاست که برای کد فوق العاده خود اعتبار می گیرید و همچنین به هر کس دیگری که در این راه به شما کمک کرده است اعتبار می دهید. اگر از تصویری از وب سایت دیگر (با مجوز) استفاده کرده اید ، حتماً آن تصویر را به سازنده آن نسبت دهید.

  • یک فایل CREDITS ایجاد کنید و همه اعتبارات خود را در آنجا وارد کنید ، مانند این:

    پنگوئن: Kelvin Shadewing ، تحت CC0 Ice block: Michał Banas digit1024 در opengameart.org تحت CC-BY-SA 3.0

  • به کد پایتون خود بازگردید و Label را از cocos.text وارد کنید.
  • یک زیر کلاس Credits of Layer تعریف کنید. در عملکرد _init_ آن ، فایل CREDITS را بخوانید و از هر خط موجود در آن برچسب متنی در موقعیت صحیح ایجاد کنید.

    کلاس اعتبار ") برای i در محدوده (0 ، len (اعتبار)): credLabel = برچسب (creds ، font_size = 32 ، anchor_x =" left "، anchor_y =" top ") credLabel.position = 25 ، 500- (i +1)*40 self.add (credLabel)

  • به کلاس منوی اصلی خود بروید و یک آیتم منو با برچسب "اعتبار" اضافه کنید که هنگام کلیک ، تابع showCredits را فراخوانی می کند.
  • یک زیر کلاس BackToMainMenuButton از منو تعریف کنید. این منو را با یک مورد با برچسب "Back" تنظیم کنید که عملکرد showMainMenu را فراخوانی می کند. این "منو" ، که بیشتر شبیه یک دکمه است ، باید به صورت عمودی به پایین و به صورت افقی به بالا تراز شود.

    کلاس BackToMainMenuButton (منو): def _init _ (self): super (BackToMainMenuButton، self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("self") ، showMainMen ،) create_menu (menuItems)

  • تابع showCredits را تعریف کنید. باید از یک لایه MainMenuBgr و یک لایه Credits یک صحنه بسازد و آن صحنه را اجرا کند.

    def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (اعتبار ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc)

5692759 31
5692759 31

مرحله 17. کد خود را بررسی کنید

وقتی فکر می کنید کد خود را تمام کرده اید ، باید دوباره همه آن را مرور کنید. این می تواند به شما کمک کند متوجه شوید که آیا چیزی را می توان بهینه کرد ، یا آیا خطوط غیر ضروری وجود دارد که حذف آنها را فراموش کرده اید. اگر از مثال پیروی کرده اید ، کل کد شما باید به شکل زیر باشد:

    از cocos.director واردات * از cocos.menu واردات * از cocos.scene واردات * از cocos.layer واردات * از cocos.sprite واردات * از cocos.tiles واردات * از cocos.mapcolliders واردات * از cocos.actions واردات * از cocos.text import Label import pyglet.app from pyglet.window key import from ریاضی سقف واردات از واردات تصادفی randint # "اعلام" متغیرهای جهانی صفحه کلید = 0 scrMang = 0 کلاس MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr ، self)._ init _ (0، 200، 255، 255) کلاس MainMenu (منو): def _init _ (self): super (MainMenu، self)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("شروع بازی" ، startGame)) ، (MenuItem ("اعتبار" ، showCredits)) ، (MenuItem ("Quit"، pyglet.app.exit))] self.create_menu (menuItems) اعتبارات کلاس (لایه): def _init _ (self): super (اعتبار ، خود)._ init _ () credFile = open ("اعتبار" ، "r") creds = credFile.read () creds = creds.split ("\ n") برای i در محدوده (0 ، len (اعتبار)): credLabel = برچسب (اعتبار ، font_size = 32، anchor_x = "left"، anchor_y = "top") credLabel.position = 25، 500- (i+1)*40 self.add (credLabel) کلاس BackToMainMenuButton (منو): def _init _ (self): فوق العاده (BackToMainMenuButton، self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Back"، showMainMenu))] self.create_menu (menuItems) کلاس FinishMen_ self، text): super (FinishMenu، self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("دوباره امتحان کنید" ، startGame)) ، (MenuItem ("Quit" ، pyglet app.exit))] self.create_menu (menuItems) class PlatformerController (Action): صفحه کلید جهانی ، scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 شروع شروع (خود): self.target.velocity = (0 ، 0) گام def (self، dt): صفحه کلید جهانی ، پیمایش کننده اگر dt> 0.1: # در حین خرابی بازدهی زیادی انجام ندهید vx، vy = self.target.velocity vx = (صفحه کلید [key. RIGHT] - صفحه کلید [key. LEFT]) * self. MOVE_SPEED vy += self. GRAVITY * dt if self.on _ زمین و صفحه کلید [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y + = dy self.target.velocity = self.target.collision_handler (last، new، vx، vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (* new.center) posX، posY = self.target.position if posY <0: finishGame ("Game Over") بازگشت اگر posX> 800*3: # سطح اندازه پایان بازی ("Level Completed") بازگشت def finishGame (متن): menuSc = Scene (MainMenuBgr ()) menuSc.add (FinishMenu (متن)) Director.run (menuSc) def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (اعتبار ()) credSc.add (BackToMainMenuBenu)) Director.run (credSc) def generateTilemap (): colAmount = سقف (800 /16) * 3 # (عرض صفحه / اندازه کاشی) * 3 rowAmount = سقف (600 /16) # ارتفاع صفحه / اندازه کاشی کاشی فایل = باز ("levelMap.xml"، "w") tileFile.write ('\ n / n / n') iceHeight = randint (1، 10) for i in range (0، colAmount): tileFile.write ('') makeHole = اشتباه اگر رند int (0، 50) == 10 و i! = 0: # اجازه ایجاد حفره در نقطه spawnpoint makeHole = درست برای j در محدوده (0، rowAmount): if makeHole: tileFile.write ('\ n') else: if j <= iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5، iceHeight+5) if iceHeight <0: # کاشی ها را از رفتن دور کنید کم یخ ') tileFile.write (' / n / n ') برای i در محدوده (0، colAmount): tileFile.write (' ') برای j در محدوده (0، rowAmount): tileFile.write (' / n ') tileFile.write ('\ n') tileFile.write ('\ n / n') tileFile.close () def startGame (): صفحه کلید جهانی ، scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8 ، 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # keyboard = key. KeyStateHandler () Director.window.push_handlers (صفحه کلید ard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (velocity_on_bump = 'slide') fig.collision_handler = make_collision_handler (mapcollider، solidTiles) # scrMang = ScrollingManager () scrMang.add (nsoli) add (solidTiles، z = 0) scrMang.add (figLayer، z = 1) # gameSc = Scene (scrMang) Director.run (gameSc) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) window = Director.init (caption = "IcyPlat - platformer simple" ، resizable = True) showMainMenu ()

  • این کل 168 خط است و اگر فقط کد را حساب کنید ، 152 خط است. این بسیار به نظر می رسد ، اما برای چنین بازی پیچیده ، این در واقع مقدار کمی است.
5692759 32
5692759 32

مرحله 18. تمام شد

حالا بازی را تست کنید. وقتی چیزی را برنامه ریزی می کنید ، باید بررسی کنید که آیا هر زمان که چیز جدیدی را اجرا کرده اید کار می کند یا خیر. همچنین ، ممکن است دوست داشته باشید مدتی بازی ای را که نوشته اید انجام دهید.

قسمت 3 از 3: انتشار بازی

5692759 52
5692759 52

مرحله 1. وابستگی ها را بنویسید

هر کسی که از رایانه دیگری استفاده می کند ، نرم افزار و کتابخانه مشابه شما را نصب نخواهد کرد. بنابراین ، باید مطمئن شوید که همه کسانی که بازی شما را نصب می کنند می دانند که برای اجرای آن به چه چیزی نیاز دارند. لازم نیست همه وابستگی ها و همه وابستگی ها و موارد دیگر را بنویسید ، اما حداقل باید وابستگی های بسته های خود و وابستگی های آنها را بنویسید.

5692759 53
5692759 53

مرحله 2. مطمئن شوید که مجوز استفاده از همه رسانه ها را دارید

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

  • اغلب شرایطی وجود دارد ، مانند اعتبار نویسنده یا به اشتراک گذاشتن تغییرات رسانه تحت همان مجوز. گاهی اوقات می توانید از گرافیک بدون انتساب به سازندگان تا زمانی که هزینه بازی را دریافت نکنید استفاده کنید. اگر مجبورید نویسنده را اعتبار دهید ، این کار را در مکانی قابل مشاهده ، مانند برگه "اعتبار" در بازی خود انجام دهید.
  • همچنین رسانه هایی با حق نسخه برداری ادعا می شوند و مجوز مشخص نشده است ، گاهی اوقات متنی مانند "همه حقوق محفوظ است".در این صورت ، قبل از وارد کردن آن در بازی خود ، باید از نویسنده اجازه صریح بگیرید.
  • کتابخانه ها معمولاً تحت مجوزهایی منتشر می شوند که اجازه می دهد از آنها به عنوان کتابخانه استفاده کنند. یک استثناء قابل توجه GPL بدون پیوند استثنا است: چنین مجوزی فقط اجازه می دهد تا از آن در برنامه ای با مجوزهای خاص استفاده کند. و همیشه باید حداقل نکات اساسی مجوز را بخوانید تا مطمئن شوید هر کاری که با رسانه یا کتابخانه انجام می دهید مجاز است.

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

5692759 54
5692759 54

مرحله 3. در مورد شرایطی که می خواهید بازی خود را در آن منتشر کنید تصمیم بگیرید

آیا بازی خود را می فروشید؟ آیا می خواهید به دیگران اجازه دهید از تصاویر و ایده های شما استفاده کنند؟ در حالی که باید مراقب رسانه هایی باشید که در پروژه خود استفاده می کنید ، معمولاً می توانید تصمیم بگیرید که چگونه می خواهید به دیگران اجازه دهید از بازی شما استفاده کنند. برای انتشار بازی خود در مالکیت عمومی می توانید از مجوز Creative Commons CC0 استفاده کنید. برای اجازه توزیع و اصلاح تحت برخی شرایط در حالی که برخی حقوق را حفظ می کنید ، مجوز عمومی Gnu General (GPL) یا مجوز توزیع نرم افزار برکلی (BSD) را امتحان کنید. یا ، می توانید نرم افزار خود را اختصاصی کنید ، به این معنی که هیچ کس اجازه ندارد آن را بدون اجازه شما توزیع یا تغییر دهد.

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

5692759 55
5692759 55

مرحله 4. تصمیم بگیرید که چگونه می خواهید بازی خود را منتشر کنید

هر روش مزایا و معایبی دارد ، بنابراین باید خودتان تصمیم بگیرید.

  • انتشار آن در وب سایت:

    اگر وب سایت دارید ، می توانید بازی خود را بارگذاری کنید تا در دسترس قرار گیرد. اطمینان حاصل کنید که دستورالعمل های روشنی در مورد نحوه نصب نرم افزار و همچنین همه وابستگی های مورد نیاز ارائه می دهید. نقطه ضعف این است که بازیکنان باید وابستگی ها را به صورت دستی نصب کنند ، که ممکن است برای برخی از افراد دشوار باشد.

  • تهیه بسته برای مدیر بسته:

    مدیران بسته های مختلفی مانند apt ، Yum و Homebrew وجود دارند که نصب برنامه را در محیط لینوکس و لینوکس برای افراد آسان می کند. همه آنها دارای فرمت های مختلف بسته هستند. خوبی بسته ها این است که آنها به طور خودکار همه وابستگی ها را نصب می کنند (اگر آنها را به درستی پیکربندی کرده اید). بنابراین بازیکن فقط باید بسته شما را نصب کند و سپس می تواند بازی را انجام دهد. مشکل این است که بسیاری از مدیران بسته های مختلف در پلتفرم های مختلف وجود دارد ، بنابراین شما مجبور خواهید بود برای تهیه بسته ها برای رایج ترین بسته ها تلاش کنید.

5692759 56
5692759 56

مرحله 5. توجه خود را به برنامه خود معطوف کنید

آپلود برنامه خود را در مخزن اصلی بسته ، مانند مواردی که Ubuntu و Debian حفظ می کنند ، در نظر بگیرید تا امکان نصب آسان فراهم شود. همچنین ، در انجمن های مناسب ارسال کنید ، مانند بخش پروژه های GameDev یا بخشی از tigSource. اما اگر اولین بازی های شما معروف نشدند ، ناامید نشوید. اگر ایده ای دارید که بسیاری آن را دوست دارند ، بازی شما می تواند شناخته شده شود.

نکات

  • صبور باشید و مایل به یادگیری باشید. برنامه نویسی گاهی اوقات خسته کننده است!
  • اگر تعجب می کنید که چگونه در بازی دیگری کاری انجام می شود و بازی منبع باز است ، می توانید به کد منبع آن نگاه کنید.
  • هنگام جستجوی رسانه ، سعی کنید محتوایی را که در حوزه عمومی است پیدا کنید. تصاویر و موسیقی "Creative Commons" یا "Public Domain" را جستجو کنید و از وب سایت هایی مانند https://opengameart.org یا https://publicdomainpictures.net استفاده کنید.
  • قطعات اصلی کد را بدون بررسی مجوز کپی نکنید. اغلب ممنوع است ، و در غیر این صورت ، معمولاً نیاز به انتساب دارد.
  • هنگام تبلیغ بازی خود ، از ارسال هرزنامه یا ارسال پست در مکان های نامناسب خودداری کنید. این به احتمال زیاد شما را از صفحه مسدود می کند ، به سادگی آزاردهنده است و به شهرت شما آسیب می رساند.

توصیه شده: