PDA

View Full Version : مبتدی: سوال از نحوه ساختن چند شي از يك كلاس ونگه داري اطلاعات آنها



delavar_
پنج شنبه 22 دی 1390, 19:31 عصر
سلام لطفا كمكم كنين :گریه:
من یه پروژه دارم که تا قسمتی انجام دادم اما به مشکل برخوردم
سوال پروژه ام اینه که در#c یک کلید باتون در صفحه هست با هر بار کلیک یک شی از کلاس باتون ساخته شود در محدوه ای از فرم در 4 جهت اصلی رندم حرکت کند
من این برنامه فقط با یک شی نوشتم نمی دونم برای ساختن چند شی از این کلاس چطور عمل کنم که اطلاعاتشون ذخیره شود تا درحین حرکت باتون ها اگر بهم برخورد کردند جهت حرکتشان برعکس کنم؟

کلاس من به این صورت است:

class car : System.Windows.Forms.Button
{
public int s;
public void displybutn() این تابع نمایش است که موقعیت باتون را رندم مشخص می کند
{
int leftx, topy;
Random l = new Random();
leftx = l.Next(30, 305);
this.Left = leftx;

Random t = new Random();
topy = t.Next(30, 205);
this.Top = topy;

Random m = new Random();
s= m.Next(2); این برای رندم حرکت کردن در چپ یا پایین است
}//end displybutn()
//-------------------------------------------------------------
public car()
{

this.Text =Convert.ToString("*");
this.AutoSize = true;
this.Width = 25;
this.Height = 25;
}
//-------------------------------------------------------------
public void move() تابع حرکت
{
if (s == 0)
{
if (this.Left < 305 || this.Left == 30)
{
while (this.Left <= 304)
{
this.Left += 1;
}
}
//----------------------------------------------------------------------
if (this.Left == 305 || this.Left >= 30)
{
while (this.Left >= 31)
{
this.Left -= 1;
}
}
}//end if(s==0)
//----------------------------------------------------------------------
if (s == 1)
{
if (this.Top <= 204 || this.Top == 30)
{
while (this.Top <= 204)
{
this.Top += 1;
}
}
//-------------------------------------------------------------------------
if (this.Top >= 30 || this.Top == 205)
{
while (this.Top >= 31)
{
this.Top -= 1;
}
}
}//end if(s==1)
}//end move
}//end class car

//************************************************** ************************


کد من در صفحه فرم اینه:

private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
car c = new car();

this.Controls.Add(c);
c.displybutn();
c.move();



}
private void timer1_Tick(object sender, EventArgs e)
{
c.move();
this.Invalidate();

}


}
نحوه استفاده از تايمر رو هم براي حركت باتونها لطفاتوضيح بدهيد
با تشكر فراوان

majidrezaei2007
پنج شنبه 22 دی 1390, 21:19 عصر
لطفا کد هاتون رو تو تگ سی شارپ بزارید که خوندنش آسون بشه
شما در رویدادی که یک کلاس جدید می سازید ، پس از پایان آدرس کلاس ساخته شده رو از دست میدید.

شما 2 راه دازین واسه انجام پروژتون
راه اول اینکه تعداد اشیایی که ساخته میشه رو محدود کنید مثلا 100,200,500 و یک آرایه از اون کلاس بسازید با تعداد مشخص و سپس با همون آرایه کار کنید که این کار جالب نیست و برنامه شما ایستا میشه

راه دوم اینکه شما باید یک لیست پیوندی پویا داشته باشید که در اون آدرس کلاس هایی که می سازید رو نگه دارید . اینطوری آدرس ها گم نمیشه و می تونید بهشون دسترسی داشته باشید ، اینطوری برنامتون پویا هم میشه