PDA

View Full Version : براي ساختن پروژه بازي حكم ايراني در سي شارپ به كمك مهندسين نيازمنديم



yasevahshi!=true
سه شنبه 31 خرداد 1390, 23:22 عصر
سلام به دوستان عزيز و مهندسين محترم.
يه سوال ؟؟؟!!!
بازي هايي كه با كارت انجام ميشه رو ديديد ديگه. ميخوام يكي شو طراحي كنم.
بازي حكم ايراني هم سوژه منه. نياز به كمك دارم.
تقريبا كلاس هاشو نوشتم يكي دو ماهي هم كار كنم اميدوارم به نتيجه برسم.
ميخوام ببينم چطوري ميشه توي برنامه تاخيير ايجاد كرد(بدون استفاده از تايمر).
مثلا بازي هايي كه با كارت انجام ميشه رو ديديد؟ كه چطور كارت ها در يك پريود زماني چيده ميشن. ميخوام كارت ها با يك تاخيير زماني مشخص چيده بشن. چطوري تاخيير ايجاد كنم؟؟؟
ممنون ميشم اگه كمكم كنيد.!

saman6384
چهارشنبه 01 تیر 1390, 00:08 صبح
از sleep برای thread ها استفاده کردی؟ یه راهش اینه!

yasevahshi!=true
چهارشنبه 01 تیر 1390, 01:17 صبح
نه نميشه. وقتي ميگم مثلا توي يه حلقه مثلا 50 بار در يك پريود مثلا 1 ثانيه اي اسليپ كنه.!! درست كار نميكنه و كلا 50 ثانيه رو يه جا اسليپ ميكنه. اين نميتونه براي چيدن كارت خوب باشه . من ميخوام چيدن تك تك كارت ها ديده بشه.

gwbasic
چهارشنبه 01 تیر 1390, 11:20 صبح
نه نميشه. وقتي ميگم مثلا توي يه حلقه مثلا 50 بار در يك پريود مثلا 1 ثانيه اي اسليپ كنه.!! درست كار نميكنه و كلا 50 ثانيه رو يه جا اسليپ ميكنه. اين نميتونه براي چيدن كارت خوب باشه . من ميخوام چيدن تك تك كارت ها ديده بشه.

این مسئله بخاطر Hang کردن Thread UI هست. دو راه داره:
راه بد: Application.DoEvent()
راه خوب : استفاده از Thread دیگر بغیر از Thread UI برای ایجاد تاخیر و عملیات پیش صحنه
در این مورد بارها بحث شده میتونید در همین تالار جستجو کنید

yasevahshi!=true
چهارشنبه 01 تیر 1390, 13:40 عصر
اين كده منه توي حلقه يه كلاس فراخوني شده . اونجوري كه من ميخوام اسليپ نميكنه. كلا يه جا اسليپ ميكنه.

for (int i = 0; i < 52; i++)
{
a.push_outside(f[i], i, card);
Thread.Sleep(100);
Application.DoEvents();
}

gwbasic
چهارشنبه 01 تیر 1390, 15:06 عصر
متد Push_OutSide اگه کار UI انجام می ده باید درست کار کنه

yasevahshi!=true
چهارشنبه 01 تیر 1390, 16:28 عصر
نه اون متد push_outside كارش قرار دادنه كارت روي صفحه است. يه چند تا تابع ديگه هم واسه تاخيير استفاده كرد ولي باز همون مشكل قبليه. نميدونم چي كار بايد بكنم. لطفا كمك كنيد.

yasevahshi!=true
پنج شنبه 02 تیر 1390, 10:58 صبح
ظاهرا چاره اي نيست بايد از تايمر استفاده كنم.
آخه نميخواستم از تايمر استفاده كنم.
كسي نميدونه چي كار كنم؟

sia_2007
پنج شنبه 02 تیر 1390, 11:22 صبح
میتونی با WPF بنویسی و Animation هاش رو استفاده کنی

yasevahshi!=true
پنج شنبه 02 تیر 1390, 18:12 عصر
2 نوع ديگه واسه تاخيير يافتم اما بازم مشكل قبلي رو دارم...
publicDateTime sleep(int ms)
{
int t =Environment.TickCount;
while(true)
if(Environment.TickCount - t >= ms)
return 0;
}

اينم كد دوم

publicDateTime sleep(int ms)
{
System.DateTime ThisMoment = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(0, 0, 0, 0, ms);
System.DateTime AfterWards = ThisMoment.Add(duration);
 
while (AfterWards >= ThisMoment)
{
System.Windows.Forms.Application.DoEvents();
ThisMoment = System.DateTime.Now;
}
return System.DateTime.Now;
}
اينا دو تا تابع واسه تاخير هستند ولي نمي دونم چرا باز كلا يه جا اسليپ ميكنه.