• 1
  • 2
  • 3

براي برنامه نويسي در محيط گرافيكي نياز به مقدماتي براي ورود به محيط گرافيك است . اولين خط هر برنامه گرافيكي بعد از دستور 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- ...