PDA

View Full Version : سوال: بازی مار و پله



saber_ershadi
دوشنبه 09 بهمن 1391, 19:43 عصر
با سلام خدمت دوستان عزیز

من قصد درم یکم رو بازی مار پله کار کنم اگه شد بازیشو در c#بسازم من برای خونه ها از لیبل استفاده کردم و تاس هم رو که میزنم عدد تصادفی تاس بهم داده میشه نمیدونم چطور باید حرکت انجام بشه چطور مقدار لیبل رو با عدد تاس جمع کنم و چطور تشخیص بدم عدد جمع شده برای کدوم لیبله تا بشه حرکن رو انجام داد .
دوستان اگه کسی میتونه کمک کنه ممنون میشم

saber_ershadi
دوشنبه 09 بهمن 1391, 19:47 عصر
private void button2_Click(object sender, EventArgs e)
{

string txt = Convert.ToString(tas.taas());
int n=tas.taas();
if (number < 100)
{
number = number + n;

}
txtb.Text= Convert.ToString(number);
//MessageBox.Show(txt);
int aa = Convert.ToInt16(txt);
switch (aa)
{
case 1:
pb1.Visible = true;
pb2.Visible = false;
pb3.Visible = false;
pb4.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 2:
pb2.Visible = true;
pb1.Visible = false;
pb3.Visible = false;
pb4.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 3:
pb3.Visible = true;
pb1.Visible = false;
pb2.Visible = false;

pb4.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 4:
pb4.Visible = true;
pb1.Visible = false;
pb2.Visible = false;
pb3.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 5:
pb5.Visible = true;
pb1.Visible = false;
pb2.Visible = false;
pb3.Visible = false;
pb4.Visible = false;

pb6.Visible = false;
break;
case 6:
pb6.Visible = true;
pb1.Visible = false;
pb2.Visible = false;
pb3.Visible = false;
pb4.Visible = false;
pb5.Visible = false;
break;
}

}

------------------------------------------------------------------------------------------------------------------
کلاسی برای تاس


public static int taas()
{
int a;
Random r = new Random();
a = r.Next(1, 7);
return a;
}

saber_ershadi
سه شنبه 10 بهمن 1391, 21:55 عصر
دوستان اگه کسی هست که کمک کنه ممنون میشم یا لینک برای نمونه یا همچین چیزی

khokhan
سه شنبه 10 بهمن 1391, 22:29 عصر
دوستان اگه کسی هست که کمک کنه ممنون میشم یا لینک برای نمونه یا همچین چیزی

یه نمونه با تایمر

saber_ershadi
چهارشنبه 11 بهمن 1391, 08:47 صبح
ممنون از شما دوست عزیز ولی من منظورم بازی مار پله پشت منچ بود نه snack
از دوستان کسی هست کمک کنه؟

Alfred188
چهارشنبه 11 بهمن 1391, 09:20 صبح
درود، من قبلا یه بازیه منچ ساختم، ولی حوصله ساختن مار پله رو نداشتم
شما شروع کن لیبل ها رو به ترتیبی که می خوای مرتب کن (مثلا با اسم A1 شروع کن تا An)، بعد برای هر بازیکن یه لیبل جدای از این لیبل ها تعریف کن (اسمش رو می گیم T مثلا) که یه عدد کلی بهش بدی و عدد تاس با این عدد جمع بشه نه با لیبل های تو صفحه، برای مثال مهره رو لیبل A5 هست، تاس عدد 3 میاد، تو لیبل T باید هدد 5 باشه و حالا با عدد 3 که رو تاس اومده می شه 8، پس مهره رو به لیبل A8 انتقال میدی.
برای مار ها هم از قبل تعریف می کنی و با شرط چک می کنی به این صورت که بعد از ریختن تاس و قبل از حرکت چک می کنی که T با خونه مار برابر هست یا نه
مثلا:

int snack1=7; // عدد خانه سر مار
int snack2=15;
int snack3=20;

int Esnack1=2;// عدد خانه انتهای مار
int Esnack2=9;
int Esnack3=12;

if(T==snack1){
//شما مار زده شدید
T==Esnack1;
//مهره==A+Enack1
}
else if(T==snack2){
//شما مار زده شدید
T==Esnack1;
//مهره==A+Enack2
}
else if(T==snack3){
//شما مار زده شدید
T==Esnack1;
//مهره==A+Enack3
}
else
//انجام حرکت


یه چی شبیه اینایی که گفتم، البته کلی راهه دیگه هم واسه انجامش دارید
امیدوارم کمکتون کنه
موفق باشید

saber_ershadi
چهارشنبه 11 بهمن 1391, 20:04 عصر
درسته ولی من نمیدونم چطور باید اینکار رو انجام بدم چطور خونه فعلی که مهره تو اونه رو پیدا کنم عدد ها رو چطور ایجاد کنم ؟ با آرایه ؟ بعد از اینکه عدد خونه فعلی با

عدد تاس جمع شد چطور تشخیص بدم که عدد برای کدوم خونه هست و اون عدد رو بهش نسبت بدم تا مهره بعد از انداختن تاس به خونه بعدی بره ؟

میشه در باره اینها هم توضیح بدین یا کد بزارین؟

ara_tz
چهارشنبه 11 بهمن 1391, 20:21 عصر
دوست عزیز من این بازی رو نساختم اما به نظر من بهتره که لیبل هات رو همه توی یک آرایه مثلا به اسم "خانه ها" در زمان اجرا بسازی
و یک آرایه از لیبل هم برای مهره هات
و وقتی نوبت هرکدوم از بازیکنات رسید مکان فعلیش روی آرایه لیبل "خانه ها" رو پیدا کنی و به تعداد عدد تاس از اون بری جلو
من خودم دارم بازی چکرز درست میکنم از همین روش استفاده کردم برای پیدا کردن مکان مهره ام و مکانی که میخوام بزارمش

میتونی برای پیدا کردن مکان مهره ات مکانش رو بخونی و با مکان لیبل های توی آرایه لیبل "خانه ها" مقایسه اش کنی و با اونی که برابر بود به تعداد عدد تاس مثلا اگه 6 بود و خونه فعلیت 10 بود بری از توی آرایه لیبل های "خانه ها" آدرس لیبل 16 رو پیدا کنی و برابر با آدرس لیبل بازیکنت قرار بدی

Alfred188
پنج شنبه 12 بهمن 1391, 09:31 صبح
درسته ولی من نمیدونم چطور باید اینکار رو انجام بدم چطور خونه فعلی که مهره تو اونه رو پیدا کنم عدد ها رو چطور ایجاد کنم ؟ با آرایه ؟ بعد از اینکه عدد خونه فعلی با

عدد تاس جمع شد چطور تشخیص بدم که عدد برای کدوم خونه هست و اون عدد رو بهش نسبت بدم تا مهره بعد از انداختن تاس به خونه بعدی بره ؟

میشه در باره اینها هم توضیح بدین یا کد بزارین؟

درود، قرار نیست خونه فعلی رو پیدا کنید شما اون رو قبلا تو متغیر T دارید و عدد تاس رو با اون جمع می کنید و برای خونه بعدی اسم لیبل ها رو به ترتیب مرتب می کنید به صورت A1,A2,A3 تا A40 ، و به این ترتیب آدرس بعدی میشه :
T=T+ عدد تاس
آدرس جدید خونه = AT

saber_ershadi
پنج شنبه 12 بهمن 1391, 10:58 صبح
درسته حالا فرض کن تاس رو انداختم

public int T;
public static int taas()
{
int a;
Random r = new Random();
a = r.Next(1, 7);
return a;
}


private void button2_Click(object sender, EventArgs e)
{
int n=tas.taas();
if (T< 100)
{
T= T+ n;

}



switch (n)
{
case 1:
pb1.Visible = true;
pb2.Visible = false;
pb3.Visible = false;
pb4.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 2:
pb2.Visible = true;
pb1.Visible = false;
pb3.Visible = false;
pb4.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 3:
pb3.Visible = true;
pb1.Visible = false;
pb2.Visible = false;

pb4.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 4:
pb4.Visible = true;
pb1.Visible = false;
pb2.Visible = false;
pb3.Visible = false;
pb5.Visible = false;
pb6.Visible = false;
break;
case 5:
pb5.Visible = true;
pb1.Visible = false;
pb2.Visible = false;
pb3.Visible = false;
pb4.Visible = false;

pb6.Visible = false;
break;
case 6:
pb6.Visible = true;
pb1.Visible = false;
pb2.Visible = false;
pb3.Visible = false;
pb4.Visible = false;
pb5.Visible = false;
break;
}
int snack1=10; // عدد خانه سر مار
int snack2=20;
int snack3=30;

int Esnack1=5;// عدد خانه انتهای مار
int Esnack2=15;
int Esnack3=25;

if(T==snack1){
//شما مار زده شدید
T==Esnack1;
//مهره==A+Enack1
}
else if(T==snack2){
//شما مار زده شدید
T==Esnack1;
}
else if(T==snack3){
//شما مار زده شدید
T==Esnack1;
}





تا اینجا درست خوبتاس انداخته میشه بعد مقدارش میره تو متغییر n بعد نوبت به خونه ها میرسه با متغییر T اینکار رو میکنیم میگیم تا وقتیکه مقدار خونه ها کمتر از 100 تا باشه بازی انجام بشه تاس انداخته و مقدارش با مقدار قبلی که تو متغییر T بوده رو جمع میکنه و دوباره تو T میریزه
و یه سوییچ برای تغییر عکس تاس گذاشتم و همینطور گفتیم اگه به خونه های snake رسید بره به خونه های esnake
حالا با چه کدی بهش بفهمونیم که این T که مثلا مقدارش 24 برای لیبلm24 ؟
یه کد که مقدار T رو مشخص کنه برا کدوم لیبله؟
مثل این کد اشتباهی که مینویسم :

m+"T".BackColor=Color.Red;

m اسم لیبل و + "T" که عدد خونه رو به اسم لیبل نسبت بده و بگه مثلا

m24.BackColor=Color.Red;

یه کدی تو همین مایه ها که این کد من اشتباهه یا اگه به روش دیگه ایه که من نمیدونم لطفا بگو

Alfred188
پنج شنبه 12 بهمن 1391, 13:29 عصر
برای اینکار باید از findControl استفاده کنید. یعنی با استفاده از findcontrol ، کنترل مورد نظر رو پیدا می کنید و بعد باهاش کار می کنید
یه چی شبیه این

Label lbl= (Label)this.FindControl("m"+T);
lbl.BackColor=Color.Red;

saber_ershadi
پنج شنبه 19 بهمن 1391, 12:15 عصر
خوب این Findcontrol از کجا اومد من نتونستم همچین چیزی رو پیدا کنم البته یه چیزی پیدا کردم تو سایت های خارجی و MSDN microsoft ولی نتونستم ازش

استفاده کنم خوب حالا باید چیکار کنم ؟

protected virtual control findcontrol(string id, int path);

Alfred188
پنج شنبه 19 بهمن 1391, 14:27 عصر
درود،
http://msdn.microsoft.com/en-us/library/486wc64h.aspx
http://msdn.microsoft.com/en-us/library/system.web.ui.control.findcontrol(v=vs.71).aspx
http://stackoverflow.com/questions/3731007/using-findcontrol-to-find-control

Label lbl= (Label)this.FindControl("نام کنترل");
lbl.BackColor=Color.Red;

//Label : نوع کنترل
//this : مکان کنترل(مثلا اگه کنترل مورد نظر تو یه پنل باشه به جای this از panel استفاده می کنیم)

saber_ershadi
پنج شنبه 19 بهمن 1391, 15:26 عصر
99696
این پروژه تا اونجایی که انجام دادم ولی بازم نتونستم این کار رو انجام بدم تا بتونم مقدار فعلی رو به شئ لیبل نسبت بدم لطفا جزئی تر توضیح بده با کد یا اگه برات ممکنه از کد بازی منچی که درست کردی برام بگو

Alfred188
پنج شنبه 19 بهمن 1391, 21:28 عصر
درود،
شرمنده یه اشتباهی کردم، کدی که بهت گفتم مربوط به Asp.Net بود و از این بابت واقعا متاسفم

کد درست اینه:

Label lbl = ((Label)this.Controls["m" + txtb.Text]);

تغییرات رو تو فایل ضمیمه اعمال کردم،
بازهم عذر خواهی میکنم بابت اشتباهم
موفق باشید

saber_ershadi
پنج شنبه 19 بهمن 1391, 23:21 عصر
این درست شد Alfred جان
یکم تغییرش میدم باید چیزایه دیگه هم بهش اضافه بشه
به نظرت میشه این بازی رو به شکل شئ گرا درستش کرد از همین راه یا نه اگه آره چطور میشه این کار رو کرد اگه بشه یه نمونه از یه بازی ساده به روش شئ گرا میشه که بقیه هم که علاقه به شئ گرا دارن میتونن یاد بگیرن

Alfred188
جمعه 20 بهمن 1391, 07:12 صبح
درود،
متاسفانه خیلی راجع به شی گرایی اطلاعات ندارم، ولی دارم روش مطلالعه می کنم، ولی فکر می کنم که می شه
الان دارم این کتاب رو می خونم
http://www.booktolearn.com/?p=882
اطلاعات لازم رو که گرفتم بر می گردم و اینجا واستون قرار می دم

saber_ershadi
جمعه 20 بهمن 1391, 14:30 عصر
دوستان دیگه هم اگه اطلاعاتی تو زمینه شئ گرایی دارن میتونن کمک کنن

ممنون میشم اگه همکاری کنید