# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  پازل اعداد

## سيد مجتبي هاشمي

دوستان عزیز سلام. من میخوام یه برنامه پازل بنویسم(با دلفی 7) که 9 یا 15 خانه داشته باشه و در داخل خانه های اون اعداد 1 تا 8 یا 1 تا 14 قرار داده بشه و یک خانه خالی هم داشته باشه و پس از به هم ریختن آنها با حرکت دادن اعداد آنها رو مرتب کنیم. گفتند باید از الگوریتمهای هوش مصنوعی و گرافها استفاده کنم. در این مورد تا حالا کار نکردم. 
لطفا هر کدوم از دوستان که میتونن بهم کمک کنند تا این برنامه رو بنویسم. یا اگر کد آماده ای دارن اینجا بذارن تا بتونم ازش استفاده کنم. ممنون.

----------


## hadisalahi2

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

----------


## AliReza Vafakhah

> دوستان عزیز سلام. من میخوام یه برنامه پازل بنویسم یا اگر کد آماده ای دارن اینجا بذارن تا بتونم ازش استفاده کنم. ممنون.


*این دیگه کپی پیست هست  و اصلا خوب نیست،* اگه می خواهید خودتون بنویسید از آرایه های 2 بعدی استفاده کنید .

موفق باشید

----------


## سيد مجتبي هاشمي

> *این دیگه کپی پیست هست و اصلا خوب نیست*


منظورم این بود که اگه کسی کدی داره اینجا بذاره تا با بررسی کدهاش چیزی از اون یاد بگیرم.
ممنون از توجهتون.

----------


## دلفــي

> منظورم این بود که اگه کسی کدی داره اینجا بذاره تا با بررسی کدهاش چیزی از اون یاد بگیرم.
> ممنون از توجهتون.


 
این یه نمونه از برنامه ای هست که در بالا توضیح دادید .

----------


## khoshblagh

> این یه نمونه از برنامه ای هست که در بالا توضیح دادید .


 با سلام 
ظاهرا فایل ضمیمه ویرس دارد! متشکرم

----------


## سيد مجتبي هاشمي

> این یه نمونه از برنامه ای هست که در بالا توضیح دادید .


ممنون از فایلی که گذاشتین، ولی این فقط فایل اجرایی بود. کدش رو نداشتین؟

در ضمن فایلتون ویروس هم نداشت. با Eset Smart Security 4 به روز شده تستش کردم.

----------


## سيد مجتبي هاشمي

دوستان كسي راهنمايي جديدي نداره كه من بتونم اين پازل رو طراحي كنم؟ خيلي ضروريه !!!!!!!!

----------


## دلفــي

> دوستان كسي راهنمايي جديدي نداره كه من بتونم اين پازل رو طراحي كنم؟ خيلي ضروريه !!!!!!!!


كار زياد سختي نيست !

شما مي تونيد از 14 تا Lebel استفاده كرده و با مديريت Left و Top اونا اين بازي رو بنويسيد .

----------


## سيد مجتبي هاشمي

> كار زياد سختي نيست !
> 
> شما مي تونيد از 14 تا Lebel استفاده كرده و با مديريت Left و Top اونا اين بازي رو بنويسيد .


حرف شما درسته ولي چه طوري بفهمم كه پازل درست شده يا اينكه هنوز به هم ريخته است؟

----------


## Felony

> حرف شما درسته ولي چه طوري بفهمم كه پازل درست شده يا اينكه هنوز به هم ريخته است؟


بر اسا مختصات و نام عکستون  به این صورت که میگی اگر Image1 در مختصات Point1 و Image2 در Point2 و الی آخر ... بود یعنی پازل درست شده .

----------


## دلفــي

> حرف شما درسته ولي چه طوري بفهمم كه پازل درست شده يا اينكه هنوز به هم ريخته است؟


شما ابتدا بايد Label ها رو به صورت صحيح در جاي خودشون قرار بدي در اين صورت Left و Top اصلي Label ها رو در دست داري ؛ سپس به صورت رندم اونها رو در روي فرمت بچين ،
در هنگام بازي كاربر كافيه شما فقط مقادير Left و Top در اون لحظه رو با مقادير بدست اومده در ابتداي برنامه مقايسه كني ، اگه باهم برابر بودن كار تمومه يا به عبارتي : *Game Over*

----------


## AliReza Vafakhah

راه دیگه ای هم هست نیاز به حرکت کلیده ها ندارید ! می تونید فقط Caption آنها را جابه جا کنید و سپس بررسی کنید که آیا Button1.Caption=X  هست

----------


## سيد مجتبي هاشمي

> راه دیگه ای هم هست نیاز به حرکت کلیده ها ندارید ! می تونید فقط Caption آنها را جابه جا کنید و سپس بررسی کنید که آیا Button1.Caption=X هست


دوست عزیز لطف میکنید بیشتر توضیح بدین؟

----------


## سيد مجتبي هاشمي

> شما ابتدا بايد Label ها رو به صورت صحيح در جاي خودشون قرار بدي در اين صورت Left و Top اصلي Label ها رو در دست داري ؛ سپس به صورت رندم اونها رو در روي فرمت بچين


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

----------


## سيد مجتبي هاشمي

با سلام. دوستان اگه بخواهیم این پازل رو برای تصاویر طراحی بکنیم باید چی کار بکنیم؟

----------


## Felony

> با سلام. دوستان اگه بخواهیم این پازل رو برای تصاویر طراحی بکنیم باید چی کار بکنیم؟


به جای دکمه ها از Image استفاده کنید و توسط متد Canvas.CopyRect عکس مورد نظر رو به تعداد مورد نیاز تقسیم کنید و بریزید داخل Image ها .

----------


## sobhangh

دوست عزیز برنامه رو است گذاشتم.
یک راندم بزنی راه می افته
امیدوارم مشکلت رو حل کنه

----------


## دلفــي

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


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


  ListBox1.Items.Clear;
  while ListBox1.Items.Count < 14 do
  begin
    Randomize;
    i := RandomRange(1,15);
    if ListBox1.Items.IndexOf(IntToStr(i)) = -1 then
    ListBox1.Items.Add(IntToStr(i));
  end;
  for I := 0 to ListBox1.Count - 1 do
    begin
      if ListBox1.Items.Strings[i] = '1' then
      begin Button1.Top := 2; Button1.Left := 2; end else
      if ListBox1.Items.Strings[i] = '2' then
      begin Button2.Top := 42; Button2.Left := 2; end else
      if ListBox1.Items.Strings[i] = '3' then
      begin Button3.Top := 82; Button3.Left := 2; end else
      if ListBox1.Items.Strings[i] = '4' then
      begin Button4.Top := 122; Button4.Left := 2; end else
      if ListBox1.Items.Strings[i] = '5' then
      begin Button5.Top := 2; Button5.Left := 42; end else
      if ListBox1.Items.Strings[i] = '6' then
      begin Button6.Top := 42; Button6.Left := 42; end else
      if ListBox1.Items.Strings[i] = '7' then
      begin Button7.Top := 82; Button7.Left := 42; end else
      if ListBox1.Items.Strings[i] = '8' then
      begin Button8.Top := 122; Button8.Left := 42; end else
      if ListBox1.Items.Strings[i] = '9' then
      begin Button9.Top := 2; Button9.Left := 82; end else
      if ListBox1.Items.Strings[i] = '10' then
      begin Button10.Top := 42; Button10.Left :=82; end else
      if ListBox1.Items.Strings[i] = '11' then
      begin Button11.Top := 82; Button11.Left := 82; end else
      if ListBox1.Items.Strings[i] = '12' then
      begin Button12.Top := 122; Button12.Left := 82; end else
      if ListBox1.Items.Strings[i] = '13' then
      begin Button13.Top := 2; Button13.Left := 122; end else
      if ListBox1.Items.Strings[i] = '14' then
      begin Button15.Top := 42; Button14.Left := 122; end;
    end;

----------


## سيد مجتبي هاشمي

دوست عزیز با تشکر از شما.
من کد رو به صورت زیر نوشتم که درست کار میکنه اما تنها مشکلش اینه که اعداد رو به ترتیب از بالا به پایین قرار میده.

ListBox1.Items.Clear;
while ListBox1.Items.Count < 15 do
begin
  Randomize;
  x := RandomRange(1,16);
  if ListBox1.Items.IndexOf(IntToStr(x)) = -1 then
    ListBox1.Items.Add(IntToStr(x));
end;
for y := 0 to ListBox1.Count - 1 do
begin
  if ListBox1.Items.Strings[y] = '1' then
  begin
    Button1.Top := 2;
    Button1.Left := 2;
  end
  else
  if ListBox1.Items.Strings[y] = '2' then
  begin
    Button2.Top := 42;
    Button2.Left := 2;
  end
  else
  if ListBox1.Items.Strings[y] = '3' then
  begin
    Button3.Top := 82;
    Button3.Left := 2;
  end
  else
  if ListBox1.Items.Strings[y] = '4' then
  begin
    Button4.Top := 122;
    Button4.Left := 2;
  end
  else
  if ListBox1.Items.Strings[y] = '5' then
  begin
    Button5.Top := 2;
    Button5.Left := 42;
  end
  else
  if ListBox1.Items.Strings[y] = '6' then
  begin
    Button6.Top := 42;
    Button6.Left := 42;
  end
  else
  if ListBox1.Items.Strings[y] = '7' then
  begin
    Button7.Top := 82;
    Button7.Left := 42;
  end
  else
  if ListBox1.Items.Strings[y] = '8' then
  begin
    Button8.Top := 122;
    Button8.Left := 42;
  end
  else
  if ListBox1.Items.Strings[y] = '9' then
  begin
    Button9.Top := 2;
    Button9.Left := 82;
  end
  else
  if ListBox1.Items.Strings[y] = '10' then
  begin
    Button10.Top := 42;
    Button10.Left :=82;
  end
  else
  if ListBox1.Items.Strings[y] = '11' then
  begin
    Button11.Top := 82;
    Button11.Left := 82;
  end
  else
  if ListBox1.Items.Strings[y] = '12' then
  begin
    Button12.Top := 122;
    Button12.Left := 82;
  end else
  if ListBox1.Items.Strings[y] = '13' then
  begin
    Button13.Top := 2;
    Button13.Left := 122;
  end
  else
  if ListBox1.Items.Strings[y] = '14' then
  begin
    Button14.Top := 42;
    Button14.Left := 122;
  end
  else
  if ListBox1.Items.Strings[y] = '15' then
  begin
    Button15.Top := 82;
    Button15.Left := 122;
  end;
end;

اگر لطف کنید و بهم بگین که چه طور میشه به جای شماره دکمه نام متغیر رو نوشت ممنون میشم. مثل کد زیر. البته باید این رو در نظر گرفت که شماره دکمه جزء نام دکمه است.

Button1 ---------> button[i]
همین کد رو به صورت زیر نوشتم ولی جواب نمیده و تمام دکمه های داخل فرم رو بهم میریزه.

Tbutton(components[i]).top := '42';
سوال دیگه ای هم داشتم و اون هم اینکه وقتی کد زیر رو مینویسیم باید چی کار کرد که عدد تکراری ایجاد نکنه.

Randomize;
x := RandomRange(1,16);

----------


## sobhangh

سلام 
مگه توی برنامه ای که واست گذاشتم نبود؟

----------


## دلفــي

> من کد رو به صورت زیر نوشتم که درست کار میکنه اما تنها مشکلش اینه که اعداد رو به ترتیب از بالا به پایین قرار میده.


 
خوب این کد باید هم اینطوری عمل کنه !
شما شروطی رو که گذاشتید رو  باید برای تمام Button هاتون تکرار کنید 
مثلا برای Butto1 از شروط زیر استفاده کنید :

  ListBox1.Items.Clear;
  while ListBox1.Items.Count < 14 do
  begin
    Randomize;
    i := RandomRange(1,15);
    if ListBox1.Items.IndexOf(IntToStr(i)) = -1 then
    ListBox1.Items.Add(IntToStr(i));
  end;
  for I := 0 to ListBox1.Count - 1 do
    begin
      if ListBox1.Items.Strings[i] = '1' then
      begin Button1.Top := 2; Button1.Left := 2; end else
      if ListBox1.Items.Strings[i] = '2' then
      begin Button1.Top := 42; Button1.Left := 2; end else
      if ListBox1.Items.Strings[i] = '3' then
      begin Button1.Top := 82; Button1.Left := 2; end else
      if ListBox1.Items.Strings[i] = '4' then
      begin Button1.Top := 122; Button1.Left := 2; end else
      if ListBox1.Items.Strings[i] = '5' then
      begin Button1.Top := 2; Button1.Left := 42; end else
      if ListBox1.Items.Strings[i] = '6' then
      begin Button1.Top := 42; Button1.Left := 42; end else
      if ListBox1.Items.Strings[i] = '7' then
      begin Button1.Top := 82; Button1.Left := 42; end else
      if ListBox1.Items.Strings[i] = '8' then
      begin Button1.Top := 122; Button1.Left := 42; end else
      if ListBox1.Items.Strings[i] = '9' then
      begin Button1.Top := 2; Button1.Left := 82; end else
      if ListBox1.Items.Strings[i] = '10' then
      begin Button1.Top := 42; Button1.Left :=82; end else
      if ListBox1.Items.Strings[i] = '11' then
      begin Button1.Top := 82; Button1.Left := 82; end else
      if ListBox1.Items.Strings[i] = '12' then
      begin Button1.Top := 122; Button1.Left := 82; end else
      if ListBox1.Items.Strings[i] = '13' then
      begin Button1.Top := 2; Button1.Left := 122; end else
      if ListBox1.Items.Strings[i] = '14' then
      begin Button1.Top := 42; Button1.Left := 122; end;
    end;






> سوال دیگه ای هم داشتم و اون هم اینکه وقتی کد زیر رو مینویسیم باید چی کار کرد که عدد تکراری ایجاد نکنه.
>     Randomize;
>     i := RandomRange(1,16);


این کد همین کار رو انجام میده !

    Randomize;
    i := RandomRange(1,15);
    if ListBox1.Items.IndexOf(IntToStr(i)) = -1 then
    ListBox1.Items.Add(IntToStr(i));

----------


## سيد مجتبي هاشمي

> خوب این کد باید هم اینطوری عمل کنه !
> شما شروطی رو که گذاشتید رو باید برای تمام Button هاتون تکرار کنید


منظورتون اینه که روی هر کدوم از این 15 دکمه دوبار کلیک کنم و این کد رو برای هر کدوم از دکمه ها بنویسم؟
من میخوام با کلیک کردن روی دکمه "شروع" جای دکمه ها رو به هم بریزه.

----------


## سيد مجتبي هاشمي

> سلام 
> مگه توی برنامه ای که واست گذاشتم نبود؟


دوست عزیز با تشکر از برنامه ای که فرستادی. اما کدهایی که نوشته بودین گیجم کرد و هر کاری کردم درست کار نکرد.
ممنون میشم اگه یه کم در مورد کدتون توضیح بدین.
با تشکر از شما.

----------


## سيد مجتبي هاشمي

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

if ListBox1.Items.IndexOf(IntToStr(i)) = -1 then

----------


## sobhangh

سلام
کار نمیکنه یعنی توی زمان کامپایل خطا میده؟
اگه بالا بیاد می زنه راندم و شروع می کنه و مشکلی نداره.
دوست عزیز فقط به جای دکمه از پنل استفاده شده. یک پروسیجر برای چک کردن این که ردیف شده یا نه.یکی هم برای پخش کردنش. 
بعضی از کدها هم برای بهتر کار کردن و مواقع خاصن که اگر حذف هم بشن به اصل برنامه صدمه ی زیادی وارد نمیشه.
یه آرایه Point داریم.
من احساس کردم این ساده تره و خیلی هم حجم نداره. شما پنل رو دکمه کن راحتتر باشی.

----------


## دلفــي

> منظورتون اینه که روی هر کدوم از این 15 دکمه دوبار کلیک کنم و این کد رو برای هر کدوم از دکمه ها بنویسم؟
> من میخوام با کلیک کردن روی دکمه "شروع" جای دکمه ها رو به هم بریزه.


نخیر نیازی نیست تو تک تک Button ها بنویسی !!!

فقط در Button شروع میاری تا Buttonهای بازی به صورت رندم چیده بشن ، فقط باید این کد رو 14 بار برای هر Button تکرار کنی .

----------


## دلفــي

> لطفا در مورد کد زیر و کلمه IndexOf میشه توضیح بدین؟ 
> 
> if ListBox1.Items.IndexOf(IntToStr(i)) = -1 then


اگه تو لیست مقدار i وجود نداشته باشد خروجی ItemIndex برابر 1- خواهد بود و شما می تونید مقدار i رو به لیست اضافه کنی در غیر این صورت i در لیست وجود دارد و مقدار ItemIndex بزرگتر از 1- خواهد بود .

----------


## سيد مجتبي هاشمي

> فقط باید این کد رو 14 بار برای هر Button تکرار کنی .


دوست عزيز من هم همين رو ميگم. آيا من بايد اين كد رو فقط يكبار براي دكمه شروع بنويسم؟
من اين كد رو يك بار براي دكمه شروع نوشتم اما به صورتي كه گفتم تغييرش دادم كه يك مشكل داشت و اون هم اينكه دكمه ها رو به صورت عمودي مرتب ميكنه و بهم ريختن دكمه ها فقط به همين صورت هست. اين هم كد برنامه. من يه Listbox هم تو برنامه گذاشتم كه فقط براي ديدن نتيجه كدي هست كه نوشته شده. لطفا بررسي كنيد. با تشكر از شما.

----------


## سيد مجتبي هاشمي

> سلام
> کار نمیکنه یعنی توی زمان کامپایل خطا میده؟
> اگه بالا بیاد می زنه راندم و شروع می کنه و مشکلی نداره.
> دوست عزیز فقط به جای دکمه از پنل استفاده شده. یک پروسیجر برای چک کردن این که ردیف شده یا نه.یکی هم برای پخش کردنش. 
> بعضی از کدها هم برای بهتر کار کردن و مواقع خاصن که اگر حذف هم بشن به اصل برنامه صدمه ی زیادی وارد نمیشه.
> یه آرایه Point داریم.
> من احساس کردم این ساده تره و خیلی هم حجم نداره. شما پنل رو دکمه کن راحتتر باشی.


نه دوست عزيز. اتفاقا برنامه ات خيلي هم خوب بود. فقط من خيلي ازش سر در نياوردم. باز هم ممنون.
من فقط قسمتي رو كه براي پخش كردنش نوشته بودي تو برنامه اي كه خودم نوشته بودم استفاده كردم اما موقع كامپايل يه پيام خطا مربوط به يك آدرس حافظه ميداد.

----------


## دلفــي

> دوست عزيز من هم همين رو ميگم. آيا من بايد اين كد رو فقط يكبار براي دكمه شروع بنويسم؟
> من اين كد رو يك بار براي دكمه شروع نوشتم اما به صورتي كه گفتم تغييرش دادم كه يك مشكل داشت و اون هم اينكه دكمه ها رو به صورت عمودي مرتب ميكنه و بهم ريختن دكمه ها فقط به همين صورت هست. اين هم كد برنامه. من يه Listbox هم تو برنامه گذاشتم كه فقط براي ديدن نتيجه كدي هست كه نوشته شده. لطفا بررسي كنيد. با تشكر از شما.


 
برنامه اصلاح شد

----------


## سيد مجتبي هاشمي

با تشکر از همه دوستان که کمک کردند این برنامه رو کامل کنم. فقط یه مشکل دیگه داره؟؟؟؟؟؟؟؟؟؟؟؟

وقتی برنامه رو اجرا میکنید پس از انجام تعدادی حرکت(هر بار تعداد این حرکات متفاوت است) برنامه فقل میشود یعنی روی هر دکمه ای که کلیک کنیم حرکت نمیکنند.

دوستان اگه ممکن هست برنامه رو تست کنین و مشکلش رو بهم بگین چی هست. باز هم ممنون.
توجه: پس از وارد کردن نام باید دکمه اینتر رو فشار بدین.

----------


## khazaie01

سلام دوستان 




> دوستان عزیز سلام. من میخوام یه برنامه پازل بنویسم(با دلفی 7) که 9 یا 15 خانه داشته باشه و در داخل خانه های اون اعداد 1 تا 8 یا 1 تا 14 قرار داده بشه و یک خانه خالی هم داشته باشه و پس از به هم ریختن آنها با حرکت دادن اعداد آنها رو مرتب کنیم. *گفتند باید از الگوریتمهای هوش مصنوعی و گرافها استفاده کنم*. در این مورد تا حالا کار نکردم. 
> لطفا هر کدوم از دوستان که میتونن بهم کمک کنند تا این برنامه رو بنویسم. یا اگر کد آماده ای دارن اینجا بذارن تا بتونم ازش استفاده کنم. ممنون.


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

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

این دو لینک کمکتون میکنند ...
http://www.8puzzle.com/
http://www.cs.princeton.edu/courses/...s/8puzzle.html

----------


## سيد مجتبي هاشمي

با تشکر از شما. اما این فقط یه فایل اجرایی بود و احتمالا با زبان C یا C++‎‎ نوشته شده. من یه برنامه به زبان دلفی میخواستم. 

در ضمن اگه لطف کنید و برنامه ای رو که توی پست 32  گذاشتم رو تست کنید و مشکلش رو بهم بگید چی بوده ممنون میشم.

----------


## شبیر کریمی

سلام
برای خانه های پازل از Stringgrid و رویداد onkeypress اون استفاده کن.
برای چیدن اعداد بصورت تصادفی در هر یک از خونه ها من این کد رو نوشتم:
var
str:string;
begin
str:='123456789ABCDEF'
حالا هر یک از کاراکترهای رشته بالا رو بصورت تصادفی با کد زیر در خونه های یک تا پانزده بریز:
for i:=1 to 4 do 
for j:=1 to 4 do begin 
randomnum:=str[random(length(str))];
if (i<>4) and (j<>4) then begin
stringgrid1.cells[i,j]:=randomnum;
delete(str;pos(randomnum),1);
end;
end;
در واقع هر بار یکی از کاراکترهای str رو به طور تصادفی خوندم و در یکی از خونه ها قرار دادم
و همون کاراکتر رو از رشته str پاک کردم.

----------


## سيد مجتبي هاشمي

دوستان برنامه ای که در پست 32 گذاشتم یه مشکل دیگه هم داره و اون هم اینکه غیره از اینکه بعضی مواقع دکمه ها قفل میشن و حرکت نمیکنن بعضی وقتا که روی یه دکمه کلیک میکنیم بع جای اینکه در جهت درست حرکت کنه زیر یه دکمه دیگه قرار میگیره و دو خانه خالی به وجود میآد.

لطفا پس از بررسی برنامه مشکلش رو بهم بگین.  ممنون.

----------


## سيد مجتبي هاشمي

دوستان عزیز کسی نتونست مشکل برنامه رو حل کنه؟ فایل برنامه در پست 32 است.

----------

