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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: learner:~$ در 20 اسفند 1402، 12:55 ب‌ظ

عنوان: چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 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:~$ در 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 در 20 اسفند 1402، 03:00 ب‌ظ
سعی نکنید همزمان کارها را با هم پیش ببرید. کارها را گام به گام انجام دهید.
پیش از تلاش برای نوشتن برنامهٔ گرافیکی نخست برنامهٔ چاپ ستاره‌ها را بدون گرافیک و در محیط متنی بنویسید و به روش کلی کار مسلط شوید.

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

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

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


https://tldp.org/HOWTO/NCURSES-Programming-HOWTO

https://dev.to/tbhaxor/introduction-to-ncurses-part-1-1bk5

https://invisible-island.net/ncurses/ncurses-intro.html


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

https://github.com/jvns/snake


عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 20 اسفند 1402، 03:56 ب‌ظ
سعی نکنید همزمان کارها را با هم پیش ببرید. کارها را گام به گام انجام دهید.
پیش از تلاش برای نوشتن برنامهٔ گرافیکی نخست برنامهٔ چاپ ستاره‌ها را بدون گرافیک و در محیط متنی بنویسید و به روش کلی کار مسلط شوید.

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

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

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


https://tldp.org/HOWTO/NCURSES-Programming-HOWTO

https://dev.to/tbhaxor/introduction-to-ncurses-part-1-1bk5

https://invisible-island.net/ncurses/ncurses-intro.html


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

https://github.com/jvns/snake
درود
اتفاقا قسمت اصلی برنامه رو نوشتم خوندن صفحه کلید( دارم یه مینی گیم مینویسم). خیلی ممنون الان میرم داکیومن ها رو چک میکنم
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: nixoeen در 20 اسفند 1402، 09:09 ب‌ظ
دارم رویه یه چالش
* روی

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

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

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

سه‌پست داشتید، چهار تا اشتباه در نوشته‌ها بود. در پست‌های دیگه‌ای که داشتید هم به همین صورته. لطفا رعایت کنید.
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 21 اسفند 1402، 02:22 ب‌ظ
دارم رویه یه چالش
* روی

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

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

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

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

این مشکل هم فقط در انجمن دارم
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 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 در 21 اسفند 1402، 09:42 ب‌ظ
متاسفانه به راهنمایی‌ها توجهی نمی‌کنید و گام‌به‌گام کارها را پیش نمی‌برید. به این شکل بدیهیه که سرعت کارتون کم می‌شه و نمی‌تونید مسائل را به درستی پیش ببرید.

https://stackoverflow.com/a/75499310/7508077

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


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

https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/keys.html

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

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


عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: nixoeen در 21 اسفند 1402، 10:42 ب‌ظ
از من چه انتظاری داری که با همچین فونتی بتونم درست بنویسم یا بخونم؟؟؟
انتظارم از شما اینه که درست بنویسید. اگر نوشتار انجمن اذیتتون می‌کنه، تنظیمات مرورگر رو تصحیح کنید که مشکلی نداشته باشید.
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 21 اسفند 1402، 11:01 ب‌ظ
متاسفانه به راهنمایی‌ها توجهی نمی‌کنید و گام‌به‌گام کارها را پیش نمی‌برید. به این شکل بدیهیه که سرعت کارتون کم می‌شه و نمی‌تونید مسائل را به درستی پیش ببرید.

https://stackoverflow.com/a/75499310/7508077

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


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

https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/keys.html

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

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

من پی دی اف این پرونده رو دانلود کردم و برای چندین بار خوندم اما بعضی از بذنامه ها هم حتی با کپی پیست اجرا هم نمیشن!!!!
من دلم میخواد خودم تو برنامه غرق بشم و کشف کنم بخاطر همین فهمیدم که باید از تابعی به نام keypad استفاده کنم اما تاثیری نداشت.
باز هم ممنونم دوباره مطالعه میکنم.مشکلی اومد خبر میکنم
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 21 اسفند 1402، 11:04 ب‌ظ
از من چه انتظاری داری که با همچین فونتی بتونم درست بنویسم یا بخونم؟؟؟
انتظارم از شما اینه که درست بنویسید. اگر نوشتار انجمن اذیتتون می‌کنه، تنظیمات مرورگر رو تصحیح کنید که مشکلی نداشته باشید.
من فقط در انجمن و هنگام نوشتن این مشکل رو دارم چرا باید تنظیمات کل مرورگر رو بهم بریزم؟؟ مشکل از فونت انجمن و چندین بار تو قست انتقادات و پیشنهادات این مورد رو دیدم ولی فکر نمیکردم در این حد جدی باشه!  فکر کنم به خاطر فونت انجمن هم که  شده عینکی میشم ](*,)
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: esmaeelE در 21 اسفند 1402، 11:32 ب‌ظ
خیلی خوبه. به تلاش ادامه بدید.

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

https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html

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

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

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

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

https://github.com/jvns/snake/tree/master

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

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

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

عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: learner:~$ در 21 اسفند 1402، 11:54 ب‌ظ
من واقعا از لطف شما بسیار ممنونم تونستم برنامه رو بنویسم و قرار بازیم رو فردا به طور کامل پیاده سازی کنم.
خیلی ممنونم که کمک کردید. مشکلی بود حتما خبر میدم.
من دلم میخواست که در عرض ۳ ماه برنامه نویسی یاد بگیرم! اما نشد و هرچقدر جلو تر میرم میفهمم که هیچی بلد نیستم.  :)
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: nixoeen در 22 اسفند 1402، 01:55 ق‌ظ
من فقط در انجمن و هنگام نوشتن این مشکل رو دارم چرا باید تنظیمات کل مرورگر رو بهم بریزم؟؟
چون انجمن برای این قسمت از نوشتار استاندارد monospace مرورگر شما استفاده می‌کنه. اگر از نوشتار استاندارد monospace مرورگرتون راضی نیستید، خب عوضش کنید. اگر به نظرتون نوشتار استاندارد monospace مرورگر شما مناسبه و نیاز به بهم ریختن نداره، خب دیگه از اون لذت ببرید.
عنوان: پاسخ : چاپ کردن در موقعیت های رندوم
ارسال شده توسط: esmaeelE در 22 اسفند 1402، 09:37 ق‌ظ
من واقعا از لطف شما بسیار ممنونم تونستم برنامه رو بنویسم و قرار بازیم رو فردا به طور کامل پیاده سازی کنم.
خیلی ممنونم که کمک کردید. مشکلی بود حتما خبر میدم.
من دلم میخواست که در عرض ۳ ماه برنامه نویسی یاد بگیرم! اما نشد و هرچقدر جلو تر میرم میفهمم که هیچی بلد نیستم.  :)

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

https://forum.ubuntu-ir.org/index.php?topic=150453.msg1169817#msg1169817

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

https://www.youtube.com/@JacobSorber/playlists