تولید اعداد رندم و غیرتکراری

  • 0 favourites

Tutorial written by kittiewan in English

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

برای این پروژه به کانستراکت 2 ورژن 87 یا جدیدتر نیاز است. نسخه ی رایگان آن کافی ست.

می توانید پروژه را از لینک زیر دانلود کنید:

http://dl.dropbox.com/u/57899112/RandomNos.capx

هدف این آموزش قرار دادن شش عدد صحیح، از بین صفر و پانزده، در یک آرایه بدون عدد تکراری می باشد.

(برای خوانش درست این مطلب در زبان فارسی، بسیاری از کلمات انگلیسی به خط بعدی منتقل شده اند)

1- پروژه ای جدید بسازید و آنرا نامگذاری کنید.

RandomNos

2- سه آبجکت وارد نمایید: دو تا از آنها متن و دیگری آرایه باشد. می توانید ویژگی آنها را به شکل زیر تغییر دهید:

Name: txtTries

Plugin: Text

Position: 120,64

Size: 200,30

Name: txtValues

Plugin: Text

Position: 124,126

Size: 412,206

Name: Array

Plugin: Array

Width: 6

هنگامی که آبجکت ها را قرار دهید چنین چیزی خواهید داشت:

3- به

event sheet

بروید و

On start of layout

را اضافه نمایید. سپس روی آن کلیک راست نموده و

Add a blank sub-event

را به آن اضافه کنید. چنین چیزی خواهید داشت

4- blank sub-event

را کلیک راست نمایید تا یک متغیر محلی اضافه نمایید

(Add local variable).

شما همچنین می توانید متغیر فراگیری اضافه نمایید و. آن را کلیک کرده، بکشید و در مکانی که می خواهید قرار دهید. به این روش متغیر به صورت خود به خود محلی می شود

5- متغیرهای محلی در میان خطوط و نه در بالای صفحه جای می گیرند.

متغیر محلی ساخته شده را نامگذاری نمایید. دو متغیر محلی دیگر نیز با نام هایی دیگر در همان مکان ایجاد نمایید. چنین چیزی باید داشته باشد:

randomNumber و i و tries

6- با دابل کلیک یک حلقه ایجاد نمایید

sub-event --> While

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

7- حالا به حلقه چند اکشن اضافه می کنیم.

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

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

اکشن سوم میزان متغیر را نمایش می دهد.

8- روی حلقه کلیک راست نمایید و یک

sub-event

اضافه کنید که در آن آرایه را بررسی کند:

Array Contains randomNumber.

روی آن کلیک راست نمایید و آنرا معکوس کنید. زیراکه برای ما مهم است که متغیر هنوز جزئی از آرایه نباشد.

(Invert)

9-در صورتی که اکشنی به این زیرمجموعه اضافه شود، تنها در صورتی که متغیر تکراری نباشد این اکشن اجرا می شود. چرا که اعداد تکراری درون آرایه قرار دارند و چک می شوند.

اول: متغیر رندم ساخته شده را در ردیف قرار دهید: i

دوم: شماره ردیف و مقدار عدد را در نوشته قرار دهید:

textValues و i

سوم: به شمارنده ردیف یک واحد اضافه کنید: i + 1

نکته: تنها در صورتی که عدد رندم تکراری نباشد به شمارنده اضافه می شود و در غیر اینصورت دوباره محاسبات برای تعیین عدد انجام می شود.

10- سرانجام پروژه را ذخیره و اجرا نمایید.نتایجی همانند تصویر زیر را خواهید دید. در تصویر زیر یازده تلاش برای تولید شش عدد انجام گرفته است. همچنین هیچ عدد تکراری مشاهده نمی شود.

این همه ش بود!

نکته:

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

2- اگر می خواهید این پروژه را کوچکتر و محدودتر نمایید می توانید متن ها را حذف نمایید. تصویر زیر:

دقت نمایید که بدون وجود متن ها نتایج قابل مشاهده نخواهند بود.

3- این آموزش برای تولید اعداد رندم در یک لحظه (لحظه شروع) می باشد. اگر می خواهید آن ها را در زمان های مختلف و یا بر حسب تقاضا تولید نمایید، روش همچنان همین است ولی به صورت جزئی تغییر می کند. برای تولید اعداد پس از کلیک یا لمس صفحه به پروژه بعدی مراجعه نمایید. در این پروژه با کم کردن بازه ی انتخاب اعداد رندم، تعداد تلاش ها را کم می کند.

RandomNosPush.capx

  • 0 Comments

  • Order by
Want to leave a comment? Login or Register an account!