PDA

View Full Version : سوال: تولید تصویر تصادفی در سی شارپ



FATEMEH@
پنج شنبه 21 آذر 1392, 10:47 صبح
سلام دوستان چجور میشه تصویر تصادفی ایجاد کرد
در واقع برا بازی فکر بکر میخام
که رنگامو بصورت PICTURE BOX گذاشتم
تشکر

دلتنگ اسمان
پنج شنبه 21 آذر 1392, 12:15 عصر
سلام تصویرها رو داری و میخوای تصادفی انتخاب کنی؟ میتونی تصاویر رو با شماره نامگذاری کنی. از 0 تا n. بعد عدد تصادفی بین 0تا n رو انتخاب کنب و تصویر مربوط به اون عدد رو انتخاب کنی.

sagggad
پنج شنبه 21 آذر 1392, 12:25 عصر
درکل بهتره بیشتر توضیح بدی یا نمونه بذاری تا کمکت کنم!!!!!!!!!!!

kasraaa
پنج شنبه 21 آذر 1392, 12:35 عصر
public void generate_num()
{
//min= az in adad shoro mishavad
int min = 1000;

//max= ta in adad edame darad
int max = 2000;


Random obj = new Random();

// i <adad ===> ( tedad adad tasadofi)
for (int i = 0; i < 1; i++)
{
int num = obj.Next(min, max);
}
}

FATEMEH@
پنج شنبه 21 آذر 1392, 16:30 عصر
سلام تصویرها رو داری و میخوای تصادفی انتخاب کنی؟ میتونی تصاویر رو با شماره نامگذاری کنی. از 0 تا n. بعد عدد تصادفی بین 0تا n رو انتخاب کنب و تصویر مربوط به اون عدد رو انتخاب کنی.
بازی فکر بکر رو که دیدید؟
1 سری رنگ تصادفی چیده میشند و کاربر باید اونا رو حدس بزنه
این تصویر بازیمه113845
حالا میخام بدونم چجور تصویر رندوم ایجاد کنم هر بار که استارت رو میزنه(در واقع باید آرایه ای از تصویر داشته باشم که هر بار 4تای اونا رو انتخاب وبذاره توی picture box ها دور از چشم کاربر )
شما منظورتون اینه که اسم pictrure box هام عدد باشه؟
ممنون از همه

sagggad
پنج شنبه 21 آذر 1392, 17:56 عصر
ببین دوست من بالاخره شما باید این عکس ها رو از یه جایی تو سیستم لود کنی دیگه؟؟درسته؟؟

FATEMEH@
پنج شنبه 21 آذر 1392, 18:02 عصر
ببین دوست من بالاخره شما باید این عکس ها رو از یه جایی تو سیستم لود کنی دیگه؟؟درسته؟؟
خب وقتی PICTUREBOX گذاشتم بعد از تو propertie از قسمت image تصویرم رو انتخاب کردم

sagggad
پنج شنبه 21 آذر 1392, 18:13 عصر
آره دوست من شما اونجا اینطوری انتخاب کردی،اما وقتی بخوای تصویر به صورت رندوم وتصادفی انتخاب شه که اینطوری نمیتونی!
البته من چیزی راجع به بازی فکر بکر نمیدونم.
فکر کنم شما میخوای مثلا 10 تا عکس داری به صورت انتخابی هر دفعه یک کدوم از این عکس ها دخل پیکچرباکس قرار بگیرن؟؟درسته؟؟؟؟
حالا اگه من درست منظورت رو فهمیدم بگو درسته تا یه راهی بهت معرفی کنم

FATEMEH@
پنج شنبه 21 آذر 1392, 18:20 عصر
آره دوست من شما اونجا اینطوری انتخاب کردی،اما وقتی بخوای تصویر به صورت رندوم وتصادفی انتخاب شه که اینطوری نمیتونی!
البته من چیزی راجع به بازی فکر بکر نمیدونم.
فکر کنم شما میخوای مثلا 10 تا عکس داری به صورت انتخابی هر دفعه یک کدوم از این عکس ها دخل پیکچرباکس قرار بگیرن؟؟درسته؟؟؟؟
حالا اگه من درست منظورت رو فهمیدم بگو درسته تا یه راهی بهت معرفی کنم
نه دوست عزیز
4تا رنگ بصورت تصادفی هر بار که کاربر استارت رو میزنه در نظر گرفته میشه
بعد کاربر باید حدس بزنه که اون رنگا چیه؟
اگر بازم نیازه بگید تا بیشتر توضیح بدم

FATEMEH@
پنج شنبه 21 آذر 1392, 18:22 عصر
حالا من رنگ ها رو اومدم بصورت عکس قرار دادم
حالا میخام بدونم چجور بیام بگم بهش که هربار بیا تصادفی از بین 10 تا رنگ(عکس) 4 تاش رو بذار توی picture boxهای مورد نظر من که البته از دید کاربر مخفیه

kasraaa
پنج شنبه 21 آذر 1392, 18:53 عصر
حالا میخام بدونم چجور بیام بگم بهش که هربار بیا تصادفی از بین 10 تا رنگ(عکس) 4 تاش رو بذار توی picture boxهای مورد نظر من که البته از دید کاربر مخفیه

با توجه به اون کدی که بهت دادم

FATEMEH@
پنج شنبه 21 آذر 1392, 19:04 عصر
با توجه به اون کدی که بهت دادم
خب من عدد ندارم تصویر دارم
بیام اسم تصاویرم رو عدد بکنم؟
احساس میکنم باز اشتباه بشه

kasraaa
پنج شنبه 21 آذر 1392, 19:06 عصر
عدد شاید با تبدیلات بتونی
یا به عکس ها ایندکس بده

FATEMEH@
پنج شنبه 21 آذر 1392, 19:08 عصر
عدد شاید با تبدیلات بتونی
یا به عکس ها ایندکس بده
چجوری خب
من اصل مشکلم همینه
عددندارم تصویر دارم

kasraaa
پنج شنبه 21 آذر 1392, 19:16 عصر
همه عکس هات رو ایندکس بده بعد همشون هم Visible =False باشه بسورت رندم هر ایندکسی انتخاب شد اون عکس Visible =Ture بشه
حله فاطمه جان؟

sagggad
پنج شنبه 21 آذر 1392, 19:23 عصر
بفرمایید این هم برنامش:

فقط به زبان وی بی نوشتمش چون سی شارپ زیاد واردنیستم:خجالت::خجالت::خجا ت::خجالت:
بازم سعی میکنم به سی شارپ تبدیلش کنم اگه تونستم تو همین تایپیک میذارمش

لینک دانلود:http://www.uplooder.net/cgi-bin/dl.cgi?key=98946cffa6e4719330382f6d153edcc6

sagggad
پنج شنبه 21 آذر 1392, 19:29 عصر
البته من تونستم به سی شارپ تبدیلش کنم اما یه جا لازم بود عدد تصادفی ایجاد کنم به مشکل میخورد.یعنی یه قابلیت که وی بی داشت رو نداشت.

kasraaa
پنج شنبه 21 آذر 1392, 19:33 عصر
اما یه جا لازم بود عدد تصادفی ایجاد کنم به مشکل میخورد
از کد من نتونستی استفاده کنی؟

sagggad
پنج شنبه 21 آذر 1392, 19:35 عصر
عدد شاید با تبدیلات بتونی
یا به عکس ها ایندکس بده
جنابKasraaa و جنابFATEMEH@ (http://barnamenevis.org/member.php?301058-FATEMEH) !!شما برای اینکار باید برای عکس هایی که در کامپیوتر دارین شماره بذارید.مثلا0.1.2.3 و....
اونوقت در برنامه از طریق دستور (System.Drawing.Image.FromFile(Path اونها رو داخل پیکچرباکس قراربدید.وبرای اینکه هر دفعه یک کدوم به صورت تصادفی در پیکچرباکس قرار بگیره باید ازتابع Rnd استفاده کنید.مشکل من هم اینجاست که استفاده از تابع Rnd که در ویژوال بیسیک هست رو در سی شارپ بلد نیستم.
موفق باشید(هردوتاتووووووووون):ب س:

sagggad
پنج شنبه 21 آذر 1392, 19:37 عصر
از کد من نتونستی استفاده کنی؟
چرا اصلا بلد بودم اما تو یه قسمت ازبرنامه با وی بی میشد یه کاری رو انجام داد اما با سی شارپ نمیشد.اصلا نمیدونم چه جوری بگم.اه اه اه اه:عصبانی++:
هه هه هه هه

FATEMEH@
پنج شنبه 21 آذر 1392, 20:08 عصر
همه عکس هات رو ایندکس بده بعد همشون هم Visible =False باشه بسورت رندم هر ایندکسی انتخاب شد اون عکس Visible =Ture بشه
حله فاطمه جان؟
یعنی چی ایندکس بدم؟؟؟؟

FATEMEH@
پنج شنبه 21 آذر 1392, 20:14 عصر
ممنونم از هر دوتان ذهنم یکم باز شد
امیدوارم حل بشه
بازم به کمک هاتون نیاز دارم

FATEMEH@
پنج شنبه 21 آذر 1392, 20:18 عصر
راستی من 4تا picture box دارم و 8 تا عکس
میخام همزمان تو 4تاش ، 4 تا تصویر تصادفی بیاد
تشکر

khokhan
پنج شنبه 21 آذر 1392, 20:55 عصر
راستی من 4تا picture box دارم و 8 تا عکس
میخام همزمان تو 4تاش ، 4 تا تصویر تصادفی بیاد
تشکر

.................................................. ...................:لبخند:

Random Rnd = new Random();
int inputNumber = 5;
piclist = new List<PictureBox>();
for (int i = 1; i <= inputNumber; i++)
{
PictureBox picina = new PictureBox();
picina.Location = new Point(inputNumber + (i * 80), 30);
picina.BackColor = Color.Aqua;
picina.Size = new Size(50, 50);
picina.BackgroundImageLayout = ImageLayout.Stretch;
piclist.Add(picina);
foreach (Control cont in this.Controls)
{
if (cont is PictureBox)
{
string path = @"" + Application.StartupPath + "\\Image\\";
cont.BackgroundImage = Image.FromFile(path + Rnd.Next(10).ToString() + ".png");
}
this.Controls.Add(picina);

}
}
دکمه شروع رو که زدی یه لحظه صبر می کنی :لبخند:
113859

FATEMEH@
پنج شنبه 21 آذر 1392, 21:32 عصر
.................................................. ...................:لبخند:

Random Rnd = new Random();
int inputNumber = 5;
piclist = new List<PictureBox>();
for (int i = 1; i <= inputNumber; i++)
{
PictureBox picina = new PictureBox();
picina.Location = new Point(inputNumber + (i * 80), 30);
picina.BackColor = Color.Aqua;
picina.Size = new Size(50, 50);
picina.BackgroundImageLayout = ImageLayout.Stretch;
piclist.Add(picina);
foreach (Control cont in this.Controls)
{
if (cont is PictureBox)
{
string path = @"" + Application.StartupPath + "\\Image\\";
cont.BackgroundImage = Image.FromFile(path + Rnd.Next(10).ToString() + ".png");
}
this.Controls.Add(picina);

}
}
دکمه شروع رو که زدی یه لحظه صبر می کنی :لبخند:
113859

میشه 1کم توضیح بدید راجع به کد ها
تشکر فراوان

khokhan
پنج شنبه 21 آذر 1392, 22:06 عصر
میشه 1کم توضیح بدید راجع به کد ها
تشکر فراوان
سطر اول ایجاد راندم & سطر دوم تعریف تعداد قاب عکس & سطر سوم ایجاد یک لیست از همه قاب عکسهای تولید شده & سطرچهارم یه حلقه برای تعریف مشخصات کلیه قاب عکسها & تا سطر 11 مشخصات و موقعیت قابها رو تعریف می کنند & از سطر 12 به بعد با یه حلقه دیگه بر اساس راندوم تعریف شده در بالا برا هرکدوم از قابها یه تصویر از دایرکتوری imageموجود در پوشه اصلی برنامه اختصاص می ده

FATEMEH@
جمعه 22 آذر 1392, 08:28 صبح
سطر اول ایجاد راندم & سطر دوم تعریف تعداد قاب عکس & سطر سوم ایجاد یک لیست از همه قاب عکسهای تولید شده & سطرچهارم یه حلقه برای تعریف مشخصات کلیه قاب عکسها & تا سطر 11 مشخصات و موقعیت قابها رو تعریف می کنند & از سطر 12 به بعد با یه حلقه دیگه بر اساس راندوم تعریف شده در بالا برا هرکدوم از قابها یه تصویر از دایرکتوری imageموجود در پوشه اصلی برنامه اختصاص می ده
string path = @"" + Application.StartupPath + "\\Image\\";
میشه این خط رو 1 توضیحی بدید؟؟؟؟
الان تصویر تصادفی هارو کجا درست میکنه؟
من چجور بهش بگم که تو هر پیکچر باگسم بیا تصویر تصادفی درست کن وقتی کاربر استارت رو میزنه؟
الان شما رو فرم پیکچر باگس نداشتید من اون قسمت که نوشته فکر بکر زیرش 4تا پیکچرباگس هست که میخام تو اونا تصویر هارو درست کنه
تشکر ببخشیدایقد سوال میپرسم وگیج میزنم
اخه میخام 1چیزی یادبگیرم نمیخام فقط کپی پیست باشه
تشکر

kasraaa
جمعه 22 آذر 1392, 09:19 صبح
string path
یک متغیر به نام pathاز نوع String

Application.StartupPath
مسیر پوشه ای bin==>debug رو برمیگردونه یعنی باید عکساتو بزاری انجا

khokhan
جمعه 22 آذر 1392, 09:41 صبح
string path = @"" + Application.StartupPath + "\\Image\\";
میشه این خط رو 1 توضیحی بدید؟؟؟؟
الان تصویر تصادفی هارو کجا درست میکنه؟
من چجور بهش بگم که تو هر پیکچر باگسم بیا تصویر تصادفی درست کن وقتی کاربر استارت رو میزنه؟
الان شما رو فرم پیکچر باگس نداشتید من اون قسمت که نوشته فکر بکر زیرش 4تا پیکچرباگس هست که میخام تو اونا تصویر هارو درست کنه
تشکر ببخشیدایقد سوال میپرسم وگیج میزنم
اخه میخام 1چیزی یادبگیرم نمیخام فقط کپی پیست باشه
تشکر
این یه خط اشاره می کنه مسیر اصلی پروژه یا همون دایرکتوری debug که تصاویر داخل پوشه image در اون مسیر قرار گرفته وتصویرها رو از این مسیر فراخوانی می کنه
در مورد سوال بعدی هم می تونین قاب عکسها رو توی یه پنل قرار بدین و با یه حلقه ساده ویه خورده تغییر توی کدها تصاویر تصادفی رو درونشون بریزین:لبخند:
این شکلی :


private void button1_Click(object sender, EventArgs e)
{
Random Rnd = new Random();

foreach (Control cont in panel1.Controls)
{
if (cont is PictureBox)
{
string path = @"" + Application.StartupPath + "\\Image\\";
cont.BackgroundImage = Image.FromFile(path + Rnd.Next(10).ToString() + ".png");
cont.BackgroundImageLayout = ImageLayout.Stretch;
}



}
}

FATEMEH@
جمعه 22 آذر 1392, 10:07 صبح
این یه خط اشاره می کنه مسیر اصلی پروژه یا همون دایرکتوری debug که تصاویر داخل پوشه image در اون مسیر قرار گرفته وتصویرها رو از این مسیر فراخوانی می کنه
در مورد سوال بعدی هم می تونین قاب عکسها رو توی یه پنل قرار بدین و با یه حلقه ساده ویه خورده تغییر توی کدها تصاویر تصادفی رو درونشون بریزین:لبخند:
این شکلی :


private void button1_Click(object sender, EventArgs e)
{
Random Rnd = new Random();

foreach (Control cont in panel1.Controls)
{
if (cont is PictureBox)
{
string path = @"" + Application.StartupPath + "\\Image\\";
cont.BackgroundImage = Image.FromFile(path + Rnd.Next(10).ToString() + ".png");
cont.BackgroundImageLayout = ImageLayout.Stretch;
}



}
}



تشکر
شما تصاویرتون رو چجور به پیکچر باگس اضافه کردید؟ لوکال یا سورس؟
من لوکاله
اگر بیام بجا اینکه image اضافه کنم بک گروند picture box هارو تصویر موردنظر قرار بدم بهتر نیس؟

FATEMEH@
جمعه 22 آذر 1392, 11:49 صبح
string path
یک متغیر به نام pathاز نوع String

Application.StartupPath
مسیر پوشه ای bin==>debug رو برمیگردونه یعنی باید عکساتو بزاری انجا

به این خط error میده
من این تصاویر رو بازم استفاره کردم و تو ریسورسم هم هس
ممنکنه برا این باشه!!

دلتنگ اسمان
جمعه 22 آذر 1392, 11:53 صبح
تشکر
شما تصاویرتون رو چجور به پیکچر باگس اضافه کردید؟ لوکال یا سورس؟
من لوکاله
اگر بیام بجا اینکه image اضافه کنم بک گروند picture box هارو تصویر موردنظر قرار بدم بهتر نیس؟
سلام.
جناب khokhan (http://barnamenevis.org/member.php?131732-khokhan) جواب کاملی رو دادن. ببین دوست من شما اولا باید برای خودتون دقیقا مشخص کنید چی میخوای؟ یعنی در همین مرحله جزئی. کدها رو توی برنامه کپی کن و خط به خط اجرا کن تا متوجه بشی هر کدوم از این خط کدها چیکار میکنن. به هر حال همونطور که گفتم و جناب khokhan (http://barnamenevis.org/member.php?131732-khokhan) هم گفتن شما اگر تصاویر رو با اعداد از 0 تا n نامگذاری کنی و عدد رندم انتخاب کنی و تصویر هم نام اون عدد رو انتخاب کنی بهتره.

Random Rnd = new Random();این کلاس رندم رو نمونه سازی کرده.
foreach (Control cont in panel1.Controls) {
if (cont is PictureBox)
{

حلقه forتمام اشیائ موجود رو بررسی میکنه و درif اگر شی انتخاب شده تصویر باشه
string path = @"" + Application.StartupPath + "\\Image\\"; مسیر تصویر رو بهت میده.

cont.BackgroundImage = Image.FromFile(path + Rnd.Next(10).ToString() + ".png");
از تصاویر موود در اون مسیر از 10 تصویر یکی رو رندم انتخاب میکنه.
Rnd.Next(10)و در
cont.BackgroundImage قرار میده.

cont.BackgroundImageLayout = ImageLayout.Stretch; این کد هم نحوه قرار گرفتن تصویر رو تعیین میکنه.

kasraaa
جمعه 22 آذر 1392, 12:01 عصر
ببین عزیز جان من گفتم تو کجا بزاریش
bin===>debug
تو میگی گزاشتم تو ریسورس؟

FATEMEH@
جمعه 22 آذر 1392, 12:06 عصر
ببین عزیز جان من گفتم تو کجا بزاریش
bin===>debug
تو میگی گزاشتم تو ریسورس؟
من این تصویرام که همون رنگامه رو تو فرم ازش استفاده کردم و از تو ریسورس اوردم

kasraaa
جمعه 22 آذر 1392, 12:09 عصر
نقش این کد میدونی چیه و به کجا مراجعه میکنه؟
Application.StartupPath

FATEMEH@
جمعه 22 آذر 1392, 12:10 عصر
نقش این کد میدونی چیه و به کجا مراجعه میکنه؟
Application.StartupPath
بله متوجه شدم

FATEMEH@
جمعه 22 آذر 1392, 12:16 عصر
بله متوجه شدم
شما 1دور محیط بازیمو ببینید
همون مهره های رنگی که کنار هست رو میخام از بینشون رندوم 4 تا رو انتخاب کنه و بعد کاربر اونا رو حدس بزنه که چی هستن
حالا اون مهره هار واومدم از ریسورس اضافه کردم
حالا برا این دستورات باید برم دوباره تواون مسیر کپی کنم و بعد ایناکه تو ریسورسه رو حذف کنم/.؟
چکار کنم
تشکر

sagggad
جمعه 22 آذر 1392, 12:21 عصر
اون فایل وی بی که من گذاشتم رو هرکس تونست به سی شارپ تبدیل کنه.از همه چی راحت تره.کلا سه خط کده کاملا آسون و واضح!!!

kasraaa
جمعه 22 آذر 1392, 12:26 عصر
پاک کردن از ریسورس رو نمیدونم
من بابت اینکه گفتی ارور داره کمک کردم
نمیخام مایوست کنم

حالا چرا گیر دادی به این بازی؟

FATEMEH@
جمعه 22 آذر 1392, 12:41 عصر
پاک کردن از ریسورس رو نمیدونم
من بابت اینکه گفتی ارور داره کمک کردم
نمیخام مایوست کنم

حالا چرا گیر دادی به این بازی؟
9 نمره امتحانمه باید تحویل بدم

khokhan
جمعه 22 آذر 1392, 17:44 عصر
9 نمره امتحانمه باید تحویل بدم
اگه نمی خوای از خیر پوشه ریسوس بگذری یه خورده بایستی کد بزنی از جمله اینکه ابتدا یه متد داشته باشی برا شناساندن پوشه ریسورس حاوی تصاویر:


private Bitmap[] GetResourceImages()
{
PropertyInfo[] props = typeof(Resources).GetProperties(BindingFlags.NonPu blic | BindingFlags.Static);
var images = props.Where(prop => prop.PropertyType == typeof(Bitmap)).Select(prop => prop.GetValue(null, null) as Bitmap).ToArray();

return images;
}
بعد بیایی و یه متد قرار بدی برای انجام عمل فراخوانی تصادفی تصاویر:


private void RandomizePicture()
{



foreach (Control cont in panel1.Controls)
{
if (cont is PictureBox)
{
Bitmap[] images = GetResourceImages();
if (images == null || images.Length == 0)
{

return;
}

int maxValue = images.Length;
Random r = new Random();
int idx = r.Next(maxValue);
cont.BackgroundImage = images[idx];
cont.BackgroundImageLayout = ImageLayout.Stretch;

}
}

}
و در رویداد کلیک باتن فراخوانی تصاویر بنویسی :

private void button1_Click(object sender, EventArgs e)
{
this.RandomizePicture();
}
.................................................. ...:لبخند::لبخند:

FATEMEH@
جمعه 22 آذر 1392, 17:52 عصر
عالی شد
اما اونجورم حلش کردم
واقعا ممنونم از همه
فوق العاده بود