PDA

View Full Version : حرکت button به صورت تصادفی ؟



alasht
جمعه 29 مهر 1390, 12:01 عصر
با سلام
من میخوام با خاصیتهای Top , Left یک دکمه طوری کار کنم که با برخورد دکمه به دیواره های فرم جهتش عوض بشه و به سمت دیگه ای بره

مثل اسکرین سیور Bubbles در ویندوز 7 که با برخوردها حبابها با همدیگر یا با برخورد به دیواره ی ویندوز جهتشون عوض میشه

من یه چیزایی نوشتم اما فقط یکبار میره و و بار دوم متوقف میشه

کدی که من نوشتم اینه

private void timer1_Tick(object sender, EventArgs e)
{

Random top = new Random();
Random bottom = new Random();
Random left = new Random();
Random right = new Random();
int i = top.Next(0, this.Height);
int j = bottom.Next(0, this.Height);
int k = left.Next(0, this.Width);
int l = right.Next(0, this.Width);

if (button1.Top < this.Height - 70)
{
button1.Top += 10;
button1.Left += 5;
}
else if (button1.Top > 0)
{
button1.Left += 10;
button1.Top -= 5;
}
}



درون فرم یک دکمه بزارید و یک تایمر
کد بالا رو درون تایمر بزارید و رویداد کلیک دکمه بنویسید
timer1.Start();
حالا اجراش کنید متوجه میشید مشکل کجاست
ممنون میشم راهنمایی کنید
با تشکر

mehran_sh_t
جمعه 29 مهر 1390, 13:04 عصر
سلام
اگر میخواید چند تا داشته باشید، این کدی که نوشتید، زیاد خوب نیست! حالا فعلا فرض می کنیم با همین یه دونه اس.

کدتون اشتباهه، کلا! در قسمت اول شرط، میاید پایین، بعد میرید بالا، بعد از دو یا سه تکرار، دوباره شرط اول برقرار میشه، میاد پایین!

باید یک متغیر برای حرکت در طول و یک متغیر برای حرکت در ارتفاع تعریف کنید، بعد بر اساس نیازتون، مقدارش رو عوض کنید (منفی یا مثبت)

alasht
جمعه 29 مهر 1390, 13:43 عصر
سلام
من فقط میخوام یک دکمه باشه که اینطوری جا به جا بشه
من متوجه این قسمت نشدم

بعد بر اساس نیازتون، مقدارش رو عوض کنید (منفی یا مثبت)

یعنی چطوری ؟

mehran_sh_t
جمعه 29 مهر 1390, 16:06 عصر
خوب واسه یک دکمه که راحت تره!
شما دو تا متغیر دارید، یکی x، واسه حرکت در width، یکی هم y، واسه حرکت در height
شما در هر مرحله، (تیک تایمر) این مقادیر رو به ترتیب به left و top دکمه اضافه می کنید.

قبلش هم میاید شرط هاتون رو چک می کنید. مثلا برای دیواره چپ (وقتی داره به سمت چپ میره، x منفی هستش مسلما، y هم ثابت می مونه واسه دیواره های چپ و راست)


if(btn.Left < 0(
x=5;


از این به بعد میاد در جهت مثبت حرکت می کنه، وقتی به انتها رسید (دیوار راست) دوباره این رو به منفی تغییر میدید.

واسه دیوارهای بالا و پایین هم به همین صورت (اینبار با x ثابت و تغییر y)

alasht
جمعه 29 مهر 1390, 17:36 عصر
تشکر درست شد
نتیجه راهنمایی شما شد این کد
int x = 1, y = 1;
private void timer1_Tick(object sender, EventArgs e)
{


if (btn.Left > this.Width - 90)
{
x = -1;
}
if (btn.Left < 0)
{
x = 1;
}



if (btn.Top > this.Height - 60)
{
y = -1;
}

if (btn.Top < 0)
{
y = 1;
}

btn.Top += y;
btn.Left += x;


label1.Text = "Height = " + this.Height;
label2.Text = "Width = " + this.Width;
label3.Text = "Top = " + btn.Top;
label4.Text = "Left = " + btn.Left;
}


نمیدونم منظور شما همین بود یا نه ولی با این کد درست کار میکنه
با تشمر