آموزش ساخت بازی پازل / قسمت اول : کارهای مقدماتی
#1
Brick 
سلام دوستان.

به این آموزش خوش اومدین.



در این سری آموزشی با هم یاد میگیریم که چطور با استفاده از کانستراکت 2 یه بازی پازل درسبک جورکردن سه تایی(Match-3) بسازیم.


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


از نمونه های معروف در این سبک میشه به Bejeweled و کندی کراش اشاره کرد.


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

درقسمت اول محیط انجام بازی رو میسازیم و بلوک ها رو وارد میکنیم.



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

سورس این قسمت هم اینجا هست.



/ تنظیمات اولیه پروژه /


1-یک پروژه جدید باز کنید (File > ProjectProperties)


2-در قسمت ProjectProperties، اندازه پنجره (WindowsSize) رو به 600 در 600 تغییر بدید.


3-قسمت Nameو Authorرو به انتخاب خودتون پر کنید که البته زیاد لازم نیست.


4-به پنل لایه ها (Layers) برید و دولایه جدید ایجاد کنید. ( حالا سه تا لایه داریم)


5- پایینترین لایه رو Background، لایه وسط رو به Blocks، و بالاترین لایه رو به GameField، تغییر نام بدید.


6-به لایوت 1 برید و یک TiledBackgroundوارد کنید.


  6-1-برای اسپرایت بکگراند ازمسیرBGImages، تصویرStandardBGTile استفاده کنید.


  6-2-به قسمت تنظیمات آبجکت برید و اسمش رو بزاریدGameBG.


  6-3-لایه آبجکت رو بزارید رویBackground.


  6-4-اندازه آبجکت رو بزارید 650 در650.



[تصویر:  Match_3_Construct_2_tutorial_p1_image001.jpg]

7-یه TieldBackgroundجدید بسازید.


  7-1-از فایل های پروژه،GameFieldImages و بعد GameFieldBorderرو انتخاب کنید.


  7-2-اسمش رو بزاریدGameFieldBorder.


  7-3-مکانش(Position) رو بزارید 9 و -12.


  7-4-اندازه اش رو بزارید 16 در 732.


  7-5-لایه اش رو به GameFieldتغییر بدید.


8-یه کپی از GameFieldBorderبگیرید.


  8-1-مکانش رو بزارید 368 و -12 .



[تصویر:  Match_3_Construct_2_tutorial_p1_image002.jpg]

9-یه اسپرایت جدید وارد کنید.


  9-1-از اسپرایتGameFieldBottom در پوشه GameFieldImagesاستفاده کنید.

  9-2-اسمش رو بزاریدGameFieldBottom.


9-3-مکانش رو بزارید 197 و 625.


9-4-سایزش رو بزارید 344 در150 .


9-5-لایه اش رو بزاریدGameField.


10-یه کپی از GameFieldBottomبگیرید.


10-1-مکانش رو بزارید 196 و -30 .


10-2- زاویه اش(Angle) رو بزارید 180 .



[تصویر:  Match_3_Construct_2_tutorial_p1_image003.jpg]

خب؛ بکگراند اصلی رو ساختیم. حالا یکم محیطو قشنگ تر کنیم.


1-یه اسپرایت جدید بسازید.


  1-1-به ColorPickerبرید و قرمز، سبز و آبی رو صفر بذارید تا مشکی بشه و Alpha(وضوح) رو بذارید 200 .


  1-2-از سطل رنگ، برای رنگ کردن مربع استفاده کنید.


  1-3-اسپرایت ادیتور رو ببندید.


  1-4-سایزش رو بزارید 359 در 570 .


  1-5-مکانش رو بزارید 195 و 294 .


  1-6-لایه اش رو بزاریدBackground.



[تصویر:  Match_3_Construct_2_tutorial_p1_image004.jpg]


خب؛ محیط رو هم بهتر کردیم. حالا وقتشه که بلووکها رو اضافه کنیم.


1-یه اسپرایت جدید بسازید.


 1-1-در اسپرایت ادیتور و در قسمتAnimationFrames کلیک راست کنید و  ImportFramesرو بزنید.


  1-2-تمام عکس های پوشه  Blockرو وارد کنید.


  1-3-فریم صفر رو که خالیه، حذف کنید.


  1-4-فریم های شما هم باید به این شکل باشه.



[تصویر:  Match_3_Construct_2_tutorial_p1_image005.jpg]


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


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



خب؛ اسپرایت بلوک رو جایی بذارید که قابل دیدن نباشه. اسمش روBlock بذارید و سایزش رو هم بذارید 40 در 40 .




/ تولید تصادفی یک ردیف بلوک /


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


برای اینکار به ایونت شیت برید و دو متغیر سراسری(GlobalVariable) بسازید.


یکی به اسم SPAWNX که مقدارش 49 باشه و تیک Constant زده شده باشه.


یکی دیگه به اسم SPAWNY که مقدارش 526 باشه و تیک Constant زده شده باشه.



[تصویر:  Match_3_Construct_2_tutorial_p1_image006.jpg]


خب؛ به یه چیز دیگه هم نیاز داریم. یه InstanceVariable هم میخوایم که نشون بده بلوکمون چه رنگیه.


یه InstanceVariable برای اسپرایت Block بسازید. اسمش رو بزارید Color و دیگه باقی تنظیمات رو کاری نداریم.




[تصویر:  Match_3_Construct_2_tutorial_p1_image007.jpg]


حالا شروع میکنیم به ساخت روند بازی؛ دراین قسمت من اکشن و ایونت هایی که باید در ایونت شیت بنویسید رو به صورت انگلیسی مینویسم.



Event:
       Condition: System > On Start of Layout
       Condition: System > For
              Name:”Y”- StartIndex:0 – EndIndex:7
       SubEvent: System > For
              Name:”X” – StartIndex:0 – EndIndex:7

ایونت رو وارد کردیم؛ حالا اکشنش :


Action: System > Create Object
       Object : Block    
       X: SPAWNX + (loopIndex (“X”) ) * (Block.Width+2)
       Y: SPAWNY – (loopIndex (“Y”) ) * (Block.Width+2)
اینم از اکشن.


[تصویر:  Match_3_Construct_2_tutorial_p1_image008.jpg]

شاید با دیدن دو فرمول بالا یکم گیج بشید؛ ولی هر دوتاشون مفهوم ساده ای دارن.


اول از همه عدد 2 رو به عرض بلوک اضافه میکنیم تا هر بلوک با بلوک همسایه 2 پیکسل فاصله داشته باشه. بعد عدد بدست اومده رو در مقدار حلقه For ضرب میکنیم و بعدش اضافش میکنیم به مکانی که X و Y شروع شدن.


در اینجا ما ازY کم کردیم چون در کانستراکت هرچی در محورyها به بالا بریم، مقدارYمنفی میشه(دقیقا برعکس ریاضی). پس با این کار هر ردیف بلوکی که اضافه میشه، میره و دقیقا بالای ردیف پایینترش قرار میگیره.




اگر بازی رو اجرا کنیم، رنگ بلوکها چند بار تغییر میکنه و بعد ثابت میشه.


پس بیاید با هم رنگ بلوکها رو بصورت اتفاقی در شروع بازی تغییر بدیم.


برای این کار هم باید دو کار انجام بدیم.


اولین کاربرای تغییر رنگ استفاده میشه.


برای انجام این کار یه اکشن زیر اکشن های قبلی میسازیم :




Action : Block > SetValue
              Color : floor(Random(1,7))
[تصویر:  Match_3_Construct_2_tutorial_p1_image009.jpg]
این کار باعث میشه که مقدار متغیر
Color بصورت تصادفی بین 1 تا 6 انتخاب بشه.


دومین کارمون اینه که چک کنیم ببینیم بلوکی در گروه هم رنگ قرار گرفته و به اصطلاح مچ شده یا نه.


پس یه InstanceVariable دیگه برای آبجکت Block میسازیم. اسمش رو میزاریم IsMatched. نوعش رو میزاریم Boolean و IntialValue یا همون مقدار پیشفرض رو میزاریم False.




[تصویر:  Match_3_Construct_2_tutorial_p1_image010.jpg]


حالا یه ایونت جدید میسازیم:



Event : System > Every Tick
              Action : Block > SetFrame
                     Value : (Block.Color – 1 )* 3 + 1

این فرمول اول یکی از متغیر بلوک کم میکنه. بعد عدد بدست اومده رو ضربدر 3 میکنه و در آخر یکی به اون اضافه میکنه.


شاید با خودتون بگید که چرا ما همچین کاری  کردیم؛ با یه مثال توضیح میدم.


فرض کنید متغیر رنگ ما بصورت تصادفی عدد 4 رو گرفت. وقتی وارد این سیستم میشه، یکی ازش کم میشه که میشه 3. بعد ضربدر 3 میشه که میشه 9 و بعد یکی بهش اضافه میشه 10. این یعنی که اگر عدد 4 انتخاب شد، فریم انیمیشن میشه 10 و به خاطر این ضربدر 3 کردیم که اگه یادتون باشه هر بلوک از سه تا فریم تشکیل میشد( مثلا موقعی که انتخاب میشد، یا زمانی که در یه گروه همرنگ قرار میگرفت).


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



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



[تصویر:  Match_3_end_of_part_1.png]


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



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


پیشنهاد و نظرات رو هم در همین تاپیک بگید.



موفق باشید و تا قسمت بعدی آموزش خدانگهدار.



منبع : tutsplus




! KEEP CALM AND LOVE CONSTRUCT 2 
آرام باش و به کانستراکت 2 عشق بورز !
  پاسخ


#2
ببخشید تاپیکو بالا آوردم کسی قسمتای بعد رو نداره یا سورس کاملو
  پاسخ


 سپاس شده توسط: abiate1365
#3
سلام
نه نداره.
  پاسخ


 سپاس شده توسط: abiate1365 ، omidamitis
#4
https://tutsplus.com/tutorials/search/construct+2

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



  پاسخ


 سپاس شده توسط: shazde ، omidamitis


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 127 82,182 1402/8/24، 09:00 عصر
آخرین ارسال: mehdiosw
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 19,756 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,423 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 7,868 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100
  رفع مشکل خروجی فونگپ (: M.gh 11 7,955 1400/4/10، 02:17 صبح
آخرین ارسال: oak

پرش به انجمن: