PDA

View Full Version : سوال: تابع Random و نوع داده اي enum



Nice Ro$e
پنج شنبه 28 مرداد 1389, 19:32 عصر
سلام
صورت سؤال من اينه : برنامه اي بنويسيد كه بتوان يك دكمه را با استفاده از تابع Random و كنترل Timer در 4 جهت مختلف به طور تصادفي حركت داد . (حتما از دستور switch-case و نوع داده اي enum استفاده شود.)

حالا من توي برنامه م ، چهار جهت رو بصورت عناصر ِ نوع شمارشي ِ enum تعريف كردم :


enumDirection
{
up=1,down,right,left
}
Direction dir;

ميخوام با استفاده از يه تابع رندم كه عدد تصادفي بين 1 تا 4 توليد ميكنه ، اين اعداد رو انتساب بدم به جهت ها و بعدشم با استفاده از دستور switch-case و درون ِ رويداد ِ Tick ِ يه تايمر ، براي هر جهتي كه به طور تصادفي توسط تابع رندم انتخاب ميشه ، يه دكمه رو به اندازه 100 پيكسل به همون جهت (كه به صورت رندم انتخاب شده) حركت بدم:


privatevoid timer1_Tick(object sender, EventArgs e)
{
count++;
switch (dir)
{
caseDirection.up:
if (count<=100)
{
button1.Location = newPoint(button1.Location.X,button1.Location.Y-1);
}
else
{
count = 1;
}
break;
caseDirection.down:
if (count <= 100)
{
button1.Location = newPoint(button1.Location.X, button1.Location.Y + 1);
}
else
{
count = 1;
}
break;
caseDirection.right:
break;
caseDirection.left:
break;
}
}


حالا مشكلم اينجاست كه نميدونم چطور ميشه مقدار تابع ِ رندم رو كه يه مقدار int هست ، پاس بدم به جاي فصل هاي سال كه از نوع ِ enum هستن به دستور ِ switch
عمليات تبديل به int رو هم انجام دادم ولي error ميده
لطفا منو راهنمايي كنيد ، مرسي http://www.maxplugs.com/images/emoticons/00000001/00000009/00000036.gif

mahdi87_gh
پنج شنبه 28 مرداد 1389, 21:15 عصر
یک عدد تصادفی بین 0 تا 3 ایجاد کن و اون عدد رو به نوع direction تبدیل کن

Nice Ro$e
پنج شنبه 28 مرداد 1389, 21:53 عصر
یک عدد تصادفی بین 0 تا 3 ایجاد کن و اون عدد رو به نوع direction تبدیل کن
ميشه بگيد چطوري؟
چون نميدونم
---------------------
اديت: من اينطوري انجامش دادم:



Direction temp = (Direction)a;

mahdi87_gh
پنج شنبه 28 مرداد 1389, 22:15 عصر
روش شما درسته که!!!
مشکل چیه پس؟

Nice Ro$e
پنج شنبه 28 مرداد 1389, 22:24 عصر
با اون تغييري كه دادم برنامه error نداره ، ولي جوابم نميده ، يعني PicturBox رو اصلا حركت نميده
اين فرم من هست :
http://up.iranblog.com/Files2/8b5474b444e64795a877.jpg
اينم كدهاشه :


public partial class Form4 : Form
{
enum Direction
{
up, down, right, left, up_right, up_left, down_right, down_left
}
Direction dir;
int count = 1;
public Form4()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
count++;
Random r = new Random();
int a = r.Next(0, 8);
dir = (Direction)a;
switch (dir)
{
case Direction.up:
if (count<=100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X,pictureBox1.Location. Y-1);
}
else
{
dir = Direction.left;
count = 1;
}
break;
case Direction.down:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y +1);
}
else
{
count = 1;
}
break;
case Direction.right:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X+1, pictureBox1.Location.Y );
}
else
{
count = 1;
}
break;
case Direction.left:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X-1, pictureBox1.Location.Y);
}
else
{
count = 1;
}
break;
case Direction.up_right:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X+1, pictureBox1.Location.Y - 1);
}
else
{
count = 1;
}
break;
case Direction.up_left:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X-1, pictureBox1.Location.Y - 1);
}
else
{
count = 1;
}
break;
case Direction.down_right:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X+1, pictureBox1.Location.Y + 1);
}
else
{
count = 1;
}
break;
case Direction.down_left:
if (count <= 100)
{
pictureBox1.Location = new Point(pictureBox1.Location.X-1, pictureBox1.Location.Y + 1);
}
else
{
count = 1;
}
break;
}
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
}


به نظرتون مشكلش چيه؟

mahdi87_gh
پنج شنبه 28 مرداد 1389, 22:57 عصر
شما میزان افزایش و یا کاهش مکان رو از 1 به 50 تغییر بده تا تغییر مکان محسوس تر باشه، اونوقت چک کن ببین اصلا حرکت داره یا نه

#aliyari_C
پنج شنبه 28 مرداد 1389, 23:24 عصر
سلام


enumDirection: int

{
up=1, down, right, left, up_right, up_left, down_right, down_left
}
موفق باشی
__________________________________________________ __________________________________________________

چون به دریا می توانی راه یافت

سوی یک قطره چرا باید شتافـت


نتایج آماری,مقایسه ای بین String و StringBuildr (http://www.barnamenevis.org/forum/showthread.php?t=233987)

Nice Ro$e
پنج شنبه 28 مرداد 1389, 23:52 عصر
مرسي از همتون
مشكل از هيچ كدوم نبود ، timer مشكل داشت ، نميدونم چرا ، ولي يه بار پاكش كردم و يه timer جديد كه گذاشتم درست شد http://www.persianblog.ir/editor/images/smilies/1.gif


سلام


enumDirection: int

{
up=1, down, right, left, up_right, up_left, down_right, down_left
}
موفق باشی
__________________________________________________ __________________________________________________

چون به دریا می توانی راه یافت

سوی یک قطره چرا باید شتافـت


نتایج آماری,مقایسه ای بین String و StringBuildr (http://www.barnamenevis.org/forum/showthread.php?t=233987)

فكر كنم يه جايي خوندم كه تو C#‎‎ به طور پيش فرض ، مقدار عناصر نوع داده اي شمارشي ، int هست و از عدد 0 شروع ميشه
با اين حال مرسي http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/54.gif