ابتدا مختصر درباره زبان برنامه نویسی ++C توضیح می دهم. در سال 1972 پروفسور دنیس ریچی زبان C را ساخت که در دسته زبان های برنامه نویسی سطح میانی قرار می گیرد و نسخه بعدی آن که ++C نام دارد توسط بنیامین استراستروپ دانمارکی در سال 1979 ساخته شد. در زبان ++C ویژگی کلاس نویسی و یکسری دیگر از ویژگی ها به C اضافه شد و آنرا به تکامل رساند. هسته نرم افزارهای بزرگی مثل MATLAB و Maya و Photoshop نیز به این زبان نوشته شده است.
در این سری آموزش نمی خواهیم به نحوه برنامه نویسی در ++C بپردازیم بلکه به مبحث گرافیک کامپیوتری در ++C می پردازیم. (قبلا در وبلاگ مطالبی در مورد گرافیک کامپیوتری مخصوصا OpenGL و DirectX و همینطور پروژه های آنرا برای دانلود قرار داده بودم).
شاید این نوع گرافیک کامپیوتری روشی منسوخ شده باشد، اما برای برنامه نویسان حرفه ای که کمتر در این بخش کار کرده اند و همینطور دانشجویان دوره کارشناسی و کارشناسی ارشد و حتی دکترا که به مبحث گرافیک برخورد می کنند جالب و فوق العاده حرفه ای باشد.
برای شروع کار نیاز به کامپایلری داریم تا برنامه نوشته شده را خطازدایی کند و قابلیت اجرا داشته باشد.
من در اینجا 2 نرم افزار معرفی می کنم، اما با یکی کار میکنم.
برنامه اول:
DosBox
برنامه دوم:
++Dev-C
ما در اینجا و در ادامه مباحث، در محیط ++Dev-C کار می کنیم.
نرم افزار را دانلود و نصب کنید. شما می توانید برنامه های ++C خود را در این محیط به راحتی بنویسید و از منوی Debug و سپس گزینه Debug آنرا خطازدایی کنید یا مستقیما دکمه F8 را بزنید. همینطور می تواینید آنرا از منوی Execute و سپس Compile یا کلیدهای ترکیبی Ctrl+F9 کامپایل و یا با دکمه F9 یا منوی Execute و سپس Run برنامه های نوشته شده خود را اجرا کنید. استفاده از این نرم افزار نسبت به DosBox ساده تر است و به همین دلیل این برنامه را توضیح می دهیم.
تمامی فایل های سرآیند شامل iostream.h و conio.h به صورت پیش فرض با همین برنامه در محل نصب قرار می گیرند، اما کار ما در اینجا برنامه نویسی گرافیک است و به یک فایل سرآیند دیگر به نام graphics.h نیاز داریم. بعد از نصب برنامه، ابتدا فایل سرآیند کتابخانه graphics.h را از از لینک زیر دانلود کنید:
دانلود فایل سرآیند کتابخانه graphics.h
بعد از دانلود آنرا از حالت فشرده خارج کنید. دو فایل در داخل آن وجود دارد: graphics.h و libbgi.a که لازم است در محلهایی کپی شوند. فایل graphics.h را کپی کرده و به محل نصب برنامه کامپایلر بروید. به صورت پیش فرض شما نرم افزار را در این مسیر نصب کرده اید:
C:\Dev-Cpp\include
به پوشه include بروید و فایل graphics.h را در آنجا کپی کنید. همینطور فایل libbgi.a را در پوشه lib یعنی مسیر زیر کپی کنید:
C:\Dev-Cpp\lib






حالا لازم است تا فایل های کتابخانه ای به نام های زیر را در برنامه در بخش Linker وارد نمایید. به این منظور نام های زیر را همراه با خط تیره کناریشان به برنامه اضافی کنید: (عکس7)
lbgi-
lgdi32-
lcomdlg32-
luuid-
loleaut32-
lole32-

حالا OK کنید و برنامه را دوباره ذخیره کنید تا فایل های پیوند داده شده نیز به همراه پروژه ذخیره شوند.
حالا می خواهیم یک برنامه ساده بنویسیم. (عکس 8).
کدها در بخش پایینی توضیح داده شده اند.
دو خط اول برنامه فایل های سرآیند graphics.h و conio.h را در هدر قرار می دهد. graphics.h برای گرافیک و conio.h همان console input/output است. یعنی کنسولهای ورودی و خروجی برنامه. این دو فایل ماکرو هستند (دستورات پیش پردازنده) این فایل ها به برنامه ضمیمه می شوند تا بتوانیم از توابع داخلی آنها استفاده کنیم.
سپس ()int main نوشته شده و } باز می شود و در انتهای برنامه نیز { بسته می شود و لابه لای قطعه کد برنامه یا بدنه اصلی برنامه نوشته می شود.
در خط بعدی برای اینکه بتوانیم یک پنجره برای نمایش فایل گرافیک نمایش دهیم تعریف می کنیم. ما در اینجا از تابع ()initgraph استفاده کرده ایم. برای مشاهده پنجره خروجی حالت دومی هم وجود دارد که ساده تر است، اما ما از تابع ()initgraph استفاده کرده ایم.
در خط بعدی gd یا graph drive یا راه انداز گراف و gm یا graph mode یا حالت گراف را از نوع int تعریف کرده ایم. سپس gd برابر DETECT شده است. یعنی به صورت خودکار نوع گرافیک خروجی شناسایی شود.
(حالت دوم برای این خط به این شکل است:
; gd=VGN
;gm=VGAHI
البته حالت های دیگری نیز برای این نوع وجود دارد که در آینده بررسی می کنیم).
در خط بعدی تابع ()initgraph تعریف شده است که gd و gm ثابت آن بوده و مسیری برای نمایش فایلهای درونی bgi نیز باید مشخص شود. می توان آنرا به صورت کامل مسیردهی کرد یا مانند مسیردهی ما در عکس آنرا قرار دهید.
در خط بعدی تابع ()line تعریف شده است که مختصات ورودی یک خط در صفحه نمایش را مشخص می کند. به صورت زیر تعریف میشود:
;(x1,y1,x2,y2)
x1 و y1 محل شروع خط و x2 , y2 محل پایان خط هستند. لازم به ذکر است تفاوتی بین جابجایی محل x2,y1 و x1,y1 وجود ندارد.
محور مختصات در صفحه نمایش طبق تابع ()initgraph سایز 479*639 است.
تابع ()getch خروجی را نمایش می دهد.
خط آخر return 0 باعث می شود اگر برنامه یعنی تابع ()main درست اجرا شد مقداری به سیستم عامل برگردانده شود تا سیستم عامل متوجه شود که برنامه با موفقیت به پایان رسیده است.
نکته: میتوان به جای استفاده از تابع ()initgraph از تابع ()initwindow برای مشاهده پنجره خروجی استفاده کنیم. تفاوتی که این دو با هم دارند در این است که تابع ()initgraph سایز صفحه خروجی اش 479*639 است ولی در تابع ()initwindow می توان آنرا دستی مقداردهی کرد و همین طور می توان عنوان پنجره خروجی را خودمان تعیین کنیم. شکل استفاده از این تابع به صورت زیر است:
خروجی برنامه ای که نوشته ایم به صورت زیر خواهد بود: (عکس 10)