بخش يازدهم برنامه نويسي گرافيك در زبان ++C

بخش يازدهم

برنامه نويسي گرافيك در زبان ++C


در اين بخش چند برنامه كاربردي را قرار مي دهم كه مطابق با بخش نهم و دهم است. يك سري رسم اشكال هندسي با دستور for كه مي توانيد از پايين دانلود نماييد.

عكس 1 كد برنامه

عكس 2 خروجي برنامه

دانلود سورس اين برنامه



عكس 3 كد برنامه

عكس 4 خروجي برنامه

دانلود سورس اين برنامه



عكس 5 كد برنامه


عكس 6 خروجي برنامه

دانلود سورس اين برنامه


عكس 7 كد برنامه

عكس 8 خروجي برنامه

دانلود سورس اين برنامه


______________________________________________________________________________

همينطور مي توانيد به مباحث قبلي برگرديد:

بخش اول برنامه نويسي گرافيك در زبان ++C

بخش دوم برنامه نويسي گرافيك در زبان ++C

بخش سوم برنامه نويسي گرافيك در زبان ++C

بخش چهارم برنامه نویسی گرافیک در زبان ++C

بخش پنجم برنامه نویسی گرافیک در زبان ++C

بخش ششم برنامه نویسی گرافیک در زبان ++C

بخش هفتم برنامه نویسی گرافیک در زبان ++C

بخش هشتم برنامه نویسی گرافیک در زبان ++C

بخش نهم برنامه نویسی گرافیک در زبان ++C

بخش دهم برنامه نویسی گرافیک در زبان ++C

بخش دهم برنامه نویسی گرافیک در زبان ++C

بخش دهم

برنامه نویسی گرافیک در زبان ++C


معرفي چند تابع كاربردي

دستور outtext

در محيط گرافيك براي نمايش متن، نوشته يا اعداد از اين دستور استفاده مي شود. به عبارت ديگر دستورات ديگر نمايشي در محيط متني مانند: printf ، puts ، cout در اين محيط كاربردي ندارد. شكل كلي اين دستور به صورت زير است:

outtext("متن دلخواه");

نكته مهم در استفاده از اين دستور اين است كه بايد خروجي بهشكل متني يا رشته اي تبديل شود تا قابل نمايش باشد. مشكل اصلي در استفاده از اين دستور در محيط گرافيكي براي نمايش اعداد مي باشد كه با استفاده از دستورات sprint و itoa كه توضيح داده مي شود، مي توان اعدا را به متن تبديل نمود. هرگاه از اين دستور استفاده شود، خروجي در مكان پيش فرض مكان نما نمايش داده مي شود.

 

دستور outtextxy

توسط اين دستور نيز مي توان متني را روي صفحه نمايش داد و البته مكان آن نيز در همين دستور مشخص مي گردد. به عبارت ديگر در اين دستور مكان و متن با هم تعيين مي شوند و به همين دليل كاربردي تر از دستور outtext مي باشد. شكل كلي اين دستور به صورت زير است:

outtextxy(x, y, "متن دلخواه");

 

دستور settextjustify

اگر براي متني كه نوشته مي شود سطحي را در نظر بگيريم توسط اين دستور تعيين مي كنيم كه كدام گوشه از متن به عنوان مختصات ذكر شده براي نمايش متن در نظر گرفته شده است. اين دستور داراي 2 قسمت مي باشد، در قسمت اول سمت چپ ، وسط يا راست را تعيين مي كنيم و در قسمت دوم پايين، وسط يا بالا را تعيين مي كنيم. به جداول زير دقت كنيد. 

متغير هاي افقي

محل مورد نظر

مقدار عددي

نام متغير

سمت چپ متن

0

LEFT_TEXT

 مركز افقي متن

1

CENTER_TEXT

سمت راست متن

2

RIGHT_TEXT

 

متغيرهاي عمودي

محل مورد نظر

مقدار عددي

نام متغير

پايين متن

0

BOTTOM_TEXT

مركز عمودي متن

1

CENTER_TEXT

بالاي متن

2

TOP_TEXT

استفاده از اين دستور باعث آدرس دهي بهتر و دقيق تر بر روي صفحه جهت نمايش متن هاي دلخواه مي شود.

 

دستور settextstyle

اين دستور داراي سه بخش مي باشد:

settextstyle(نوع فونت , جهت نوشته  , اندازه متن);

توسط اين دستور مي توان نوع فونت، اندازه متن و عمودي يا افقي بودن متني را كه مي خواهيم نمايش داده شود، تنظيم كنيم. مطمئنا براي تعيين نوع فونت مورد نظر اين دستور بايد قبل از دستورات نمايش متن مانند outtext و outtextxy به كار برده شود و اين دستور تاثيري بر روي متن هايي كه قبلا نمايش داده شده نخواهد داشت و تا زمانيكه دوباره از اين دستور استفاده نشود، تنظيمات انجام شده بر روي تمام متن هايي كه نوشته خواهد شد، اعمال مي گردد. 

انواع فونت در جدول زير نمايش داده شده است.

مقدار عددي

نوع فونت

0

Default Font

1

Triplex Font

2

Small Font

3

Sanserif Font

4

Gothic Font

5

Script Font

6

Simplex Font

7

TriplexScript Font

8

Complex Font

9

European Font

10

Bold Font

 

جهت نوشته شدن در جدول زير آمده است:

جهت نوشته شدن متن

مقدار عددي

نام متغير

از چپ به راست

0

HORIZ_DIR

از پايين به بالا

1

VERT_DIR


اندازه متن نيز مي تواند عددي بين 1 تا 8 باشد.

 

مثال 1) برنامه اي بنويسيد كه نامي را چاپ كند.

كد برنامه مانند عكس 1 است:

عكس 1

خروجي برنامه مانند عكس 2 است:

عكس 2

دانلود مثال 1 سورس برنامه چاپ رشته در خروجي

 

دستور sprintf

اين دستور خروجي دستور printf يا cout را در متغير رشته اي كه براي آن معرفي مي كنيم ذخيره مي كند و هيچ خروجي اي بر روي صفحه مايش نمي دهد. به اين شكل مي توان متغير رشته اي ساخت كه شامل اطلاعات مورد نظر ما براي نمايش در محيط گرافيكي باشد. از اين دستور هم براي تبديل اعداد به رشته استفاده مي شود و هم مي توان در صورتيكه خروجي مورد نظر داراي چند قسمت باشد به جاي اينكه هر كدام را در محيط گرافيكي توسط يك outtext جدا بنويسيم ابتدا كل رشته خروجي مورد نظر را در يك متغير رشته اي بسازيم و سپس فقط از يك دستور outtext استفاده كنيم. هنگام استفاده از اين دستور بايد فايل كتابخانه اي سرآيند #include را در ابتداي برنامه بنويسيم. شكل كلي دستور به شكل زير است:

;(نام متغير رشته اي , شكل و قالب خروجي , ليست متغيرها)Sprintf

 

دستور itoa

اين دستور يك مقدار صحيح يا integer را به يك مقدار رشته اي يا string در هر مبناي دلخواهي تبديل مي كند. شكل كلي آن به صورت زير است:

;(مقدار عددي , متغير رشته اي , مبنا)itoa

به طور مثال itoa(x, s, 10); مقدار موجود در متغير x را به صورت رشته اي در مبناي 10 را در متغير s قرار مي دهد.

 

دستور kbhit()

توسط اين دستور مي توانيم بررسي كنيم كه آيا كليدي زده شده است يا نه. از اين دستور در برنامه هايي كه مي خواهيم تا زمانيكه كليدي را نزده ايم، اجراي برنامه ادامه داشته باشد استفاده مي كنيم. هرگاه در زمان اجراي برنامه به اين دستور كه برسد اگر در آن لحظه كليدي را بفشاريم مقدار 1 را برمي گرداند و اگر در آن لحظه كليدي را نزده باشيم مقدار صفر را بر ميگرداند. مقدار 1 يا غير صفر در زبان برنامه نويسي C به معني درست يا صحيح مي باشد و مقدار صفر به معني اشتباه يا غلط و ما در برنامه دقيقا برعكس اين را مي خواهيم. به عبارت ديگر تا زمانيكه كليدي را نزده ايم مقدار درست را مي خواهيم و زمانيكه كليدي را زديم مقدار غلط را داشته باشيم تا برنامه خاتمه يابد. به همين دليل از علامت ! قبل از اين تابع استفاده مي كنيم تا نقيض مقادير در نظر گرفته شود.

مثال 2) برنامه اي بنويسيد كه يك شمارش معكوس از 9 تا 1 را شبيه سازي كند.

تحليل: با استفاده از يك حلقه for كاهشي اعداد از 9 تا 1 را توليد مي كنيم و براي نمايش اعداد در محيط گرافيگي توسط دستور outtextxy اعداد را توسط دستور sprint از حالت عددي به حالت كاراكتري تبديل مي كنيم. چون بعد از نوشته شدن هر عدد مي خواهيم عدد جديدي نوشته شود، عدد قبلي را با رنگ مشكي دوباره مي نويسيم تا پاك شود و سپس در اجراي دوباره حلقه عدد جديد نوشته خواهد شد. كد برنامه مانند عكس 3 است:

عكس 3

خروجي مانند عكس 4 است:

عكس 4

دانلود مثال 2 سورس برنامه شمارش معكوس


مثال 3) برنامه اي بنويسيد كه دور تا دور صفحه نمايش را دايره هايي به شعاع 10 پيكسل و با فاصله هاي 4 پيكسل از هم دور كند.

تحليل: در اين برنامه مي توانيم 4 حلقه براي چهار ضلع صفحه نمايش بنويسيم، يكي براي اضلاع افقي بالا و پايين و يك حلقه ديگر براي اضلاع عمودي چپ و راست. اين تمرين كاربرد حلقه هاي افزايشي و كاهشي را نمايش مي دهد. عكس 5 كد برنامه را نشان مي دهد.

عكس 5

عكس 6 خروجي برنامه را نشان مي دهد.

عكس 6

دانلود مثال 3 سورس برنامه دايره ها در حاشيه

______________________________________________________________________________

همينطور مي توانيد به مباحث قبلي برگرديد:

بخش اول برنامه نويسي گرافيك در زبان ++C

بخش دوم برنامه نويسي گرافيك در زبان ++C

بخش سوم برنامه نويسي گرافيك در زبان ++C

بخش چهارم برنامه نویسی گرافیک در زبان ++C

بخش پنجم برنامه نویسی گرافیک در زبان ++C

بخش ششم برنامه نویسی گرافیک در زبان ++C

بخش هفتم برنامه نویسی گرافیک در زبان ++C

بخش هشتم برنامه نویسی گرافیک در زبان ++C

بخش نهم برنامه نویسی گرافیک در زبان ++C

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

بخش چهارم

تحليل خطوط ابتدايي در برنامه نويسي گرافيك در زبان C++

اغلب سيستم هاي كامپيوتري با توجه به نوع سيستم عامل آنها داراي دو محطي كاري متن و گرافيك مي باشند. در محيط متني كه در اغلب ويراستارها ديده مي شود مي توان يك كاراكتر را تايپ نمودو يا حذف نمود. ولي نمي توان در اين محيط نيمي از يك كاراكتر را حذف نمود. به همين دليل مي گوييم در محيط هاي متني واحد آدرس پذير صفحه، كاراكتر مي باشد.

در محيط هاي متني مثل Word مي توان اندازه فونت را تغيير داد و بسياري اعمال ديگر در آن صورت داد اما در محيط هاي قديمي مانند DOS اندازه و فونت ثابت و قابل تغيير نبود.

در محيط هاي گرافيكي واحد آدرس پذير صفحه، پيكسل مي باشد و مي توان به هر پيكسل از صفحه رنگ دلخواهي داد. اغلب زبان هاي برنامه نويسي از محيط متني به عنوان محيط پيش فرض برنامه نويسي استفاده مي كنند.

در برنامه هاي گرافيكي بايد محيط متني را به محيط گرافيكي تبديل كنيم. براي اين منظور از دستور initgraph در برنامه هاي خود استفاده كرده ايم. دستور initgraph مخفف Initializing the Graphics System به معني راه اندازي و آماده سازي محيط گرافيكي است. بر خلاف محيط هاي متني كه داراي ابعاد ثابتي بود (اغلب در DOS اين صفحه داراي 80 ستون و 25 سطر بود) محيط گرافيكي بسيار متنوع و قابل تنظيم مي باشد.

دستور initgraph()

داراي 3 پارامتر است:

initgraph(graph driver, graph mode, path to driver);

 graph driver راه انداز محيط گرافيكي است كه با توجه به سخت افزار تعيين مي شود.

راه اندازهاي گرافيكي متنوعي در حال حاضر وجود دارند و هر روز در حال تكامل هستند. قديمي ترين راه انداز گرافيكي CGA يا Color Graphics Adaptor است كه در آن ابعاد 200*320 پيكسل با 4 رنگ است.

در اين جدول انواع راه انداز هاي گرافيكي و معادل عددي هر كدام ديده مي شود.

PC3270

VGA

ATT400

HERCMONO

IBM8514

EGAMONO

EGA64

EGA

MCGA

CGA

DETECT

10

9

8

7

6

5

4

3

2

1

0

 

راه انداز گرافيكي را مي توان به شكل هاي مختلفي استفاده كرد كه به آنها graph mode مي گويند. با تعيين اين مقدار، دقت صفحه نمايش، تعداد و نوع رنگ ها مشخص مي شود.

درقسمت سوم يعني PATH TO DRIVER مسير فايل هاي راه انداز گرافيكي مورد نياز برنامه را معرفي مي كنيم. براي تعيين راه انداز و حالت دلخواه در زبان C++ دو متغير صحيح با نام هاي دلخواه تعريف مي كنيم. براي مثال ما در همه برنامه هايمان تا اينجا و از اين به بعد از نامهاي gd برايgraph driver و  gm‌براي graph mode استفاده كرده ايم. مثال:

 int gd, gm;

 gd = VGA;

 gm = VGAHI;

يادتان باشد زبان برنامه نويسي C و C++ به حروف بزرگ و كوچك حساس هستند. اصلاحا Case Sensitive هستند.

مي توان معادل عددي هر كدام را نيز با توجه به جدول بالا نوشت.

راه حل بهتري براي براي تعريف حالت گرافيكي در C++ وجود دارد. در اين روش به graph driver مقدار DETECT يا 0 را مي دهيم. در اين حالت بهترين حالت گرافيكي قابل استفاده در سيستم با توجه به سخت افزار تعيين مي شود و ديگر نيازي به حفظ كردن نام حالت هاي گرافيكي يا معادل عددي آن ها نمي باشد. در اين حالت طبق برنامه هاي قبلي ما اين دستور را مي نويسيم:

  int gd,gm;

 gd = DETECT;

در اين تعريف صفحه اي با ابعاد 480*640 و 16 رنگ قابل مشاهده است.

براي استفاده از راه انداز و حالت گرافيكي كورد نظر در دستور initgraph در قسمت اول gd‌و در قسمت دوم gm را مي نويسيم. اگر به هر دليلي initgraph نتواند محيط گرافيكي را ايجاد نمايد اين دو متغير مقدارشان تغيير مي كند. براي برگرداندن مقادير جديد به برنامه دز زبان C++ بايد آدرس اين دو متغير به تابع ارسال شود و اين كار توسط علامت & قبل از نام هر متغير انجام مي شود.

 int gd, gm;

 gd = DETECT;

 initgraph(&gd, &gm, path to driver);

در قسمت سوم يعني path to driver‌براي تعيين مسير بايد آدرس شاخه bgi كه شامل فايل هاي راه انداز و فايل هاي فونت مي باشد را تعيين كنيم. براي اين منظور آدرس درايو و نام شاخه اي كه C++ را در آن نصب كرده ايم را مي نويسيم. به طور مثال اگر كامپايلر C++ بر روي درايو C: باشد و در شاخه TC نصب شده باشد به شكل "c:\\tc\\bgi" مي نويسيم. اگر بخواهيم درايو و مسير را در نظر نگيرد بهتر است آن را به شكل "..\\bgi"‌بنويسيم.

حالتي كه براي آدرس دهي توضيح داده شد، مخصوص استفاده از كامپايلرهايي مثل Turbo C، Borland C، DosBox و غيره است. اما همانطور كه در فصل اول توضيح داديم ما از كامپايلري متفاوت به نام Dev-C++ استفاده مي كنيم و تمامي عكسها و برنامه هاي خود را در اين برنامه انجام داده ايم و سورس دانلود تحت اين برنامه قابل مشاهده و رويت است. دليل هم سادگي استفاده از اين كامپايلر و قدرت بيشتر براي يك سري از كارهاست. براي آدرس دهي شاخه bgi در اين كامپايلر بايد آنرا با كمي تفاوت نوشت:

 initgraph(&gd, &gm, ":..\\bgi");

همانطور كه مي بينيد يك : قبل از .. وجود دارد.

همينطور در حالت كلي براي استفاده در تمامي كامپايلرها مي توانيم initgraph‌را به شكل زير نيز بنويسيم:

initgraph(&gd, &gm, "");

بعد از اجراي صحيح اين دستور يك صفحه مشكي گرافيكي ايجاد مي شود كه آماده اجراي دستورات مي باشد. در انتهاي برنامه از دستور closegraph() براي تبديل محيط گرافيكي به محيط متن استفاده مي شود، ولي چون بعد از اجراي اين دستور كل صفحه پاك مي شود و يك صفحه مشكي متني نمايش داده مي شود، قبل از اجراي اين دستور توسط دستوراتي مانند getch(; يا delay توقفي در برنامه ايجاد مي كنيم تا بتوانيم خروجي را ببينم. البته نوشتن يا ننوشتن تغيير خاصي در برنامه ايجاد نمي كند.

براي اجراي دستورات گرافيكي بايد فايل سرآيند يا heard file‌با نام graphics.h را توسط #include به برنامه معرفي كنيم. همچنين در تمامي برنامه هاي گرافيكي اي كه تا امروز نوشته ايم و خواهيم نوشت دستورات موجود در فايل سرآيند conio.h مورد نياز است كه همان Consol Input/Output يا كنسول ورودي و خروجي است.


نکته: میتوان به جای استفاده از تابع ()initgraph از تابع ()initwindow برای مشاهده پنجره خروجی استفاده کنیم. تفاوتی که این دو با هم دارند در این است که تابع ()initgraph سایز صفحه خروجی اش 479*639 است ولی در تابع ()initwindow می توان آنرا دستی مقداردهی کرد و همین طور می توان عنوان پنجره خروجی را خودمان تعیین کنیم. شکل استفاده از این تابع به صورت زیر است:

عکس 1


تا اينجا كه توضيح داده شد يعني 3 بخش آموزشي، به ساده ترين دستورات پرداخته ايم شامل line، circle، rectangle و زياد درباره تحليل خطوط ثابت كه امروز توضيح داده شد بحثي به ميان نيامده بود. هدف ابتدا نحوه نوشتن و اجرا كردن برنامه و آشنايي با كامپايلر Dev-C++ بود. همچنين يك سري سورس كد براي هر بخش در نظر گرفته شده بود كه قابل دانلود بودند. در انتهاي اين پست مي توانيد يك سري برنامه ديگر با همين مواردي كه تا امروز توضيح داده ام را دانلود كنيد.

دانلود پرچم ايران


دانلود لوگو شبكه خبر


دانلود لوگوي شبكه يك


دانلود لوگو بانك كارآفرين با تغيير 1


دانلود لوگو بانك كارآفرين با تغيير 2


دانلود لوگو سيتروئن


دانلود لوگو ميتسوبيشي


دانلود لوگو!!!


در اين برنامه ها يكسري دستور وجود دارند كه به توضيح آنها مي پردازيم و مي توانيد با سورس هايي كه در بالا قرار داده ايم مثالهاي كاملي را ببينيد. دستور rectangle، circle و line  در بخش هاي قبلي توضيح داده شده اند و مثالهاي كاملي از آنها در برنامه هاي قبلي موجود است، همينطور در همين مثالهاي بالا نيز موجود هستند.

دستور setcolor

اگر بخواهيم رنگ خطوط شكل را تغيير دهيم از دستور setcolor(color) استفاده مي كنيم. براي تعيين رنگ مي توان نام رنگ دلخواه را با حروف بزرگ نوشت يا از طريق جدول زير معادل عددي آن رنگ را بنويسيم كه بين 0 تا 15 است. (مجموعا 16 رنگ)

مقدار عددي

نام رنگ

0

BLACK

1

BLUE

2

GREEN

3

CYAN

4

RED

5

MAGENTA

6

BROWN

7

LIGHTGRAY

8

DARKGRAY

9

LIGHTBLUE

10

LIGHTGREEN

11

LIGHTCYAN

12

LIGHTRED

13

LIGHTMAGENTA

14

YELLOW

15

WHITE

 

دستور bar

براي رسم مستطيل توپُر مي باشد و بايد در آن مختصات دو سر يكي از قطرهاي مستطيل را نوشت:

 bar(x1,y1,x2,y2);

كه x1 بالاي، y1 چپ، x2 پايين و y2 راست است.

 

دستور setfillstyle

اگر بخواهيم رنگ داخل شكلهاي مستطيل يا هر شكل توپري را تغيير دهيم از اين دستور استفاده مي كنيم.

 setfillstyle(pattern, color);

در دستور اول نوع يا حالت پر شدن شكل را تعيين مي كنيم كه مي توانيد از اعداد 0 تا 12 در بخش pattern آن استفاده كنيد. (مي توانيد نام آنها را نيز بنويسيد اما اعداد در اينجا ساده ترند!) اما حالت 12 آن براي تعريف كاربر مي باشد كه در بخش هاي بعدي توضيح مي دهيم.

پارامتر دوم يعني color همان رنگ مورد نظر است و مانند دستور setcolor يا عدد يا اسم رنگ را مي نويسيم.

 

دستور setlinestyle

براي تعيين نوع خط و پهناي خط مي باشد. اين دستور داراي سه پارامتر به شرح زير است:

 setlinestyle(line style, pattern, thickness);

در  line style‌يا پارامتر اول نوع خط را تعيين مي كنيم. انواع خطوط بين 0 تا 4 مي باشند.

از pattern‌يا پارامتر دوم براي تعيين الگوي خط استفاده مي شود كه از 0 تا 4 است.

در پارامتر سوم يعني thickness پهناي خط را مشخص مي كنيم كه فقط مقادير 1 و 3 را قبول مي كند.

 

دستور arc‌ يا كمان

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

 arc(x, y, start angle, end angle, radius);


دستور ellipse

براي رسم كماني از بيضي است و در آن مختصات مركز بيضي، زاويه شروع، زاويه پايان، اندازه شعاع افقي و اندازه شعاع عمودي را بايد تعيين كنيم. اگر بخواهيم بيضي به طور كامل رسم شود زاويه شروع را 0 و زاويه پايان را 360 قرار مي دهيم. فرمت كلي:

ellipse(x, y, start angle, end angel, xradius, yradius);


دستور floodfill

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

______________________________________________________________________________

همينطور مي توانيد به مباحث قبلي برگرديد:

بخش اول برنامه نويسي گرافيك در زبان ++C

بخش دوم برنامه نويسي گرافيك در زبان ++C

بخش سوم برنامه نويسي گرافيك در زبان ++C