Fa نوشته ی تصادفی

newman_hf

Member
با سلام و عرض خسته نباشی به تمام اساتید بزرگ مخصوصا آقای Silvercolor و Loo30fer که من ازادت خاصی بهشون دارم سوالمو شروع می کنم.
من یه پروژه ساختم که می خوام تو کله صفحات هر 5 دقیقه یه متنی اون پایین صفحه Show بشه مثلا من 2000 جک رو تو یک چیری که خودمم در مورد این پیز نظر خاصی ندارم بریزم. و بعد به طور تصادفی هر 5 دقیقه یکیش Show بشه و یک صفحه سرگرمی دارم که تو اون بهد از زدن دکمه <جک> یک جک از اون 2000 جک شانسی انتخاب بشه خودم نظرم در مورد دستور For و Next بود که خودم یه ذره با هاش آشنائم ولی خیلی کم.
میخواستم لطفا یه نمونه برا بزارید و نمی خوام به ترتیب باشه یعنی توی صفحه ی سرگرمی اگر روی دکمه جک کلیک کنم دوباره جک 1 نیاد و بعد از تکرار جک 2 مثلا جک شماره 1346 بیاد و بعدش 1390 بعدی 1400 که کسی که می خواد کلیک کنه اگه 140 تا جک خونده دفعه ی بعد 140 بار کلیک نکنه تا یک جک جدید براش بیاد و خودمم فکر می کنم اگه بخوایم از فرمان Save Variable و Load Variable استفاده کنیم مقرون به صرفه نباشه.
جمع بندی : 1_در تمام صفحات مثلا هر 2 دقیقه یک بار یک جک Random انتخاب بشه
2_در صفحه سرگرمی ها ، وقتی روی دکمه ای کلیک میشه یک جک بیاد که هرگز قدیمی نباشه(تو برنامه نشون داده نشه)
ممنون از همگی فقط یه ذره سریع تر ممنون از همه :rose:
نکته لطفا اگه زحمت کشیدید و نمونه ای ساختید توی Sourcesh بنویسید که مثلا اینجا تعداد کل جک ها رو بنویسم . و خواهشا من با سرور دانلود مجید آنلاین مشکل دارم جای دیگه آپلود کنید ، دوباره ممنون.
:oops:
 

Amit13

Well-Known Member
ميتونيد از يه تابع مپ كه وروديش تاريخ و ساعت و خروجيش شماره ي جوكتون باشه،استفاده كنيد
مثلا:

کد:
key=(day+hour*3600+minute*60+second+counter)  mod  numberYrJoke
counter++
key همون شماره كليدتون و numberYrJoke تعداد كل جوكها.
به اضافه ي يه counter كردم شايد كاربر تو يك ثانيه دوبار كليد جوك رو بزنه.
دوستان به نظرتون عمليه؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
با کمک تابع RND میتونید یک عدد تصادفی ایجاد کنید.
اول تعداد خط های موجود در فایل متنی رو میخونید توسط تابع NOL
بعد یک عدد تصدفی بین 1 و تعداد خطوط ایجاد میکنید
بعد خط موردنظر (همون عدد تصادفی) رو میخونید و در شئ متنی نمایشش میدید.
این اسکریپتی که نوشتید رو با دستور ScriptTmer هر چند ثانیه که میخاید اجراش کنید.

برای اینکه در تمام صفحات نشون داده بشه، این اسکریپت و شئ متنی رو در Master Top Layer قرار بدید.

لینک نمونه در یک سرور دیگه:
[nolink]http://media.majidonline.com/forum/Nevercom/MMBForum/Random.rar[/nolink]
 

پیوست ها

  • Random.rar
    1 کیلوبایت · بازدیدها: 68

Amit13

Well-Known Member
با کمک تابع rnd میتونید یک عدد تصادفی ایجاد کنید.
اول تعداد خط های موجود در فایل متنی رو میخونید توسط تابع nol
بعد یک عدد تصدفی بین 1 و تعداد خطوط ایجاد میکنید
بعد خط موردنظر (همون عدد تصادفی) رو میخونید و در شئ متنی نمایشش میدید.
این اسکریپتی که نوشتید رو با دستور scripttmer هر چند ثانیه که میخاید اجراش کنید.

برای اینکه در تمام صفحات نشون داده بشه، این اسکریپت و شئ متنی رو در master top layer قرار بدید.

لینک نمونه در یک سرور دیگه:
[nolink]http://media.majidonline.com/forum/nevercom/mmbforum/random.rar[/nolink]

تابع rnd تكرار داره. چجوري ميشه ذخيره كرد كه عدد به دست اومده رو ديگه تكرار نكن؟؟؟
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
تابع rnd تكرار داره. چجوري ميشه ذخيره كرد كه عدد به دست اومده رو ديگه تكرار نكن؟؟؟
با اجازه از جناب Nevercom
چون تابع RND وظیفشون برگردوندن عدد به صورت تصادفی هست و چیزی به عنوان جلوگیری از تکرار عدد براش در نظر گرفته نشده احتمال اینکه عدد تکراری برگردونه زیاده ولی شما میتونید چندین روش رو به کار بگیرین مثلا یک نمونه که من برای یکی از دوستان درست کرده بودم که عدد رو که رندوم برمیگردونه رو تو متغیر ریخته بودم که وقتی رندوم عددی رو برمیگردونه یا تابع POS جستجو میکردم ببینم این عدد وجود داره یا نه که اگه وجود نداشت یعنی تابحال این عدد تو رندوم برگردونده نشده که البته این روش برای مواقعی که میخواین پروژتون تا وقتی اجراست تکراری نداشته باشه وگرنه اگه برنامه مجددا اجرا بشه دوباره احتمال اینکه تکرار داشته باشه وجود داره مگه اینکه بیایم یک لیست از اعدادی که در نظر داریم رو توی یک فایل ذخیره کنیم که البته هر عدد توی یک لاین و عددی رو که رندوم برمیگردونه عدد لاین در نظر بگیریم و اون عدد رو از لاین بگیریم و بعد حذف کنیم اینطوری احتمال تکراری بودن وجود نداره البته بهترین روش استفاده از بانک اطلاعاتی هست و با یکم تغییر در نحوه کار میشه از رجیستری هم برای ثبت اطلاعات استفاده کرد.
کلا در نظر دارم یک همچین پلاگینی برای رندوم بسازم فکر میکنم کارآمد باشه.
 

mbsa

Active Member
سلام
با اجازه از اساتید
من خودم از این روش استفاده می کنم که مشابه روش جناب لوسیفر است :
کل جوک ها را با فرمان listboxadditem وارد لیست کنید .
حالا با تابع rnd یه عدد تصادفی بسازید که حداکثر مقدارش ، تعداد جوک ها باشه . بعد از اون عدد انتخاب شده را به عنوان شماره ی آیتم در لیست جوک ها به حاسب می اریم و دستوری اضافه میکنیم که بعد از انتخاب آیتم ، اون را نمایش و حذف کنه .اینطوری احتمال تکرار صفر میشه.
موفق باشید
 

newman_hf

Member
با کمک تابع RND میتونید یک عدد تصادفی ایجاد کنید.
اول تعداد خط های موجود در فایل متنی رو میخونید توسط تابع NOL
بعد یک عدد تصدفی بین 1 و تعداد خطوط ایجاد میکنید
بعد خط موردنظر (همون عدد تصادفی) رو میخونید و در شئ متنی نمایشش میدید.
این اسکریپتی که نوشتید رو با دستور ScriptTmer هر چند ثانیه که میخاید اجراش کنید.

برای اینکه در تمام صفحات نشون داده بشه، این اسکریپت و شئ متنی رو در Master Top Layer قرار بدید.

لینک نمونه در یک سرور دیگه:
[nolink]http://media.majidonline.com/forum/Nevercom/MMBForum/Random.rar[/nolink]
خیلی واقعا ممنون ولی هنوز یه پیزی واسه من مفهوم نیست Script مستر تاپ لایر شما این بود
**// Path of the Source File

File$ =
'<Embedded>\Text.txt'
**// Number of Lines of the file
NumOfLines =


NOL(File$)
**// Generate a Random Number between 1 and Number of Lines
RandomNum =


RND(NumOfLines-1)+1
**// Read a Random Line of the File
Line$ =


StrFromFile(File$,RandomNum,1)
**// Load the line into Text Object
LoadText


("Master Layer::Text","Line$")
**// Run this Script every 5 minute (Time as Miliseconds; Each Second = 1000 ms; 5 min = 300000 ms)
ScriptTimer


("Master Layer::Script","300000")
]
من مشکلم اینه که دز قسمت **// Number of Lines of the file من شماره خط ها رو کجا بنویسم ؟ ؟
بعد من می خوام که دیگه جکی که نشون داد دیگه هرگز اونو دوباره نشون نده ، یک دکمه هم ماله Reset همین قضیه باشه ممنون میشم خیلی ممنون
اگر مثال رو تو یک سرور دیگه up کنید خیلی بهتره ممنون:rose:
از دوستان دیگه که نظر دادن ممنون فقط اگه میشه یک مثال برای من بزارید :oops:
 
آخرین ویرایش:

newman_hf

Member
سلام
با اجازه از اساتید
من خودم از این روش استفاده می کنم که مشابه روش جناب لوسیفر است :
کل جوک ها را با فرمان listboxadditem وارد لیست کنید .
حالا با تابع rnd یه عدد تصادفی بسازید که حداکثر مقدارش ، تعداد جوک ها باشه . بعد از اون عدد انتخاب شده را به عنوان شماره ی آیتم در لیست جوک ها به حاسب می اریم و دستوری اضافه میکنیم که بعد از انتخاب آیتم ، اون را نمایش و حذف کنه .اینطوری احتمال تکرار صفر میشه.
موفق باشید
بله از این روش هم میشه استفاده کرد ولی من می خوام یک دکمه ای باشه که Reset کنه که دوباره باید از همون listboxadditem استفاده کنیم و اینکه می خوام اگه به اینترنت وصل شدن با کلیک بر روی دکمه ی Update از روی اینترنت فایل ... ر. دانلود کنه (Automatic) و بعد سپس به لیست جک ها بیاد .
اگه مثالتونو up کنید ممنون میشم
در جواب آقای Loo30fer اگه بشه این پلاگینو بسازید خیلی عالی میشه ، فکر کنم خیلی در خواست باشه ...
اگه پلاگین هم فعلا نمی خواید بسازید مثالتونو up کنید... ممنون
 

loo30fer

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

لینک دانلود از سرور دیگر
 

پیوست ها

  • SampleRandom.rar
    769 بایت · بازدیدها: 52

Amit13

Well-Known Member
با اجازه از جناب Nevercom
...........................البته بهترین روش استفاده از بانک اطلاعاتی هست و ............

آره استفاده از sql هم كار باحاليه : مثلا ديتابيستون دوتا فيلد داشته باشه يكي string براي جك ها و يكي boolean براي حذف منطقي جك باشه.


attachment.php


ابتدا همه ي ركوردها ،فيلد لاجيكشون صفر باشه......
حال تابع RND رو فعال ميكني .خروجيش متناظر با يك ركورده. فيلد logic رو چك ميكنيم اگه صفر بود كه جك رو نمايش ميديم و فيلد logic اش رو برابر 1 ميكنه ، وگرنه (اگر از قبل يك بود)تابع RND رو دوباره فعال ميكنيم و همينجور اين روند رو ادامه ميده تا به صفر برسه.

اين جوري هر دو مشكلتون حل ميشه.منظورم مشكل اين بود:

2000 جک رو تو یک چیری که خودمم در مورد این پیز نظر خاصی ندارم بریزم.
 

پیوست ها

  • fileds-01-01.jpg
    fileds-01-01.jpg
    12.8 کیلوبایت · بازدیدها: 91

newman_hf

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

لینک دانلود از سرور دیگر

خیلی ممنون ، خیلی مثال عالی بود بود واقعا بسار خوب بود فقط میخواستم بدونم که چجوری میشه Reset کرد؟؟؟هر موقع باد بیرون ریست میشه ؟؟؟ من نمیخوام اینجوری بشه لطفا یک مثال در مورد این بزارید....و اینکه آیا میشه از تو یک چیزی از تو اینترنت آپلود بشه ؟؟؟ یا اینکه مثلا یک Page کلا زمانی که به اینترنت متصل هستیم باز بشه ؟؟؟ یا یک Page یک جوری از تو اینترنت باز بشه ؟ یعنی مثلا من یه جوری تو اینترنت یک Page آپ کنم که اون Page از اونجا آپ بشه ببخشید که این همه سوال پرسیدم من خوندم قوانین انجمن رو خوندم ولی اگه میخواستم برای هر کدوم یه تاپیک بزنام 7 8 تاپیک باید میزدم که مطالب مفیده دیگه رو بندازم صفحه دوم ببخشید...از همه هم ممنون که در مورد سوال من نظر دادن
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
خیلی ممنون ، خیلی مثال عالی بود بود واقعا بسار خوب بود فقط میخواستم بدونم که چجوری میشه Reset کرد؟؟؟هر موقع باد بیرون ریست میشه ؟؟؟ من نمیخوام اینجوری بشه لطفا یک مثال در مورد این بزارید....و اینکه آیا میشه از تو یک چیزی از تو اینترنت آپلود بشه ؟؟؟ یا اینکه مثلا یک Page کلا زمانی که به اینترنت متصل هستیم باز بشه ؟؟؟ یا یک Page یک جوری از تو اینترنت باز بشه ؟ یعنی مثلا من یه جوری تو اینترنت یک Page آپ کنم که اون Page از اونجا آپ بشه ببخشید که این همه سوال پرسیدم من خوندم قوانین انجمن رو خوندم ولی اگه میخواستم برای هر کدوم یه تاپیک بزنام 7 8 تاپیک باید میزدم که مطالب مفیده دیگه رو بندازم صفحه دوم ببخشید...از همه هم ممنون که در مورد سوال من نظر دادن
نه میتونید تو قسمتی که پیغام Empty Random رو تعریف کردم این کد رو قرار بدین :
کد:
Path$ = 'G:\File.txt'
Save = StrToFile(Path$,'',FALSE,FALSE)
For i=1 To 1000
  Text$=CHAR(i)
  Save = StrToFile(Path$,Text$,TRUE,TRUE)
  Refresh("")
Next i
فقط یک نکته اینکه وقتی نمونه ای رو که براتون پیوست کردم رو تست کردم بعد از چندین دفعه تکرار عمل رندوم بعد از متن بعضی لاینها عدد 0123456789 میچسبه که البته من وقتی به کدم نگاه میکنم اشکالی رو نمیبینم و نمیتونم در پی مشکل باشم اگه تونستید خودتون به دنبال مشکل باشید.

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

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
در مورد تکراری نبودن نیاز نیست اینهمه از ابزارهای مختلف استفاده کنید، کافیه هر بار که عددی تولید میشه اونو در یک متغیر (آرایه) بریزید و دفعه ی بعد که عدد رندوم ایجاد شد، چک کنید که در آرایه موجود نباشه، که اگر موجود باشه یک عدد جدید تولید کنه و باز به همین شکل
جناب loo30fer هم اشاره کردن به این موضوع، فقط اینکه فرمودن که از تابع POS استفاده بشه میتونه ناکارآمد باشه، چون اگه مثلاً عدد تولید شده عدد 3 باشه و ما قبلاً عدد 13 رو تولید کرده باشیم، با استفاده از تابع POS به اشتباه تشخیص میده که عدد تکراریه (چون 3 رو که مربوط به عدد 13 هست رو تو متغیر پیدا میکنه)
برای ساخت اعداد تصادفی بدون تکرار به این مبحث مراجعه کنید: مشكيل اين كد كجا هست

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

برای دانلود فایل هم میتونید از پلاگین Internet استفاده کنید.
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
جناب loo30fer هم اشاره کردن به این موضوع، فقط اینکه فرمودن که از تابع POS استفاده بشه میتونه ناکارآمد باشه، چون اگه مثلاً عدد تولید شده عدد 3 باشه و ما قبلاً عدد 13 رو تولید کرده باشیم، با استفاده از تابع POS به اشتباه تشخیص میده که عدد تکراریه (چون 3 رو که مربوط به عدد 13 هست رو تو متغیر پیدا میکنه)
بله درسته جناب Nevercom ولی برای جلوگیری از اشتباه باید بدین شکل عمل کرد :
کد:
String$ = '3#13#'
 

newman_hf

Member
بله درسته جناب Nevercom ولی برای جلوگیری از اشتباه باید بدین شکل عمل کرد :

کد:
String$ = '3#13#'
اولا خیلی ممنون که مشکلشو گفتید ... ، من میفهمم منظورتونو ولی نمیدونم چه جوری پیادش کنم :-?
ممنونم یشم اگه مثلشو تو یه سرور دیگه بگذارید ...
اون کدی هم که دادید نفهمیدم کجا بزارم ... (پست های قبل تر توسط آقای (Loo3efer))
 

جدیدترین ارسال ها

بالا