PDA

View Full Version : سوال: انتخاب رندم بین چند خانه ماتریس؟



nimnegah
یک شنبه 12 آبان 1387, 19:21 عصر
با سلام

اگر بخواهیم بین چند خانه ماتریس یک خونه رو به صورت رندم انتخاب کنیم تابع رندم رو

چطوری باید بنویسیم..

ما میخواهیم بین چهار خونه بالا ، پایین ، راست و چپ خونه هایی که مقدارشون 0 است

رو بین اونها به صورت رندم یک خونه رو انتخاب کنیم...

البته این خونه ها سلولهای data grid هستن....

nimnegah
دوشنبه 13 آبان 1387, 09:47 صبح
اساتید محترم من منتظر جواب هستم.........

SMRAH1
دوشنبه 13 آبان 1387, 11:09 صبح
سلام

1) ابتدا خونه های خالی رو شمارش کنید به یک ترتیب معین مثلا از خانه بالا شروع کنید و بعد خانه سمت راست و بعد خانه پایین و در نهایت خانه سمت چپ (از بالا شروع و در جهت عقربه های ساعت حرکت می کنیم) فرض کنید در مثال دو خانه خالی پیدا شده است.
2) توسط دستورات زیر یک عدد تصادفی بین 1 تا تعداد خانه های خالی پیدا کنید (در مثال ما 1 و 2)

Random r = new Random();
int ret = r.Next(1, CountOfEmptyCell);
که فرض شده است تعداد خانه های خالی در متغیر CountOfEmptyCell است.در این صورت حالا دوباره با همان الگویتم قبلی شمارش کنید تا به خانه ی با شماره ret برسید.
3) برای انتخاب ردیف صفر و ستون یک DataGridView باید از دستور زیر استفاده کنید:

dgv.Rows[0].Cells[1].Selected = true;

موفق باشید

nimnegah
دوشنبه 13 آبان 1387, 13:14 عصر
ممنون از راهنمایی شما...

اجازه بدید من قسمتی از کد رو بنویسم شاید بهتر مشخص بشه..




// چک کردن خونه های خالی

//بالا
if (dataGridView1.Rows[q - 1].Cells[w].Value.ToString() == "0")

????
// پایین
if (dataGridView1.Rows[q + 1].Cells[w].Value.ToString() == "0")

????
// راست
if (dataGridView1.Rows[q].Cells[w + 1].Value.ToString() == "0")

????
// چپ
if (dataGridView1.Rows[q].Cells[w - 1].Value.ToString() == "0")




????



حالا هر خونه ای که مقدارش صفر بود و در تابع رندم انتخاب شد ، مقدار جدید اون 10 بشه...

حالا اگر ما تعداد خونه های خالی رو بدونیم ، چطوری باید بفهمیم که کدوم خونه انتخاب شده...؟؟؟؟

متاسفانه وقت زیادی هم برای این برنامه ندارم...:عصبانی++:

SMRAH1
دوشنبه 13 آبان 1387, 18:40 عصر
سلام

سه مرحله داریم:
1) شمارش تعداد سلول های خالی - Count Empty cells
2) انتخاب تصادفی یک شماره از بین تعداد سلولهای خالی - Select random one cell number
3) یافتن سلول معادل شماره انتخابی - Find cell selected

یعنی:

//Count Empty cells
int CountEmpty = 0;
if (dataGridView1.Rows[q - 1].Cells[w].Value.ToString() == "0")
CountEmpty++;
if (dataGridView1.Rows[q + 1].Cells[w].Value.ToString() == "0")
CountEmpty++;
if (dataGridView1.Rows[q].Cells[w + 1].Value.ToString() == "0")
CountEmpty++;
if (dataGridView1.Rows[q].Cells[w - 1].Value.ToString() == "0")
CountEmpty++;

//Select random one cell number
Random r = new Random();
int selCell = r.Next(1,CountEmpty);

DataGridViewCell cell = null;
CountEmpty = 0;

//Find cell selected
if (dataGridView1.Rows[q - 1].Cells[w].Value.ToString() == "0")
CountEmpty++;
if(CountEmpty == selCell)
cell = dataGridView1.Rows[q - 1].Cells[w];

if (dataGridView1.Rows[q + 1].Cells[w].Value.ToString() == "0")
CountEmpty++;
if(CountEmpty == selCell)
cell = dataGridView1.Rows[q + 1].Cells[w];

if (dataGridView1.RRows[q].Cells[w + 1].Value.ToString() == "0")
CountEmpty++;
if(CountEmpty == selCell)
cell = dataGridView1.Rows[q].Cells[w + 1];

if (dataGridView1.Rows[q].Cells[w - 1].Value.ToString() == "0")
CountEmpty++;
if(CountEmpty == selCell)
cell = dataGridView1.Rows[q].Cells[w - 1];در پایان این خطوط متغیر cell دارای یک مرجع به سلول مورد نظر است و می توانید از آن برای مقدار دهی استفاده کنید.

موفق باشید

fazel-d
دوشنبه 13 آبان 1387, 21:34 عصر
این هم همون چیزی که می خواستی علی جون

public void randomCell()
{
ArrayList list = new ArrayList();
list.Clear();
//int i=0;
//*****************left*****************
if ((randC - 1) > -1)
{
if (ChessGridView.Rows[randR].Cells[randC - 1].Value.ToString() == "0")
list.Add(randR.ToString() + Convert.ToString(randC - 1));
}
//*****************right*****************
if ((randC +1 ) < N)
{
if (ChessGridView.Rows[randR].Cells[randC + 1].Value.ToString() == "0")
{
list.Add(randR.ToString() + Convert.ToString(randC + 1));
}
}
//*****************up*****************
if ((randR - 1) >-1)
{
if (ChessGridView.Rows[randR-1].Cells[randC ].Value.ToString() == "0")
{
list.Add(Convert.ToString(randR - 1) + Convert.ToString(randC ));
}
}

//*****************Down*****************
if ((randR + 1) < N)
{
if (ChessGridView.Rows[randR + 1].Cells[randC].Value.ToString() == "0")
{
list.Add(Convert.ToString(randR + 1) + Convert.ToString(randC));
}
}

// random Cells & selection
Random rnd = new Random();
int select,r,c ;
select = rnd.Next(0, list.Count);
string str;
str = list[select].ToString();
r = Convert.ToInt32(str[0].ToString());
c=Convert.ToInt32(str[1].ToString());
if ((r > -1 && r < N) && (c > -1 && c < N))
{
DataGridViewCellStyle style = new DataGridViewCellStyle();
style.BackColor = Color.Red;
ChessGridView.Rows[r].Cells[c].Style = style;
}



}این هم کل برنامه ........