براي برنامه نويسي در محيط گرافيكي نياز به مقدماتي براي ورود به محيط گرافيك است . اولين خط هر برنامه گرافيكي بعد از دستور Program ، فرمان زير است :
Uses graph ;
با استفاده از دستور uses برنامه شما مي تواند از پيمانه ها و ثوابت توربو پاسكال استفاده كند . اين ثوابت و پيمانه ها در فايلي كه يك unit ناميده مي شود جاي مي گيرند . كدي كه در حالت گرافيكي توسط كامپيوتر توليد مي شود ، به نوع كامپيوتر بستگي دارد . بنابراين نوع سخت افزار گرافيكي كه در اختيار سيستم است بايد به توربو پاسكال اعلام شود . براي اين كار از دو متغير Driver و Mode بصورت زير استفاده مي شود :
Var
Driver , Mode : Integer ;
محتواي اين دو متغير نوع سخت افزارهاي گرافيكي سيستم را مشخص مي كند . براي تعيين حالت گرافيكي از دستور زير استفاده مي شود :
InitGraph (Driver, Mode, ‘…….’) ;
رويه InitGraph سيستم گرافيكي شما را بررسي كرده و سپس در متغيرهاي Driver و Mode مقادير مناسب را قرار مي دهد . پارامتر رشته اي ‘……’ شاخه اي را مشخص مي كند كه در آن نرم افزار كنترل سيستم گرافيكي شما وجود دارد . رشته اي كه بدون كاراكتر است ‘ ‘ به اين معناست كه اين نرم افزار در شاخه جاري قرار دارد .
اين نرم افزار همواره در شاخه BGI قرار دارد و معمولا" در محلي است كه برنامه توربو پاسكال نصب شده است . بنابراين بايد آدرس شاخه BGI را بجاي اين رشته بنويسيم . براي انعطاف پذير شدن برنامه و قابليت اجراي آن روي سيستم هاي مختلف معمولا" يك نسخه از شاخه BGI را در شاخه اي كه برنامه در آن قرار دارد ، كپي مي كنيم .
صفحه نمايشي كه مانند يك صفحه مختصات است :
در برنامه نويسي گرافيكي موقعيت هر خط يا هر شكلي را كه روي صفحه نمايش رسم مي كنيد ، بايد كنترل كنيد . صفحه نمايش را در محيط گرافيكي بصورت مختصات X-Y تعدادي نقطه مي توان در نظر گرفت . در اكثر نمايشگرها ابعاد متداول عبارتند از : 200×320 ، 350×640 ، 480×640 . كه معمولا" تعداد نقاط در محور X ها بيشتر است .
توابع GetMaxX و GetMaxY در توربو پاسكال، به ترتيب حداكثر تعداد نقاط در Xها و Yها را برمي گردانند . بنابراين براي بدست آوردن ابعاد واقعي نمايشگر خود مي توانيد از اين توابع بصورت زير استفاده كنيد :
MaxX := GetMaxX ; MaxY := GetMaxY ;
مختصات گوشه های صفحه نمایش به صورت زیر است.

براي برگرداندن برنامه به حالت متني از دستور زيراستفاده مي كنيم .
CloseGraph ;
رنگ زمينه و متن :
بطور پيش فرض براي رنگ هاي زمينه و متن ، به ترتيب از سياه و سفيد استفاده مي شود . دستورات زير امكان تغيير رنگ زمينه و متن را فراهم مي كنند .
SetBkColor (….) ; تعيين رنگ زمينه
SetColor (….) ; تعيين رنگ متن
براي انتخاب رنگها از ثوابت رنگي يا معادل عددي رنگها طبق جدول زير استفاده مي شود :
ثابت | مقدار | ثابت | مقدار |
| Black | 0 | DarkGray | 8 |
| Blue | 1 | LightBlue | 9 |
| Green | 2 | LightGreen | 10 |
| Cyan | 3 | LightCyan | 11 |
| Red | 4 | LightRed | 12 |
| Magenta | 5 | LightMagenta | 13 |
| Brown | 6 | Yellow | 14 |
| LightGray | 7 | White | 15 |
خلاصه اي از توابع و رويه هاي گرافيكي :
· Line (X1, Y1, X2, Y2) ;
بين نقاط (X1,Y1) و (X2,Y2) خطي رسم مي شود .
· Rectangle (X1, Y1, X2, Y2) ;
مستطيلي كه قطر آن بين نقاط (X1,Y1) و (X2,Y2) است مي كشد .
· Circle (X, Y, R) ;
دايره به مركز (X,Y) و شعاع R رسم مي كند .
· Arc (X, Y, Angle1, Angle2, R) ;
كماني از زاويه Angle1 تا Angle2 و به مركز (X,Y) و شعاع R رسم مي كند .
· SetFillStyle (FilPat, FilCol ) ;
براي رنگ آميزي قسمتهايي از صفحه نمايش با رنگهاي مختلف از اين رويه استفاده مي شود تا نوع رنگ و نحوه رنگ آميزي مشخص شود .
الگوهاي رنگ آميزي و رنگها با توجه به جدول زير انتخاب مي شوند ، در اين رويه هم از نام ثابت و هم از معادل عددي مي توانيد استفاده كنيد .
تا زمانيكه بار ديگر اين رويه را فراخواني نكنيد ، اين حالت فعال خواهد بود .
ثابت | معادل عددي | الگوي رنگ آميزي | ثابت | معادل عددي | الگوي رنگ آميزي |
| EmptyFill2 | 0 | رنگ زمينه | LtBkSlashFill | 6 | \ \ \ \ (بافاصله) |
| SolidFill | 1 | بصورت توپر | HatchFill | 7 | هاشور |
| LineFill | 2 | - - - - | XhatchFill | 8 | متقاطع |
| ItSlashFill | 3 | / / / / (بافاصله) | InterLeaveFill | 9 | خط در ميان |
| SlashFill | 4 | //// (بدون فاصله) | WidDotFill | 10 | نفطه اي (بافاصله) |
| BslashFill | 5 | \\\\ (بدون فاصله) | CloseDotFill | 11 | نقطه اي(بدون فاصله) |
·
FloodFill (X, Y, Border) ;
محدوده اي را كه حاوي نقطه (X,Y) است و با خطوطي به رنگ Border محصور شده است ، با الگوي جاري رنگ آميزي مي كند .
· Bar (X1, Y1, X2, Y2) ;
مستطيلي توپر مي كشد كه قطر آن بين نقاط (X1,Y1) و (X2,Y2) است .
· PieSlice (X, Y, Angle1, Angle2, R) ;
يك برش دايره توپر مي كشد كه از زاويه Angle1 شروع شده و به Angle2 ختم مي شود و داراي مركز (X,Y) و شعاع R مي باشد .
· OutTextXY (X, Y, TextString) ;
در نقطه (X,Y) كاراكترهاي رشته TextString را چاپ مي كند .
v برنامه زير يك نمونه از برنامه نويسي ساده گرافيكي را نشان مي دهد .
uses graph;
procedure HappyFace(MidX,MidY:integer);
var
HeadRadius:integer;
begin
HeadRadius:=GetMaxY div 4;
Circle (MidX, MidY, HeadRadius);
end;
var
Driver,Mode,MidX,MidY:integer;
begin
InitGraph (Driver, Mode, ' ');
MidX:=GetMaxX div 2;
MidY:=GetMaxY div 2;
HappyFace(MidX,MidY);
OutTextXY(230, 400, '!!! Press Any Key !!!');
readln;
CloseGraph;
end.
نقاشي متحرك گرافيكي :
اگر يك رويه گرافيكي داراي پارامتر باشد ، مي توان موقعيت يك شكل را تغيير داد و يا آن شكل را در چند نقطه از صفحه نمايش رسم كرد . علاوه بر اين مي توان يك شكل را متحرك ساخت . اين كار به اين صورت انجام مي شود كه ابتدا شكلي در نقطه خاصي از صفحه نمايش رسم مي شود ، سپس از آن نقطه پاك شده و در محل ديگري رسم مي شود . با تكرار اين عمل شكل مورد نظر متحرك به نظر مي رسد .
براي تعيين سرعت حركت از يك تأخير زماني بين دفعات رسم شكل استفاده مي كنيم . براي ايجاد اين تأخير مي توان از رويه Delay (DelayTime) استفاده كرد . عدد DelayTime بر اساس ميلي ثانيه بيان مي شود و البته براي استفاده از اين تابع بايد واحد Crt را با فرمان uses Crt در ابتداي برنامه فراخواني كنيد .
v در مثال بعد با استفاده از روش گفته شده ، شكل رسم شده در مثال قبل را متحرك مي كنيم.
var
Driver,Mode,MidX,MidY:integer;
begin
InitGraph (Driver, Mode, ' ');
MidX:=0;
MidY:=0;
while ((MidX<GetMaxX) and (MidY<GetMaxY)) do
begin
HappyFace(MidX,MidY);
MidX:=MidX+50;
MidY:=MidY+50;
Delay(50);
SetFillStyle(3,4);
Bar(0,0,639,479);
end;
OutTextXY(230, 400, '!!! Press Any Key !!!');
readln;
CloseGraph;
end.
دستور كار (1 )
در محيط گرافيك توربو پاسكال برنامه اي بنويسيد كه اشكال زير را در خروجي رسم كند . سعي كنيد توابع را طوري بنويسيد كه با دريافت مختصات يك نقطه از شكل مثلا" مركز آن ، تمام شكل را رسم كند . (مانند مثال مطرح شده در جزوه) سعي كنيد تمام مختصات لازم براي رسم اشكال را با فرمول بدست آوريد و تا حد امكان از استفاده مستقيم از اعداد خودداري كنيد .

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

دستور كار (3 )
برنامه اي بنويسيد كه پنجره زير را رسم كند . براي طرح پنجره ها و رنگها به دلخواه تصميم بگيريد.

دستور كار (4 )
با استفاده از تابعي كه در دستور كار (2) نوشته ايد ، برنامه اي بنويسيد كه آدمك را به طور تصادفي در خانه هاي پنجره شماره يك ظاهر كند . به اين ترتيب كه با يك تابع شماره خانه اي را كه آدمك بايد در آن ظاهر شود ، به طور تصادفي توليد كنيد و سپس مختصات مركز آن خانه را به تابع رسم آدمك بدهيد . اين كار بايد تا زماني ادامه پيدا كند كه 10 بار آدمك در خانه هاي مختلف ظاهر و سپس ناپديد شود . تابع حركت آدمك را بدون استفاده از Delay بنويسيد . براي ايجاد حالت متحرك بعد از هر بار رسم آدمك پنجره شماره 1 بايد مجددا" رسم شود .
دستور كار (5 )
برنامه اي بنويسيد كه ماوس را در پنجره شماره 2 فعال كند و محل كليك كردن ماوس را مشخص كند . بطوريكه اگر كاربر در هر محلي از يك خانه كليك كند برنامه شماره آن خانه را بعنوان خروجي برگرداند . مثلا" اگر كاربر در هر نقطه اي از خانه شماره 1 كليك كند برنامه عدد يك را بعنوان خروجي برگرداند .
دستور كار (6 )
برنامه اي را كه در دستور كار (4) نوشته ايد طوري تغيير دهيد كه اگر در زمان حركت آدمك ، كاربر ماوس را در هر كدام از خانه هاي پنجره شماره 2 كليك كند ، آدمك بعدي ظاهر شود . يعني با هر بار كليك ماوس بازي به مرحله بعدي برود .
دستور كار (7 )
برنامه دستور كار (6) را به گونه اي تغيير دهيد كه تشخيص دهد آيا شماره خانه اي كه ماوس در آن كليك شده ، با شماره خانه اي كه آدمك در آن حركت مي كرده يكسان است يا نه ؟ در صورت يكسان بودن شماره ها يك امتياز مثبت و در صورت يكسان نبودن يك امتياز منفي به كاربر بدهيد .
پروژه نهايي :
بازي كامپيوتري طراحي شده در طول ترم را تكميل كنيد به نحوي كه بعد از هر بازي امتياز كاربر را نمايش دهد .
امكانات اضافي :
1- استفاده از طرحها و رنگهاي متنوع در طراحي پنجره ها ، خانه ها و آدمكهاي بازي .
2- ايجاد پنجره اي مخصوص نمايش امتياز كاربر در هر مرحله و در انتهاي بازي .
3- استفاده از امكانات صوتي در مراحل مختلف بازي مثل شروع بازي ، پايان بازي ، انتخاب خانه صحيح ، انتخاب خانه غلط ، ظاهر شدن آدمك جديد ، ناپديد شدن آدمك متحرك .
4- طراحي صفحه متحرك براي شروع و پايان بازي .
5- ...