انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: چاپ کردن در موقعیت های رندوم  (دفعات بازدید: 1229 بار)

0 کاربر و 5 مهمان درحال مشاهده موضوع.

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
چاپ کردن در موقعیت های رندوم
« : 20 اسفند 1402، 12:55 ب‌ظ »
درود

دارم رویه یه چالش برنامه نویسی کار میکنم. به این صورت که در x, y های مختلف ده تا * نشون بده.تا حدود فهمیدم چیکار کنم ولی بعدش قاطی کردم.( کد برنامه رو میگم) این هم کد :
#include <stdio.h>
#include <ncurses.h>
#include <stdlib.h>

int main(void)
{
  initscr();
  noecho();
  cbreak();
  clear();
  curs_set(0);
  refresh();
  int table[10][10];
  for (int i = 0; i < 10; i++)
  {
    for(int j = 0; j < 10; j++)
    {
      table[random() % LINES][random() % COLS];
    }
  }
  for(int i = 0; i < 10; i++)
  {
    for (int j = 0; j < 10; j++)
    {
      mvprintw(i , j, "%4d", table[i][j]);
      refresh();
    }   
  }
  refresh();
  endwin();
  return 0;
}

خب متاسفانه کد کلا چیزی رو نمایش نداد ولی با موفقیت کامپایل شد :D
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #1 : 20 اسفند 1402، 02:56 ب‌ظ »
خب جواب رو تا حدودی یافتم و واقعا از اون چیزی که فکر میکردم راحت تر بود \\:D/
#include <ncurses.h>
#include <stdlib.h>

int main()
{
  initscr();
  clear();
  noecho();
  cbreak();
  curs_set(0);
  refresh();
  int x, y;
  for (int i = 0;i< 10; i++)
  {
    x =  rand() % COLS + i;
    y =  rand() % LINES + i;
    mvprintw(y, x, "*");
    refresh();

  }


  getch();
  refresh();
  endwin();
  return 0;
}

فقط مشکلم با تابع rand  هست. میخوام از srand  استفاده کنم اما اروری که پیوست کردم رو میزاره. حتی تایپ کستنیگ هم کردم ولی باز اررو میده.
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1270
  • جنسیت : پسر
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #2 : 20 اسفند 1402، 03:00 ب‌ظ »
سعی نکنید همزمان کارها را با هم پیش ببرید. کارها را گام به گام انجام دهید.
پیش از تلاش برای نوشتن برنامهٔ گرافیکی نخست برنامهٔ چاپ ستاره‌ها را بدون گرافیک و در محیط متنی بنویسید و به روش کلی کار مسلط شوید.

برای این برنامه پس از خواندن و مسلط شدن بر شیوهٔ کار ncurses

۱. یک ستاره چاپ کنید. (چاپ کردن یک کاراکتر با ncurses)
۲. کاراکتر چاپ شده را حرکت دهید. یعنی بتوانید در نقاط مختلف صفحهٔ گرافیکی کاراکتر ستاره را چاپ کنید.
۳. بررسی کنید چطور می‌شود کاراکترها را در کنار هم قرار داد.
۴. اگر می‌خواهید در نقاط تصادفی چاپ انجام شود از خروجی تابع RANDOM مطمئن شود.
۵. نمونه‌ برنامه‌های ساده با این کتابخانه را ببینید و از روش آن‌ها ایده بگیرید.

پیوند‌های مرتبط


نمونه برنامهٔ آماده بازی snake



« آخرین ویرایش: 20 اسفند 1402، 03:16 ب‌ظ توسط esmaeelE »

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #3 : 20 اسفند 1402، 03:56 ب‌ظ »
سعی نکنید همزمان کارها را با هم پیش ببرید. کارها را گام به گام انجام دهید.
پیش از تلاش برای نوشتن برنامهٔ گرافیکی نخست برنامهٔ چاپ ستاره‌ها را بدون گرافیک و در محیط متنی بنویسید و به روش کلی کار مسلط شوید.

برای این برنامه پس از خواندن و مسلط شدن بر شیوهٔ کار ncurses

۱. یک ستاره چاپ کنید. (چاپ کردن یک کاراکتر با ncurses)
۲. کاراکتر چاپ شده را حرکت دهید. یعنی بتوانید در نقاط مختلف صفحهٔ گرافیکی کاراکتر ستاره را چاپ کنید.
۳. بررسی کنید چطور می‌شود کاراکترها را در کنار هم قرار داد.
۴. اگر می‌خواهید در نقاط تصادفی چاپ انجام شود از خروجی تابع RANDOM مطمئن شود.
۵. نمونه‌ برنامه‌های ساده با این کتابخانه را ببینید و از روش آن‌ها ایده بگیرید.

پیوند‌های مرتبط


نمونه برنامهٔ آماده بازی snake

درود
اتفاقا قسمت اصلی برنامه رو نوشتم خوندن صفحه کلید( دارم یه مینی گیم مینویسم). خیلی ممنون الان میرم داکیومن ها رو چک میکنم
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #4 : 20 اسفند 1402، 09:09 ب‌ظ »
دارم رویه یه چالش
* روی

تا حدود فهمیدم چیکار کنم
* حدودی

ولی باز اررو میده.
ارور (یا بهتره بگیم خطا)

الان میرم داکیومن ها رو چک میکنم
داکیومنت‌ها (یا بهتره بگیم مستندات)

سه‌پست داشتید، چهار تا اشتباه در نوشته‌ها بود. در پست‌های دیگه‌ای که داشتید هم به همین صورته. لطفا رعایت کنید.

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #5 : 21 اسفند 1402، 02:22 ب‌ظ »
دارم رویه یه چالش
* روی

تا حدود فهمیدم چیکار کنم
* حدودی

ولی باز اررو میده.
ارور (یا بهتره بگیم خطا)

الان میرم داکیومن ها رو چک میکنم
داکیومنت‌ها (یا بهتره بگیم مستندات)

سه‌پست داشتید، چهار تا اشتباه در نوشته‌ها بود. در پست‌های دیگه‌ای که داشتید هم به همین صورته. لطفا رعایت کنید.
از من چه انتظاری داری که با همچین فونتی بتونم درست بنویسم یا بخونم؟؟؟

این مشکل هم فقط در انجمن دارم
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #6 : 21 اسفند 1402، 09:16 ب‌ظ »
درود

دارم برنامه ام رو یکم پیشرفت تر میکنم و خواستم یکم با این کتابخونه ncurses یکم راه بیفتم.میخوام از arrow key  استفاده کنم اما انگار کار نمیکنه  ???
#include <ncurses.h>

int  main()
{
  initscr();
  clear();
  noecho();
  curs_set(0);
  cbreak();
  refresh();
  int ch;
  int x, y;
  x = COLS / 2;
  y = LINES / 2;
 
  while (1)
  {
    clear();
    mvprintw(y, x, "*");
    ch = scanw("%d", &ch);
    refresh();
    switch(ch)
    {
      case KEY_UP:
      if(y > 0 && LINES -1)
        {
          y--;
        }
      break;
      case KEY_DOWN:
      if(y < 0 && LINES -1)
        {
          y++;
        }
      break;
      case KEY_LEFT:
      if(x > 0 && COLS -1)
        {
          x--;
        }
      break;
      case KEY_RIGHT:
      if(x < 0 && COLS -1)
        {
          x++;

        }
      break;
      default:
      continue;
    }

  }
  endwin();
  return 0;
}
امیدوارم که کد بنده اشتباه باشه
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1270
  • جنسیت : پسر
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #7 : 21 اسفند 1402، 09:42 ب‌ظ »
متاسفانه به راهنمایی‌ها توجهی نمی‌کنید و گام‌به‌گام کارها را پیش نمی‌برید. به این شکل بدیهیه که سرعت کارتون کم می‌شه و نمی‌تونید مسائل را به درستی پیش ببرید.


اینجا برنامه‌ای را می‌بینید که به ساده‌ترین شکل ممکن با استفاده از کتابخانهٔ ncurses کلیدهای جهتی را دریافت می‌کند و آن را چاپ می‌کند.
می‌توانید از این برنامه و منطق در مسئلهٔ خودتون استفاده کنید.


حتا در اینجا از مستندات خود ncurses سریع‌تر می‌تونستید به پاسخ برسید.


دنبال کردن نکات همین پیوند برای برنامه‌های ساده کافی است.

چند سال پیش یک برنامهٔ snake مشابه چیزی که در ارسال‌های پیشین اشاره کردم نوشته بودم متاسفانه الان پیداش نمی‌کنم.


« آخرین ویرایش: 21 اسفند 1402، 10:04 ب‌ظ توسط esmaeelE »

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #8 : 21 اسفند 1402، 10:42 ب‌ظ »
از من چه انتظاری داری که با همچین فونتی بتونم درست بنویسم یا بخونم؟؟؟
انتظارم از شما اینه که درست بنویسید. اگر نوشتار انجمن اذیتتون می‌کنه، تنظیمات مرورگر رو تصحیح کنید که مشکلی نداشته باشید.

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #9 : 21 اسفند 1402، 11:01 ب‌ظ »
متاسفانه به راهنمایی‌ها توجهی نمی‌کنید و گام‌به‌گام کارها را پیش نمی‌برید. به این شکل بدیهیه که سرعت کارتون کم می‌شه و نمی‌تونید مسائل را به درستی پیش ببرید.


اینجا برنامه‌ای را می‌بینید که به ساده‌ترین شکل ممکن با استفاده از کتابخانهٔ ncurses کلیدهای جهتی را دریافت می‌کند و آن را چاپ می‌کند.
می‌توانید از این برنامه و منطق در مسئلهٔ خودتون استفاده کنید.


حتا در اینجا از مستندات خود ncurses سریع‌تر می‌تونستید به پاسخ برسید.


دنبال کردن نکات همین پیوند برای برنامه‌های ساده کافی است.

چند سال پیش یک برنامهٔ snake مشابه چیزی که در ارسال‌های پیشین اشاره کردم نوشته بودم متاسفانه الان پیداش نمی‌کنم.

من پی دی اف این پرونده رو دانلود کردم و برای چندین بار خوندم اما بعضی از بذنامه ها هم حتی با کپی پیست اجرا هم نمیشن!!!!
من دلم میخواد خودم تو برنامه غرق بشم و کشف کنم بخاطر همین فهمیدم که باید از تابعی به نام keypad استفاده کنم اما تاثیری نداشت.
باز هم ممنونم دوباره مطالعه میکنم.مشکلی اومد خبر میکنم
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #10 : 21 اسفند 1402، 11:04 ب‌ظ »
از من چه انتظاری داری که با همچین فونتی بتونم درست بنویسم یا بخونم؟؟؟
انتظارم از شما اینه که درست بنویسید. اگر نوشتار انجمن اذیتتون می‌کنه، تنظیمات مرورگر رو تصحیح کنید که مشکلی نداشته باشید.
من فقط در انجمن و هنگام نوشتن این مشکل رو دارم چرا باید تنظیمات کل مرورگر رو بهم بریزم؟؟ مشکل از فونت انجمن و چندین بار تو قست انتقادات و پیشنهادات این مورد رو دیدم ولی فکر نمیکردم در این حد جدی باشه!  فکر کنم به خاطر فونت انجمن هم که  شده عینکی میشم ](*,)
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1270
  • جنسیت : پسر
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #11 : 21 اسفند 1402، 11:32 ب‌ظ »
خیلی خوبه. به تلاش ادامه بدید.

می‌تونم بگم اولین کاری که باید برای برنامه‌نویسی با ncurses انجام بدین مطالعهٔ این آموزش و پیش رفتن گام به گام با تمرین‌ها است.


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

سعی کنید از مسیر و گام‌هایی که در این روند طی می‌کنید برای خودتون یادداشت بردارید و از دانسته‌هاتون مطمئن شوید. هیچ قطعه کدی را بدون فهمیدن به برنامه اضافه نکنید.

برای توابع هم یک توضیح بنویسید. سعی کنید هر برنامه یک توضیح کلی داشته باشد از روش اجرا کردن کد که برای یک برنامهٔ C شامل مراحل کامپایل کردن مثلا با gcc و نوشتن makefile برای اون هست.

برای README پروژه‌ٔ مشابه را ببینید ایده بگیرید و تکمیل ترش کنید.


به نظر من برنامه نویسی فقط یک کدی که کار می‌کند نیست. در واقع درک و بینش  شما از برنامه‌ای که نوشتید به آن کد ارزش می‌دهد.

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

در نظر داشته باشید ممکن است هم اکنون این برنامه‌ها کاربرد خاصی نداشته باشند اما تجربه‌ها و آموخته‌هایتان در این فرایند چیزی است که ماندگار است و در پروژه‌ها و برنامه‌های آتی جدی که خواهید نوشت بسیار به کار خواهد آمد.

« آخرین ویرایش: 11 فروردین 1403، 11:11 ب‌ظ توسط esmaeelE »

آفلاین learner:~$

  • Hero Member
  • *
  • ارسال: 816
  • جنسیت : پسر
  • روزی روز گاری در گنو/لینوکس
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #12 : 21 اسفند 1402، 11:54 ب‌ظ »
من واقعا از لطف شما بسیار ممنونم تونستم برنامه رو بنویسم و قرار بازیم رو فردا به طور کامل پیاده سازی کنم.
خیلی ممنونم که کمک کردید. مشکلی بود حتما خبر میدم.
من دلم میخواست که در عرض ۳ ماه برنامه نویسی یاد بگیرم! اما نشد و هرچقدر جلو تر میرم میفهمم که هیچی بلد نیستم.  :)
مثل سمی کالونم( ; ).
خواستار پایان.
محکوم به کامپایل.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #13 : 22 اسفند 1402، 01:55 ق‌ظ »
من فقط در انجمن و هنگام نوشتن این مشکل رو دارم چرا باید تنظیمات کل مرورگر رو بهم بریزم؟؟
چون انجمن برای این قسمت از نوشتار استاندارد monospace مرورگر شما استفاده می‌کنه. اگر از نوشتار استاندارد monospace مرورگرتون راضی نیستید، خب عوضش کنید. اگر به نظرتون نوشتار استاندارد monospace مرورگر شما مناسبه و نیاز به بهم ریختن نداره، خب دیگه از اون لذت ببرید.

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1270
  • جنسیت : پسر
پاسخ : چاپ کردن در موقعیت های رندوم
« پاسخ #14 : 22 اسفند 1402، 09:37 ق‌ظ »
من واقعا از لطف شما بسیار ممنونم تونستم برنامه رو بنویسم و قرار بازیم رو فردا به طور کامل پیاده سازی کنم.
خیلی ممنونم که کمک کردید. مشکلی بود حتما خبر میدم.
من دلم میخواست که در عرض ۳ ماه برنامه نویسی یاد بگیرم! اما نشد و هرچقدر جلو تر میرم میفهمم که هیچی بلد نیستم.  :)

به جز منابعی که قبلا برای C معرفی کردم و بعد از اینکه آنها را مطالعه کردید


برای عمیق‌تر شدن می‌تونید ویدیوهای JacobSorber را نگاه کنید.


« آخرین ویرایش: 22 اسفند 1402، 09:43 ق‌ظ توسط esmaeelE »