آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic
تهیه و آموزش نرم افزار دارک بیسیک
 
 
دو شنبه 16 ارديبهشت 1392برچسب:, :: 2:41 ::  نويسنده : ابوالفضل

 نماد های مقایسه ای

استفاده از نماد های مقایسه ای زمانی است که عملگر های منطقی ( که به شرح هر یک خواهیم پرداخت ) از آن برای عملیات مقایسه ای بین اعداد و متغیر ها استفاده کنند . این علائم به شرح زیر می باشد :

 

 نمونه    

A بزرگتر از B باشد                A > B

A کوچکتر از B باشد              A < B

A بزرگتر یا مساوی  A >= B          B

A کوچکتر یا مساوی            A <= B                         

A مساوی A = B                         B        

A نامساوی   A <> B                   B

 

2 - عملگر های منطقی ( Boolean )

این عملگر ها به بررسی درستی و نادرستی معادلات عددی و کاراکتری و همچنین ترکیب ساختار عبارات می پردازند که حاصل آن عددی است شامل صفر که False در نظر گرفته می شود و یا یک که True در نظر گرفته می شود . یعنی اگر عبارت درست و منطقی باشد ، حاصل True و اگر عبارت مورد بررسی نادرست باشد ، حاصل False خواهد بود .

 

مفهوم واقعی استفاده از عملگر های منطقی :

هنگام نوشتن برنامه با متغیرها و اعداد زیادی سر و کار خواهیم داشت تا برای رسیدن به هدف دلخواهمان به بررسی موقعت های ایجاد شده در برنامه بپردازیم . شرایط ایجاد شده متشکل از مقادیر اعداد و عبارات و متغیرهای موجود در برنامه شباهت زیادی به شرایط زندگی طبیعی ما دارد . هم اکنون به بررسی هر یک می پردازیم :

 

برای مثال ما می خواهید دقیقا ساعت 9 صبح به باشگاه برویم . همچنین باید لباس مناسبی هم برای حضور در باشگاه با خود ببریم . پس اگر ما بتوانیم ساعت 9 صبح در باشگاه حضور داشته باشیم و لباسمان هم مناسب حضور در باشگاه باشد ، یک کار درست و منطقی انجام دادیم ؛ ولی اگر یکی از این دو شرط و یا هر دو را رعایت نکنیم کار درستی انجام ندادیم و به هدفمان نخواهیم رسید . 

 

2 – الف : عملگر And ( وَ )

عملگر And به بررسی عبارات می پردازد . عبارات شامل معادلات ریاضی ، معادلات کاراکتری و اعداد Boolean که شامل صفر و یک و متغییر ها می باشد . تعداد عبارات می تواند 2 و یا بیشتر باشد .  کافی است بین هر عبارت از کلمه ی And استفاده شود . عملگر And عبارات را بررسی می کند . اگر هر عبارت منطقی باشد آن را True و اگر غیر منطقی باشد آن را False در نظر می گیرد . در آخر اگر تمای عبارات True شدند ، حاصل True می شود و اگر حتی یک عبارت هم False باشد ، حاصل کل False خواهد شد . مانند دستور العمل زیر .

 

Case1 And Case2

 

طبق این دستور العمل در مرحله ی اول Case1 بررسی می شود . اگر منطقی بود ، True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در مرحله ی دوم Case2 بررسی شده اگر منطقی بود ،  True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در آخر اگر هر دو منطقی باشند ، Case1 And Case2 برابر True و اگر یکی از آنها و یا هر دو غیر منطقی باشند ، Case1 And Case2 برابر False خواهد بود .

 

زمانی Case1 And Case2 برابر True خواهد شد ، که Case1 و Case2 هر دو منطقی ( True ) باشند . مانند مثال های زیر :

 

A = 10

"Name$ = "Yes

"A > 5 And Name$ = "Yes

 

در این مثال چون A > 5 و "Name$ = "Yes هر دو منطقی و درست ( True ) هستند ،

در نتیجه کل عبارت "A > 5 And Name$ = "Yes منطقی و برابر True خواهد بود .

 

A = 78

"Name$ = "No

"A < 15 And Name$ = "Yes

 

در این مثال چون A < 15 و "Name$ = "Yes هر دو غیر منطقی و نادرست ( False ) هستند ،

در نتیجه کل عبارت "A < 15 And Name$ = "Yes غیرمنطقی و برابر False خواهد بود .

 

A = 0

"Name$ = "Yes

"A >= 0 And Name$ <> "Yes

 

در این مثال چون A >= 0 منطقی ( True ) ولی "Name$ <> "Yes غیر منطقی و نادرست ( False ) است ، در نتیجه کل عبارت "A >= 0 And Name$ <> "Yes غیرمنطقی و برابر False خواهد بود .

 

A = 12.74

"Name$ = "Yes

"A < 5 And Name$ = "Yes

 

در این مثال چون A < 5 نادرست ( False ) ولی "Name$ = "Yes منطقی و درست ( True ) است ،

در نتیجه کل عبارت "A < 5 And Name$ = "Yes غیر منطقی و برابر False خواهد بود .

 

2 – ب : عملگر Or ( یا )

عملگر Or به بررسی عبارات می پردازد . عبارات شامل معادلات ریاضی ، معادلات کاراکتری و اعداد Boolean که شامل False و True و متغیر ها می باشد . تعداد عبارات می تواند 2 و یا بیشتر باشد .  کافی است بین هر عبارت از کلمه ی Or استفاده شود . عملگر Or عبارات را بررسی می کند . اگر هر عبارت منطقی باشد آن را True و اگر غیر منطقی باشد آن را False در نظر می گیرد . در آخر اگر تمای عبارات False شدند ، حاصل False می شود در غیر این صورت حاصل True خواهند شد . یعنی اگر تنها یک عبارت هم درست باشد ، در نتیجه کل عبارات True خواهد بود . مانند دستور العمل زیر .

 

Case1 Or Case2

 

طبق این دستور العمل در مرحله ی اول Case1 بررسی می شود . اگر منطقی بود ، True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در مرحله ی دوم Case2 بررسی شده اگر منطقی بود ، True و اگر غیر منطقی بود ، False در نظر گرفته می شود . در آخر اگر هر دو غیر منتقی باشند Case1 Or Case2 برابر False و در غیر این صورت عبارت Case1 Or Case2 برابر True خواهد بود .

 

زمانی Case1 And Case2 برابر True خواهد شد ، که حداقل یکی از موارد Case1 و Case2 منطقی ( True ) باشد . مانند مثال های زیر :

 

A = 10

"Name$ = "Yes

"A > 5 Or Name$ = "Yes

 

در این مثال چون A > 5 و "Name$ = "Yes هر دو منطقی و درست ( True ) هستند ،

در نتیجه کل عبارت "A > 5 Or Name$ = "Yes منطقی و برابر True خواهد بود .

 

A = 78

"Name$ = "No

"A < 15 Or Name$ = "Yes

 

در این مثال چون A < 15 و "Name$ = "Yes هر دو غیر منطقی و نادرست ( False ) هستند ،

در نتیجه کل عبارت "A < 15 Or Name$ = "Yes غیرمنطقی و برابر False خواهد بود .

 

A = 0

"Name$ = "Yes

"A >= 0 Or Name$ <> "Yes

 

در این مثال چون A >= 0 منطقی ( True ) ولی "Name$ <> "Yes غیر منطقی و نادرست ( False ) است ، در نتیجه کل عبارت "A >= 0 Or Name$ <> "Yes منطقی و برابر True خواهد بود .

 

A = 12.74

"Name$ = "Yes

"A < 5 Or Name$ = "Yes

 

در این مثال چون A < 5 نادرست ( False ) ولی "Name$ = "Yes منطقی و درست ( True ) است ،

در نتیجه کل عبارت "A < 5 Or Name$ = "Yes منطقی و برابر True خواهد بود .

 

2 – ج : عملگر Not ( نه منتقی )

عملگر Not به بررسی عبارات می پردازد . عبارات شامل معادلات ریاضی ، معادلات کاراکتری و اعداد Boolean که شامل صفر و یک و متغییر ها می باشد . عملگر Not عبارات داخل پرانتز را بررسی می کند تا حاصل درستی یا نادرستی را معکوس در نظر بگیرد . یعنی اگر عبارت غیرمنطقی و نادرست باشد ، آن را True و اگر درست و منطقی باشد آن را False در نظر می گیرد . مانند دستورالعمل زیر .

 

(Not (Case

 

طبق این دستور العمل Case بررسی می شود . اگر منطقی بود False و اگر غیر منطقی بود True در نظر گرفته می شود . 

 

آرایه ها ( Arrays ) :

آرایه همان متغیر است . با این تفاوت که در هر متغیر تنها یک مقدار ( عدد یا عبارت متنی ) جا می گرفت . ولی هر آرایه می تواند بیشتر از یک مقدار را در خود جای دهد و تعداد مقادیر داخل آن را ما مشخص می کنیم .

 

تعریف آرایه :

برای ایجاد آرایه از دستورالعمل زیر استفاده کنیم :

 

Dim VariableName(NumIndex) As Type

 

طبق این دستورالعمل ابتدا عبارت Dim را تایپ می کنیم . سپس به جای عبارت VariableName نام آرایه ای را که می خواهیم ایجاد کنیم قرار می دهیم . سپس یک پرانتز باز می کنیم و به جای NumIndex به تعداد مورد نیازمان عضو در آرایه ایجاد می کنیم . سپس پرانتز را می بندیم . عبارت As جزء دستورات کلیدی DarkBasic می باشد که باید حتما نوشته شود . سپس به جای Type نوع متغری را که می خواهیم تعریف کنید همانند نوع متغیر ها ( از جدول متغیرها ) انتخاب و تایپ می کنیم ( بغیر از REAL ) . به مثال زیر توجه کنید .

 

Dim MyNumber(10) As Integer

 

در این مثال آرایه ای با نام MyNumber از نوع Integer و به تعداد 11 عضو ایجاد و معرفی شد . با نوشتن عدد 10 تعداد 11 عضو ایجاد شد دلیل آن این است بیشترین عدد 10 و کمترین آن صفر است و چون صفر هم جزء عضو ها حساب می شود ، پس ما 11 عضو در این آرایه ایجاد کردیم .

 

با استفاده از دستور UnDim می توانیم آرایه ی ایجاد شده ( برای مثال آرایه ی بالا با نام MyNumber ) را حذف کنیم مانند زیر :

 

()UnDim MyNumber

 

کاربرد آرایه ها :

برنامه ای می نویسیم که در آن معدل نمرات درس ریاضی چهل دانش آموز باید حساب شود . پس باید 40 متغیر تعریف کنیم مانند زیر :

 

Number1 = 17

Number2 = 12

Number3 = 20

تا آخر . . .

 

ما می توانیم با استفاده از دستور Dim آرایه ای از متغیرها با نام Number ایجاد کنیم . به جای استفاده از خطوط بالا مانند دستور زیر عمل می کنیم :

 

(Dim Number(40

Number(1) = 17

Number(2) = 12

Number(3) = 20

تا آخر . . .

 

در خط اول 40 متغیر با نام Number ایجاد و در خطوط بعدی آنها را مقدار دهی کردیم . سپس آن ها را چاپ می کنیم .

 

(Print Number(1

(Print Number(2

(Print Number(3

تا آخر . . .

 

ما می توانیم به جای دستورات بالا با استفاده از دستور زیر محتویات درون تمام 40 متغیر آرایه ای را چاپ کنیم :

 

For T = 1 To 40

(Print Number(T

Next T

 

ما با استفاده از دستور بالا به جای 40 خط تنها از 3 خط دستور استفاده کردیم .

دستور For دستورات بین عبارت ( For T = 1 To 40 ) تا ( Next T ) را چهل بار تکرار می کند و در این چهل بار مقدار متغیر T از 1 تا 40 شمرده می شود . برای یادگیری کامل عملکرد دستور For ... Next به فهرست مطالب واقع در ابتدای کتاب رجوع کنید .

 

همچنین میتوانیم با استفاده از برنامه ی زیر معدل درس ریاضی این 40 دانش آموز را حساب کنیم .

 

K = 0

For T = 1 To 40

(K = K + Number(T

Next T

Z = K / 40

Print Z

Wait Key

 

آرایه های چند بعدی :

لزومی ندارد آرایه ها تنها دارای یک بعد باشند . ما می توانیم هر مقدار بعد نیاز داشتیم ایجاد کنیم . مانند مثال های زیر .

 

مثال زیر آرایه ی یک بعدی را نشان می دهد

 

(Dim Adad(6

 

(Adad(6) Adad(5) Adad(4) Adad(3) Adad(2) Adad(1) Adad(0    

 

 

مثال زیر آرایه ی دو بعدی از نوع کاراکتری را نشان می دهد


(Dim Nm$(6,4


 

(Nm$(6,0) Nm$(5,0) Nm$(4,0) Nm$(3,0) Nm$(2,0) Nm$(1,0) Nm$(0,0

(Nm$(6,1) Nm$(5,1) Nm$(4,1) Nm$(3,1) Nm$(2,1) Nm$(1,1) Nm$(0,1

(Nm$(6,2) Nm$(5,2) Nm$(4,2) Nm$(3,2) Nm$(2,2) Nm$(1,2) Nm$(0,2

 (Nm$(6,3) Nm$(5,3) Nm$(4,3) Nm$(3,3) Nm$(2,3) Nm$(1,3) Nm$(0,3

 (Nm$(6,4) Nm$(5,4) Nm$(4,4) Nm$(3,4) Nm$(2,4) Nm$(1,4) Nm$(0,4

 

 

برای مثال ، چند نمونه از عضو های آرایه ی بالا بصورت زیر مقدار دهی شده بودند .

 

"Name$(0,0) = "Make

"Name$(0,2) = "Follow

"Name$(2,3) = "Matrix

"Name$(4,4) = "Move

"Name$(6,4) = "Texture

و غیره . . .

 

تصویر حقیقی داده های موجود در آرایه های یک بعدی و دو بعدی در اشکال بالا نشان داده شدند ، ما می توانیم آرایه هایی از نوع عدد صحیح Integer ، عدد طبیعی Real و یا عبارات رشته ای String با هر چند بعد که نیاز داشته باشیم ، ایجاد کنیم . با استفاده از آرایه ها می توانیم برنامه های سودمندی ایجاد کنیم فقط باید مواظب باشیم تا آرایه هایمان آن قدر بزرگ نشوند تا کل حافظه ی Ram اشغال شود . در این صورت با پیغام سرریز شدن حافظه مواجه خواهیم شد . 

 

User Defined Types :

تا کنون با انواع متغیر ها آشنا شدیم . با استفاده از آرایه ها توانستیم تعداد زیادی متغیر تحت یک نام ایجاد کنیم . 

دستور Type ... EndType به ما امکان ایجاد الگویی جدید از متغیر ها را می دهد . یعنی ما می توانیم خصوصیات مختلفی شامل اعداد و عبارات گوناگون را تحت یک نام ایجاد و سازماندهی کنیم . مانند دستورالعمل زیر .

 

TYPE MyType

    Fieldname1

    Fieldname2

    Fieldname3

ENDTYPE

 

طبق این دستور العمل با استفاده از دستور TYPE الگویی با نام MyType ایجاد کریدم . سپس متغیر های مورد نیازمان را مانند Fieldname1 و Fieldname2 و Fieldname3 ایجاد کردیم و در آخر با استفاده از دستور ENDTYPE به الگویمان خاتمه دادیم . در این دستور ما سه متغیر از نوع صحیح ( Integer ) تعریف کردیم . ما می توانیم به تعداد نیازتان متغیر ( عدد یا کاراکتر ) تعریف کنیم . دستور Type ... EndType را می توان در یک خط هم نوشت . مانند مثال زیر :

 

TYPE MyType Fieldname1 Fieldname2 Fieldname3 ENDTYPE

 

کاربرد دستور Type ... EndType

فرض کنید ما می خواهید مشخصات 100 دانش آموز را ذخیره کنیم . ابتدا الگویمان را تحت یک نام توسط دستور Type... EndType ایجاد می کنیم . سپس یک متغیر آرایه ای شامل 100 عضو از نوع الگویمان تعریف می کنیم مانند مثال زیر :

 

Type PeopleSpecification

   Name As String

   Family As String

   Weight As Byte

   Phone As Double Integer

EndType


Dim People(99) As PeopleSpecification


"People(1).Name = "Matin

"People(1).Family = "Heydari

People(1).Weight = 60

People(1).Phone = 02545


Print People(1).Name

Print People(1).Family

Print People(1).Weight

Print People(1).Phone

...

 

در این مثال الگویی با نام PeopleSpecification ایجاد کردیم و چهار متغیر جهت ذخیره ی نام و نام خانوادگی و وزن و تلفن دانش آموزان ایجاد کردیم . سپس متغیری آرایه ای شامل 100 عضو ( صفر هم حساب است ) از نوع نام الگوی ساختگی مان ( PeopleSpecification ) ایجاد کردیم  و در خطوط بعد آن را مقدار دهی  ، در آخر برای امتحان مشخصات نفر اول را که وارد کرده بودیم چاپ کردیم .

 

توجه ! زمانی که از دستور Type ... EndType استفاده می کنیم ، آن را در بالا ترین خط های برنامه قرار می دهیم ، تا قبل از استفاده به DarkBasic معرفی شده باشند .

 

می توانیم از متغیر هایی درون الگویمان استفاده کنیم ، که آن متغیر ها ، خود نیز از نوع الگوی دیگری الگوبرداری شده باشند . مانند مثال زیر :

 

Type SelectPhone

   Office As Double Integer

   Home As Double Integer

   Mobile As Double Integer

EndType


Type PeopleSpecification

   Name As String

   Family As String

   Weight As Byte

   Phone As SelectPhone

EndType


Dim People(99) As PeopleSpecification


"People(1).Name = "Matin

"People(1).Family = "Heydari

People(1).Weight = 60

People(1).Phone.Office = 02545

People(1).Phone.Home = 49859

People(1).Phone.Mobile = 08478


Print People(1).Name

Print People(1).Family

Print People(1).Weight

Print People(1).Phone.Office

Print People(1).Phone.Home

Print People(1).Phone.Mobile

...

 

در این مثال متغیر Phone در الگوی ( PeopleSpecification ) از نوع الگوی (SelectPhone  ) تعریف شده است .



دو شنبه 16 ارديبهشت 1392برچسب:, :: 1:54 ::  نويسنده : ابوالفضل

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

 
دستور MAKE PARTICLES
با این دستور می توانیم منبع پخش ذره ایجاد می کنیم . مانند دستورالعمل زیر :
 
MAKE PARTICLES ParticleNumber,ImageNumber,Frequency,Radius
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذره و به جای ImageNumber شماره ی تصویر مورد نظر و به جای Frequency مقدار تراکم و به جای Radius شعاع ذرات ( اندازه ی درشتی هر ذره ) را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Particles 2,1,10,8
Do
Loop
 
در این مثال منبع ذره ای با شماره ی 2 و با تصویر شماره ی 1 و سرعت 10 و اندازه ی شعاع هر ذره 8 ایجاد و پخش می شود .
 
دستور MAKE SNOW PARTICLES
با این دستور می توانیم یک منبع پخش برف در فضا ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE SNOW PARTICLES ParticleNumber,ImageNumber,Frequency,X,Y,Z, Width,Height,Depth
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذرات برف و به جای ImageNumber شماره ی تصویر مورد نظر ( برای شکل هر یک از ذرات برف ) و به جای Frequency مقدار تراکم و به جای X و Y و Z موقعیت مکانی منبع برف در مختصات سه بعدی و به جای Width و Height و Depth پهنا و ارتفاع و طول فضای پخش ذرات فرف را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Do
Loop
 
دستور MAKE FIRE PARTICLES
با این دستور می توانیم یک منبع پخش ذرات با رفتار و حرکتی شبیه به آتش ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE FIRE PARTICLES ParticleNumber,ImageNumber,Frequency,X,Y,Z, Width,Height,Depth
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذرات آتش و به جای ImageNumber شماره ی تصویر مورد نظر ( برای شکل هر یک از شراره های آتش ) و به جای Frequency مقدار تراکم و به جای X و Y و Z موقعیت مکانی منبع آتش در مختصات سه بعدی و به جای Width و Height و Depth پهنا و ارتفاع و طول فضای پخش ذرات آتش را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\fire.Bmp" , 1
make fire particles 5, 1, 1500,-5,5,5, 10,10,10
Position Camera -5,5,-5
Do
Loop
 
دستور DELETE PARTICLES
این دستور منبع پخش ذرات ( آتش ، برف یا ذره ) را حذف می کند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\fire.Bmp",1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\snow.Bmp",2
make fire particles 5,1,1500,-5,5,5,10,10,10
make snow particles 10,2,1500,-5,5,5,10,10,10
Position Camera -5,5,-5
Wait 2000
Delete particles 5
Do
Loop
 
تابع PARTICLES EXIST
این تابع بررسی می کند که آیا منبع پخش مورد نظر وجود دارد را خیر .
اگر وجود داشته باشد تابع ()PARTICLES EXIST عدد یک و اگر وجود نداشته باشد ، عدد صفر را برمی گرداند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Particles 2,1,10,8
Do
(blnValue = PARTICLES EXIST(2
"If blnValue = 1 Then Text 10,10,"Exist
"If blnValue = 0 Then Text 10,30,"No Exist
Loop
 
در این مثال دو منبع پخش ذره ایجاد شد . یک منبع پخش ذره از نوع آتش با شماره ی 5 و یک منبع پخش ذره از نوع برف . سپس بعد از 2 ثانیه منبع پخش ذره شماره ی 5 حذف شد .
 
دستور HIDE PARTICLES
این دستور منبع پخش مورد نظر را بهمراه ذرات منتشر شده از آن را مخفی می کند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Wait 2000
Hide particles 5
Do
Loop
 
دستور SHOW PARTICLES
اگر منبع پخش مورد نظر را توسط دستور قبلی ( Hide particles ) مخفی کرده باشیم . با این دستور می توانیم آن را دوباره آشکار کنیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Wait 2000
Hide particles 5
Wait 2000
Show particles 5
Do
Loop
 
دستور POSITION PARTICLES
با این دستور موقعیت منبع پخش را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION PARTICLES ParticleNumber,X,Y,Z
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذره و به جای X و Y و Z فاصله ی منبع پخش ذره تا محور X و Y و Z محور مختصات فضای سه بعدی را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Position Particles 5,-2,4,1
Wait Key
 
تابع PARTICLES POSITION X و تابع PARTICLES POSITION Y و 
تابع PARTICLES POSITION Z
تابع ()PARTICLES POSITION X فاصله ی منبع پخش مورد نظر تا محور X مختصات فضای سه بعدی و
تابع ()PARTICLES POSITION Y فاصله ی منبع پخش مورد نظر تا محور Y مختصات فضای سه بعدی و
تابع ()PARTICLES POSITION Z فاصله ی منبع پخش مورد نظر تا محور Z مختصات فضای سه بعدی را برمی گردانند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp",1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Position Particles 5,-2,4,1
Do
((Text 10,10,"X = "+Str$(PARTICLES POSITION X(5
((Text 10,30,"Y = "+Str$(PARTICLES POSITION Y(5
((Text 10,50,"Z = "+Str$(PARTICLES POSITION Z(5
Loop
 
دستور SET PARTICLE EMISSIONS
این دستور تراکم ذرات منبع را در حین اجرای برنامه تنظیم می کنید . مانند دستورالعمل زیر :
 
SET PARTICLE EMISSIONS ParticleNumber,Frequency
 
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش و به جای Frequency مقدار تراکم منبع را قرار می دهیم که اگر Frequency صفر باشد هیچ ذره ای پخش نخواهد شد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,0,-5
Wait 2000
Set Particle Emissions 2,20
Wait Key
 
دستور POSITION PARTICLE EMISSIONS
این دستور موقعیت پخش ذرات را نسب به موقعیت منبع آن مشخص می کند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,10,-15
Wait 2000
POSITION PARTICLE EMISSIONS 2,0,10, 0
Wait Key
 
دستور COLOR PARTICLES
این دستور رنگ ذرات پخش شده از منبع را به رنگ دلخواهمان تغییر می دهد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,0,-5
Wait 2000
Color Particles 2,255,0,0
Wait Key
 
دستور ROTATE PARTICLES
این دستور منبع پخش مورد نظر را حول محور های X و Y و Z فضای سه بعدی می چرخاند . همانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
make particles 2,1,10,5
Position Camera 0,10,-15
Wait 2000
POSITION PARTICLE EMISSIONS 2,0,10,0
ROTATE PARTICLES 2,0,0,90
Wait Key
 
دستور GHOST PARTICLES ON
این دستور ذرات پخش شده از منبع پخش ذرات را با 6 مدل مختلف بصورت نیمه شفاف در می آورد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
For N = 0 To 5
(Text 10,10,Str$(N
Wait 2000
GHOST PARTICLES ON 2,N
Next N
Wait Key
 
در این مثال N تعداد حالت های شفافیت می باشد ( از 1 تا 6 )
 
دستور GHOST PARTICLES OFF
این دستور ، دستور قبلی ( GHOST PARTICLES ON ) را خنثی می کند . یعنی ذرات پخش شده از منبع به حال عادی برمی گردد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
Wait 2000
GHOST PARTICLES ON 2,4
Wait 2000
GHOST PARTICLES OFF 2
Wait Key
 
دستور SET PARTICLE VELOCITY
با این دستور می توانیم شدت پرتاب ذرات را از منبع آن را تنظیم کنیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
Wait 2000
SET PARTICLE VELOCITY 2,10
Wait Key
 
دستور SET PARTICLE GRAVITY
با این دستور وزن ذرات پخش شده از منبع را تنظیم می کنیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,50,2,50
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,0,-1,0
Position Particles 2,0,0,0
Position Camera 0,10,-20
Wait 2000
SET PARTICLE VELOCITY 2,10
Wait 2000
set particle gravity 2,1
Wait Key
 
دستور SET PARTICLE FLOOR
با این دستور می توانیم مشخص کنیم که ذرات با سطح ارتفاع منبع برخورد داشته باشند و یا بصورت آزاد به سمت پائین حرکت کنند . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Object Box 10,10,1,10
Texture Object 10,1
Make Particles 2,1,10,5
Position Object 10,-6,2,0
Position Particles 2,0,0,0
Position Camera 0,10,-100
POSITION PARTICLE EMISSIONS 2,0,1,0
Wait 2000
set particle floor 2,0
Wait 2000
set particle floor 2,1
Wait Key
 


یک شنبه 15 ارديبهشت 1392برچسب:, :: 1:49 ::  نويسنده : ابوالفضل

 با استفاده از دستورات این فصل می توانیم صفحاتی متشکل از شبکه های ( مستطیل شکل ) گوشه دار بسازیم . همچنین می توانیم لبه های میان شبکه های داخل ماتریکس را به مقدار دلخواه بالا و پایین ببریم و به تک تک شبکه های ماتریکس عکس بچسبانیم . طول و عرض کل شبکه و تعداد شبکه های طولی و عرضی داخل را ما مشخص کنیم . از ماتریکس ها می توان برای ایجاد کوه ، تپه ، غار و ناهمواری های مختلفی استفاده کرد .

 
دستور MAKE MATRIX
با این دستور می توانیم صفحه ای مشبک بسازیم . مانند دستورالعمل زیر :
 
MAKE MATRIX MatrixNumber,Width,Height,XSegments,ZSegments
 
طبق این دستورالعمل به جای MatrixNumber شماره ی ماتریکس و به جای Width طول و به جای Height عرض ماتریک و به جای XSegments تعداد شبکه های تشکیل دهنده ی طولی و به جای ZSegments تعدا شبکه های تشکیل دهنده ی عرضی را قرار می دهیم . مانند مثال زیر :
 
Make Matrix 1,500,250,25,10
Position Camera 250,150,-300
Wait Key
 
در این مثال ماتریکسی با شماره ی یک ( نام 1 ) با طول 500 و عرض 250 و با تعداد 25 شبکه ی طولی و 10 شبکه ی عرضی ( 250=10*25 ) ، در مجموع 250 شبکه ی داخلی در آن ایجاد شد .
 
تابع MATRIX EXIST
این تابع بررسی می کند که آیا ماتریکس مورد نظر وجود دارد یا خیر .
اگر ماتریکس مورد نظر وجود داشت ، تابع ()Matrix Exist مقدار یک و اگر وجود نداشت تابع ()Matrix Exist مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Matrix 2,10,10,3,3
Do
(A = Matrix Exist(2
(Text 10,10,Str$(A
Loop
 
دستور DELETE MATRIX
این دستور ماتریکس مورد نظر را حذف می کند . مانند مثال زیر :
 
Make Matrix 2,1000,500,10,20
Make Matrix 4,250,350,7,8
Delete Matrix 2
Wait Key
 
در این مثال ماتریکس شماره ی 2 حذف شد .
 
دستور POSITION MATRIX
با این دستور می توانیم موقعیت مکانی ماتریکس مورد نظر را در فضای سه بعدی مشخص کنیم . مانند دستورالعمل زیر :
 
Make Matrix 7,500,250,25,10
Position Camera 250,150,-300
Wait 1500
Position Matrix 7,50,50,0
Wait Key
 
تابع MATRIX POSITION X و تابع MATRIX POSITION Y و تابع MATRIX POSITION Z
تابع ()MATRIX POSITION X فصله ی ماتریکس تا محور X مختصات و تابع ()MATRIX POSITION Y فاصله ی ماتریکس تا محور Y مختصات و تابع ()MATRIX POSITION Z فاصله ی ماتریکس تا محور Z مختصات فضای سه بعدی را برمی گرداند . مانند مثال زیر :
 
Make Matrix 5,500,250,25,10
Position Camera 250,150,-300
Position Matrix 5,10,50,70
(X = Matrix Position X(5
(Y = Matrix Position Y(5
(Z = Matrix Position Z(5
Do
(Text 10,10,Str$(X
(Text 10,30,Str$(Y
(Text 10,50,Str$(Z
Loop
 
نکته : زمانی که اشیاء ساده ی سه بعدی را ایجاد می کردیم .نقطه ی لولایی شیء به نام پایوت ( Pivot نقطه ای در جسم می باشد که موحور X و Y و Z  آن شیء در آن نقطه همدیگر را قطع می کنند ) معمولا در وسط جسم وجود داشت و پایوت اشیاء پیچیده ی سه بعدی بنا به طراحشان در موقعیت خاصی در فضای آن جسم گذاشته می شود و در ماتریکس نقطه ی پایوت در پائین و چپ جسم قرار دارد . ما در مثال زیر موقعت یک جعبه و یک ماتریکس را در نقطه ی X=0 و Y=0 و Z=0 قرار می دهیم تا پایوت هر دو در یک نقطه مشخص شود .
 
Make Matrix 4,500,500,25,25
Make Object Box 2,10,10,10
Position Matrix 4,0,0,0
Position Object 2,0,0,0
Position Camera 0,100,-250
Wait Key
 
دستور SET MATRIX HEIGHT
با این دستور می توانیم هر یک از گوشه های بین شبکه های موجود در ماتریکس را به تنهایی بالا و یا پائین بکشیم . مانند مثال زیر :
 
MatrixNumber=4
Make Matrix MatrixNumber,500,250,25,10
Position Camera 250,150,-300
SET MATRIX HEIGHT MatrixNumber,1,2,20
Update Matrix MatrixNumber
Wait Key
 
در این مثال گوشه ای با مختصات 1و2 به مقدار 20 واحد بالا کشیده شد . یعنی اگر گوشه ها در طول ( از پائین و چپ ) به سمت راست با شماره ی صفر شروع ، و در عرض ( از پائین و چپ ) به سمت بالا با شماره ی صفر شروع شده باشند ( شمرده شوند ) . مختصات 1و2 یعنی گوشه ی دوم از چپ و سوم از پائین به مقدار 20 واحد به بالا کشیده شده . 
 
در مثال بالا از دستور Update Matrix هم استفاده کردیم تا تغیرات بوجود آمده در ماتریکس اعمال شود .
 
با اجرای مثال زیر و با استفاده از دکمه های جهت ، موقعت گوشه ی مورد نظر در ماتریکس را مشخص و با استفاده از دکمه های A و Z آن گوشه را بالا و یا پائین می کشیم .
 
MatrixNumber=4
Make Matrix MatrixNumber,500,250,25,10
Position Camera 250,150,-300
Sync On : Sync Rate 30
Do
(Text 10,10,"X = "+Str$(X
(Text 10,30,"Y = "+Str$(Y
(Text 10,50,"Height = "+Str$(H
If Upkey()=1 Then Inc Y
If Downkey()=1 Then Dec Y
If Rightkey()=1 Then Inc X
If Leftkey()=1 Then Dec X
If X < 0 Then X = 0
If X > 25 Then X = 25
If Y < 0 Then Y = 0
If Y > 10 Then Y = 10
If Inkey$()="A" Or Inkey$()="a" Then Inc H
If Inkey$()="Z" Or Inkey$()="z" Then Dec H
If H<-300 Then H=-300
If H>300 Then H=300
SET MATRIX HEIGHT MatrixNumber,X,Y,H
Update Matrix MatrixNumber : Sync
Loop
 
دستور RANDOMIZE MATRIX
این دستور تمام گوشه های بین شبکه ماتریکس را به مقدار یک عدد تصادفی بالا می کشد . مانند دستورالعمل زیر :
 
RANDOMIZE MATRIX MatrixNumber,MaximumHeight
 
طبق این دستورالعمل به جای MatrixNumber نام ماتریکس مورد نظر و به جای MaximumHeight بیشترین بالا آمدن گوشه ها را قرار می دهیم . یعنی هر گوشه ای به اندازه ای بالا می آید و بیشترین مقدار بالا آمدن گوشه ها را مقدار MaximumHeight بصورت یک عدد تصادفی بیک یک تا MaximumHeight تعیین می کند . مانند مثال زیر :
 
Make Matrix 3,500,250,25,10
Position Camera 250,150,-300
Randomize MATRIX 3,20
Update Matrix 3
Do
Loop
 
تابع GET MATRIX HEIGHT
این تابع ارتفاع هر گوشه در ماتریکس را برمی گرداند . مانند مثال زیر :
 
MatrixNumber=4
Make Matrix MatrixNumber,500,250,25,10
Position Camera 250,150,-300
SET MATRIX HEIGHT MatrixNumber,10,7,12
SET MATRIX HEIGHT MatrixNumber,0,0,-5
Update Matrix MatrixNumber
Do
X=10
Y=7
(H=Get Matrix Height(MatrixNumber,X,Y
(Text 10,10,"X= "+Str$(X)+" , Y = "+Str$(Y)+" And Height = "+Str$(H
Loop
 
دستور PREPARE MATRIX TEXTURE
با این دستور می توانیم بر روی تمامی شبکه های موجود در ماتریکس یک عکس بچسبانیم . مانند دستورالعمل زیر :
 
PREPARE MATRIX TEXTURE MatrixNumber,ImageNumber,Across,Down
 
طبق این دستورالعمل به جای MatrixNumber شماره ی ماتریکس مورد نظر و به جای ImageNumber شماره ی تصویر مورد نظر و به جای Across عدد یک و به جای Down عدد یک را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga",1
Make Matrix 3,500,250,5,2
Position Camera 250,70,-300
Randomize MATRIX 3,20
PREPARE MATRIX TEXTURE 3,1,1,1
Update Matrix 3
Do
Control Camera Using Arrowkeys 0,1,1
Loop
 
با استفاده از دکمه های جهت می توانیم حول ماتریکس گردش کنیم .


پنج شنبه 12 ارديبهشت 1392برچسب:, :: 22:51 ::  نويسنده : ابوالفضل

 با استفاده از دستورات این فصل می توانیم نور ایجاد کنیم . می توانیم رنگ آن ها ، جهت پخش ( جهتی که نور به آن سمت تابیده می شود ) و فاصله ای برد نورها ( مقدار فاصله ای که نور باید تا آن فاصله تابش داشته باشد ) و همچنین موقعیت مکانی آن ها را در فضای سه بعدی مشخص کنیم .

 
دستور MAKE LIGHT
با استفاده از این دستور می توانیم از 1 تا 7 نور جدید ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE LIGHT LightNumber
 
طبق این دستورالعمل به جای LightNumber شماره ای بین 1 تا هفت برای نام نورهای جدیدمان قرار می دهیم . یعنی تنها هشت نور می تواند در صحنه وجود داشته باشد . بعلاوه نور شماره ی صفر که نور پیش فرض صحنه است و همیشه وجود دارد . مانند مثال زیر :
 
Make Light 5
Wait Key
 
در این مثال نوری با شماره ی 5 ایجاد شد .
 
دستور DELETE LIGHT
این دستور نور ایجاد شده را از صحنه حذف می کند . مانند مثال زیر :
 
Make Light 1
Make Light 2
Delete Light 1
Wait Key
 
در این مثال نور هایی با شماره های 1 و 2 ایجاد و سپس نور شماره ی 1 حذف شد .
 
نکته : نور شماره ی صفر که نور پیش فرض صحنه است را نمی توانیم حذف کنیم .
 
دستور HIDE LIGHT
این دستور نور موجود در صحنه را غیر فعال می کند . یعنی با اجرای این دستور ، وجود نور مورد نظر هیچ تاثیری بر روی صحنه نخواهد داشت . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Cone 6,10
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,0
Wait 2000
Hide Light 0
Wait Key
 
در این مثال نور شماره ی صفر که نور پیش فرض صحنه است ، غیر فعال ( بی تاثیر ) می شود .
 
دستور SHOW LIGHT
اگر با دستور قبلی (HIDE LIGHT ) نوری را غیر غعال کرده بودیم . با این دستور می توانیم آن نور را دوباره فعال کنیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Cone 6,10
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,0
Hide Light 0
Wait 2000
Show Light 0
Wait Key
 
دستور POSITION LIGHT
با این دستور موقعت مکانی نور مورد نظرمان را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION LIGHT LightNumber,X,Y,Z
 
طبق این دستورالعمل به جای LightNumber شماره ی نور مورد نظر و به جای X و Y و Z فاصله ی نور تا محور های X و Y و Z مختصات فضای سه بعدی را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Hide Light 0 : Make Light 1
Sync On : Sync Rate 30
intAngle As Integer = 0
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Position Light 1,X,Y,Z
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
در این مثال نور شماره یک با موقعت مکانی کره ( پا به پای کره ) حرکت می کند .
 
دستور SET LIGHT RANGE
این دستور مشخص می کند که نور مورد نظرمان تا چه مسافتی را روشن کند ( با چه شدتی پخش شود ) . مانند مثال زیر :
 
Make Object Sphere 1,10 : Position Object 1,0,-50,100
Make Object Sphere 2,10 : Position Object 2,0,150,150
Make Object Sphere 3,10 : Position Object 3,70,80,150
Make Object Sphere 4,10 : Position Object 4,-30,50,130
Make Object Sphere 5,10 : Position Object 5,10,100,120
Make Object Sphere 6,10 : Ghost Object On 6
Position Object 6,0,20,150
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,40,-50
Hide Light 0 : Make Light 1
Position Light 1,0,20,150
Sync On : Sync Rate 30
intRange As Integer = 0
Do
Inc intRange : If intRange > 1000 Then intRange = 0
Set Light Range 1,intRange
(Text 10,10,"Light Range ="+Str$(intRange
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
دستور COLOR LIGHT
این دستور رنگ نور مورد نظرمان را تعیین می کند . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Hide Light 0 : Make Light 1
(Color Light 1,Rgb(255,0,0
Sync On : Sync Rate 30
intAngle As Integer = 0
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Position Light 1,X,Y,Z
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
نورها در DarkBasic به دو دسته تقسیم می شوند .
1- نور نقطه ای یا همه سویه (POINT LIGHT )
نور نقطه ای نوری است که تمام اطراف خود را نورپردازی می کند . مانند خورشید و یا شمع .
2- نور جهت دار (SPOT LIGHT )
نور جهت دار تنها یک جهت را روشن می کند . مانند چراغ ماشین و یا پروژکتور ها که تنها به یک جهت نورپردازی دارند .
 
با ایجاد نور جدید توسط دستور Make Light نور از نوع Point Light یعنی نور نقطه ای ایجاد می شدند . مانند خورشید . می توانیم توسط دستورات Set Spot Light و Set Point Light نوع نور ها را عوض کنیم . مانند دستورات زیر :
 
دستور SET POINT LIGHT
با استفاده از این دستور نور مورد نظرمان را به نور نقطه ای ( Point Light ) تبدیل می کنیم . مانند دستورالعمل زیر :
 
SET POINT LIGHT LightNumber,X,Y,Z
 
طبق این دستورالعمل به جای LightNumber شماره ی نور و به جای X و Y و Z مختصات نور را در فضا مشخص می کنیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Set Point Light 0,0,0,0
(Color Light 0,Rgb(255,255,0
Sync On : Sync Rate 30
intAngle As Integer = 0
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Position Light 0,X,Y,Z
((Text 10,10,"X = "+Str$(Light Position X(0
((Text 10,30,"Y = "+Str$(Light Position Y(0
((Text 10,50,"Z = "+Str$(Light Position Z(0
Rotate Light 0,0,90,0
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
در این مثال نور پیش فرض را به نور نقطه ای تبدیل کردیم . سپس آن را در محیط می گردانیم .
 
دستور SET NORMALIZATION ON و دستور SET NORMALIZATION OFF
دستور Set Normalization On باعث می شود که نوردهی به اشیاء ، حالت نرمال و نرمی داشته باشد و دستور Set Normalization Off این حالت را خنثی می کند .
 
دستور SET SPOT LIGHT
این دستور نور مورد نظر را به نور جهت دارد تبدیل می کند . مانند دستورالعمل زیر :
 
SET SPOT LIGHT LightNumber,InnerAngle,OuterAngle
 
طبق این دستورالعمل به جای LightNumber شماره ی نور مورد نظر و به جای InnerAngle شعاع داخلی نوری که پخش می شد به شکل مخروط را قرار می دهیم و به جای OuterAngle شعاع خارجی نوری که پخش می شود بصورت تار و به شکل مخروط است ( نیمه شفاف است تا طبیعی به نظر برسد ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 :Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
hide Light 0
make light 2
set spot light 2,45,90
color light 2,512,100,100
position light 2,0,100,0
Set Normalization On
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Control Camera Using Arrowkeys 0,1,1
rotate light 2,0,intAngle,0
Sync
Loop
 
دستور POINT LIGHT
با این دستور می توانیم جهت نور را با استفاده از مختصات یک نقطه ی فرضی در فضا مشخص کنیم . مانند دستورالعمل زیر :
 
POINT LIGHT LightNumber,X,Y,Z
 
طبق این دستورالعمل به جای LightNumber شماره ی نور مورد نظر و به جای X و Y و Z مختصات یک نقطه ی فرضی در فضا را قرار می دهیم ، تا نور به آن نقطه نگاه کند . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 :Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
hide Light 0
make light 2
set spot light 2,45,90
color light 2,512,100,100
position light 2,0,100,0
Set Normalization On
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Control Camera Using Arrowkeys 0,1,1
rotate light 2,0,intAngle,0
Point Light 2,0,0,500
Sync
Loop
 
دستور ROTATE LIGHT
این دستور نور مورد نظر را حول محور های X و Y و Z خودش می چرخاند . البته تاثیر این دستور فقط برای نورهایی از نوع Spot Light می باشد ، چون نور همه سویه به همه ی اطراف نور پخش می کند و چرخش آن تاثیری بر محیط نخواهد داشت . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
hide Light 0
make light 2
set spot light 2,45,90
color light 2,512,100,100
position light 2,0,100,0
Set Normalization On
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
(X = Object Position X(6
(Y = Object Position Y(6
(Z = Object Position Z(6
Control Camera Using Arrowkeys 0,1,1
rotate light 2,0,intAngle,0
Point Light 2,0,0,500
Sync
Loop
 
دستور FOG ON
این دستور باعث ایجاد مه در صحنه می شود .
 
دستور FOG COLOR
با این دستور رنگ مه ایجاد شده در صحنه را مشخص می کنیم .
 
دستور FOG DISTANCE
این دستور میزان دید دوربین را در مه مشخص می کند ، که کمترین دید دوربین حالتی است که در آن ،Fog Distance  برابر صفر است ، که هیچ چیز جز مه دیده نمی شود و بیشترین دید دوربین حالتی است که در آن Fog Distance برابر 5000 باشد ، که همه چیز دیده می شود و مه تاثیر بسیار کمی دارد . مانند مثال زیر :
 
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
Make Object Box 7,400,10,400 : Position Object 7,0,100,0
Make Object Sphere 6,10 : Ghost Object On 6
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
For I=1 To 6 : TEXTURE OBJECT I,1 : Next I
Position Camera 0,50,-150
Sync On : Sync Rate 60
intAngle As Integer = 0
fog on
fog distance 3500
(fog color rgb(128,128,255
Do
(Inc intAngle : intAngle = WrapValue(intAngle
Position Object 6,Sin(intAngle)*100,70,Cos(intAngle)*100
Control Camera Using Arrowkeys 0,1,1
Sync
Loop
 
دستور FOG OFF
این دستور باعث حذف مه از صحنه می شود .


چهار شنبه 11 ارديبهشت 1392برچسب:, :: 1:39 ::  نويسنده : ابوالفضل

 این فصل شامل دستوراتی برای پخش فیلم با فرمت هایی چون AVI ، MPEG ، Quick Time ، WAV ، AIFF ، AU یا SND می باشد . همچنین می توانیم انیمیشن مورد نظرمان را بر روی اشیاء سه بعدی نمایش دهیم .

 
دستور LOAD ANIMATION
این دستور انیمیشنی را بر روی حافظه فراخوانی می کند . مانند دستورالعمل زیر :
 
LOAD ANIMATION Filename,AnimationNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل حاوی انیمیشن و به جای AnimationNumber شماره ای بین یک تا 32 به انیمیشن فراخوانده شده اختصاص می دهیم ، تا آن را کنترل کنیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",1
Wait Key
 
در این مثال انیمیشنی با شماره ی 1 به روی حافظه خوانده شد .
 
دستور DELETE ANIMATION
این دستور انیمیشن فراخوانده شده به حافظه را حذف می کند . مانند دستورالعمل زیر :
 
DELETE ANIMATION AnimationNumber
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انیمیش فراخوانده شده را قرار می دهیم تا حذف شود . ( تنها از روی حافظه ی RAM حذف میشود . فایل بر روی HARD باقی خواهد ماند ) مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",1
DELETE ANIMATION 1
 
تابع ANIMATION EXIST
این تابع بررسی می کند که آیا انیمیشن مورد نظر بر روی حافظه فراخوانی شده یا نه . اگر انیمیشن مورد نظر بر روی حافظه موجود باشد ، تابع ()Animation Exist عدد یک و اگر موجود نباشد عدد صفر برگردانده خواهد شد . مانند دستورالعمل زیر :
 
(var = ANIMATION EXIST(AnimationNumber
 
طبق این دستورالعمل اگر انیمیشن مورد نظر با شماره ی AnimationNumber بر روی حافظه فراخوانی شده باشد ، تابع ()ANIMATION EXIST عدد یک را در متغیر var ذخیره خواهد کرد و اگر فراخوانی نشده باشد ، عدد صفر در متغیر var ذخیره خواهد شد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",1
"If ANIMATION EXIST(1)=1 Then Print "Animation 1 Exist
"If ANIMATION EXIST(1)=0 Then Print "Animation 1 Not Exist
(Var= ANIMATION EXIST(2
"If Var=1 Then Print "Animation 2 Exist
"If Var=0 Then Print "Animation 2 Not Exist
Wait Key
 
در این مثال چون انیمیشن با شماره ی 1 وجود داشت ، عبارت Animation 1 Exist چاپ و چون انیمیشنی با شماره ی 2 وجود نداشت عبارت Animation 2 Not Exist چاپ شد .
 
دستور PLAY ANIMATION
این دستور انیمیشن خوانده شده بر روی حافظه را بر روی صفحه ی نمایش یا بر روی Bitmap ( برای آشنایی با Bitmap به فصل نهم رجوع کنید ) نمایش خواهد داد . مانند دستورالعمل زیر :
 
PLAY ANIMATION AnimationNumber
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انمیمیشن فراخوانده شده بر روی حافظه را قرار می دهیم تا پخش شود . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
WAIT KEY
 
در این مثال انیمیشنی با شماره ی 3 فراخوانی و بر روی صفحه ی نمایش پخش خواهد شد . با اضافه کردن دو عدد دیگر به ادامه ی این دستورالعمل ، می توانیم فاصله کادر نمایش انیمیشن از بالا و چپ صفحه نمایش را تنظیم کنیم . مانند دستورالعمل زیر :
 
PLAY ANIMATION AnimationNumber,X,Y
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انمیمیشن مورد نظر و به جای X فاصله ی کادر نمایش انیمیشن تا سمت چپ صفحه نمایشگر و به جای Y فاصله ی کادر نمایش انیمیشن تا بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
WAIT 5000
PLAY ANIMATION 3,200,100
Wait Key
 
در این مثال انیمیشنی با شماره ی 3 فراخوانی و بر روی صفحه ی نمایش پخش می شود . و بعد از 5 ثانیه دوباره به فاصله ی 200 و 100 از چپ و بالای صفحه ی نمایشگر دوباره پخش خواهد شد . با اضافه کردن دو عدد دیگر به این دستورالعمل ، می توانیم طول و ارتفاع کادر نمایش انیمیشن را هم تنظیم کنیم . مانند دستورالعمل زیر :
 
PLAY ANIMATION AnimationNumber,X,Y,WIDTH,HEIGHT
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انمیمیشن فراخوانده شده بر روی حافظه و به جای X فاصله ی کادر نمایش انیمیشن تا سمت چپ صفحه نمایشگر و به جای Y فاصله ی کادر نمایش انیمیشن تا بالای صفحه ی نمایشگر و به جای WIDTH طول کادر نمایش انیمیشن و به جای HEIGHT ارتفاع کادر نمایش انیمیشن را قرار می دهیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
WAIT 5000
PLAY ANIMATION 3,200,100
Wait 5000
()PLAY ANIMATION 3,0,0,SCREEN WIDTH(),SCREEN HEIGHT
Wait Key
 
در این مثال انیمیشن شماره 3 سه بار پخش خواهد شد و در سومن بار تمام صفحه نمایش را دربر خواهد گرفت .
 
تابع ANIMATION PLAYING
این تابع بررسی می کند ، که آیا انیمیشن مورد نظرمان ( که بر روی حافظه فراخوانده شده ) در حال پخش است یا خیر . اگر در حال پخش باشد . تابع ()Animation Playing عدد یک و اگر در حال پخش نباشد ( مثلا متوقف شده باشد ) ، عدد صفر را برمی گرداند . مانند دستورالعمل زیر :
 
(Var = ANIMATION PLAYING(AnimationNumber
 
طبق این دستورالعمل اگر انیمیشن فراخوانده شده به حافظه با شماره ی AnimationNumber در حال پخش باشد تابع ()ANIMATION PLAYING مقدار یک و اگر در حال پخش نباشد ، عدد صفر را در متغیر Var ذخیره خواهد کرد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3
Sync On : Sync Rate 30
Do
(Select Animation Playing(3
   Case 1
            "Text 10,10,"Animation 3 Playing
      EndCase
      Case 0
            "Text 10,10,"Animation 3 No Playing
      EndCase
EndSelect
Sync
Loop
 
تابع ANIMATION POSITION X و تابع ANIMATION POSITION Y
تابع ANIMATION POSITION X فاصله ی کادر نمایش انیمشن از چپ صفحه ی نمایشگر و تا بع ANIMATION POSITION Y فاصله ی کادر نمایش انیمیشن تا بالای صفحه ی نمایشگر را برمی گردانند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
PLAY ANIMATION 3,200,100
" = Text 10,400,"Animation Position X
((Text 120,400,Str$(Animation Position X(3
" = Text 10,415,"Animation Position Y
((Text 120,415,Str$(Animation Position Y(3
Wait Key
 
دستور LOOP ANIMATION
این دستور انیمیشن فراخوانده شده به حافظه را دائما از اول تا آخر ، پخش خواهد کرد . یعنی تا زمانی که دستور توقف داده نشده باشد ، پخش آن بطور متوالی تا ابد ادامه خواهد داشت . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
LOOP ANIMATION 3
Wait Key
 
تابع ANIMATION LOOPING
این تابع بررسی می کند که آیا انیمیشن مورد نظر بصورت دائمی در حال پخش است یا خیر .
یعنی آیا از دستور Loop Animation برای پخش انیمیشن استفاده شده یا نه . اگر بصورت دائما پخش باشد ، تابع ()ANIMATION LOOPING مقدار یک و اگر دائما پخش نباشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",3
LOOP ANIMATION 3
((Text 300,300,Str$(Animation Looping(3
Wait Key
 
دستور PAUSE ANIMATION
این دستور انیمیش در حال پخش ( توسط دستور PLAY ANIMATION یا LOOP ANIMATION ) را موقتا متوق می کند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Play ANIMATION 4
Wait 2000
Pause Animation 4
Wait Key
 
تابع ANIMATION PAUSED
این تابع بررسی می کند که آیا انیمیشن مورد نظر با دستور Pause Animation متوقف شده یا نه . اگر متوق شده باشد تابع ()Animation Paused مقدار یک و اگر متوق نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",2
Play ANIMATION 2
"If Animation Paused(2)=1 Then Text 10,450,"Animation Paused
Wait 2000
Pause Animation 2
If Animation Paused(2)=1
   Cls
   "Text 10,450,"Animation Paused
EndIf
Wait Key
 
دستور RESUME ANIMATION
اگر انیمیشن قبلا توسط دستور PAUSE ANIMATION متوفق شده باشد . می توانیم با این دستور پخش آن را از همان فریم متوفق شده دوباره شروع کنیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Loop ANIMATION 4
Do
If Inkey$()="P" Or Inkey$()="p" Then Pause ANIMATION 4
If Returnkey()=1 Then Resume ANIMATION 4
Loop
 
با اجرای این مثال با زدن دکمه ی P انیمیشن شماره 4 موقتا متوقف می شود ، و با زدن دکمه ی Enter پخش آن از همان زمان توقف ( همان فریمی که بر روی آن توقف شده بود ) ، پخش خواهد شد .
 
دستور STOP ANIMATION
این دستور انیمیش در حال پخش را متوفق خواهد کرد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Play ANIMATION 4
Wait 2000
Stop ANIMATION 4
Wait Key
 
دستور SET ANIMATION SPEED
با این دستور سرعت پخش انیمیشن را تنظیم می کنیم . مانند دستورالعمل زیر :
 
SET ANIMATION SPEED AnimationNumber,Speed
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انیمیشن مورد نظر و به جای Speed سرعت پخش انیمیشن را بصورت عددی بین صفر تا 100 که صفر کمترین سرعت و 100 بالا ترین سرعت پخش انیمیشن می باشد . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",4
Play Animation 4
Set Animation Speed 4,50
Wait 2000
Set Animation Speed 4,100
Wait Key
 
با اجرای این مثال دو ثانیه از پخش انیمیشن با نصف سرعت ( 50 از 100 ) و بقیه ی انیمیشن با سرعت عادی پخش خواهد شد .
 
تابع ANIMATION WIDTH و تابع ANIMATION HEIGHT
تابع ()ANIMATION WIDTH طول انیمیشن و تابع ()ANIMATION HEIGHT ارتفاع انیمیشن را برمی گرداند . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",7
(Print "Animation Width = "; Animation Width(7
(Print "Animation Height = "; Animation Height(7
Wait Key
 
با اجرای این مثال طول و ارتفاع انیمیشن شماره ی 7 چاپ خواهد شد .
 
دستور PLAY ANIMATION TO IMAGE
با این دستور انیمیشن مورد نظر را بر روی شیئی از نوع Image پخش می کنیم . سپس Image مورد نظر را بر روی اشیاء سه بعدی می چسبانیم . با این کار انیمیشن مورد نظرمان بر روی اشیاء سه بعدی پخش خواهد شد . مانند دستورالعمل زیر :
 
PLAY ANIMATION TO IMAGE AnimationNumber,Image,Left,Top,Right,Bottom
 
طبق این دستورالعمل به جای AnimationNumber شماره ی انیمیشن مورد نظر بین 1 تا 32 و به جای Image شماره ی تصویر بین 1 تا 32 به جای Left فاصله ی انیمیشن تا سمت چپ تصویر و به جای Top فاصله ی انیمیشن تا بالای تصویر و به جای Right فاصله ی انیمیشن تا سمت راست تصویر و به جای Bottom فاصله ی انیمیشن تا پائین تصویر را قرار می دهیم . مانند مثال زیر :
 
LOAD ANIMATION "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\animation\mpg\DbIntro.mpg",7
Sync On:Sync Rate 30
Make Object Box 4,200,120,100 : Position Object 4,-150,0,0
Make Object Sphere 5,200 : Position Object 5,100,0,0
(Play Animation To Image 7,1,0,0,Animation Width(7),Animation Height(7
Loop Animation 7
Texture Object 4,1 : Texture Object 5,1
Position Camera -100,100,-600:Point Camera 0,0,0
Do:For I=1 To 369:YRotate Object 4,I
Sync:Next I:Loop
 
در این مثال تصویری با شماره ی 1 بطور خودکار ایجاد شد .
 


دو شنبه 9 ارديبهشت 1392برچسب:, :: 1:8 ::  نويسنده : ابوالفضل

این دسته از دستورات وظیفه ی کنترل برخورد اشاء سه بعدی با یکدیگر را دارند . یعنی با بکارگیری این دستورات می توانیم کنترل کنیم که هنگام برخورد هر شیء با شیء دیگر ، چه کاری انجام شود . برای مثال دستورات زیر را اجرا می کنیم .

 
sync on : sync rate 120 : hide mouse : color
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\fur.Bmp",2
make object box 1,400,10,400 : position object 1,0,-5,0
make object box 2,400,100,10 : position object 2,0,50,-200
make object box 3,400,100,10 : position object 3,0,50,200
make object box 4,10,100,400 : position object 4,-200,50,0
make object box 5,10,100,400 : position object 5, 200,50,0
Adam=6
make Object box Adam,10,10,10 : position object Adam,50,20,50
for t=1 to 5
 texture object t,1
next t
 texture object Adam,2
Do
if upkey()=1 Then move object Adam,2
if downkey()=1 Then move object Adam,-2
if leftkey()=1
   (yrotate object Adam,WrapValue(object angle y(Adam)-2
EndIf
if rightkey()=1
   (yrotate object Adam,WrapValue(object angle y(Adam)+2
EndIf
(xCm#=object position x(Adam):yCm#=object position y(Adam
(zCm#=object position z(Adam):aCm#=object Angle y(Adam
hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Sync
Loop
 
در این مثال با استفاده از چند جعبه ، فضایی ایجاد کردیم . با زدن دکمه های جهت بالا ، جهت پائین ، جهت راست و جهت پائین جعبه ی کوچک به جلو ، عقب ، راست و چپ حرکت خواهد کرد . ولی زمانی که به موانع برخورد می کند از آنها عبور می کند . اگر بخواهیم موانع را واقعی جلوه دهیم ( مثل دیوار سخت شوند تا نتوانیم از آن عبور کنیم ) باید برای هر شیء ( چه دیوار و چه شیء شخصیت محرک ) فضای برخورد تعریف کنیم . مانند دستور زیر :
 
دستور MAKE OBJECT COLLISION BOX
 
MAKE OBJECT COLLISION BOX ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,CollisionFlag
 
طبق این دستورالعمل به جای ObjectNumber نام شییء سه بعدی و به جای (X1 و Y1 و Z1 ) و (X2 و Y2 و Z2 ) مختصات دو نقطه نسبت به مرکز شیء سه بعدی را قرار می دهیم و به جای CollisionFlag عدد صفر یا یک را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 70 ,10,10,10
Make Object Collision Box 70,-5,-5,-5,5,5,5,1
Wait Key
 
در این مثال ابتدا یک جعبه با شماره ی 70 ایجاد کردیم و در خط بعدی با استفاده از دستور Make Object Collision Box مختصات دو نقطه نسب به مرکز شیء یعنی ، نقطه ی اول با مختصات X1=-5 ( فاصله ی نقطه ی اول تا محور X شیء سه بعدی ) و Y1=-5 ( فاصله ی نقطه ی اول تا محور Y شیء سه بعدی ) و Z1=-5 ( فاصله ی نقطه ی اول تا محور Z شیء سه بعدی ) ، و نقطه ی دوم با مختصات X2=5 ( فاصله ی نقطه ی دوم تا محور X شیء سه بعدی ) و Y2=5 ( فاصله ی نقطه ی دوم تا محور Y شیء سه بعدی ) و Z2=5 ( فاصله ی نقطه ی دوم تا محور Z شیء سه بعدی ) را قرار می دهیم . این دستور این دو نقطه را بعنوان ابتدا و انتهای قطر یک مستطیل در فضای  شیء سه بعدی در نظر گرفته و فضای برخوردی به شکل جعبه ی سه بعدی در شیء سه بعدی ایجاد می کند و در عین حال این فضا را به شیء می چسباند . اگر به جای CollisionFlag عدد یک را قرار دهیم ، موقع دوران شیء سه بعدی فضای برخورد ایجاد شده هم چرخش خواهد کرد . در هر حالت با حرکت شیء سه بعدی فضای برخورد هم همراه با شیء حرکت خواهد کرد .
 
برای فهم بهتر فضای برخورد به شکل زیر دقت کنید .
 
 
همانطور که در شکل می بینید ، هر شیء خود نیز دارای محور X و Y و Z می باشد . می توانیم نقاطی را نسبت به شیء تصور کنیم . دستور Make Object Collision Box دو نقطه در شیء ایجاد می کند . مانند شکل زیر :
 
 
مختصات X و Y و Z دونقطه نسبت به مختصات شیء سه بعدی است . یعنی مختصات نقطه های فرضی ارتباط مستقیمی با مختصات فضای بازی ندارد . دستور فوق نقاط را ابتدا و انتهای قطر یک جعبه فرض می کند و جعبه ی فرضی را بعنوان فضای برخورد شیء سه بعدی در همان شیء ایجاد می کند . مانند شکل زیر :
 
 
در مثال بالا جعبه ی کوچک بعنوان فضای برخورد جعبه ی بزرگ می باشد .
 
دستور DELETE OBJECT COLLISION BOX
با این دستور می توان فضای برخورد شیء سه بعدی را حذف کرد . مانند مثال زیر :
 
Make Object Box 70 ,50,10,30
Make Object Collision Box 70 ,-25,-5,-15,25,5,15,1
Delete Object Collision Box 70
Wait Key
 
تابع OBJECT COLLISION
این تابع به بررسی برخورد همراه با فررفتگی دو شیء سه بعدی می پردازد . اگر دو شیء با هم برخورد همراه با فرو رفتگی داشته باشند ، تابع مقدار یک و اگر برخورد همراه با فرورفتگی در هم نداشته باشند ، عدد صفر را برمی گرداند . مانند مثال زیر :
 
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
   Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
   "If Object Collision(16,20)=1 Then Text 10,10,"Collision
   Sync
Next MyAngle
Loop
 
با اجرای این مثال زمانی که کره با جعبه برخورد همراه با فرورفتگی داشته باشد ، تابع مقدار یک را برمی گرداند و عبارت Collision چاپ خواهد شد .
 
تابع OBJECT HIT
این تابع تنها به بررسی برخورد دو شیء سه بعدی با یکدیگر خواهد پرداخت . اگر دو شیء با هم برخورد داشته باشند ، تابع مقدار یک و اگر برخورد نداشته باشند ، عدد صفر برگردانده می شود . مانند مثال زیر :
 
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
   Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
   "If Object HIT(16,20)=1 Then Text 10,10,"Hit
   Sync
Next MyAngle
Loop
 
با اجرای این مثال زمانی که کره با جعبه برخورد می کند ، تابع مقدار یک را برمی گرداند و عبارت Hit چاپ خواهد شد .
 
دستور SET OBJECT COLLISION OFF و دستور SET OBJECT COLLISION ON
دستور SET OBJECT COLLISION OFF فضای برخورد شیء سه بعدی را غیرفعال
و دستور SET OBJECT COLLISION ON فضای برخورد شیء سه بعدی را دوباره فعال می کند . مانند مثال زیر :
 
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
   Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
   "If Object Collision(16,20)=1 Then Text 10,10,"Collision
   "If Inkey$()="F" Or Inkey$()="f
   Set Object Collision Off 20
EndIf
   "If Inkey$()="N" Or Inkey$()="n
   Set Object Collision On 20
EndIf
   Sync
Next MyAngle
Loop
 
با اجرای این مثال با زدن دکمه ی F فضای برخورد کره غیرفعال شده و عبارت Collision چاپ نخواهد شد و اگر دکمه ی N را بزنیم فضای برخورد شیء کره فعال شده و موقع برخورد کره با جعبه ، عبارت Collision چاپ خواهد شد .
 
تابع GET OBJECT COLLISION X و تابع GET OBJECT COLLISION Y و
تابع GET OBJECT COLLISION Z
تابع ()GET OBJECT COLLISION X مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور X ها و تابع ()GET OBJECT COLLISION Y مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Y ها  و تابع ()GET OBJECT COLLISION Z مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Z ها را برمی گرداند . یعنی هر بار این توابع خوانده شود ، مقدار حرکتی که شیء ( سه بعدی ) با برخورد با شیء دیگر داشته را برمی گرداند . مانند مثال زیر :
 
Make Object Box 200,10,10,10 : Position Object 200,0,0,0
Make Object Collision Box 200,-5,-5,-5,5,5,5,1
(Make Object Sphere 1,10 : Color Object 1,Rgb(255,0,0
(Make Object Sphere 2,10 : Color Object 2,Rgb(0,255,0
(Make Object Sphere 3,10 : Color Object 3,Rgb(0,0,255
Make Object Collision Box 1,-5,-5,-5,5,5,5,1
Make Object Collision Box 2,-5,-5,-5,5,5,5,1
Make Object Collision Box 3,-5,-5,-5,5,5,5,1
Position Camera -10,10,-60 : Point Camera 0,0,0
Sync On : Sync Rate 30
Do
For MyAngle# = 0 To 359 Step 0.5
   Position Object 1 , Sin(WrapValue(MyAngle#))*30,0,0
   If Object Collision(1,200)=1
   "Text 10,10,"Collision Red Sphere
   (()Text 10,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
   (()Text 10,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
   (()Text 10,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
   EndIf
   Position Object 2 , 0,Sin(WrapValue(MyAngle#+45))*30,0
   If Object Collision(2,200)=1
"Text 210,10,"Collision Green Sphere
   (()Text 210,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
   (()Text 210,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
   (()Text 210,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
   EndIf
   Position Object 3 , 0,0,Sin(WrapValue(MyAngle#+90))*30
   If Object Collision(3,200)=1
"Text 410,10,"Collision Blue Sphere
   (()Text 410,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
   (()Text 410,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
   (()Text 410,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
   EndIf
   Sync
Next MyAngle
Loop
 
نکته : با توجه به مثال بالا برای استفاده از این توابع ، باید حتما برای هر برخورد یک IF تعریف کنیم ، تا مقدار برگشتی تابع مطابق با شرط مورد نظرمان باشد .
 
دستور SET OBJECT COLLISION TO SPHERES
این دستور فضای برخوردی به شکل کره در اطراف شیء ایجاد می کند . مانند دستورالعمل زیر :
 
SET OBJECT COLLISION TO SPHERES ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100
SET OBJECT COLLISION TO SPHERES 10
Do
Loop
 
دستور AUTOMATIC OBJECT COLLISION
این دستور فضایی با شعاع مشخص به دور شیء سه بعدی ایجاد می کند . مانند دستورالعمل زیر :
 
AUTOMATIC OBJECT COLLISION ObjectNumber,Radius,Response
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Radius شعاع برخورد دور شیء را قرار می دهیم . اگر Response صفر باشد ، وقتی شیء به مانع متحرک برخورد کرد ، خودش به کنار کشیده میشود و اگر به مانع ثابت برخورد کرد ، نمی تواند از آن مانع عبور کند ( موانعی مثل دیوار یا تانک ) ، یا آن را کنار بزند . ولی اگر Response برابر یک باشد ، زمانی که به مانع برخورد می کند ، یا از داخل آن عبور می کند و اگر مانع متحرک باشد ( خود مانع از دستور بالا استفاده کرده باشد ) ، مانع را کنار خواهد زد . مانند مثال زیر :
 
imgAsfalt = 1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",imgAsfalt
Set Ambient Light 50
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
make object collision box 1,-200,-5,-200,200,5,200,0
make object collision box 2,-200,-50,-5,200,50,5,0
make object collision box 3,-200,-50,-5,200,50,5,0
make object collision box 4,-5,-50,-200,5,50,200,0
make object collision box 5,-5,-50,-200,5,50,200,0
For intTexture = 1 To 5
   Texture Object intTexture,imgAsfalt
Next intTexture
objMain = 10
Make Object Box objMain,10,10,10
Position Object objMain,0,970,0
(Color Object objMain,Rgb(255,0,0
objNone = 11
Make Object Box objNone,10,10,10
Position Object objNone,50,70,0
(Color Object objNone,Rgb(0,0,255
make object collision box objMain,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objMain
Automatic Object Collision objMain,5.5,0
make object collision box objNone,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objNone
Automatic Object Collision objNone,5.5,0
intAngle# = 0
Do
(#Inc intAngle#,0.1 : intAngle# = WrapValue(intAngle
If upkey()=1 Then move object objMain,0.2
If downkey()=1 Then move object objMain,-0.2
If leftkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)-0.5
EndIf
If rightkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)+0.5
EndIf
(opx=Object Position X(objMain
(opy=Object Position y(objMain
(opz=Object Position z(objMain
Position Object objMain,OPX,OPY-1,OPZ
Position Object objNone,Sin(intAngle#)*70,10,Cos(intAngle#)*70
(xCm#=object position x(objMain
(yCm#=object position y(objMain
(zCm#=object position z(objMain
aCm#=object Angle y(objMain):hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Loop
 
در این مثال زمانی که مکعب قرمز به موانع متحرک و یا ثابت برخورد می کند ( با کنترل ما توسط دکمه های جهت ) ، خود مکعب قرمز به کنار می رود . چون طبق دستورالعمل Response برابر صفر است . ولی در مثال زیر Response برابر یک شده ؛ خواهد دید موانع مقاومتی در برابر مکعب قرمز نخواهند داشت .
 
 imgAsfalt = 1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",imgAsfalt
Set Ambient Light 50
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
make object collision box 1,-200,-5,-200,200,5,200,0
make object collision box 2,-200,-50,-5,200,50,5,0
make object collision box 3,-200,-50,-5,200,50,5,0
make object collision box 4,-5,-50,-200,5,50,200,0
make object collision box 5,-5,-50,-200,5,50,200,0
For intTexture = 1 To 5
   Texture Object intTexture,imgAsfalt
Next intTexture
objMain = 10
Make Object Box objMain,10,10,10
Position Object objMain,0,970,0
(Color Object objMain,Rgb(255,0,0
objNone = 11
Make Object Box objNone,10,10,10
Position Object objNone,50,70,0
(Color Object objNone,Rgb(0,0,255
make object collision box objMain,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objMain
Automatic Object Collision objMain,5.5,1
make object collision box objNone,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objNone
Automatic Object Collision objNone,5.5,0
intAngle#=0
Do
(#Inc intAngle#,0.1 : intAngle# = WrapValue(intAngle
If upkey()=1 Then move object objMain,0.2
If downkey()=1 Then move object objMain,-0.2
If leftkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)-0.5
EndIf
If rightkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)+0.5
EndIf
(opx=Object Position X(objMain
(opy=Object Position y(objMain
(opz=Object Position z(objMain
Position Object objMain,OPX,OPY-1,OPZ
Position Object objNone,Sin(intAngle#)*70,10,Cos(intAngle#)*70
(xCm#=object position x(objMain
(yCm#=object position y(objMain
(zCm#=object position z(objMain
aCm#=object Angle y(objMain):hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Loop


جمعه 6 ارديبهشت 1392برچسب:, :: 1:23 ::  نويسنده : ابوالفضل

 دستور TURN CAMERA LEFT و دستور TURN CAMERA RIGHT

دستور TURN CAMERA LEFT دوربین پیش فرض را حول محور Y خود ، به سمت چپ و دستورTURN CAMERA RIGHT دوربین پیش فرض را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
TURN CAMERA LEFT AngleValue
TURN CAMERA RIGHT AngleValue
 
 
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Turn Camera Left 1
   If RightKey()=1 Then Turn Camera Right 1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست گردش خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور Y خود به سمت چپ و راست ، بچرخانیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
   If LeftKey()=1 Then Turn Camera Left 2,1
   If RightKey()=1 Then Turn Camera Right 2,1
Loop
 
دستور TURN OBJECT LEFT و دستور TURN OBJECT RIGHT
دستور TURN OBJECT LEFT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت چپ
و دستور TURN OBJECT RIGHT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
TURN OBJECT LEFT ObjectNumber,Value
TURN OBJECT RIGHT ObjectNumber,Value
 
طبق این دستورالعمل ها به جای ObjectNumber نام شیء و به جای Value مقدار چرخش شیء را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Turn Object Left 20,1
   If RightKey()=1 Then Turn Object Right 20,1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، جعبه به چپ و اگر دکمه ی جهت راست را فشار دهیم ، جعبه به راست گردش خواهد کرد .
 
دستور PITCH CAMERA UP و دستور PITCH CAMERA Down
دستور PITCH CAMERA UP دوربین پیش فرض را حول محور X خود ، به سمت بالا و دستورPITCH CAMERA DOWN دوربین پیش فرض را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
 
PITCH CAMERA UP AngleValue
PITCH CAMERA DOWN AngleValue
 
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If UpKey()=1 Then Pitch Camera Up 1
   If DownKey()=1 Then Pitch Camera Down 1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، دوربین پیش فرض به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، دوربین پیش فرض به پائین گردش خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
   If UpKey()=1 Then Pitch Camera Up 2,1
   If DownKey()=1 Then Pitch Camera Down 2,1
Loop
 
دستور PITCH OBJECT UP و دستور PITCH OBJECT DOWN
دستور PITCH OBJECT UP شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت بالا و دستورPITCH OBJECT DOWN شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
 
PITCH OBJECT UP Value
PITCH OBJECT DOWN Value
 
 
طبق این دستورالعمل ها به جای Value مقدار چرخش شیء ، را با یک عدد مشخص می کنیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If UpKey()=1 Then Pitch Object Up 20,1
   If DownKey()=1 Then Pitch Object Down 20,1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، شیء به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، شیء به پائین گردش خواهد کرد .
 
دستور ROLL CAMERA LEFT و دستور ROLL CAMERA RIGHT
دستور ROLL CAMERA LEFT دوربین پیش فرض را حول محور Z خود ، به سمت چپ و دستورROLL CAMERA RIGHT دوربین پیش فرض را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
ROOL CAMERA LEFT AngleValue
ROOL CAMERA RIGHT AngleValue
 
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Roll Camera Left 1
   If RightKey()=1 Then Roll Camera Right 1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست چرخش خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
   If LeftKey()=1 Then Roll Camera Left 2,1
   If RightKey()=1 Then Roll Camera Right 2,1
Loop
 
دستور ROLL OBJECT LEFT و دستور ROLL OBJECT RIGHT
دستور ROLL OBJECT LEFT شیء را حول محور Z خود ، به سمت چپ و دستورROLL OBJECT RIGHT شیء را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
 
ROOL OBJECT LEFT ObjectNumber,Value
ROOL OBJECT RIGHT ObjectNumber,Value
 
طبق این دستورالعمل ها به جای ObjectNumber شماره ی شیء سه بعدی و به جای Value مقدار چرخش شیء ، را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If LeftKey()=1 Then Roll Object Left 20,1
   If RightKey()=1 Then Roll Object Right 20,1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، شیء به چپ و اگر دکمه ی جهت راست را فشار دهیم ، شیء به راست چرخش خواهد کرد .
 
دستور CONTROL CAMERA USING ARROWKEYS
این دستور کنترل حرکت دوربین را به دکمه های جهت بالا و پایین و چپ و راست می سپارد . مانند دستورالعمل زیر :
 
CONTROL CAMERA USING ARROWKEYS CameraNumber,MoveSpeed,TurnSpeed
 
طبق این دستورالعمل به جای CameraNumber شماره ی دوربین و به جای MoveSpeed سرعت حرکت دوربین به جلو و عقب و به جای TurnSpeed سرعت چرخش دوربین به راست و چپ را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 1 : Rotate Camera 1,0,0,0 : Set Current Camera 1
Do
CONTROL CAMERA USING ARROWKEYS 1,1,1
Loop
 
اگر بخواهیم دوربین پیش فرض را با دستورالعمل بالا تحت کنترل درآوریم ، به جای CameraNumber عدد صفر را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
CONTROL CAMERA USING ARROWKEYS 0,0.5,0.1
Loop
 
دستور SET CAMERA RANGE
با این دستور می توانیم شعاعی را که دوربین پیش فرض تا آن مسافت ، اشیاء را نمایش می دهد ، از نو تنظیم کنیم . مانند دستورالعمل زیر :
 
SET CAMERA RANGE NearValue,FarValue
 
طبق این دستورالعمل ، دوربین پیش فرض ، اشیاء موجود بین فاصله ی NearValue تا FarValue از خود را نشان خواهد داد . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
FarValue = 75
NearValue = 10
Do
If UpKey() Then Inc FarValue
If DownKey() Then Dec FarValue
If FarValue > 150 Then FarValue = 150
If FarValue < 20 Then FarValue = 20
(Text 10,10,"Far = "+Str$(FarValue
SET CAMERA RANGE NearValue,FarValue
Loop
 
با اجرای این مثال با زدن دکمه های جهت بالا و پائین ، مسافت نمایش داده شده در دوربین پیش فرض تغییر خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم مسافت نمایش داده شده توسط دوربین جدید را نیز از نو تنظیم کنیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
FarValue = 75
NearValue = 10
Do
If UpKey()=1 Then Inc FarValue
If DownKey()=1 Then Dec FarValue
If FarValue > 150 Then FarValue = 150
If FarValue < 20 Then FarValue = 20
(Text 10,10,"Far = "+Str$(FarValue
SET CAMERA RANGE 2,NearValue,FarValue
Loop
 
دستور SET CAMERA TO FOLLOW
با این دستور ، دوربین پیش فرض بطور خودکار به دنبال نقطه ی مورد نظر خواهد رفت . همانند دستورالعمل زیر :
 
SET CAMERA TO FOLLOW X,Y,Z,Angle,Distance,Height,Smooth,Collision
 
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ی مورد نظر و به جای Angle زاویه ی دوربین نسبت به نقطه حول محور Y آن نقطه و به جای Distance فاصله ی دوربین تا نقطه و به جای Height ارتفاع دوربین تا نقطه و به جای Smooth شدت حرکت دوربین به سمت نقطه و به جای Collision رفتار دوربین نسبت به برخورد با اجسام سخت را قرار می دهیم ( 0 یا 1 ) . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
make object box 1,1400,10,1400 : position object 1,0,-5,0
make Object box 2,10,10,10 : position object 2,50,10,50
For I = 1 To 2 : Texture Object I,1 : Next I
Do
(xCam#=object position x(2):yCam#=object position y(2
(zCam#=object position z(2):aCam#=object Angle y(2
hCam#=30:dCam#=50:sCam#=60
SET CAMERA TO FOLLOW xCam#,yCam#,zCam#,aCam#,dCam#,hCam#,sCam#,0
if upkey()=1 Then move object 2,1
if downkey()=1
   move object 2,-1
EndIf
if leftkey()=1
   (yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
(yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
 
با اجرای این مثال شیء جعبه توسط دکمه های جهت بالا ، جهت پائین ، جهت چپ و جهت راست حرکت خواهد کرد . و دوربین پیش فرض به دنبال شیء حرکت می کند . با این کار نیازی به تعیین موقعیت مکانی دوربین نمی باشد . چون این دستور بطور خودکار این کار را انجام می دهد .
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را هم به دنبال شیء مورد نظر حرکت دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Camera 4 : Set Current Camera 4
make object box 1,1400,10,1400 : position object 1,0,-5,0
make Object box 2,10,10,10 : position object 2,50,10,50
For I = 1 To 2 : Texture Object I,1 : Next I
Do
(xCm#=object position x(2):yCm#=object position y(2
(zCm#=object position z(2):aCm#=object Angle y(2
hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW 4,xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
if upkey()=1 Then move object 2,1
if downkey()=1 Then move object 2,-1
if leftkey()=1
   (yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
   (yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
 
دستور GHOST OBJECT ON
این دستور شیء سه بعدی را نیمه شفاف می کند . مانند دستورالعمل زیر :
 
GHOST OBJECT ON ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Sphere 15,10
Position Camera 0,20,-60
Texture Object 10,1
Sync On : Sync Rate 30
Ghost Object On 15
Do
For MyAngle = 0 To 359 Step 2
Position Object 15,Sin(MyAngle)*50,10,Cos(MyAngle)*50
(Point Camera Object Position X(15),Object Position Y(15),Object Position Z(15
Sync
Next MyAngle
Loop
 
دستور GHOST OBJECT OFF
اگر با استفاده از دستور قبل ( GHOST OBJECT ON ) شیء سه بعدی شفاف شده باشد ، با این دستور شیء سه بعدی به حالت اولش برمی گردد . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Sphere 15,10
Position Camera 0,20,-60
Texture Object 10,1
Sync On : Sync Rate 30
Ghost Object On 15
Do
For MyAngle = 0 To 359 Step 2
Position Object 15,Sin(MyAngle)*50,10,Cos(MyAngle)*50
(Point Camera Object Position X(15) , Object Position Y(15) , Object Position Z(15
Sync
If Inkey$()="f" Or Inkey$()="F" Then Ghost Object Off 15
If Inkey$()="n" Or Inkey$()="N" Then Ghost Object On 15
Next MyAngle
Loop
 
با اجرای این مثال با زدن دکمه ی N شیء به حالت نیمه شفاف و با زدن دکمه ی F شیء به حالت عادی برمی گردد.
 


دو شنبه 2 ارديبهشت 1392برچسب:, :: 2:40 ::  نويسنده : ابوالفضل
2- اشیاء پیچیده :
اشیاء پیچده به اشیائی گفته می شود که از چندین شیء مختلف تشکیل شده اند و هر قسمت آن رنگ و بافت خاصی را دارد . و هر قسمت می تواند نسبت به قسمت دیگر بصورت لولایی حرکت داشته باشد . مثلا هلیکوپتر ، ماشین ، آدم ، درخت ، کوه و ... دارای اجزاء مختلفی هستند که برای مثال آرنج یک انسان می تواند نسبت به بازویش چرخش داشته باشد . اشیاء پیچیده در دارک بیسیک توسط نرم افزار های مختلفی ایجاد می شوند و بصورت فایل نگهداری می شوند و برای استفاده باید آنها را از روی Hard صدا کنیم . از مهم ترین فرمت های اشیاء در دارک بیسیک می توان به DBO و X اشاره کرد . اشیاء با فرمت DBO جزء اشیاء استاندارد نرم افزار DarkBASIC محسوب می شوند . و به راحتی و با سرعت زیاد می توان آنها را از روی Hard صدا زد ( از روی فایل خواند ) . شیء بافرمت X نیز استاندارد موتور Direct X می باشد . اشیاء پیچیده به غیر از شکل و رنگ توانایی حرکت را هم دارند ؛ یعنی فریم هایی در این اشیاء وجود دارد که می توانیم با فرامینی مختف شیء را به حرکت درآوریم . بسته هایی به نام DarkMatter هم توسط این شرکت در سایت WWW.DarkBasicPro.Com معرفی شده که فرمتشان DBO و بسته هایی نیز در سایت وابسته به همین شرکت یعنی در سایت WWW.FpsCreator.Com شامل اشیاء سه بعدی با فرمت X قابل تهیه می باشد .
 
دستور LOAD OBJECT
با این دستور می توانیم یک شیء را از روی فایل صدا بزنیم . مانند مثال زیر :
 
LOAD OBJECT Filename,ObjectNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل و به جای ObjectNumber عددی طبیعی برای نام شیء قرار می دهیم تا بر روی شیء کنترل داشته باشیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
wait Key
 
در این مثال شیء ای با شکل آدمک نشان داده می شود . ولی چون شیء بصورت خوابیده طراحی شده از دستور XRotate استفاده می کنیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
 
نکته : تمامی فرامینی که به اشیاء ساده ی سه بعدی نسبت داده می شدند ، بر روی اشیاء پیچیده ی سه بعدی هم کاربرد دارد .
 
نکته : هر فایل شیء سه بعدی با فرمت X در کنار خود فایلی دارد که بافت و رنگ آن شیء را مشخص می کند که باید همیشه در پوشه ای که شیء در آن است ، حضور داشته باشد .
 
نکته : اگر شیء در پوشه ای باشد که فایل اجرایی در آن پوشه اجرا می شود . میتوانیم به جای کد بالا بصورت زیر عمل کنیم .
 
 
Load Object "ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
 
در این مثال فرض بر این است که فایل شیء سه بعدی ما همراه با فایل گرافیکی اش در پوشه ی است که فایل اجرایی در آن وجود دارد و هم اکنون در حال اجراست .
 
دستور PLAY OBJECT
با این دستور می توانیم اشیاء پیچیده ی سه بعدی را که در آن فریم هایی برای حرکت قرار داده شده به حرکت در آوریم . مانند دستورالعمل زیر :
 
PLAY OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
XRotate Object 6,-90
PLAY OBJECT 6
wait Key
 
دستور SET OBJECT SPEED
با این دستور سرعت حرکت شیء پیچیده را تنظیم می کنیم . مانند دستورالعمل زیر :
 
SET OBJECT SPEED ObjectNumber,Speed
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء پیچیده ی سه بعدی و به جای Speed سرعت حرکت را بصورت یک عدد قرار می دهیم . ولی هر شیئی با سرعت خاص خود طراحی شده که باید آن را توسط Speed تنظیم کنیم . البته تنظیم سرعت شیء یا Speed آن شیء نسبت به سرعت دستور Sync باید توسط ما تنظیم شود . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
PLAY OBJECT 6
Set Object Speed 6,12000
Do
Sync
Loop
 
بدلیل اینکه شیء آدمک ما با سرعت بسیار کمی طراحی شده به خاطر همین سرعت معمولی آن را 1200 قرار دادیم . با اجرای این مثال تمامی فرم های شیء آدمک نشان داده شدند . یعنی در شیء تعدادی از فریم ها مثلا فریم 1 تا 6000 حرکت راه رفتن و 6000 تا 12000 پریدن و ... می باشد .
 
تابع TOTAL OBJECT FRAMES
این تابع تعداد کل فریم های شیء را برمی گرداند . مانند دستورالعمل زیر :
 
(varInteger = TOTAL OBJECT FRAMES(ObjectNumber
 
این تابع تعداد کل فریم های شیء شماره ی ObjectNumber را در متغیر varInteger ذخیره می کند . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
(HeroFrame# = Total Object Frames(6
(#Text 10,10,Str$(HeroFrame
Wait Key
 
در این مثال تعداد کل فریم های شیء شماره ی 6 توسط تابع ()Total Object Frames در متغیر #HeroFrame ذخیره و بعد چاپ می شود .
 
با اضافه کردن شماره ی شروع فریم به دستور PLAY OBJECT می توانیم حرکت شیء پیچیده را از همان فریم شروع کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
PLAY OBJECT 6,6000
Do
Sync
Loop
 
در این مثال حرکت شیء از فریم 6000 شروع شد . با اضافه کردن شماره ی شروع و پایان به دستور PLAY OBJECT می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی حرکت دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
PLAY OBJECT 6,6000,12000
Do
Sync
Loop
 
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 حرکت می کند .
 
دستور LOOP OBJECT
این دستور همانند دستور PLAY OBJECT می باشد . با این تفاوت که حرکت شیء از فریم شروع تا فریم پایانی دائما ادامه خواهد داشت . مانند دستورالعمل زیر :
 
LOOP OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
Sync
Loop
 
با اضافه کردن شماره ی شروع فریم به دستور LOOP OBJECT می توانیم حرکت شیء پیچیده را از آن فریم شروع کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000
Do
Sync
Loop
 
در این مثال حرکت شیء از فریم 6000 شروع و تا فریم آخر دائما در حال حرکت خواهد بود . با اضافه کردن شماره ی شروع و پایان به دستور Loop Object می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی دائما حرکت دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000,12000
Do
Sync
Loop
 
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 دائما حرکت خواهد داشت .

دستور STOP OBJECT
این دستور باعث توقف حرکت شیء سه بعدی می شود . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000,12000
Do
Sync
If ReturnKey()=1 Then Stop Object 6
Loop
 
با اجرای این مثال با زدن دکمه ی Enter حرکت شیء سه بعدی متوقف خواهد شد .

تابع OBJECT SPEED
این تابع سرعت حرکت شیء پیچیده ی سه بعدی را که آخرین بار تنظیم شده باشد ، حساب می کند . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
((Text 10,10,str$(Object Speed(6
Sync
Loop
 
تابع OBJECT FRAME
این تابع شماره ی فریم جاری حرکت شیء پیچیده را برمی گرداند . یعنی مشخص می کند که هم اکنون حرکت شیء در چه فریمی می باشد . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
((Text 10,10,str$(Object Frame(6
Sync
Loop
 
دستور SET OBJECT FRAME
با این دستور شماره ی شروع حرکت شیء را از نو تنظیم می کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
If ReturnKey()=1 Then Set Object Frame 6,6000
Sync
Loop
 
تابع OBJECT EXIST
این تابع بررسی می کند که آیا شیء سه بعدی ( ساده یا پیچیده ) با شماره مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Object Box 1,10,10,10
Make Object Sphere 2,20
Delete Object 2
Do
"If Object Exist(1) Then Text 10,10,"Box Is Exist
"If Object Exist(2) Then Text 10,25,"Sphere Is Exist
Loop
 
دستور HIDE OBJECT
این دستور باعث نامرعی شدن شیء سه بعدی ( ساده یا پیچیده ) می شود . مانند مثال زیر :
 
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait Key
 
دستور SHOW OBJECT
اگر شیئ سه بعدی ( ساده یا پیچیده ) توسط دستور قبلی ( Hide Object ) نامرعی شده باشد ، می توانیم توسط دستور Show Object دوباره آن را آشکار کنیم . مانند مثال زیر .
 
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait 2000
Show Object 1
Wait Key
 
تابع OBJECT VISIBLE
این تابع بررسی می کند که آیا شیء سه بعدی مورد نظر ( ساده یا پیچیده ) مرعی است یا نامرعی . اگر مرعی بود ، عدد یک و اگر نامرعی بود ، عدد صفر توسط تابع برمی گردد . مانند مثال زیر :
 
Sync On:Sync Rate 30
Make Object Box 1,10,20,30
Do
   Sync
   If InKey$()="h" Or InKey$()="H" Then Hide Object 1
   If InKey$()="S" Or InKey$()="s" Then Show Object 1
   If Object Visible(1)=1
      "Text 10,10,"Object Is Show
   Else
      "Text 10,10,"Object Is Hide
   EndIf
Loop
 
با اجرای این مثال با زدن دکمه ی H جعبه نامرعی و با زدن دکمه ی S جعبه مرعی می شود . و تابع ()Object Visible مرعی یا نامرعی بودن جعبه را بررسی و نتیجه را توسط دستور Text چاپ می کند .
 
دستور FIX OBJECT PIVOT
با این دستور ، شیء ثابت و محور های X و Y و Z شیء مورد نظر ، موازی محور های X و Y و Z مختصات فضای سه بعدی خواهند شد . یعنی محور X شیء ، موازی محور X فضای سه بعدی و محور Y شیء ، موازی محور Y فضای سه بعدی و محور Z شیء ، موازی محور Z فضای سه بعدی خواهد شد و نسب به شیء ثابت هم می ماند . مانند مثال زیر :
 
Make Object Box 1,10,10,10
ZRotate Object 1,45
Fix Object Pivot 1
Do
      YRotate Object 1,Object Angle Y(1)+0.1
Loop
Wait Key
 
دستور MOVE OBJECT
این دستور شیء را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود شیء ) حرکت می دهد . مانند دستورالعمل زیر :
 
MOVE OBJECT ObjectNumber,Speed
 
طبق این دستورالعمل به جای ObjectNumber مقدار حرکت شیء سه بعدی ( ساده یا پیچیده ) و به جای Speed سرعت حرکت شیء را توسط یک عدد مشخص می کنیم . یعنی اگر Speed بزرگتر از صفر باشد ، شیء به همان مقدار به جلو و اگر Speed کوچک تر از صفر باشد ، شیء به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
 
Sync On : Sync Rate 30
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
xrotate object 6,-90
fix object pivot 6
Rotate Camera 0,0,0 : Set Object Speed 6,12000
Loop Object 6
Do
   If UpKey()=1 Then Move Object 6,10
   If DownKey()=1 Then Move Object 6,-10
   Sync
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . شیء شماره ی 6 به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم ، شیء شماره ی 6 به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .


دو شنبه 2 ارديبهشت 1392برچسب:, :: 2:33 ::  نويسنده : ابوالفضل

 دوربین : با اجرای مثال های بالا ، راجع به ایجاد اشیاء ساده  و پیچیده ی سه بعدی ، اشیاء توسط دوربین پیش فرض DarkBasic نمایش داده می شدند . یعنی ما از دریچه ی دوربین پیش فرض به اشیاء نگاه می کردیم . می توانیم به غیر از دوربین پیش فرض ، خود نیز دوربین های دیگری هم ایجاد کنیم و از دید هر یک از آنها به صحنه نگاه کنیم .

 
دستور MAKE CAMERA
با این دستور می توانیم دوربین جدید ایجاد کنیم . مانند دستورالعمل زیر :
 
MAKE CAMERA CameraNumber
 
طبق این دستورالعمل به جای CameraNumber عددی طبیعی در محدوده ی مثبت متغیر Integer قرار می دهیم . این عدد به معنای نام دوربین می باشد . توسط همین عدد در خطوط بعدی برنامه بر روی دوربین کنترل خواهیم باشیم . مانند مثال زیر :
 
Make Camera 1
 
در این مثال دوربین جدیدی با شماره ی 1 ایجاد شد .
 
دستور DELETE CAMERA
با این دستور دوربین جدید ایجاد شده را حذف می کنیم . مانند مثال زیر :
 
Make Camera 1
Make Camera 2
Delete Camera 1
Wait Key
 
تابع CAMERA EXIST
این تابع بررسی می کند که آیا دوربین مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Camera 1
Make Camera 2
Delete Camera 1
Do
cls
"If Camera Exist(1) Then Print "Camera 1 Exist" Else Print "Camera 1 Not Exist
"If Camera Exist(2) Then Print "Camera 2 Exist" Else Print "Camera 2 Not Exist
Loop
 
دستور Set Current Camera
با این دستور دوربین مورد نظرمان را فعال می کنیم . مانند مثال زیر :
 
Make Camera 13
Make Camera 7
Make Camera 6
Set Current Camera 7
 
در این مثال سه دوربین با شماره های 13 و 7 و 6 ایجاد شدند و در آخر از بین این سه دوربین ، دوربین شماره ی 7 فعال شد . یعنی با اجرای دستور Set Current Camera ، صحنه ( تمام اشیاء ) از دید دوربین شماره ی 7 نشان داده خواهد شد .
 
دستور POSITION CAMERA
با این دستور موقعیت مکانی دوربین پیش فرض را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION CAMERA X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید دوربین پیش فرض را در فضای سه بعدی ، قرار می دهیم . مانند مثال زیر :
 
Make Object Box 5,10,10,10
Wait 2000
Position Camera 0,10,-20
Wait Key
 
با اجرای این مثال بعد از 2 ثانیه دوربین پیش فرض به موقعت مکانی ( مختصات 20-Z=  و 10Y= و 0X= ) پرش خواهد کرد ( تغییر مکان خواهد داد ) . و جسم ، سر جایش بی حرکت می ماند .
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل ، می توانیم موقعت مکانی دوربین جدید را نیز در فضای سه بعدی مشخص کنیم . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Make Camera 5
Position Camera 5,0,10,-20
Set Current Camera 5
Wait Key
 
در این مثال دوربین جدیدی با شماره ی 5 ایجاد شد و در خط سوم موقعت مکانی جدید آن در فضای سه بعدی مشخص شد و در خط  چهارم ، توسط دستور Set Current Camera دوربین جدید که شماره اش 5 بود فعال شد و صحنه هم اکنون از دید دوربین جدید ( دوربین شماره 5 ) نشان داده می شود .
 
تابع CAMERA POSITION X و تابع CAMERA POSITION Y و تابع CAMERA POSITION Z
تابع ()CAMERA POSITION X موقعیت X دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور X ها ) و تابع ()CAMERA POSITION Y موقعیت Y دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Y ها ) و تابع ()CAMERA POSITION Z موقعیت Z دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
 
Position Camera 0,10,-20
()Print Camera Position X
()Print Camera Position Y
()Print Camera Position Z
Wait Key
 
تا قرار دادن شماره ی دوربین های جدید بعنوان ورودی در سه تابع بالا ، می توانیم موقعت X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Make Camera 5 : Position Camera 5,50,100,-20
Do
(X = Camera Position X(5
(Y = Camera Position Y(5
(Z = Camera Position Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
 
دستور POSITION OBJECT
با این دستور موقعیت مکانی اشیاء سه بعدی را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
 
POSITION OBJECT ObjectNumber,X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 5,10,10,10
Make Object Sphere 6,15
Wait 2000
Position Object 6,10,20,10
Wait Key
 
با اجرای این مثال ابتدا یک جعبه با شماره ی 5 و یک کره با شماره ی 6 ایجاد شدند و بعد از 2 ثانیه شیء کره با شماره ی 6 هر جا که بود هم اکنون به موقعت مکانی ( مختصات 10=Z و 20=Y و 10=X ) پرش کرد ( تغییر مکان داد ) .
 
تابع Object POSITION X و تابع Object POSITION Y و تابع Object POSITION Z
تابع ()Object POSITION X موقعیت X شیء ( فاصله ی شیء تا محور X ها )
و تابع ()Object POSITION Y موقعیت Y شیء ( فاصله ی شیء تا محور Y ها )
و تابع ()Object POSITION Z موقعیت Z شیء ( فاصله ی شیء تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
 
Make Object Cylinder 10,20
Position Object 10,-45,0,29
Do
(X = Object Position X(10
(Y = Object Position Y(10
(Z = Object Position Z(10
(Text 10,10,Str$(X
(Text 10,25,Str$(Y
(Text 10,40,Str$(Z
Loop
 
دستور POINT CAMERA
با این دستور دوربین پیش فرض هر کجا که باشد ، از همان جا به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
 
POINT CAMERA X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای ( منظور از نقطه ، مکانی در فضا می باشد ) را در فضای سه بعدی مشخص می کنیم ، تا دوربین پیش فرض به آن مکان نگاه کند . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10 , 10 , Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Camera Object Position X(15),Object Position Y(15),Object Position Z(15
      Sync
Next MyAngle
Loop
 
با اجرای این مثال ، کره دائما در حال حرکت است و دوربین پیش فرض هم دائما به آن نگاه می کند . با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدیدمان را به این کره خیره کنیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Make Camera 7
Set Current Camera 7 : Position Camera 7,0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10,10,Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Camera 7,Object Position X(15),Object Position Y(15), Object Position Z(15
      Sync
Next MyAngle
Loop
دستور POINT OBJECT
با این دستور شیء مورد نظر هر کجا که باشد ، به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
 
POINT Object objectnumber,X,Y,Z
 
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای را در فضای سه بعدی مشخص می کنیم تا شیء مورد نظر به آن نقطه نگاه کند ( یعنی محور Z شیء ، نقطه را هدف قرار دهد ) . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10,10,Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Object 20,Object Position X(15),Object Position Y(15), Object Position Z(15
      Sync
Next MyAngle
Loop
 
با اجرای این مثال شیء جعبه به کره ( مختصات X و Y و Z کره ) خیره خواهد شد .
 
دستور XROTATE CAMERA
این دستور دوربین پیش فرض را حول محور X خود دوربین ، دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
XROTATE CAMERA XAngle
 
طبق این دستورالعمل به جای XAngle زاویه دوربین حول محور X خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
   Xrotate Camera Xangle
Sync
Next Xangle
Loop
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور X خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 17
Set Current Camera 17
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
   Xrotate Camera 17,Xangle
Sync
Next Xangle
Loop
 
 
دستور YROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Y خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
YROTATE CAMERA YAngle
 
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود دوربین را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
      Yrotate Camera Yangle
Sync
Next Yangle
Loop
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Y خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 1
Set Current Camera 1
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 0 To 360 Step 5
   Yrotate Camera 1,Yangle
Sync
Next Yangle
Loop
 
دستور ZROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Z خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
ZROTATE CAMERA ZAngle
 
طبق این دستورالعمل به جای ZAngle زاویه دوربین حول محور Z خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
   Zrotate Camera Zangle
Sync
Next Zangle
Loop
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Z خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 11
Set Current Camera 11
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
   Zrotate Camera 11,Zangle
Sync
Next Zangle
Loop
 
در این سه مثال جعبه ثابت بود و تنها دوربین در حال چرخش بود .
 
دستور ROTATE CAMERA
اگر بخواهیم به جای استفاده از دستورات قبلی جهت چرخش دوربین حول محور X و Y و Z خود دوربین ، تنها با یک دستور ، دوربین پیش فرض را حول محور X ها و Y ها و Z همان دوربین می چرخانیم ، پس از دستورالعمل زیر استفاده می کنیم .
 
ROTATE CAMERA Xangle,Yangle,ZAngle
 
طبق این دستورالعمل به جای Xangle مقدار چرخش دوربین حول محور X همان دوربین ، به جای Yangle مقدار چرخش دوربین حول محور Y همان دوربین ، و به جای ZAngle ، مقدار چرخش دوربین حول محور Z همان دوربین پیش فرض را قرار می دهیم . مانند مثال زیر :
 
Make Object box 22,40,40,40
Wait 2000
Rotate Camera 10,50,30
Wait Key
 
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محورهای X و Y و Z همان دوربین جدید ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
 
Make Camera 6 : Set Current Camera 6
Make Object box 22,40,40,40
Wait 2000
Rotate Camera 6,10,50,30
Wait Key
 
دستور XROTATE Object
این دستور شیء را حول محور X همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
XROTATE OBJECT XAngle
 
طبق این دستورالعمل به جای XAngle زاویه شیء حول محور X خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
   Xrotate Object 20,Xangle
Sync
Next Xangle
Loop
 
دستور YROTATE OBJECT
این دستور شیء را حول محور Y همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
YROTATE OBJECT YAngle
 
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
      Yrotate Object 20,Yangle
Sync
Next Yangle
Loop
 
دستور ZROTATE OBJECT
این دستور شیء را حول محور Z همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
 
ZROTATE OBJECT ZAngle
 
طبق این دستورالعمل به جای ZAngle زاویه شیء حول محور Z خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
 
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
   Zrotate Object 20,Zangle
Sync
Next Zangle
Loop
 
شکل های زیر به ترتیب از سمت چپ به راست ، چرخش دوربین و یا اشیاء سه بعدی را حول محور های X و Y و Z خودشان نشان می دهد .
 
 
دستور ROTATE OBJECT
اگر بخواهیم به جای استفاده از دستورات بالا ، تنها با یک دستور ، شیء را حول محور X و Y و Z همان شیء بچرخانیم ، از دستورالعمل زیر استفاده می کنیم .
 
ROTATE OBJECT ObjectNumber,Xangle,Yangle,ZAngle
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Xangle مقدار چرخش شیء حول محور X خود شیء ، به جای Yangle مقدار چرخش شیء حول محور Y خود شیء ، و به جای ZAngle ، مقدار چرخش شیء حول محور Z همان شیء را قرار می دهیم . مانند مثال زیر :
 
Make Object box 22,40,40,40
Wait 2000
Rotate Object 22,10,50,30
Wait Key
 
تابع CAMERA ANGLE X و تابع CAMERA ANGLE Y و تابع CAMERA ANGLE Z
تابع ()CAMERA ANGLE X زاویه ی محور X دوربین پیش فرض و تابع ()CAMERA ANGLE Y زاویه ی محور Y دوربین پیش فرض و تابع ()CAMERA ANGLE Z زاویه ی محور Z دوربین پیش فرض را حول محورهای خود دوربین بدست می آورند . مانند مثال زیر :
 
Position Camera 0,10,-20
Rotate Camera 20,30,-10
()Print CAMERA ANGLE X
()Print CAMERA ANGLE Y
()Print CAMERA ANGLE Z
Wait Key
 
تا قرار دادن شماره ی دوربین جدید بعنوان ورودی سه تابع بالا ، می توانیم زاویه ی محور هی  X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Make Camera 5 : Rotate Camera 5,50,100,-20
Do
(X = CAMERA ANGLE X(5
(Y = CAMERA ANGLE Y(5
(Z = CAMERA ANGLE Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
 
تابع OBJECT ANGLE X و تابع OBJECT ANGLE Y و تابع OBJECT ANGLE Z
تابع ()OBJECT ANGLE X زاویه ی محور X شیء و تابع ()OBJECT ANGLE Y زاویه ی محور Y شیء و تابع ()OBJECT ANGLE Z زاویه ی محور Z شیء را بدست می آورند . مانند مثال زیر :
 
Make Object Box 15,10,10,10
Rotate Object 15,30,-10,0
(Print Object ANGLE X(15
(Print Object ANGLE Y(15
(Print Object ANGLE Z(15
Wait Key
 
دستور COLOR OBJECT
با این دستور می توانیم شیء سه بعدی را با رنگ دلخواه رنگ آمیزی کنیم . مانند دستورالعمل زیر :
 
COLOR OBJECT ObjectNumber,ColorValue
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی و به جای ColorValue شماره ی رنگ مورد نظرمان را قرار می دهیم . مانند مثال زیر :
 
Make Object Box 1,10,50,70
Make Object Sphere 2,20 : Position Object 2,30,0,0
Make Object Cylinder 3,30 : Position Object 3,-30,0,0
(Color Object 1,Rgb(255,0,0
(Color Object 2,Rgb(0,255,0
(Color Object 3,Rgb(0,0,255
Wait Key
 
دستور LOAD IMAGE
این دستور فایل تصویری با فرمت Bmp ، Jpg ، Tga ، Dds ، Dib و یا Png را بر روی حافظه فراخوانی ( از فایل تصویری موجود در Hard موقتا به Ram کپی می شود ) می کند . مانند دستورالعمل زیر :
 
LOAD IMAGE Filename,ImageNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل تصویری مورد نظر و به جای ImageNumber شماره ای به تصویر می دهیم تا توسط همین شماره بر روی تصویر کنترل داشته باشیم . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
Wait Key
 
دستور TEXTURE OBJECT
این دستور تصویر فرخوانی شده در حافظه ( توسط دستور Load Image ) را به شیء سه بعدی می چسباند . مانند دستورالعمل زیر :
 
TEXTURE OBJECT ObjectNumber,ImageNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء و به جای ImageNumber شماره ی تصویر فراخوانی شده در حافظه ( توسط دستور Load Image ) را قرار می دهیم تا تصویر به شیء سه بعدی بچسبد . مانند مثال زیر :
 
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
TEXTURE OBJECT 5,3
Wait Key
 
با اجرای این مثال ابتدا یک شیء کره با شماره ی 5 در خط اول ایجاد و بعد تصویری با فرمت Jpg با شماره ی 3 به حافظه فراخوانی شد ( از فایل تصویری موجود در Hard موقتا به Ram کپی شد ) و توسط دستور TEXTURE OBJECT تصویر شماره ی 3 به شیء شماره ی 5 چسبید .
 
تابع IMAGE EXIST
این تابع بررسی می کند که آیا تصویری با شماره ی مورد نظر ایجاد شده یا نه .
اگر تابع ()Image Exist عدد یک را برگرداند یعنی تصویر ایجاد شده ( یعنی بر روی حافظه فراخوانی شده ) و اگر عدد صفر برگردانده شود ، یعنی تصویری با این شماره ایجاد نشده . مانند مثال زیر :
 
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
".If Image Exist(3) Then Print "Image 3 Exist
".If Image Exist(5) Then Print "Image 5 Exist
Wait Key
 
در این مثال تنها تصویری با شماره ی 3 ایجاد شده . پس تنها عبارت ( .Image 3 Exist ) چاپ خواهد شد .
 
دستور DELETE IMAGE
این دستور تصویر ایجاد شده در حافظه ( توسط دستور Load Image ) را حذف می کند . مانند دستورالعمل زیر :
 
DELETE IMAGE ImageNumber
 
طبق این دستورالعمل به جای ImageNumber شماره تصویر ایجاد شده را قرار می دهیم . مانند مثال زیر :
 
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
TEXTURE OBJECT 5,3
Wait 2000
Delete Image 3
Wait Key
 
با اجرای این مثال پس از دو ثانیه تصویر حذف شده و تصویر چسبانده شده به شیء نیز ناپدید می گردد .
 
دستور MOVE CAMERA
این دستور دوربین پیش فرض را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود دوربین ) حرکت می دهد . مانند دستورالعمل زیر :
 
MOVE CAMERA DistanceValue
 
طبق این دستورالعمل به جای DistanceValue مقدار حرکت دوربین را توسط یک عدد مشخص می کنیم . یعنی اگر عدد بزرگتر از صفر باشد ، دوربین به همان مقدار به جلو و اگر عدد کوچک تر از صفر باشد ، دوربین به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
   If UpKey()=1 Then Move Camera 1
   If DownKey()=1 Then Move Camera -1
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . دوربین پیش فرض به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم دوربین پیش فرض به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .
 
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز (راستای محور Z خود ) به عقب و جلو حرکت دهیم . مانند مثال زیر :
 
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2
Rotate Camera 2,0,0,0
Do
   If UpKey()=1 Then Move Camera 2, 1
   If DownKey()=1 Then Move Camera 2, -1
Loop


یک شنبه 1 ارديبهشت 1392برچسب:, :: 1:36 ::  نويسنده : ابوالفضل

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


مختصات سه بعدی

به دنیای سه بعدی خوش آمدین . مختصات سه بعدی در محیط دارک بیسیک شباهت زیادی به دنیای واقعی ما دارد . یعنی مختصات سه بعدی شامل سه محور اصلی X و Y و Z است . سیستم مختصات سه بعدی در BarkBASIC بصورت شکل زیر می باشد .

 

 

در این شکل محور X ها طول و محور Y ها عرض و محور Z ها ارتفاع می باشد . یعنی زمانی که به مانیتور کامپیوتر نگاه می کنیم ، محور های مختصات سه بعدی بصورت شکل زیر است .

 

 

مطابق شکل ، محور X ها جهت چپ و راست و محور Y ها جهت بالا و پائین و محور Z ها به داخل و خارج از مانیتور ( عمود بر صفحه ی نمایشگر ) اشاره دارد . شکل زیر سه صفحه ی اصلی X-Y و X-Z و Y-Z را نشان می دهد .

 

 

هر جسم و یا نقطه ای در سیستم مختصات سه بعدی با هر یک از محور های X و Y و Z دارای یک فاصله منحصر به فرد می باشد . مانند نقطه ی P در شکل زیر :

 

 

 

در شکل بالا به ترتیب از چپ به راست ، فاصله ی نقطه ی P با هر کدام از محور ها نشان داده شده است . مختصات نقطه ای که در تقاطع این سه محور وجود داشته باشد ( 0 و 0 و 0 ) می باشد . یعنی X آن برابر صفر و Y آن برابر صفر و Z آن برابر صفر است یا می توان گفت ( X = 0 , Y = 0 , Z = 0 ) . ولی اگر مطابق شکل بالا فاصله ی نقطه ی P از محور X ها 10 و از محور Y ها 12 و از محور Z ها 14 در نظر بگیریم ، مختصات نقطه ی P برابر ( 14 و 12 و 10 ) خواهد بود  .


آزمایش عملی در فضای سه بعدی :

کدهای زیر را اجرا می کنیم . سپس موس را به بالا و پائین و چپ و راست حرکت می دهیم . همچنین می توانیم با حرکت چرخ مابین دکمه های موس به پایین و بالا ، در مجموع موقعیت یک کره را در مختصات سه بعدی تغییر دهیم .

 

Make Object Sphere 1,10

Position Camera 0,0,-300

Do

(OPX = Object Position X(1

(OPY = Object Position Y(1

(OPZ = Object Position Z(1

()MMX = MouseMoveX

()MMY = MouseMoveY

()MMZ = MouseMoveZ

()Position Object 1,OPX+MMX(),OPY+MMY()*-1,OPZ+MMZ

(OSX=Object Screen X(1

(OSY=Object Screen Y(1

(If OBJECT IN SCREEN(1

"("+(Text OSX(1),OSY(1),"(X="+Str$(OPX)+",Y="+Str$(OPY)+",Z="+Str$(OPZ

EndIf

If OPX > 150 Then Position Object 1,150,OPY,OPZ

If OPX < -150 Then Position Object 1,-150,OPY,OPZ

If OPY > 150 Then Position Object 1,OPX,150,OPZ

If OPY < -150 Then Position Object 1,OPX,-150,OPZ

If OPZ > 240 Then Position Object 1,OPX,OPY,240

If OPZ < -240 Then Position Object 1,OPX,OPY,-240

Loop

 

فعلا با دستورات نوشته شده ی این کد ها کاری نداریم . فقط آنها را تایپ و اجرا می کنیم . با اجرای این مثال و حرکت موس و چرخ مابین کلید های آن ، مختصات این کره بر روی صفحه چاپ خواهد شد . یعنی با حرکت موس به بالا و پائین موقعیت Y و با حرکت موس به چپ و راست موقعیت X و با حرکت چرخ مابین دو کلید موس ، موقعیت Z کره تغییر خواهد کرد . البته ما حرکت کره را محدود کردیم ، تا از صفحه زیاد دور نشود .

 

نکته ی تکراری : برای اینکه طول بعضی از خطوط برنامه آن قدر بلند است که در عرض جا نمی شود ، ما تمام خطوطی که متعلق به یک خط در برنامه است را در این وبلاگ به رنگ نارنجی نوشتیم .


اشیاء سه بعدی در DarkBASIC :

اشیاء سه بعدی در DarkBasic به دو بخش تقسیم می شوند . بخش اول ، اشیاء ساده و بخش دوم اشیاء پیچیده .


1- اشیاء ساده :

اشیای ساده شامل جعبه ، کره ، مکعب ، مخروط و ... می باشند . مانند شکل زیر :

 

 

 

 

دستور MAKE OBJECT BOX

این دستور جعبه سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT BOX ObjectNumber,Width,Height,Depth

 

طبق این دستورالعمل به جای ObjectNumber یک عدد در محدوده ی مثبت Integer یعنی یک تا 2,147,483,647 قرار می دهیم . در واقع با ایجاد هر شیء باید یک عدد نیز به آن اختصاص دهیم که به معنای نام آن شیء می باشد . با وجود این عدد که به معنی نام آن شیء است ، می توانیم در خطوط بعدی ، دستورات لازم را به شیء اعمال کنیم . یعنی توسط همین عدد ، شیء را تحت کنترل در بیاوریم . و به جای Width عرض و به جای Height ارتفاع و به جای Depth عمق جعبه را قرار می دهیم . مانند مثال زیر :

 

ObjectNumber = 1

Make Object Box ObjectNumber,10,20,30

Wait Key

 

با اجرای این مثال جعبه ای با عرض 10 و ارتفاع 20 و عمق 30 ایجاد خواهد شد .


نکته : ما نمی توانیم دو شیء را با یک عدد نامگذاری کنیم . مثلا اگر مثال زیر نوشته شود ، برنامه با خطا روبرو خواهد شد .

 

Make Object Box 2,10,5,30

Make Object Box 2,40,160,75

 

در این مثال ابتدا در خط اول یک جعبه ایجاد می شود ولی در خط دوم چون عدد اختصاصی به جعبه ی دوم توسط جعبه ی اول رزرو شده بود ، برنامه دچار خطا شد . یعنی به جای عدد 2 باید عدد دیگری قرار می دادیم . مثلا 5 


دستور MAKE OBJECT CONE

این دستور مخروط سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT CONE ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مخروط و به جای Size سایز مخروط را قرار می دهیم . مانند مثال زیر :

 

Make Object Cone 2,10

Wait Key

 

دستور MAKE OBJECT CUBE

این دستور مکعب سه بعدی ( جعبه ای که هر سطح آن مربع و به یک اندازه باشد ) می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT CUBE ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مکعب و به جای Size سایز مکعب ( سایز هر ضلع آن ) را قرار می دهیم . مانند مثال زیر :

 

Make Object Cube 3,100

Wait Key

 

دستور MAKE OBJECT CYLINDER

این دستور استوانه ی سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT CYLINDER ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام استوانه و به جای Size سایز استوانه ( قطر و ارتفاع استوانه هر دو به یک اندازه و به مقدار Size خواهند بود ) را قرار می دهیم . مانند مثال زیر :

 

Make Object Cylinder 3,70

Wait Key

 

دستور MAKE OBJECT PLAIN

این دستور صفحه ای در فضا بشکل مستطیل می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT PLAIN ObjectNumber,Width,Height

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام صفحه و به جای Width عرض و به جای Height ارتفاع صفحه را قرار می دهیم . مانند مثال زیر :

 

Make Object Plain 70,10,10

Wait Key

 

دستور MAKE OBJECT SPHERE

این دستور کره ی سه بعدی می سازد . مانند دستورالعمل زیر :

 

MAKE OBJECT SPHERE ObjectNumber,Size

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره را قرار می دهیم . مانند مثال زیر :

 

Make Object Sphere 70,40

Wait Key

 

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

 

MAKE OBJECT SPHERE ObjectNumber,Size,Rows,Columns

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره و به جای Rows تعداد سطوح افقی و به جای Columns تعداد سطوح عمودی کره را قرار می دهیم . مانند مثال زیر :

 

Make Object Sphere 1,40,10,10

Wait Key

Make Object Sphere 2,40,30,30

Wait Key

 

با اجرای این مثال ابتدا یک کره با 10 سطح افقی و 10 سطح عمودی ساخته شد و با زدن یک کلید کره ی بعدی با 30 سطح افقی و 30 سطح عمودی ساخته شد . چون تعداد سطوح در کره ی دومی بیشتر بود ، پس کیفیت آن بالاتر از کیفیت کره ی اول خواهد بود . مانند شکل زیر :

 

 

 

 

دستور MAKE OBJECT TRIANGLE

با این دستور می توانیم مثلت در فضای سه بعدی ایجاد کنیم . مانند دستورالعمل زیر :

 

MAKE OBJECT TRIANGLE ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3

 

طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مثلث و به جای X1 و Y1 و Z1 مختصات یکی از گوشه های مثلت و به جای X2 و Y2 و Z2 مختصات گوشه ی دوم مثلث و به جای X3 و Y3 و Z3 مختصات گوشه ی سوم مثلت را قرار می دهیم . مانند مثال زیر :

 

MAKE OBJECT TRIANGLE 2,3.5,6,7,2,0,3,5,0,3

Wait Key

 

مثلث بالا در مختصات فضای سه بعدی توسط شکل زیر ، شبیه سازی شده است .

 
 
دستور DELETE OBJECT
با این دستور شیء مورد نظرمان را حذف می کنیم . مانند دستورالعمل زیر :
 
DELETE OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم تا حذف شود . مانند مثال زیر :
 
Make Object Box 1,10,20,30
Make Object Sphere 2,25
Wait 2000
Delete Object 1
Wait Key
 
با اجرای این مثال شی جعبه با شماره ی 1 و کره با شماره ی 2 ایجاد شدند . سپس پس از 2 ثانیه شیء جعبه با شماره ی 1 حذف شد .


شنبه 30 فروردين 1392برچسب:, :: 23:59 ::  نويسنده : ابوالفضل
دستور SYNC
این دستور باعث بهبود روند اجرای بازی خواهد شد . یعنی می تواند محتویات صحنه را تحت زمان های مشخص شده ای ، از نو ترسیم و محاسبه کند . ابتدا با استفاده از دستور Sync On دستور را فعال و با دستور Sync Rate سرعت فریم ها را در هر ثانیه تنظیم و با دستور Sync محاسبات را انجام می دهیم . مانند مثال زیر :
 
SYNC ON
SYNC RATE 30
DO
"PRINT "keep to approximately 30 frames per second
SYNC
LOOP
Sync Off
 
در این مثال ، ابتدا دستور در خط اول فعال شد . و در خط دوم سرعت 30 فریم در ثانیه را تنظیم کردیم و در حلقه ی Do … Loop سرعت ترسیم و محاسبات ، هر ثانیه 30 بار توسط دستور Sync به روز رسانی می شوند .
 
در واقع این دستور یکی از مهم ترین دستورات DarkBasic می باشد . چون اگر دقت کرده باشید ، هر سیستمی سرعت خاص خود را دارد . مثلا کامپیوتری با CPU پنتیوم 3000 و یا AMD 4000 و یا هر سیستم دیگری قدرت و سرعت خود را دارد . یعنی بازی نوشته شده ، در هر کامپیوتری با یک سرعت خاص اجرا خواهد شد . یعنی در یک کامپیوتر ضعیف بازی ما ضعیف و کند حرکت و اجرا می شود و در کامپیوتر قوی تر ، خیلی تیز و سریع اجراء خواهد شد . با استفاده از دستور Sync ، بازی در تمامی کامپیوتر ها با یک سرعت ثابت اجرا خواهد شد . یعنی اگر ما Sync Rate را بر روی 30 تنظیم کرده باشیم . دستورات بین حلقه ی Do و Loop در هر ثانیه تنها 30 بار اجرا خواهند شد .
 
دستور IF
این دستور با استفاده از عملگرها ( + و – و And و Or و > و ... که قبلا راجع به آنها گفتیم ) به بررسی و مقایسه ی مقادیر اعداد و متغیرها و روابط بین آنها در برنامه می پردازد ، تا مسیر اجرای برنامه را تحت کنترل ما در بیاورد . یعنی در برابر شرایط ایجاد شده تصمیم بگیرد و در پی آن اقدامی انجام دهد  . در واقع این دستور جزء دستورات شرطی برنامه ی DarkBasic است که بصورت های مختلفی می توان از آن استفاده کرد . از جمله دستورالعمل زیر :
 
If Condition Then Statement
 
طبق این دستورالعمل ابتدا دستور کلیدی If را تایپ می کنیم و به جای Condition شرط مورد نظرمان را قرار می دهیم . سپس بعد از تایپ کلمه ی کلیدی Then به جای Statement فرمان مورد نیازمان را قرار می دهیم . یعنی اگر شرط Condition درست و منطقی بود ، فرمان Statement اجرا شود . همانند مثال زیر :
 
A = 20
"If A > 10 Then Print "A Is > 10
Wait Key
 
با اجرای این مثال ، ابتدا عدد 20 در متغیر A ذخیره می شود و در خط دوم دستور If عبارت A > 10 را بررسی می کند . اگر درست و منطقی بود ، فرمان نوشته شده بعد از Then انجام می شود . یعنی عبارت A Is > 10 چاپ خواهد شد . اگر متغیر A از 10 کوچکتر باشد دستور نوشته شده بعد از Then اجرا نخواهد شد و DarkBasic آن را رها خواهد کرد و به اجرای خطوط بعدی برنامه خواهد پرداخت .
 
در مثال بالا بعد از کلمه ی کلیدی Then تنها یک دستور تایپ و اجرا شد . در برخی مواقع نیاز داریم چندین خط بعد از بررسی اجرا شود . در این صورت مانند دستورالعمل زیر عمل می کنیم :
 
If Condition
Statement
EndIf
 
طبق این دستورالعمل ، بعد از دستور If به جای Condition شروط مورد نظرمان را تایپ می کنید و در خط بعد به جای Statement فرمان های مورد نظرمان را قرار می دهیم . عبارت EndIf جزئی از دستور If بحساب می آید که پایان شرط را مشخص می کند . یعنی ما می توانیم هر تعداد دستوری را که نیاز داشتیم ، بین If Condition و EndIf قرار دهیم . مانند مثال زیر :
 
$Input Character
"If Character$ = "a
 " ---------- " Print
$Print "Character Is ";Character
"Print "Thank You
EndIf
Wait Key
 
در این مثال بین خط دوم و ششم سه خط دستور قرار دادیم که می توان آن را کم و زیاد کرد . تا الان با استفاده از دستور If به بررسی درستی عبارات پرداختیم تا در قبال آن فرامینی را اجرا کنیم . دستور If را می توان به صورتی استفاده کرد که پس از بررسی عبارات به درستی و نادرستی عبارات بپردازد تا در قبال هر کدام فرامینی مربوط به هر حالت را بطور جداگانه ، اجرا کند . مانند دستورالعمل زیر :
 
If Condition
Statement1
Else
Statement2
EndIf
 
طبق این دستورالعمل شرط Condition بررسی می شود . اگر درست و منطقی بود ، دستور Statement1 انجام می شود ، و اگر ( شرط Condition ) نادرست و غیرمنطقی بود ، دستور  Statement2 انجام می شود . مانند مثال زیر :
 
Input "Input Number ?" ; Number
If Number = 1
"Print "True
Else
"Print "False
EndIf
Wait Key
 
با اجرای این مثال ، یک عدد از کاربر گرفته شده و داخل متغیر Number ذخیره می شود . سپس دستور If مقدار آن متغیر را بررسی می کند . اگر مقدار متغیر Number برابر 1 بود ، عبارت True و اگر هر مقدار دیگری به غیر از 1 باشد ، عبارت False چاپ خواهد شد . یعنی اگر شرط نوشته شده روبروی دستور If یعنی Number = 1 درست باشد ، دستورات نوشته شده بین دستور If و Else اجرا می شود و در غیر اینصورت دستورات نوشته شده بین Else و EndIf اجرا خواهند شد .
 
دستور If می تواند چندین عبارت را ( با هم در یک خط ) بررسی کند . مانند مثال زیر :
 
Number = 100
"strName$ = "Sam
Age = 20
If Number=100 And strName$<>"Jone" Or Age>=10
"Print "Ok
EndIf
Wait Kay
 
دستور SELECT
در دستور If تنها دو حالت قابل بررسی بود ( یکی حالت درست و دیگری حالت نادرست ) . اما در دستور Select حالت های زیادی قابل بررسی و پیش بینی هستند . برای استفاده از دستور Select طبق دستورالعمل زیر عمل می کنیم :
 
Select Expression
Case Value
Statement
EndCase
EndSelect
 
طبق این دستورالعمل عبارت Expression مورد بررسی قرار می گیرد . اگر عبارت Expression دقیقا برابر Value بود . دستور Statement انجام می شود . مانند مثال زیر :
 
Number = 2
Select Number
Case 2
"Print "Two
EndCase
EndSelect
Wait Key
 
در این مثال مقدار داخل متغیر Number که روبروی دستور Select تایپ شده ، بررسی می شود ، اگر مقدار داخل آن برابر 2 باشد ، دستورات نوشته شده بین Case 2 و EndCase همگی اجرا خواهند شد . یعنی در این مثال عبارت Two چاپ می شود .  ما می توانیم موارد زیادی را نیز بررسی کنیم . مانند مثال زیر :
 
numDay = 4
Select numDay
Case 0
"Print "Sat
EndCase
Case 1
"Print "Sun
EndCase
Case 2
"Print "Mon
EndCase
Case 3
"Print "Tue
EndCase
Case 4
"Print "Wed
EndCase
Case 5
"Print "Tur
EndCase
Case 6
"Print "Fri
EndCase
EndSelect
Wait Key
 
در این مثال پیش بینی شده ، که اگر متغیر numDay عددی در محدوده ی 0 تا 6 باشد ، نام آن روز طبق شماره اش چاپ شود . در این مثال چون مقدار داخل متغیر numDay برابر 4 است ، دستورات تایپ شده بین Case 4 و EndCase ( دو خط بعدی اش ) اجرا خواهد شد . یعنی عبارت Wed چاپ می شود . ولی اگر متغیر numDay مقداری خارج از محدوده ی 0 تا 6 در خود داشته باشد ، و ما بخواهیم آن حالت خاص را هم مورد بررسی قرار دهیم ، باید گزینه ی Case Default را به دستورمان اضافه کنیم . مانند مثال زیر :
 
$Input Character
$Select Character
 
   "Case "A
      Print 1
   EndCase
   "Case "B
      Print 2
   EndCase
   Case Default
      "Print "Input 1 Or 2
   EndCase
EndSelect
Wait Key
 
با اجرای این مثال یک عبارت از کاربر دریافت و داخل متغیر $Character ذخیره می شود . اگر مقدار آن برابر عبارت A باشد ، عدد 1 و اگر مقدار آن برابر عبارت B باشد ، عدد 2 چاپ می شود . درغیر اینصورت هر عبارت دیگری وارد متغیر $Character شود ، عبارت Input 1 Or 2 چاپ خواهد شد .
 
دستور WAIT
این دستور اجرای برنامه را به اندازه ی عددی که به آن اختصاص می دهیم ، به تاخیر می اندازد . مانند دستورالعمل زیر :
 
Wait Delay
 
طبق این دستورالعمل دستور Wait اجرای برنامه را به مقدار Delay میلی ثانیه به تاخیر می اندازد . Delay یک عدد از نوع Integer است که اگر مقدار آن را 1 بدهیم یک هزارم ثانیه و اگر 1000 قرار دهیم برنامه را بمدت یک ثانیه نگه می دارد . سپس دستورات بعدی اجرا می شوند . مانند مثال زیر :
 
"Print "Wait For 5 Seconds
Wait 5000
 
End
 
دستور SLEEP
این دستور دقیقا مانند دستور گذشته عمل می کند و به مقدار عدد اختصاصی به آن برنامه را متوقف می کند . مانند مثال زیر :
 
".Print "Please Wait Five Second
Sleep 5000
 
دستور WAIT KEY
این دستور برنامه را آن قدر نگه می دارد تا کلیدی از کیبورد فشرده شود . مانند مثال زیر :
 
"PRINT "press any key to end
WAIT KEY
END
 
با اجرای این مثال ابتدا عبارت press any key to end چاپ شده ، سپس برنامه توسط دستور WAIT KEY در خط دوم نگه داشته می شود . در این هنگام با زدن یکی از دکمه های کیبورد اجرای برنامه ادامه پیدا می کند و با اجرای دستور END برنامه به پایان می رسد .
 
دستور SUSPEND FOR KEY
این دستور دقیقا همان دستور WAIT KEY را انجام می دهد و برنامه را تا زمان فشرده شدن یک کلید از کیبورد متوقف می کند . مانند مثال زیر :
 
"PRINT "press any key to end
SUSPEND FOR KEY
 
END
 
دستور WAIT MOUSE
این دستور مانند دستور قبلی ( Wait Key ) اجرای برنامه را متوقف می کند . منتهی تا زمانی که یکی از دکمه های موس زده شود ! مانند مثال زیر :
 
"PRINT "press any mouse button
WAIT MOUSE
 
 
دستور SUSPEND FOR MOUSE
این دستور مانند دستور قبلی ( Wait Mouse ) اجرای برنامه را تا زمان فشرده شدن یکی از دکمه های موس متوقف می کند . مانند مثال زیر :
 
"PRINT "click mouse to end
SUSPEND FOR MOUSE
END
 
دستور INC
این دستور مقدار مشخصی عدد را به یک متغیر از نوع عدد اضافه می کند . مانند دستورالعمل زیر :
 
Inc Variable,Value
 
طبق این دستورالعمل ، هر بار به مقدار Value به متغیر Variable اضافه می شود . مانند مثال زیر :
 
A# = -2
Do
Inc A#,0.5
#Print A
wait 500
Loop
 
دستور DEC
این دستور شباهت زیادی به دستور قبلی ( Inc ) دارد . با این تفاوت که به جای افزایش به مقدار متغیر ، مقداری را هر بار از آن کم می کند . مانند مثال زیر :
 
myNumber = 10
Do
Dec myNumber,1
Print myNumber
wait 500
Loop
 
زمان استفاده از دستور Inc و Dec اگر بخواهیم تنها یک واحد از متغیرها زیاد یا کم شود ، میتوانیم تنها از نام Inc و Dec و نام متغیر بعد از آن استفاده کنیم . مانند مثال زیر :
 
A = 10
B = 10
Inc A
Dec B
Print "A = ";A;" B = ";B
Wait Key
 
دستور DATA
با این دستور می توان مقادیری داده ( شامل عدد یا کاراکتر ) را بطور متوالی در خطوط برنامه یادداشت کنیم ، تا بعد ها از آن داده ها استفاده کنیم . مانند مثال زیر :
 
DATA 17,"NINE",9.0
DATA 0,"Yes",300
DATA -100,"I Am A Boy",200.05
 
دستور READ
در دستور گذشته مقادیری را در خطوط برنامه یادداشت کردیم . با استفاده از این دستور ، می توانیم آن مقادیر را ، با استفاده از متغیر ها ، استفاده کنیم . مانند مثال زیر :
 
DATA 17,"NINE",9.0
DATA 0,"Yes",300
DATA -100,"I Am A Boy",200.05
#Read a,s$,b
Print a
$Print s
#Print b
Wait Key
 
با اجرای این مثال عدد 17 و عبارت NINE و عدد 9.0 چاپ می شوند . با توجه به مثال برای فراخوانی داده ها از متغیری همنوع همان داده استفاده کردیم . برای خواندن داده های خوط بعدی باید دستور Read را تکرار کنیم مانند مثال زیر :
 
DATA 17,"NINE",9.0
DATA 0,"Yes",300
DATA -100,"I Am A Boy",200.05
 
#Read a,s$,b
#Print a;s$;b
#Read a,s$,b
#Print a;s$;b
#Read a,s$,b
#Print a;s$;b
Wait Key
 
دستور RESTORE
می توانیم با ایجاد برچسب ، داده ها را نامگذاری و بعد با دستور Restore از قسمت فراخوانی نام برچسب ، از داده ها دوباره استفاده کنیم . مانند مثال زیر :
 
:Lotterydata
DATA 12,23,34,45,56,67
DATA 23,34,45,56,67,11
DATA 34,45,56,67,33,22
:Ticketdata
DATA 01,02,03,04,05,06
DATA 21,32,43,24,13,22
 
RESTORE lotterydata
READ a,b,c,d,e,f
PRINT "LOTTERY ",a,b,c,d,e,f

RESTORE ticketdata
READ a,b,c,d,e,f
PRINT "TICKET ",a,b,c,d,e,f
Wait Key


پنج شنبه 29 فروردين 1392برچسب:, :: 1:5 ::  نويسنده : ابوالفضل

 

این فصل شامل دستوراتی برای پخش آهنگ با فرمت های گوناگون ، از جمله MP3 و MID از روی فایل می باشد . ما می توانیم آهنگ ها را ایجاد و یا حذف کنیم . همچنین می توانیم میزان بلندی صدا و سرعت پخش هر آهنگ را کم و زیاد کنیم .

 

دستور LOAD MUSIC

با این دستور آهنگ مورد نظرمان را از روی فایل صدا می کنیم و یک عدد به آن اختصاص دهیم . مانند دستورالعمل زیر :

 

LOAD MUSIC Filename,MusicNumber

 

طبق این دستورالعمل به جای Filename مسیر و نام فایل مورد نظرمان را قرار می دهیم . و به جای MusicNumber یک عدد در محدوده ی 1 تا 65535 قرار می دهیم تا توسط آن عدد در خطوط بعدی به آهنگمان کنترل داشته باشید . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1

Wait Key

 

در این مثال موزیکی با نام Music fun با فرمت mp3 که در مسیر C:Program FilesDark Basic Professional XPMediaMusicMP3 بود بر روی حافظه فراخوانی کردیم . در واقع عدد یک اختصاص داده شده در مثال بالا ، نام موزیک ما می باشد و در هر جایی از برنامه این موزیک توسط همین عدد قابل ردیابی است و می توانیم فرامین مختلفی را توسط این عدد به موزیکمان اعمال کنیم .

 

تابع MUSIC EXIST

این تابع بررسی می کند که آیا موزیک مورد نظرمان بر روی حافظه موجود است یا نه . اگر بر روی حافظه فراخوانی شده باشد ، تابع مقدار یک و اگر فراخوانی نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",1

".If Music Exist(1) Then Print "Music 1 Is Exist

(Print Music Exist(2

Wait Key

 

دستور PLAY MUSIC

اگر موزیکی را قبلا ( توسط دستور Load Music ) بر روی حافظه فراخوانی کرده باشیم و عددی به آن اختصاص داده باشیم ، با این دستور می توانیم با اشاره به عدد اختصاصی به آن موزیک آن را پخش کنیم . مانند دستورالعمل زیر :

 

PLAY MUSIC MusicNumber

 

طبق این دستورالعمل به جای MusicNumber عدد اختصاصی به موزیکمان را قرار می دهیم . یعنی اگر سه موزیک در حافظه فراخوانی کرده باشیم و به هر کدام یک عدد اختصاص داده باشیم . می توانیم با این دستور و همچنین قرار دادن عدد اختصاصی به موزیک ، آن را پخش کنیم . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3" , 2

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music misty room.mp3" , 3

Play Music 2

Wait Key

 

در این مثال سه موزیک بر روی حافظه فراخوانی شد و در آخر موزیک شماره ی 2 پخش شد . در یک زمان چندین موزیک می توانند با هم در حال پخش باشند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3" , 2

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music misty room.mp3" , 3

Play Music 1

Play Music 2

Play Music 3

Wait Key

 

تابع MUSIC PLAYING

این تابع بررسی می کند که آیا موزیک مورد نظرمان درحال پخش است یا نه . اگر موزیک در حال پخش باشد ، تابع عدد یک و اگر در حال پخش نباشد ، تابع عدد صفر را برمی گرداند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3" , 2

Play Music 1

(Print Music Playing(1

(Print Music Playing(2

Wait Key

 

دستور STOP MUSIC

این دستور باعث توقف کامل موزیک می شود . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 100

Play Music 100 : Print "Playing Music ." : Wait 2000

Stop Music 100

Cls : Print "Stop Music . Press Any Key To Exit ." : Wait Key

 

 

دستور PAUSE MUSIC

این دستور باعث توقف موزیک بطور موقت می شود . یعنی اگر نصف موزیک پخش شده باشد ، با این دستور پخش موزیک متوقف شده و در خطوط بعدی می توانیم موزیک متوقف شده را از همانجا پخش کنیم . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 25

Play Music 25

Print "Playing Music" : Wait 2000

Pause Music 25

Wait Key

 

تابع MUSIC PAUSED

این تابع بررسی می کند که آیا موزیک مورد نظرمان موقتا متوقف شده یا نه . اگر موقتا متوقف شده باشد ، تابع مقدار یک و اگر متوفق نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",25

Play Music 25

Print "Playing Music" : Wait 2000

Pause Music 25

".If Music Paused(25)=1 Then Print "Music Paused

Wait Key

 

دستور RESUME MUSIC

اگر موزیک مورد نظر را توسط دستور Pause Music متوفق کرده باشیم ، می توانیم با این دستور ادامه ی موزیک را از همان جا پخش کنیم . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 10

Play Music 10

Print "Playing Music" : Wait 2000

Pause Music 10

Print "Pause Music" : Wait 2000

Resume Music 10

Print "Resume Music" : Wait 2000

Wait Key

 

دستور LOOP MUSIC

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

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 4

Loop Music 4

Print "Press Any Key To Pause Music ." : Wait Key

Stop Music 4

Cls : Print "Press Any Key To Exit ." : Wait Key

 

تابع MUSIC LOOPING

این تابع بررسی می کند که آیا موزیک مورد نظر بطور متوالی در حال پخش است یا نه . یعنی اگر دستور Loop Music در باره ی موزیک مورد نظرمان اجرا شده باشد ، تابع مقدار یک و اگر اجرا نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 4

Loop Music 4

".If Music Looping(4)=1 Then Print "Music Looping

Wait Key

 

دستور DELETE MUSIC

با این دستور موزیک مورد نظرمان را که از فایل به حافظه فراخوانده بودیم ، از حافظه پاک می کنیم . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50

Play Music 50 : Print "Playing Music ." : Wait 2000

Stop Music 50 : Print "Stop Music ." : Wait 2000

Delete Music 50

Print "Delete Music ." : Wait 2000 : End

 

 با پاک شدن موزیک از حافظه ، موزیک قابل پخش نمی باشد و برای پخش دوباره ، موزیک باید دوباره به حافظه فراخوانی شود .

 

دستور SET MUSIC SPEED

با این دستور می توانیم سرعت پخش موزیک را تنظیم کنیم . مانند دستورالعمل زیر :

 

SET MUSIC SPEED MusicNumber,Speed

 

طبق این دستورالعمل به جای MusicNumber عدد موزیک و به جای Speed سرعت پخش موزیک را قرار می دهیم که پیش فرض آن 100 است . یعنی اگر سرعت موزیک را 50 قرار دهیم موزیک با نصف سرعت و اگر 200 قرار دهیم با دو برابر سرعت پخش خواهد شد و اگر 100 باشد با سرعت عادی پخش خواهد شد . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50

".Play Music 50 : Print "Playing Music Normal Speed

Wait 2000 : Cls

Set Music Speed 50,200

".Print "Playing Music 2X Speed

Wait 2000 : Cls

Set Music Speed 50,50

".Print "Playing Music Half Speed

Wait Key

 

تابع MUSIC SPEED

این تابع مقدار سرعت پخش موزیک مورد نظرمان را برمی گرداند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50

Set Music Speed 50,200

(Print "Music Speed = " ; Music Speed(50

Wait Key

 

دستور SET MUSIC VOLUME

با این دستور ، بلندی صدای موزیک مورد نظرمان را کم و زیاد کنیم . مانند دستورالعمل زیر :

 

SET MUSIC VOLUME MusicNumber,Volume

 

طبق این دستورالعمل به جای MusicNumber شماره موزیک و به جای Volume مقدار بلندی صدا را قرار می دهیم که پیش فرض آن 100 می باشد . یعنی اگر بلندی صدای موزیک را 50 قرار دهیم صدای پخش موزیک نصف و اگر 100 قرار دهیم ، بلندی صدای موزیک معمولی خواهد شد . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50

".Play Music 50 : Print "Playing Music Normal Volume

Wait 2000 : Cls

Set Music Volume 50,50

".Print "Playing Music Half Volume

Wait 2000 : Cls

Set Music Volume 50,100

".Print "Playing Music Normal Volume

Wait Key

 

تابع MUSIC VOLUME

این تابع مقدار بلندی صدای موزیک مورد نظرمان را برمی گرداند . مانند مثال زیر :

 

Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",40

Play Music 40

Set Music Volume 40,50

(Print "Music Volume = " ; Music Volume(40

Wait Key

 



سه شنبه 27 فروردين 1392برچسب:, :: 23:14 ::  نويسنده : ابوالفضل

 این فصل شامل دستوراتی برای ایجاد و حذف و ویرایش تصاویری با فرمت های BMP ، JPG ، TGA ، DDS ، DIB و PNG می باشد . می توان تصویر را از روی فایل فراخوانی کرد . کاربرد بیتمپ معمولا برای نمایش عکس و یا لوگوی تصویر اولیه بازی است .

 

دستور LOAD BITMAP

این دستور تصویری را از روی فایل بر روی صفحه فراخوانی می کند . مانند دستورالعمل زیر :

 

LOAD BITMAP Filename,BitmapNumber

 

طبق این دستورالعمل به جای Filename آدرس و نام و فرمت فایل تصویری و به جای BitmapNumber شماره ای بین 0 تا 32 قرار می دهیم . توسط همین شماره می توانیم در خطوط بعدی ، تصویر مورد نظرمان را کنترل کنیم . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 1

Wait Key

 

اگر به جای BitmapNumber عدد صفر را قرار دهیم و یا هیچ گونه عددی قرار ندهیم ، تصویر بر روی صفحه نمایش ، نشان داده می شود . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

Wait Key

 

نکته : در این دستور اگر به جای BitmapNumber عدد صفر قرار دهیم ، در حالت گرافیک قرار می گیریم . یعنی می توانیم از دستورات گرافیکی و چاپی استفاده کنیم . سایر اعداد برای محاسبات تصویری کاربرد دارند . یعنی اگر از این دستور استفاده کنیم و عددی بالا تر از صفر قرار دهیم ، فرامین چاپی و گرافیکی دیده نخواهند شد .

 

دستور CREATE BITMAP

با این دستور می توانیم یک تصویر خالی با سایز دلخواه بسازیم . مانند دستورالعمل زیر :

 

CREATE BITMAP BitmapNumber,Width,Height

 

طبق این دستورالعمل به جای BitmapNumber یک عدد قرار می دهید تا در خطوط بعدی بر روی تصویرمان کنترل داشته باشیم . و به جای Width اندازه ی پهنای تصویر و به جای Height اندازه ی ارتفاع تصویر را قرار می دهیم . مانند مثال زیر :

 

CREATE BITMAP 1,640,480

WAIT KEY

 

در این مثال تصویری با شماره ی یک و طول 640 و ارتفاع 480 ایجاد شد .

 

دستور SET CURRENT BITMAP

این دستور تصویر دلخواهمان را از بین دیگر تصاویر ، فعال می کند . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

CREATE BITMAP 1,640,480

SET CURRENT BITMAP 0

WAIT KEY

 

اگر تصویر شماره صفر فعال باشد ، دستورات چاپی و گرافیکی قابل دیدن خواهند بود .

 

دستور DELETE BITMAP

این دستور تصاویر ایجاد شده و یا خوانده شده از فایل را حذف می کند . در مانند دستورالعمل زیر :

 

DELETE BITMAP BitmapNumber

 

طبق این دستورالعمل به جای BitmapNumber شماره تصویر را قرار می دهیم تا تصویر مورد نظر حذف شود . مانند مثال زیر :

 

CREATE BITMAP 1,640,480

Load Bitmap "C:MyBitmap.bmp",2

DELETE BITMAP 1

WAIT KEY

 

در این مثال تصویر شماره ی 1 حذف می شود . البته از روی Ram حذف می شود، نه اینکه فایل از بین برود .

 

دستور COPY BITMAP

این دستور تصویری را در تصویر دیگری کپی می کند . مانند دستورالعمل زیر :

 

COPY BITMAP FromBitmap,ToBitmap

 

طبق این دستورالعمل به جای FromBitmap شماره ی تصویری که می خواهیم از آن کپی تهیه کنیم و به جای ToBitmap شماره ی تصویری را که می خواهیم در آن بچسبانیم ، قرار می دهیم . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 1

Create Bitmap 2,200,200

Copy Bitmap 1,2

Wait Key

 

در این مثال تصویر شماره ی 1 در تصویر شماره ی 2 کپی می شود . از این دستور می توان به شکل دیگری هم استفاده کرد . مانند دستورالعمل زیر :

 

COPY BITMAP FromBitmap,LEFT,TOP,RIGHT,BOTTOM,ToBitmap,left,top, right,bottom

 

در این روش مختصات تصویر انتخابی از تصویر اول در مختصات تصویر انتخابی در تصویر دوم کپی می شود . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp",1

Create Bitmap 2,200,200

COPY BITMAP 1,50,50,100,100,2,0,0,50,50

COPY BITMAP 2,0

Set Current Bitmap 0

WAIT KEY

 

دستور MIRROR BITMAP

این دستور تصویر را حول محور عمودی انعکاس می دهد . مانند تصویر در آینه عمودی . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp",0

Do

MIRROR BITMAP 0

Wait 500

Loop

 

دستور FLIP BITMAP

این دستور تصویر را حول محور افقی انعکاس می دهد . مانند تصویر در آینه افقی . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

Do

Flip BITMAP 0

Wait 500

Loop

 

دستور FADE BITMAP

این دستور باعث محو شدن تصویر می شود ( تمایل به رنگ سیاه ) . مانند دستورالعمل زیر :

 

FADE BITMAP BitmapNumber,FadeValue

 

طبق این دستورالعمل به جای BitmapNumber عدد مربوط به تصویر و به جای FadeValue مقدار محوشدگی تصویر را قرار می دهیم که عددی در محدوده ی صفر تا 100 می باشد که این عدد درصد شفافیت تصویر را مشخص می کند . یعنی اگر عدد 90 را قرار دهیم ، تنها 90 درصد از شفافیت تصویر باقی خواهد ماند . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

For I = 1 To 10

Fade BITMAP 0,90

Wait 500

Next I

 

دستور BLUR BITMAP

این دستور باعث تار شدن تصویر می شود . مانند دستورالعمل زیر :

 

BLUR BITMAP BitmapNumber,BlurValue

 

طبق این دستورالعمل به جای BitmapNumber عدد مربوط به تصویر و به جای BlurValue مقدار تار شدگی تصویر را قرار می دهیم که عددی در محدوده ی 1 تا 6 می باشد که این عدد شدت تارشدگی تصویر را مشخص می کند . یعنی اگر عدد 1 را قرار دهیم ، تصویر به مقدار کم تار می شود و اگر بیشترین عدد یعنی 6 را قرار دهیم ، تصویر به مقدار زیاد ، تار خواهد شد . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

Wait 1000

Blur BITMAP 0,5

Wait Key

 

تابع CURRENT BITMAP

این تابع شماره ی تصویر فعال را برمی گرداند . مانند مثال زیر :

 

CREATE BITMAP 1,640,480

SET CURRENT BITMAP 0

()PRINT CURRENT BITMAP

WAIT KEY

 

تابع BITMAP EXIST

این تابع مشخص می کند که آیا تصویر مورد نظر در حافظه موجود است یا نه . مانند مثال زیر :

 

CREATE BITMAP 1,640,480

Set Current Bitmap 0

(PRINT BITMAP EXIST(1

WAIT KEY

 

در این مثال چون تصویری با شماره ی یک در حافظه ایجاد شده ، تابع مقدار 1 و اگر این شماره تصویر در حافظه نباشد ( مثلا با دستور Delete Bitmap حذف شده باشد ) ، تابع مقدار صفر را برمی گرداند .

 

تابع BITMAP WIDTH و تابع BITMAP HEIGHT و تابع BITMAP DEPTH

این سه تابع به ترتیب پهنا و ارتفاع و عمق رنگ ( تعداد رنگ های تشکیل دهنده ی تصویر ، مثلا 32 بیت یعنی حدود 16 میلیون رنگ ) تصویر مورد نظر را برمی گردانند . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

(Print "Bitmap Width = " ; Bitmap Width(0

(Print "Bitmap Height = " ; Bitmap Height(0

(Print "Bitmap Depth = " ; Bitmap Depth(0

Wait Key

 

تابع BITMAP MIRRORED

این تابع مشخص می کند که آیا تصویر مورد نظر در راستای محور افقی انعکاس پیدار کرده یا نه ( یعنی آیا از دستور MIRROR BITMAP استفاده شده است یا نه ) . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

Do

Wait 2000

MIRROR BITMAP 0

If BITMAP MIRRORED(0)=1

   "Print "Bitmap Mirrored

Else

      "Print "Bitmap Not Mirrored

EndIf

Loop

 

تابع BITMAP FLIPPED

این تابع مشخص می کند که آیا تصویر مورد نظر در راستای محور عمودی انعکاس پیدار کرده یا نه ( یعنی آیا از دستور FLIPP BITMAP استفاده شده است یا نه ) . مانند مثال زیر :

 

Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0

Do

Wait 2000

Flip BITMAP 0

If BITMAP Flipped(0)=1

   "Print "Bitmap Flipped

Else

   "Print "Bitmap Not Flipped

EndIf

Loop



سه شنبه 27 فروردين 1392برچسب:, :: 1:44 ::  نويسنده : ابوالفضل

 این فصل شامل دستوراتی برای رسم اشکال دو بعدی مانند نقطه دایره خط و . . . می باشد . همچنین می توانیم رنگ قلم و زمینه آن را نیز مشخص کنیم .

 

تابع RGB

با این تابع می توانیم عبارات عددی و یا کراکتری و همچنین اشکال دو بعدی و اشیاء سه بعدی را با رنگ دلخواهمان چاپ و یا رسم کنیم . این تابع سه ورودی دارد مانند دستورالعمل زیر :

 

(NumberColor = RGB(Red,Green,Blue

 

در کامپیوتر رنگ ها از سه رنگ اصلی قرمز و سبز و آبی بوجود آمده اند . یعنی هر رنگی یک شماره ی منحصر به فرد دارد  . در تابع می توانیم به هر کدام از رنگ های اصلی ( قرمز و سبز و آبی ) عددی بین 0 تا 255 اختصاص دهیم و آن را وارد این تابع کنیم ، تا رنگ کل که خود یک عدد است توسط این تابع ایجاد شود . بعد می توانیم از آن عدد برای مشخص کردن رنگ قلم برای چاپ و ترسیم استفاده کنیم .

طبق این دستورالعمل به جای Red ( به معنای شدت رنگ قرمز ) عددی در محدوده ی 0 تا 255 و به جای Green ( به معنای شدت رنگ سبز ) عددی در محدوده ی 0 تا 255 و به جای Blue ( به معنای شدت رنگ آبی ) عددی در محدوده ی 0 تا 255 قرار می دهیم . تابع با توجه به مقادیر وارده عددی تولید می کند که حاصل مخلوط این سه عدد ( این سه رنگ اصلی ) است . یعنی این تابع با توجه به اعداد ورودی 16777216 رنگ تولید می کند . مانند مثال های زیر :

 

(NumberColor = Rgb(255,0,0

 

در این مثال شدت رنگ قرمز 255 و شدت رنگ سبز 0 و شدت رنگ آبی 0 می باشد . در نتیجه عدد NumberColor به دلیل شدت رنگ بالای قرمز عددی را برمی گرداند که آن عدد کد رنگ قرمز پررنگ می باشد .

 

اگر (Rgb (255,0,0 باشد ، عدد NumberColor رنگ قرمز را مشخص می کند .

اگر (Rgb (0,255,0 باشد ، عدد NumberColor رنگ سبز را مشخص می کند .

اگر (Rgb (0,0,255 باشد ، عدد NumberColor رنگ آبی را مشخص می کند .

اگر (Rgb (0,0,0 باشد ، عدد NumberColor رنگ سیاه را مشخص می کند .

اگر (Rgb (255,255,255 باشد ، عدد NumberColor رنگ سفید را مشخص می کند .

اگر (Rgb (255,0,255 باشد ، عدد NumberColor رنگ صورتی را مشخص می کند .

اگر (Rgb (255,255,0 باشد ، عدد NumberColor رنگ زرد را مشخص می کند .

اگر (Rgb (255,0,255 باشد ، عدد NumberColor رنگ فیروزه ای را مشخص می کند . 

برای ایجاد سایر رنگ ها باید عدد هایی بین صفر تا 255 را در تابع قرار دهیم .

 

برای تعیین رنگ راه راحت تری هم وجود دارد . 

 

1 – ابتدا دستور مربوط به انتخاب رنگ مثلا INK را تایپ می کنیم . 

2 – بعد از قرار داد یک فاصله ( فشردن دکمه ی Space ) ، کلیک سمت راست موس را فشار می دهیم . و گزینه ی ...Insert RGB Colour را از منوی ظاهر شده انتخاب می کنیم . کادری مانند شکل زیر باز خواهد شد .

 

 

 

 

می توانیم رنگ مورد دلخواهمان را انتخاب کنیم . با فشردن دکمه ی Ok تابع ()RGB بطور خودکار مقدار دهی می شود . به همین سادگی می توانیم رنگ مورد نظر مان را تنظیم کنیم .

 

دستور CLS

این دستور کل صفحه نمایش را با رنگ دلخواه ما پاک می کند . مانند دستورالعمل زیر :

 

CLS NumberColor

 

طبق این دستورالعمل به جای NumberColor کد رنگ مورد نظرمان را قرار می دهیم . می توانیم از تابع ()RGB برای ایجاد کد رنگ استفاده کنیم . مثلا می خواهیم کل صفحه نمایش را با رنگ سبز پاک کنیم . 

 

(CLS Rgb(255,0,0

Wait Key

 

دستور INK

با این دستور می توانیم رنگ قلم و رنگ زمینه را برای چاپ متون و ترسیمات دو بعدی انتخاب کنیم . مانند دستورالعمل زیر :

 

INK ForegroundColor,BackgroundColor

 

طبق این دستورالعمل به جای ForegroundColor رنگ قلم و به جای BackgroundColor رنگ پشت زمینه را  قرار می دهیم . مانند مثال زیر :

 

(Ink Rgb(0,0,255),Rgb(0,255,0

"Print "ForeGround Color Is Blue And BackGround Color Is Green

Wait Key

 

دستور DOT

با این دستور می توانیم بر روی صفحه نمایشگر نقطه رسم کنیم . مانند دستورالعمل زیر :

 

DOT X,Y

 

طبق این دستورالعمل به جای X فاصله ی نقطه از سمت چپ صفحه ی نمایشگر و به جای Y فاصله ی نقطه از بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :

 

(Ink Rgb(255,255,255),Rgb(0,0,0

Dot 100,100

Wait Key

 

بصورت زیر هم می توان نمای زیبایی ایجاد کرد .

 

For I = 0 To 255

   For J = 0 To 255

      INK RGB(I,J,0),0

       Dot I*2 , J*2

   Next J

Next I

Wait Key

 

دستور LINE

از این دستور برای رسم خط استفاده می کنیم . مانند دستورالعمل زیر :

 

LINE X1,Y1,X2,Y2

 

طبق این دستورالعمل برای رسم یک خط مختصات دو نقطه 1 و 2 را وارد می کنیم . یعنی به جای X1 فاصله ی نقطه ی اول از چپ صفحه و به جای Y1 فاصله ی نقطه ی اول از بالای صفحه و به جای X2 فاصله ی نقطه ی دوم از چپ صفحه و به جای Y2 فاصله ی نقطه ی دوم از بالای صفحه را قرار می دهیم و دستور LINE یک خط از نقطه ی اول به نقطه ی دوم رسم می کند . مانند مثال زیر :

 

Ink Rgb (255,0,255) , 0

Line 100,100,200,200

Wait Key

 

با اجرای این مثال خطی با رنگ صورتی از نقطه ی 100 و 100 به نقطه ی 200 و 200 رسم می شود .

 

در هر یک از توابع و دستوراتی که از اول تا الان گفته شد ، می توانیم به جای اعداد از متغیز هم استفاده کنیم . مانند مثال زیر :

 

Do

Ink Rgb(Rnd(255),Rnd(255),Rnd(255)) , 0

(intAng = Rnd(360

(Line 320,240,320+Sin(intAng)*Rnd(400),240+Cos(intAng)* Rnd(400

Loop

Wait Key

 

دستور BOX

از این دستور برای رسم مستطیل استفاده می کنیم . مانند دستورالعمل زیر :

 

BOX Left,Top,Right,Bottom

 

طبق این دستورالعمل به جای Left فاصله ی ظلع چپ مستطیل تا ظلع چپ صفحه نمایش و به جای Top فاصله ی ظلع بالای مستطیل تا ظلع بالای صفحه نمایش و به جای Right فاصله ی ظلع راست مستطیل تا ظلع چپ صفحه نمایش و به جای Bottom فاصله ی ظلع پائین مسطیل تا ظلع بالای صفحه نمایش را قرار می دهیم . یعنی برای رسم یک مستطیل که طول آن 50 و ارتفاع آن 50 و فاصله ی آن تا بالای صفحه 50 و فاصله ی آن تا چپ صفحه 50 باشد ، باید مانند مثال زیر عمل کنید :

 

(Ink Rgb(0,255,0

Box 50,50,100,100

WAIT KEY

 

دستور Box را می توان بشکل دیگری هم استفاده کرد . مانند زیر :

 

BOX Left,Top,Right,Bottom,Color1,Color2,Color3,Color4

 

در این دستورالعمل به جای Color1 و Color2 و Color3 و Color4 کد چها رنگ مختلف را قرار می دهیم تا هر گوشه از مستطیل به هر کدام از این رنگ ها گرایش پیدا کند . مانند مثال زیر :

 

(BOX 50,50,250,250,RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),RGB(0,255,255

WAIT KEY

 

دستور CIRCLE

با این دستور دایره رسم می کنیم . مانند دستورالعمل زیر :

 

CIRCLE X,Y,Radius

 

طبق این دستورالعمل به جای X فاصله ی مرکز دایره از چپ صفحه نمایش و به جای Y فاصله ی مرکز دایره تا بالای صفحه نمایش و به جای Radius شعاع دایره را قرار می دهیم . مانند مثال زیر :

 

CIRCLE 320,240,100

WAIT KEY

 

در این مثال دایره ای با شعاع 100 در مختصات 320 و 240 رسم می شود .

 

دستور ELLIPSE

با این دستور بیضی رسم می کنیم . مانند دستورالعمل زیر :

 

ELLIPSE X,Y,XRadius,YRadius

 

طبق این دستورالعمل به جای X فاصله ی مرکز بیضی از چپ صفحه نمایش و به جای Y فاصله ی مرکز بیضی تا بالای صفحه نمایش و به جای XRadius اندازه ی شعاع افقی (موازی محور X ها ) و به جای YRadius اندازه ی شعای عمودی (موازی محور Y ها ) بیضی را قرار می دهیم . مانند مثال زیر :

 

ELLIPSE 320,240,100,50

WAIT KEY

 

تابع POINT

با این تابع ، شماره کد رنگ نقطه ای را در مختصات خاصی از صفحه نمایش ، بدست می آوریم . مانند دستورالعمل زیر :

 

(ColorNumber = POINT(X,Y

 

طبق این دستورالعمل به جای X فاصله ی نقطه از چپ صفحه ( محور افقی ) و به جای Y فاصله ی نقطه از بالای صفحه ( محور عمودی ) را قرار می دهیم . مانند مثال زیر .

 

(CLS RGB(128,64,0

(PRINT POINT(320,240

WAIT KEY

 

تابع RGBR

این تابع شدت رنگ قرمز را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :

 

(CLS RGB(128,64,255

((PRINT "AMOUNT OF RED = " ; RGBR(POINT(320,240

WAIT KEY

 

تابع RGBG

این تابع شدت رنگ سبز را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :

 

(CLS RGB(128,164,255

(ColorNumber = POINT(320,240

(PRINT "AMOUNT OF GREEN = " ; RGBG(ColorNumber

WAIT KEY

 

تابع RGBB

این تابع شدت رنگ آبی را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :

 

(CLS RGB(128,64,5

((PRINT "AMOUNT OF BLUE = " ; RGBB(POINT(320,240

WAIT KEY



شنبه 24 فروردين 1392برچسب:, :: 1:2 ::  نويسنده : ابوالفضل

 این فصل شامل دستوراتی برای کنترل صفحه نمایشگر ( رزولوشن : مختصات طولی و عرضی ) و همچنین حالت پنجره ای که بازی در آن اجرا می شود ، می باشد .

 

دستور PERFORM CHECKLIST FOR GRAPHICS CARDS

با این سلسله از دستورات می توانیم تعداد و نام کارت های گرافیکی شناخته شده توسط کامپیوتر ( که به کامپیوتر وصل شده اند ) را بدست آوریم . مانند مثال زیر :

 

Perform Checklist For Graphics Cards

"Print "Graphics Cards

()For T = 1 To CheckList Quantity

(Print T;":"+CheckList String$(T

Next T

Wait Key

 

دستور PERFORM CHECKLIST FOR DISPLAY MODES

با این سلسله از دستورات می توانیم تعداد حالت های پشتیبانی شونده از مختصات طولی و عرضی ( رزولوشن صفحه نمایش ) را بدست آوریم . مثلا کامپیوتر ما ممکن است از چندین رزولوشن مانند 480*640 و 1280*1024 و 600*800 و 768*1024 و ... برای مشخص کردن تعداد نقطه های طولی و عرضی برای صفحه ی نمایش پشتیبانی کند . ولی کامپیوتر دیگر که از نوع لپ تاپ است فقط از رزولوشن 1280*1024 ( یعنی تعداد 1024 نقطه در عرض و 1280 نقطه در طول ) پشتیبانی می کند . این سلسله از دستورات بطور خودکار در هر کامپیوتر تعداد حالت ها را بدست می آورند . مانند مثال زیر :

 

Perform Checklist For Display Modes

"Print "Display Modes

()For T = 1 To CheckList Quantity

(Print "Mode ";T;" : "+CheckList String$(T

Next T

Wait Key

 

با اجرای این مثال برای هر حالت موجود ، طول و عرض و عمق رنگ ( 16 بیت و 32 بیت ) مربوط به آن ، چاپ خواهد شد .

 

دستور SET DISPLAY MODE

قبلا برای تنظیم مختصات طولی وعرضی ( رزولوشن ) صفحه ی نمایشگر از پنجره ی Project Maneger استفاده می کردیم . با این دستور ، می توانیم حین اجرای برنامه ، رزولوشن صفحه ی نمایشگر ( Monitor ) را تغییر دهیم . مانند دستورالعمل زیر :

 

SET DISPLAY MODE Width,Height,Depth

 

طبق این دستورالعمل به جای Width مختصات طولی صفحه نمایشگر ( تعداد نقات از چپ به راست صفحه ) و به جای Height مختصات عرضی صفحه نمایشگر (تعداد نقات از بالا به پایین صفحه ) و به جای Depth عمق رنگ صفحه نمایشگر ( 16 بیت یعنی تعداد رنگ های کم و 32 بیت یعنی تعداد رنگ های زیاد که حدود 16 میلیون رنگ می باشد ) را مشخص می کنیم . مانند مثال زیر :

 

Set Display Mode 800,600,32

Wait Key

 

در این مثال ، تعداد نقات طولی 800 و تعداد نقات عرضی 600 با بالاترین تعداد رنگ ها ( 32 بیت معادل 16777216 رنگ ) مشخص شدند .

 

نکته : همیشه از سایز های استاندارد برای این دستور استفاده کنید . مانند 768*1024 و 1280*1024 و 600*800 و 480*640 و از این قبیل .

 

تابع CHECK DISPLAY MODE

برای آنکه بفهمیم آیا نمایشگر توانایی قرار گرفتن در رزولوشن پیشنهادی ما را دارد یا نه از تابعCHECK DISPLAY MODE استفاده می کنیم . طول و عرض مختصات پیشنهادی و همچنین عمق رنگ ( 16 و یا 32 بیت ) را وارد تابع می کنیم . اگر تابع عدد یک را برگرداند ، معلوم می شود که قابلت قرار گرفتین در این مختصات و رنگ را دارد و اگر مقدار صفر برگردانده شود ، یعنی توانایی قرار گرفتن در چنین مختصاتی را ندارد . مانند مثال زیر :

 

"Print "Please Wait To Change Resolotion To 1024*768,32

Wait 5000

If Check Display Mode(1024,768,32) = 1

      Set Display Mode 1024,768,32

      "Print "Change Successfully

Else

      "Print "Not Change

EndIf

Wait Key

 

دستور SET WINDOW ON

این دستور صفحه ی اجرای بازی را به حالت پنجره تبدیل می کند . که می توان آن را حرکت داد و یا بزرگ و کوچک کرد . مانند مثال زیر .

 

Set Window On

"Print "Window Mode Is On

Wait key

 

دستور SET WINDOW OFF

اگر با استفاده از دستور قبلی (SET WINDOW ON ) ، صفحه ی اجرای بازی را به حالت پنجره درآورده باشیم ، با این دستور می توانیم صفحه را به حالت عادی درآوریم . مانند مثال زیر :

 

Set Window On

"... Print "Window Mode Is On . Please Wait

Wait 2000

Set Window Off

"Cls : Print "Window Mode Is Off

Wait key

 

دستور SET WINDOW TITLE

با این دستور می توانیم برای پنجره ی بازی یک تیتر ( عنوان در بالای پنجره ) قرار دهیم . مانند مثال زیر :

 

Set Window On

"Set Window Title "MY WINDOW TEXT

Wait 2000

 

با اجرای این مثال عبارت MY WINDOW TEXT در بالاترین قسمت پنجره یعنی نوار عنوان قرار خواهد گرفت .

 

دستور SET WINDOW SIZE

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

 

SET WINDOW SIZE Width,Height

 

طبق این دستورالعمل به جای Width اندازه ی طول پنجره و به جای Height اندازه ی ارتفاع پنجره را قرار می دهیم . مانند مثال زیر :

 

Set Window On

Print "Please Wait To Sizable Window ." : Wait 2000 : Cls

Set Window Size 500,400

Wait Key

 

دستور MINIMIZE WINDOW

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

 

Minimize Window

Wait key

 

دستور MAXIMIZE WINDOW

این دستور اندازه ی صفحه ی اجرای بازی را به بیشترین اندازه ممکن می رساند . یعنی به اندازه ی کل صفحه ی نمایشگر . مانند مثال زیر :

 

Minimize Window

Wait 2000

Maximize Window

Wait key

 

دستور RESTORE WINDOW

این دستور پنجره ی اجرای بازی را از حالت حداکثر و یا حداقل به حالت معمولی تبدیل می کند . مانند مثال زیر :

 

Set Window On

Maximize Window

Wait 2000

Restore Window

Wait Key

 

دستور HIDE WINDOW و دستور SHOW WINDOW

با دستور HIDE WINDOW می توانیم صفحه ی اجرای بازی را مخفی و با دستور SHOW WINDOW می توانیم آن را دوباره آشکار کنیم . مانند مثال زیر :

 

Set Window On

Wait 2000

Hide Window

Wait 2000

Show Window

Wait Key

 

دستور SET WINDOW POSITION

اگر صفحه ی اجرای بازی توسط دستور Set Window On بصورت پنجره درآمده باشد ، با این دستور می توانیم فاصله ی پنجره ی بازی را از بالا و از سمت چپ صفحه ی نمایش ، تنظیم کنیم . مانند دستورالعمل زیر :

 

SET WINDOW POSITION X,Y

 

طبق این دستورالعمل به جای X فاصله ی پنجره ی بازی تا قسمت چپ صفحه ی نمایشگر و به جای Y فاصله ی پنجره ی بازی تا قسمت بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :

 

Set Window On

SET WINDOW POSITION 100,100

Wait Key

 

تابع SCREEN WIDTH و تابع SCREEN HEIGHT و تابع SCREEN DEPTH

تابع ()Screen Width تعداد نقات تشکیل دهنده ی طول صفحه ی اجرای بازی

و تابع ()Screen Height تعداد نقاط تشکیل دهنده ی ارتفاع صفحه ی اجرای بازی

و تابع ()Screen Depth مقدار رنگ های تشکیل دهنده ی صفحه ی اجرای بازی ( 16 بیت و یا 32 بیت ، که 32 بیت همان 16777216 رنگ می باشد ) را برمی گرداند . مانند مثال زیر :

 

Set Display Mode 800,600,32

(()Print "Screen Width = " + Str$(Screen Width

(()Print "Screen Height = " + Str$(Screen Height

(()Print "Screen Depth = " + Str$(Screen Depth

Wait Key

 

تابع SCREEN FPS

این تابع تعداد فریم های اجرای بازی را در هر ثانیه را برمی گرداند . مانند مثال زیر :

 

Sync On

Sync Rate 45

Do

Sync

(()Print "Screen Fps = " + Str$(Screen fps

Loop



جمعه 23 فروردين 1392برچسب:, :: 1:12 ::  نويسنده : ابوالفضل

 در این فصل یاد می گیریم تا بر روی فایل ها و پوشه های موجود در Hard کامپیوتر کار کنیم . مثلا فایل یا پوشه ای را کپی ، ایجاد ، حذف ، تغییر نام و ... را انجام دهیم .

 

دستور DIR

این دستور اسامی تمامی فایل ها و پوشه هایی را که در مسیر جاری وجود دارند ، بر روی صفحه ی نمایشگر چاپ می کند . یعنی اگر مسیر جاری C:Example باشد ، اسامی فایل ها و پوشه های موجود در این مسیر چاپ خواهد شد . مانند مثال زیر :

 

Dir

Do

Loop

 

دستورات PERFORM CHECKLIST FOR FILES

این سلسله از دستورات ، مانند دستور قبلی ( یعنی دستور DIR ) اسامی تمامی فایل ها و پوشه هایی را که در مسیر جاری وجود دارند را برمی گرداند . با این تفاوت که علاوه بر نمایش آنها ، توابع این دستورات کنترل بیشتری بر روی داده ها به ما خواهد داد . مانند مثال زیر :

 

Perform Checklist For Files

()For T = 1 to CheckList Quantity

(Print "Files = " + CheckList String$(T

Next T

Wait Key

 

تابع GET DIR

با استفاده از این تابع می توانیم مسیر جاری را پیدا کنیم . مانند مثال زیر :

 

()$Print "Current Dir = " + Get Dir

Wait Key

 

دستور SET DIR

با این دستور می توانیم مسیر جاری را تغییر دهیم . یعنی اگر مسیر بر روی /:C تنظیم شود ، با استفاده از دستور Dir می توانیم اسامی فایل ها و پوشه های موجود در این مسیر را نمایش دهیم . مانند مثال زیر :

 

"/:Set Dir "C

Dir

Wait Key

 

با اجرای این مثال اسامی تمامی فایل ها و پوشه های موجود در مسیر /:C نمایش داده خواهد شد .

 

تابع WINDIR

این تابع مسیری که ویندوز در آن نصب شده باشد را برمی گرداند . مانند مثال زیر :

 

()$Print "Current Windows Directory = " + WinDir

Wait Key

 

تابع APPNAME

این تابع نام و مسیر برنامه ی ما را در حالت اجرا برمی گرداند . یعنی اگر برنامه ای که می نویسیم در هر مسیری وجود داشته باشد . موقع اجرای برنامه ، تابع APPNAME مسیر و نام برنامه ی ما را برمی گرداند . مانند مثال زیر :

 

()$Print "AppName = " + AppName

Wait Key

 

دستور DRIVELIST

این دستور اسامی درایو های موجود در HARD را چاپ می کند . مانند مثال زیر :

 

DriveList

do

loop

 

دستورات PERFORM CHECKLIST FOR DRIVES

این تابع همانند دستور قبلی نام درایو های موجود را برمی گرداند . مانند مثال زیر :

 

Perform Checklist For Drives

()For T = 1 to CheckList Quantity

(Print "Drives = " + Checklist String$(T

Next T

Wait Key

 

تفاوت این دستورات با دستور قبلی ( Drive List ) در توابع آن می باشد . یعنی با این دستورات و توابع می توانیم کنترل بیشتری بروی نام و تعداد درایو ها داشته باشیم .

 

دستور MAKE FILE

با این دستور می توانیم فایل خالی با فرمت دلخواه در هر مسیری ایجاد کنیم . مانند دستورالعمل زیر :

 

MAKE FILE fileName

 

طبق این دستورالعمل به جای fileName نام درایو و مسیر موجود و نام فایل و فرمت آن را قرار می دهیم . مانند مثال زیر :

 

"Make File "C:MyDirectoryMyFile.txt

 

با اجرای این مثال فایلی با نام MyFile با فرمت txt در مسیر C:MyDirectory ایجاد می شود .

نکته 1 : اگر فایلی قبلا با همین نام و فرمت در همین مسیر وجود داشته باشد . آن فایل پاک خواهد شد و یک فایل خالی جایگزین آن می شود .

 

نکته 2 : اگر مسیر انتخابی برای ایجاد فایل وجود نداشته باشد ، هیچ فایلی ایجاد نخواهد شد . در این مثال اگر دارکتوری MyDirectory در درایو C وجود نداشته باشد ، هیچ فایلی ایجاد نخواهد شد .

 

دستور MAKE DIRECTORY

با این دستور می توانیم یک دایرکتوری خالی ( پوشه ای برای نگه داشتن پوشه ها و فایل ها ) ایجاد کنیم . مانند دستورالعمل زیر :

 

MAKE DIRECTORY DirectoryName

 

طبق این دستورالعمل به جای DirectoryName مسیر و نام دایرکتوری ( پوشه ) جدید را قرار می دهیم . مانند مثال زیر :

 

"Make Directory "C:/oldDirectory/NewDirectory

 

با اجرای این مثال دارکتوری NewDirectory در مسیر C:/oldDirectory ایجاد می شود .

نکته : اگر مسیری برای ایجاد داریکتوری وجود نداشته باشد ، داریکتوری جدید ایجاد نخواهد شد .

 

دستور DELETE FILE

با این دستور می توانیم فایلی را که از قبل ایجاد شده را ، حذف کنیم ( از بین ببریم ) . مانند دستورالعمل زیر :

 

DELETE FILE Filename

 

طبق این دستورالعمل به جای Filename مسیر و نام فایل مورد نظر را جهت پاک شدن قرار می دهیم . مانند مثال زیر :

 

"Delete File "C:/MyDirectory/File.dat

با اجرای این مثال فایل File.dat موجود در مسیر C:/MyDirectory حذف می شود .

 

دستور COPY FILE

این دستور فایلی که قبلا ایجاد شده باشد را ، در مسیری دلخواه کپی می کند . مانند دستوالعمل زیر :

 

COPY FILE SourceFilename,DestinationFilename

 

طبق این دستورالعمل به جای SourceFilename مسیر و نام فایلی که می خواهیم از روی آن کپی ایجاد کنیم را ، قرار می دهیم و به جای DestinationFilename مسیر و نام فایل جدید را قرار می دهیم .

می توانیم در قسمت DestinationFilename نام جدیدی برای فایل جدید در نظر بگیریم ، منتهی مسیر مورد نظر برای فایل جدید باید وجود داشته باشد .

 

"Copy File "C:/data.dat","D:/MyDirextory/backupdata.dat

 

با اجرای این مثال فایلی جدید با نام backupdata.dat در مسیر D:/MyDirextory از روی فایل data.dat موجود در مسیر :C ایجاد خواهد شد .

 

دستور MOVE FILE

با این دستور می توانیم فایل موجود را به مسیر جدید انتقال دهیم . همچنین می توانیم نام جدیدی را هم در نظر بگیریم . مانند دستورالعمل زیر :

 

MOVE FILE SourceFilename,DestinationFilename

 

طبق این دستورالعمل به جای SourceFilename مسیر و نام فایلی را که می خواهیم انتقال دهیم ، قرار می دهیم و به جای DestinationFilename مسیر و نام جدیدی را برای انتقال در نظر می گیریم .

 

نکته : مسیر مورد نظر برای انتقال فایل باید وجود داشته باشد .

 

"Move File "C:oldfile.txt","d:oldfile.txt

 

یا

 

"Move File "C:oldfile.txt","d: ewfile.txt

 

دستور RENAME FILE

با استفاده این دستور می توانیم فایل مورد نظرمان را تغییر نام دهیم . مانند دستورالعمل زیر :

 

RENAME FILE SourceFilename,NewFilename

 

طبق این دستورالعمل به جای SourceFilename نام و مسیر فایل مورد نظرمان را قرار می دهیم و به جای NewFilename نام جدیدی را وارد می کنیم . مانند مثال زیر :

 

"Rename File "C:Data.txt","C: ewData.txt

 

نکته : طبق دستورالعمل اگر به جای NewFilename مسیر جدیدی را قرار دهیم ، فایل به مسیر جدید و با نام جدید نقل مکان خواهد کرد . مانند مثال زیر :

 

"Rename File "C:Data.txt","D: ewData.txt

 

در این مثال علاوه بر این که نام فایل از Data به newData تغییر پیدار کرد . خود فایل هم از مسیر :C به مسیر :D انتقال پیدا کرد .

 

دستور EXECUTE FILE

از این دستور برای اجرای فایل ها استفاده می کنیم . مانند دستورالعمل زیر :

 

EXECUTE FILE Filename,Commandline,Directory

 

طبق این دستورالعمل به جای Filename نام و مسیر فایل اجرایی مورد نظرمان را قرار می دهیم . مانند مثال زیر :

 

"","","EXECUTE FILE "C:WINDOWSNotePad.exe

Wait Key

 

با اجرای این مثال برنامه ی NotePad اجرا خواهد شد . این برنامه فایلی است با فرمت Exe و به تنهایی اجرا می شود . ولی فایل هایی هم هستند که اجرایی نیستند ؛ بلکه اطلاعاتی را برای برنامه های دیگر نگه می دارند . مانند فایل هایی با فرمت Doc که توسط برنامه ی Microsot Word ایجاد شده اند . پس برای استفاده و باز کردن این فایل باید به جای Directory نام و مسیر فایل برنامه ی Microsoft Word را هم قرار دهیم . مانند مثال زیر :

 

EXECUTE FILE "C:MyFile.Doc","","C:Program FilesMicrosoft 

"OfficeOffice10WinWord.Exe

Wait Key

 

اگر برنامه ی Microsoft Word از قبل نصب شده باشد . می توانیم تنها نام و مسیر فایل را قرار دهیم . مانند مثال زیر :

 

"","","EXECUTE FILE "C:MyFile.Doc

Wait Key

 

تابع FILE EXIST

با استفاده از این تابع می توانیم بفهمیم که آیا فایل مورد نظرمان وجود دارد یا خیر . مانند دستورالعمل زیر :

 

(ReturnInteger = FILE EXIST(Filename

 

طبق این روش به جای Filename نام و مسیر فایل مورد نظرمان را قرار می دهیم . اگر فایل مورد نظر در مسیر وجود داشته باشد ، ReturnInteger برابر یک و اگر وجود نداشته باشد ، ReturnInteger برابر صفر خواهد بود . مانند مثال زیر :

 

"myFile$ = "C:MyDirectoryFile.exe

"If File Exist(myFile$)=1 Then Print "Yes" Else Print "No

Wait Key

 

با اجرای این مثال اگر فایل File با فرمت exe در مسیر C:MyDirectory ، وجود داشته باشد ، عبارت Yes و اگر وجود نداشته باشد ، عبارت No چاپ خواهد شد .

 

تابع PATH EXIST

با این تابع می توانیم بررسی کنیم که آیا مسیر مورد نظرمان وجود دارد یا خیر . مانند دستورالعمل زیر :

 

(ReturnInteger = PATH EXIST(PATH

 

طبق این دستورالعمل به جای PATH مسیر مورد نظرمان را قرار می دهیم . اگر مسیر مورد نظر وجود داشته باشد ، ReturnInteger برابر یک و اگر وجود نداشته باشد ، ReturnInteger برابر صفر خواهد بود . مانند مثال زیر :

 

"myPath$ = "C:MyDirectoryDirect

"If Path Exist(myPath$)=1 Then Print "Yes" Else Print "No

Wait Key

 

با اجرای این مثال اگر مسیر C:MyDirectoryDirect وجود داشته باشد ، عبارت Yes و اگر وجود نداشته باشد ، عبارت No چاپ خواهد شد .

 

دستور OPEN TO WRITE و دستور ClOSE FILE

با استفاده از این دستور می توانیم فایلی را جهت نوشتن اطلاعات در آن باز کنیم . مانند دستورالعمل زیر :

 

OPEN TO WRITE FileNumber,Filename

 

طبق این دستورالعمل به جای Filename نام و مسیر فایل مورد نظرمان را قرار می دهیم . و به جای FileNumber یک عدد بین 1 تا 32 قرار می دهیم و در برنامه توسط همین شاخص عددی می توانیم به فایل باز شده ، فرمان خواندن و یا نوشتن اطلاعات را بدهیم . در واقع برای هر فایل باز شده در برنامه ، باید یک عدد به آن فایل اختصاص پیدا کند . مانند مثال زیر :

 

"Open To Write 1,"C:Data.dat

Close File 1

 

با اجرای این مثال فایل Data.dat را با هدف نوشتن اطلاعات در آن باز کردیم و عدد یک را به آن اختصال دادیم . و در خط بعدی با توجه به عددی که به فایل باز شده اختصاص داده بودیم ، فایل را بستیم . فایل باز شده بعد از اتمام کار باید بسته شود تا از آسیب دیدگی آن جلوگیری بعمل آید .

 

تابع FILE OPEN

این تابع باز و یا بسته بود فایل را بررسی می کند . یعنی طبق عددی را که در برنامه به هر فایل اختصاص داده بودیم ، آن عدد در این تابع وارد شود ، اگر فایل مورد نظر باز بوده باشد ، مقدار این تابع عدد یک و در غیر اینصورت اگر فایل بسته باشد ، عدد صفر توسط این تابع برگردانده خواهد شد . یعنی اگر از دستور Close File استفاده شده باشد ، عدد صفر توسط این تابع برگردانده خواهد شد . مانند مثال زیر :

 

"Open To Write 1,"C:Data.dat

"If File Open(1)=1 Then Print "File Is Open" Else Print "File Is Close

Close File 1

"If File Open(1)=1 Then Print "File Is Open" Else Print "File Is Close

Wait Key

 

در این مثال در خط اول ، فایل Data.dat موجود در مسیر :C جهت نوشتن اطلاعت باز شد و در خط دوم تابع ()File Open به دلیل باز بودن فایل عدد یک را برگرداند و عبارت File Is Open چاپ شد و در خط سوم فایل بسته شد . به همین دلیل تابع ()File Open به دلیل بسته بودن فایل عدد صفر را برگرداند و عبارت File Is Close چاپ شد .

 

توجه ! اگر فایل Data.dat وجود نداشت ، با دستور Open To Write بطور خودکار ایجاد و باز می شد .

 

دستور WRITE WORD

با این دستور می توانیم عددی را در محدوده ی متغیر از نوع Word ، داخل فایل بنویسیم . مانند دستورالعمل زیر :

 

WRITE WORD FileNumber,Variable

 

طبق این دستورالعمل به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable عددی با محدوده متغیر Word یعنی عددی بین 0 تا 65535 جهت ذخیره شدن در Hard قرار می دهیم . مانند مثال زیر :

 

"Open To Write 1,"Data.dat

If File Open(1)=1

   write word 1,42

EndIf

Close File 1

 

در این مثال ابتدا فایل Data.dat را جهت نوشتن اطلاعات باز می کنیم . سپس قبل از نوشتن اطلاعات داخل فایل بررسی می کنیم که آیا فایل برای نوشته شدن اطلاعات باز است یا بسته . در صورت باز بودن ، می توانیم اطلاعات را در آن بنویسیم و بعد فایل را ببندیم .

 

نکته : در این مثال فرض بر این است که فایل Data.dat در پوشه ی پروژه است ( یعنی فایل Data.dat کنار فایل اجرایی است ) . به خاطر همین مسیر فایل را تایپ نکردیم .

 

دستور OPEN TO READ

با استفاده از این دستور می توانیم فایلی را جهت خواندن اطلاعات از آن باز کنیم . مانند دستورالعمل زیر :

 

OPEN TO READ FileNumber,Filename

 

طبق این دستورالعمل به جای Filename نام و مسیر فایل مورد نظرمان را قرار می دهیم . و به جای FileNumber یک عدد بین 1 تا 32 قرار می دهیم . مانند مثال زیر :

 

"Open To Read 1,"C:Data.dat

Close File 1

 

با اجرای این مثال فایل Data.dat را با هدف خواندن اطلاعات از آن باز کردیم و عدد یک را به آن اختصال دادیم . و در خط بعدی با توجه به عددی که به فایل باز شده اختصاص داده بودیم ، فایل را بستیم . دقت کنید تا فایل باز شده بعد از اتمام کار حتما بسته شود تا از آسیب دیدن جلوگیری شود .

 

دستور READ WORD

با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Word ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :

 

READ WORD FileNumber,Variable

 

در این مثال به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable متغیری با محدوده متغیر Word قرار می دهید . مانند مثال زیر :

 

"Open To Read 1,"Data.dat

If File Open(1)=1

Read word 1,A

Print A

EndIf

Close File 1

 

در این مثال ابتدا فایل را جهت خواندن اطلاعات باز می کنیم . سپس قبل از خواندن اطلاعات داخل فایل بررسی می کنیم که آیا فایل برای خواندن اطلاعات از آن باز است یا نه . در صورت باز بودن ، می توانیم اطلاعات را از آن بخوانیم و بعد فایل را ببندیم . در این مثال ما یک متغیر به نام َA ایجاد کردیم تا از داده استفاده کنیم .

 

نکته : در مثال های اخیر ما مسیر فایل را مشخص نکردیم . یعنی عبارت , "Data.dat" به این معنی است که فایل در همان مسیری ایجاد شود که برنامه ما هم اکنون در آن مسیر در حال اجراست . یعنی اگر مسیر پروژه ی ما در آدرس زیر

C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsprjExample

 ایجاد شده باشد . با اجرای برنامه ، فایل Data.dat در همین مسیر ایجاد خواهد شد . و اگر فایل را Compile کنیم . یعنی آن را اجرایی کنیم و فایلی با فرمت Exe ایجاد گردد ، می توانیم آن فایل را در هر مسیری و در هر کامپیوتری کپی کنیم و فایل Data.dat هم با این روش کنار فایل اجرایی یعنی در همان پوشه ای که فایل اجرایی در آن وجود دارد ایجاد خواهد شد . از این روش در تمامی دستورات مربوط به کار با فایل ها در تمامی وبلاگ می توان استفاده کرد . مگر اینکه مسیر جاری توسط دستور SET DIR تغییر پیدا کند .

 

دستور WRITE BYTE

با این دستور می توانیم عددی در محدوده ی متغیری از نوع Byte ، داخل فایل بنویسیم . مانند دستورالعمل زیر :

 

WRITE Byte FileNumber,Variable

 

دستور READ BYTE

با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Byte ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :

 

READ BYTE FileNumber,Variable

 

دستور WRITE LONG

با این دستور می توانیم عددی در محدوده ی متغیری از نوع Integer ، داخل فایل بنویسیم . مانند دستورالعمل زیر :

 

WRITE LONG FileNumber,Variable

 

دستور READ LONG

با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Integer ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :

 

READ WORD FileNumber,Variable

 

دستور WRITE FLOAT

با این دستور می توانیم عددی اعشاری ( ممیزدار ) را در محدوده ی متغیری از نوع Float ، داخل فایل بنویسیم . مانند دستورالعمل زیر :

 

WRITE Float FileNumber,Variable

 

دستور READ FLOAT

با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Float ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :

 

READ Float FileNumber,Variable

 

برای اینکه مقدار عدد ممیز دار درست خوانده شود باید از متغیری ممیز دار نیز برای خواندن استفاده شود ، مانند مثال زیر که از متغیر #a استفاده می کنیم :

 

"Open To Read 1,"data.dat

If File Open(1)=1

#Read Float 1,a

(#Print "value = "+str$(a

EndIf

Close File 1

Wait Key

 

دستور WRITE STRING

با این دستور می توانیم عبارتی کاراکتری را ، داخل فایل بنویسیم . مانند دستورالعمل زیر :

 

WRITE STRING FileNumber,Variable

 

طبق این دستورالعمل به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable عبارتی کاراکتری قرار می دهیم ( بصورت عبارت و یا متغیر کاراکتری ) . مانند مثال زیر :

 

"Open To Write 1,"Data.dat

If File Open(1)=1

   ".Write String 1,"This Is A Data

EndIf

Close File 1

 

دستور READ STRING

با این دستور می توانیم عبارتی را که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :

 

READ STRING FileNumber,Variable

 

طبق این دستورالعمل به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable متغیر کاراکتری قرار می دهیم . مانند مثال زیر :

 

"Open To Read 1,"Data.dat

If File Open(1)=1

$Read String 1,A

$Print A

EndIf

Close File 1

 

تابع FILE SIZE

این تابع اندازه ی فایل مورد نظرمان را بر حسب بایت برمی گرداند . هر 1000 بایت 1 کیلو بایت می باشد . مانند مثال زیر :

 

("Print File Size("C:data.dat



پنج شنبه 22 فروردين 1392برچسب:, :: 1:46 ::  نويسنده : ابوالفضل

 در این فصل به چگونگی کنترل بازی توسط کاربر می پردازیم . دستورات و توابعی را یاد می گیریم تا وردی ها را کنترل کنیم . مثلا در عوض فشرده شدن کلید های موس و کیبورد یا حرکت موس ، کار خاصی را انجام دهیم .

 

دستور HIDE MOUSE

این دستور باعث مخفی شدن شکل موس ( فلش متحرک ) بر روی صفحه ی نمایشگر می شود . مانند مثال زیر :

 

HIDE MOUSE

Wait Key

 

با اجرای این مثال زمانی که برنامه در حالت اجراست ، شکل موس دیده نخواهد شد .

 

دستور SHOW MOUSE

اگر از دستور گذشته ( HIDE MOUSE ) در برنامه استفاده کرده باشیم . می توانیم با این دستور شکل موس ( فلش متحرک ) را دوباره در صفحه نمایشگر ظاهر کنیم . مانند مثال زیر :

 

HIDE MOUSE

"PRINT "Hide Mouse

WAIT 5000

"CLS : PRINT "Show Mouse

SHOW MOUSE

WAIT KEY

 

در این مثال در خط اول شکل موس مخفی و پس از 5 ثانیه در خط پنجم شکل موس دوباره آشکار خواهد شد .

 

دستور POSITION MOUSE

با استفاده از این دستور ، می توانیم موقعیت مکانی موس را بر روی صفحه ی نمایشگر مشخص کنیم . مانند دستورالعمل زیر :

 

POSITION MOUSE X,Y

 

طبق این دستورالعمل به جای X موقعیت طولی ( فاصله ی موس تا چپ صفحه ) و به جای Y موقعیت عرضی ( فاصله ی موس تا بالای صفحه ) را قرار  می دهیم . تعیین موقعت موس با این دستور بستگی به مختصات طولی و عرضی دارد . یعنی اگر برای مثال ، مختصات طولی و عرضی نمایشگر ( رزولوشن ) را روی 480*640 تنظیم کرده باشیم ( قبلا در فصل سوم زمان معرفی دستور Set Cursor توضیح داده شد ) ، کمترین مقدار X صفر و بیشترین مقدار آن 639 و همچنین کمترین مقدار Y صفر و بیشترین مقدار آن 479 خواهد بود . مانند مثال زیر :

 

Do

Position Mouse 100,100

WAIT 500

Position Mouse 400,400

WAIT 500

Loop

 

در این مثال ، هر 500 میلی ثانیه ، موقعیت موس با دستور Position Mouse تغییر خواهد کرد . 

 

دستور CHANGE MOUSE

با این دستور می توانیم شکل موس را تغییر دهیم . مانند دستور العمل زیر :

 

CHANGE MOUSE CursorNumber

 

طبق این دستورالعمل ، اگر به جای CursorNumber عدد صفر را قرار دهیم ، شکل موس به شکل ساعت شنی در می آید و اگر به جای CursorNumber عدد یک را قرار دهیم ، شکل موس به حالت عادی اش ( به شکل فلش ) برمی گردد . مانند مثال زیر :

 

"... Print "Please Wait

CHANGE MOUSE 1

Wait 2500

"Cls : Print "Thank You

CHANGE MOUSE 0

Do : Loop

 

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

 

دستور WRITE TO CLIPBOARD

با استفاده از این دستور ، می توانیم یک عبارت کاراکتری را به حافظه ی موقت ویندوز (Clipboard  ) انتقال دهیم . مانند مثال زیر :

 

"WRITE TO CLIPBOARD "This Is A Example

Wait Key

 

در این مثال ، برای نمونه عبارت This Is A Example را به حافظه ی موقت ویندوز (Clipboard  ) انتقال دادیم . می توانیم در برنامه های دیگر از آن استفاده کنیم ( بچسبانیم . یعنی به جای دیگری Paste کنیم ) . تا زمانی که حافظه ی Clipboard توسط این برنامه یا برنامه های دیگر دوباره تغیر نکرده باشد ، عبارت This Is A Example در حافظه ی Clipboard باقی خواهد ماند .

 

تابع $GET CLIPBOARD

اگر قبلا در حافظه موقت ویندوز ( Clipboard ) عبارتی ذخیره شده باشد ( از دستورWRITE TO CLIPBOARD و یا توسط دیگر برنامه ها ) ، با این تابع می توانیم مقدار آن را بخوانیم . مانند مثال زیر :

 

"A$ = "Hello

$WRITE TO CLIPBOARD A

()$retStr$ = GET CLIPBOARD

$Print retStr

Suspend For Key

 

با اجرای این مثال ، عبارت Hello در حافظه ی موقت ویندوز ( Clipboard ) ذخیره شد و در خط سوم ، به متغیر $retStr انتقال پیدا کرد و در خط چهارم چاپ شد .

 

تابع MOUSECLICK

با این تابع می توانیم کیک شدن دکمه ی سمت چپ موس را بررسی کنیم . یعنی اگر مقدار این تابع برابر یک بود یعنی کلید سمت چپ موس فشرده شده و اگر مقدار این تابع برابر صفر بود ، یعنی کلید سمت چپ موس فشرده نشده ، مانند مثال زیر :

 

Do

Cls

"If MouseClick() Then Text 10,10,"Click

"If MouseClick() = 0 Then Text 20,20,"No Click

Loop

 

با اجرای این مثال اگر دکمه ی سمت چپ موس فشرده شود ، عبارت Click چاپ می شود . و اگر دکمه ی سمت چپ موس فشرده نشده باشد ، عبارت No Click چاپ خواهد شد .

 

تابع MOUSEX و تابع MOUSEY

این دو تابع موقعیت طولی و عرضی موس را برمی گردانند . یعنی اگر موس در هر موقعیتی در صفحه ی نمایشگر باشد . مقدار تابع ()MouseX موقعیت طولی و مقدار تابع ()MouseY موقعیت عرضی موس را برمی گردانند ( حساب خواهند کرد ) . مانند مثال زیر :

 

Do

Cls

Set Cursor 10,10

()Print "Position X = " ; MouseX

Set Cursor 10,20

()Print "Position Y = " ; MouseY

Loop

 

با اجرای این مثال موقعیت طولی و عرضی موس بر روی صفحه ی نمایشگر چاپ خواهد شد . یعنی اگر موس در هر جایی از صفحه باشد ، مقدار فاصله ی آن تا سمت چپ صفحه بعنوان طول ( X ) و مقدار فاصله ی آن از بالای صفحه بعنوان عرض ( Y ) چاپ خواهد شد .

 

تابع MOUSEZ

هر زمان که چرخ مابین دو کلید چپ و راست موس را به بالا و پایین حرکت می دهیم ، مقدار این تابع کم و زیاد خواهد شد ( هر بار مقدار 120 واحد ) . می توانیم در بازی برای زوم کردن از آن استفاده کنیم . مانند مثال زیر :

 

Do

Cls

Set Cursor 10,10

()Select MouseZ

   Case 0

      "Print "No Zoom

   EndCase

   Case 120

      "Print "1X Zoom

   EndCase

   Case 240

      "Print "2X Zoom

   EndCase

   Case 360

      "Print "3X Zoom

   EndCase

   Case Default

      "Print "4X Zoom

   EndCase

EndSelect

()Print "Position Y = " ; MouseZ

Loop

 

تابع MOUSEMOVEX و تابع MOUSEMOVEY

تابع ()MouseMoveX مقدار حرکت موس را ، در جهت مختصات طولی ( محور X نمایشگر ) ، و تابع ()MouseMoveX مقدار حرکت موس را ، در جهت مختصات عرضی ( محور Y نمایشگر ) در هر لحظه از زمان محاسبه کرده و مقدار آن را برمی گرداند . مانند مثال زیر :

 

do

Cls

()X# = MouseMoveX

(#Text 10,10,"MouseMoveX = " + Str$(X

(()Text 10,30,"MouseMoveY = " + Str$(MouseMoveY

wait 100

Loop

 

این مثال را تایپ و اجرا کنید . هم اکنون با حرکت دادن موس ، مقدار حرکت موس در هر لحظه بر روی صفحه ی مانیتور نمایش داده خواهد شد . ما در این مثال از دستور wait استفاده کردیم تا برنامه کمی کند اجرا شود ، تا شما اعداد این دو تابع را به خوبی ببینید .

 

تابع MOUSEMOVEZ

هر زمان که چرخ مابین دو کلید چپ و راست موس را به بالا و پایین حرکت می دهیم ، مقدار حرکت این چرخ در هر لحظه توسط این تابع محاسبه و بصورت یک عدد برگردانده می شود . ( هر بار مقدار 120 واحد ) . مانند مثال زیر :

 

Do

Cls

()Print "MouseMoveZ = " ; MouseMoveZ

Wait 100

Loop

 

تابع UPKEY

در صفحه ی کیبورد کامپیوتر ، چهار کلید ، جهات ( بالا و پایین و چپ و راست ) را نشان می دهند ، که به Arrow Keys معروف هستند .  زمانی که دکمه جهت بالا فشرده شده باشد ، تابع ()UpKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()UpKey مقدار صفر را در خود نگه خواهد داشت . همانند مثال زیر :

 

do

Cls

"if upkey() = 1 Then print "Up Key Has Been Pressed

"if upkey() = 0 Then print "Up Key Has Not Be Pressed

loop

 

با اجرای این مثال اگر دکمه ی جهت بالا فشرده شده باشد ، عبارت Up Key Has Been Pressed چاپ خواهد شد و اگر رها شده باشد ، عبارت Up Key Has Not Be Pressed چاپ خواهد شد . پس ما با استفاده از این گونه توابع می توانیم فشرده و یا رها شدن دکمه ها را کنترل کنیم .

 

تابع DOWNKEY

زمانی که دکمه جهت پائین فشرده شده باشد ، تابع ()DownKey مقدار یک و زمانی که همین دکمه رها شده باشد ، تابع ()DownKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Downkey() = 1 Then print "Down Key Has Been Pressed

"if Downkey() = 0 Then print "Down Key Has Not Be Pressed

loop

 

تابع LEFTKEY

زمانی که دکمه جهت چپ فشرده شده باشد ، تابع ()LeftKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()LeftKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Leftkey() = 1 Then print "Left Key Has Been Pressed

"if Leftkey() = 0 Then print "Left Key Has Not Be Pressed

loop

 

تابع RIGHTKEY

زمانی که دکمه جهت راست فشرده شده باشد ، تابع ()RightKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()RightKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Rightkey() = 1 Then print "Right Key Has Been Pressed

"if Rightkey() = 0 Then print "Right Key Has Not Be Pressed

loop

 

تابع CONTROLKEY

زمانی که دکمه ی کنترل ( دو دکمه ای که عبارت Ctrl بر روی آنهاست ) فشرده شده باشد ( یکی یا هر دو ) ، تابع ()ControlKey مقدار یک را برمی گرداند و زمانی که این دکمه ( یکی یا هر دو ) رها شده باشد ، تابع ()ControlKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if ControlKey() = 1 Then print "Ctrl Key Has Been Pressed

"if Controlkey() = 0 Then print "Ctrl Key Has Not Be Pressed

loop

 

تابع SHIFTKEY

زمانی که دکمه ی شیفت ( دو دکمه ای که عبارت Shift بر روی آنهاست ) فشرده شده باشد ( یکی یا هر دو ) ، تابع ()ShiftKey مقدار یک را برمی گرداند و زمانی که این دکمه ( یکی یا هر دو ) رها شده باشد ، تابع ()ShiftKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

if ShiftKey() = 1

   "print "Shift Key Has Been Pressed

Else

   "print "Shift Key Has Not Be Pressed

EndIf

loop

 

تابع RETURNKEY

زمانی که دکمه Enter فشرده شده باشد ، تابع ()ReturnKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()ReturnKey مقدار صفر را برمی گرداند مانند مثال زیر :

 

do

Cls

"if Returnkey() = 1 Then print "Return Key Has Been Pressed

"if Returnkey() = 0 Then print "Return Key Has Not Be Pressed

loop

 

تابع SPACEKEY

زمانی که دکمه Space ( بزرگ ترین دکمه در کیبورد ) فشرده شده باشد ، تابع ()SpaceKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()SpaceKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Spacekey() = 1 Then print "Space Key Has Been Pressed

"if Spacekey() = 0 Then print "Space Key Has Not Be Pressed

loop

 

تابع ESCAPEKEY

زمانی که دکمه Esc فشرده شده باشد ، تابع ()EscapeKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()EscapeKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Escapekey() = 1 Then print "Escape Key Has Been Pressed

"if Escapekey() = 0 Then print "Escape Key Has Not Be Pressed

loop

 

نکته بسیار مهم :

زمانی که دکمه ی Esc را فشار می دهیم . از برنامه هم خارج می شویم . دلیل آن چیست ؟ دلیل آن این است که این خاصیت جزء رفتار های DarkBasic می باشد ، یعنی در هر زمان با زدن Esc از بازی خارج می شویم . حتی اگر نخواهیم . پس برای اینکه این خاصیت خروج سریع با زدن Esc را غیر فعال کنیم ، از کد زیر استفاده می کنیم . مانند مثال زیر :

 

Disable EscapeKey

do

Cls

"if Escapekey() = 1 Then print "Escape Key Has Been Pressed

"if Escapekey() = 0 Then print "Escape Key Has Not Be Pressed

loop

 

این مثال را اجرا می کنیم و دکمه ی Esc را چند بار می زنیم . حالا چگونه باید از برنامه خارج شویم ؟ می توانیم با فشردن سه کلید Ctrl و Alt و Delete بطور هم زمان برنامه را از مدار خارج کنیم . همچنین می توانیم مانند مثال زیر خروج از برنامه را تحت کنترل خود در بیاوریم .

 

Disable EscapeKey

do

Cls

if Inkey$() = "Q" Or Inkey$() = "q" Then End

"Print "Q Key To Exit Program

loop

 

در این مثال اگر دکمه ی [Q] را فشار دهیم ، از برنامه خارج خواهیم شد .

 

تابع INKEY

در مثال بالا از تابع ()$Inkey استفاده کردیم . یعنی اگر در هر زمان ، هر کدام از دکمه های حروف فشرده شود ، تابع ()$Inkey همان حرف را بصورت یک عبارت تک کاراکتری برمی گرداند . مانند مثال زیر :

 

do

Cls

()$Text 20,20,Inkey

loop

 

این مثال را اجرا کنید و چند دکمه ( دکمه های حروف ) را بزنید ( دکمه های A تا Z ) . با زدن هر دکمه حرف مربوط به آن دکمه چاپ خواهد شد . البته اگر دکمه ی Shift را نگه دارید و یا دکمه ی Caps Lock را قبلا روشن کرده باشید ، حالت کوچک و یا بزرگ بودن حروف تغییر خواهد کرد .

 

تابع SCANCODE

هر یک از دکمه های کیبورد ( تمامی دکمه ها بدون استثنا ) یک شماره ی کد مخصوص به خود را دارد . در صورت فشرده شدن هر کدام از دکمه ها ، تابع ()ScanCode در هر زمان شماره ی مخصوص همان دکمه را بصورت یک عدد برمی گرداند . مانند مثال زیر :

 

cls

do

if scancode() > 0

()print scancode

endif

loop

 

با اجرای این مثال می توانیم شناسایی کنیم که هر کدام از دکمه ها چه کدی دارد . مثلا با اجرای این مثال دکمه ی F1 را فشار می دهیم و برنامه عدد 59 را نشان می دهد . پس با این مثال فهمیدیم که کد دکمه ی F1 برابر 59 می باشد . پس اگر خواستیم از دکمه ی F1 بعنوان راهنما ( Help ) در بازی استفاده کنیم ، از این کد استفاده می کنیم . مانند مثال زیر :

 

Do

Cls

"Print "Press F1 To Help

"If ScanCode() = 59 Then Print "Help View

Loop




چهار شنبه 21 فروردين 1392برچسب:, :: 5:21 ::  نويسنده : ابوالفضل
در این فصل با چگونگی چاپ متن بر روی صفحه نمایشگر ( Monitor ) آشنا خواهیم شد . همچنین با استفاده از دستوارت این فصل قادر خواهیم بود تا ویژگی های مربوط به متنمان ، شامل نوع خط ( Font ) ، اندازه ، رنگ و ... را مشخص کنیم .
 
دستور TEXT
این دستور عبارتی را با توجه به مختصات طولی و عرضی داده شده ، بر روی صفحه ی نمایشگر ( Monitor ) چاپ می کند . مانند دستورالعمل زیر :
 
TEXT X,Y,String
 
طبق این دستورالعمل ابتدا عبارت کلیدی TEXT سپس به جای X مقدار فاصله ی متن از سمت چپ نمایشگر و به جای Y مقدار فاصله ی متن از بالا را بصورت دو عدد قرار می دهیم و به جای String عبارت مورد نظرمان را وارد می کنید . مانند مثال زیر :
 
"strText$ = "center
"TEXT 10,10,"top left
$TEXT 320,240,strText
WAIT KEY
 
در این مثال عبارت top left در مخصات ( طول = 10 و عرض = 10 ) و center در مختصات ( طول 320 و عرض 240 ) بر روی صفحه ی نمایشگر چاپ می شوند .
 
دستور CENTER TEXT
این دستور همانند دستور گذشته ، متن مورد نظر را در مختصات داده شده چاپ می کند . با این تفاوت که اگر متن مورد نظر را داخل یک مستطیل در نظر بگیریم ، مختصات نقطه ای که در وسط ضلع بالای آن مستطیل است ، دقیقا منطبق بر مختصات داده شده ی X و Y می شود . مانند مثال زیر :
 
"CENTER TEXT 320,10,"top
"CENTER TEXT 320,240,"center
WAIT KEY
 
دستور SET TEXT FONT
این دستور فونت عبارات مورد نظرمان را قبل از چاپ آن عبارت مشخص می کند . مانند دستورالعمل زیر :
 
SET TEXT FONT Fontname
 
طبق این دستورالعمل به جای Fontname نام فونت مورد نظرمان را قرار می دهیم . البته نام فونتی را که در ویندوز نصب شده باشد . مانند مثال زیر :
 
"SET TEXT FONT "verdana
"PRINT "hello verdana
 
WAIT KEY
 
در این مثال ابتدا در خط اول نوع فونت ( برای مثال verdana ) انتخاب و سپس متن مورد نظر با همان فونت چاپ خواهد شد . یعنی فونت باید قبل از چاپ مشخص شود .
 
دستور SET TEXT SIZE
با استفاده از این دستور می توانیم اندازه ی فونت عبارات مورد نظرمان را قبل از چاپ عبارات مشخص کنیم . مانند دستور العمل زیر :
 
SET TEXT SIZE size
 
طبق این دستورالعمل به جای size اندازه ی فونت مورد نظرمان را بصورت عدد وارد می کنیم . مانند مثال زیر :
 
"SET TEXT FONT "verdana
SET TEXT SIZE 30
 
"PRINT "hello verdana
WAIT KEY
 
با اجرای این مثال در خط اول ابتدا فونت verdana مشخص و در خط دوم اندازه ی فونت برابر 30 شد و در خط سوم عبارت hello verdana با فونت verdana و اندازه ی 30 چاپ شد .
 
دستور SET TEXT TO BOLD
با این دستور می توانیم عبارات مورد نظرمان را جهت چاپ ضخیم کنیم . مانند مثال زیر :
 
"CENTER TEXT 320,240,"No Bold
SET TEXT TO BOLD
"CENTER TEXT 320,260,"Bold
WAIT KEY
 
در این مثال عبارت No Bold چاپ و بعد از ضخیم شدن فونت توسط دستور SET TEXT TO BOLD در خط دوم عبارت Bold بصورت ضخیم چاپ شد .
 
دستور SET TEXT TO ITALIC
از این دستور برای زیرخط دار کردن عبارات جهت چاپ ، استفاده می کنیم . مانند مثال زیر :
 
SET TEXT TO ITALIC
"CENTER TEXT 320,240,"HELLO WORLD
WAIT KEY
 
دستور SET TEXT TO BOLDITALIC
به جای استفاده از دو دستور قبلی ( یعنی SET TEXT TO BOLD و SET TEXT TO ITALIC ) می توانیم از این دستور استفاده کنیم . مانند مثال زیر :
 
SET TEXT TO BOLDITALIC
"CENTER TEXT 320,240,"HELLO WORLD
WAIT KEY
 
 
دستور SET TEXT TO NORMAL
این دستور عملکرد های سه دستور گذشته ( یعنی SET TEXT TO BOLD و SET TEXT TO ITALIC و SET TEXT TO BOLDITALIC ) را خنثی می کند . مانند مثال زیر :
 
SET TEXT TO BOLD
SET TEXT TO ITALIC
"CENTER TEXT 320,240,"Bold And Italic
SET TEXT TO NORMAL
"CENTER TEXT 320,260,"No Bold And No Italic
WAIT KEY
 
دستور SET TEXT OPAQUE
با این دستور می توانیم عبارت مورد نظرمان را برای چاپ مجهز به رنگ پس زمینه کنیم . مانند مثال زیر :
 
For I = 1 To 200 Step 2
      CIRCLE 320,250,I
Next I
SET TEXT SIZE 30
"CENTER TEXT 320,220,"Text
SET TEXT OPAQUE
"CENTER TEXT 320,250,"Text OPAQUE
WAIT KEY
 
در این مثال در خطوط اول تا سوم 100 تا دایره رسم کردیم که بعدا راجع به ترسیم داره صحبت خواهیم کرد . بعد عبارت Text را چاپ و بعد از دستور SET TEXT OPAQUE عبارت Text OPAQUE بصورت پس زمینه دار چاپ شد . در اینجا پس زمینه عبارت Text OPAQUE سیاه رنگ است . بعد ها استفاده از رنگ های مختلف را برای چاپ متن و غیره ، آموزش خواهیم داد .
 
دستور SET TEXT TRANSPARENT
با بکار بردن این دستور می توانیم پس زمینه عبارتمان را برای چاپ حذف کنیم .
یعنی برعکس دستور SET TEXT OPAQUE . مانند مثال زیر :
 
For I = 1 To 200 Step 2
      CIRCLE 320,250,I
Next I
SET TEXT SIZE 30
"CENTER TEXT 320,220,"Text
SET TEXT OPAQUE
"CENTER TEXT 320,250,"Text OPAQUE
SET TEXT TRANSPARENT
"CENTER TEXT 320,280,"Text TRANSPARENT
WAIT KEY
 
دستور PERFORM CHECKLIST FOR FONTS
با استفاده از این سلسله دستورات ، میتوانیم تعداد و نام تمامی فونت های نصب شده بر روی ویندوز را بدست آوریم . مانند مثال زیر :
 
PERFORM CHECKLIST FOR FONTS
()FOR C = 1 TO CHECKLIST QUANTITY
(PRINT CHECKLIST STRING$(C
NEXT C
WAIT KEY
 
با اجرای این مثال ، ابتدا در خط اول توسط دستور PERFORM CHECKLIST FOR FONTS لیست مرکزی برنامه ی DarkBasic از اسامی فونت های نصب شده پر می شود . و دستور For … Next توسط تابع CHECKLIST QUANTITY که تعداد فونت ها را مشخص می کند . متغیر C را از یک تا تعداد فونت ها می شمارد . سپس در خط سوم مقدار تابع ()$CHECKLIST STRING با ورودی C ، که شامل نام فونت هاست توسط دستور PRINT چاپ می شود .
 
تابع TEXT FONT
این تابع نام فونت جاری را بصورت عبارت متنی برمی گرداند . یعنی نام آخرین فونتی که انتخاب شده . مانند مثال زیر :
 
"SET TEXT FONT "verdana
"PRINT "verdana
 
"SET TEXT FONT "Arial
"PRINT "Arial
()$PRINT "Current Font Is : " ; TEXT FONT
WAIT KEY
 
در این مثال نام آخرین فونت انتخاب توسط تابع ()$TEXT FONT چاپ می شود .
 
تابع TEXT SIZE
این تابع آخرین سایز انتخابی متن را برمی گرداند . مانند مثال زیر :
 
SET TEXT SIZE 10
SET TEXT SIZE 20
()PRINT TEXT SIZE
WAIT KEY
 
تابع TEXT STYLE
این تابع عددی را برمی گرداند که نشان دهنده ی نوع فونت ( Bold و Italic و BoldItalic ) می باشد . یعنی اگر آخرین بار از دستور SET TEXT TO ITALIC استفاده شده باشد ، عدد 1 و اگر آخرین بار از دستور SET TEXT TO BOLD استفاده شده باشد ، عدد 2 و اگر آخرین بار از دستور SET TEXT TO BOLDITALIC استفاده شده باشد ، عدد 3 توسط این تابع برگردانده می شود . مانند مثال زیر :
 
SET TEXT TO ITALIC
()PRINT TEXT STYLE
SET TEXT TO BOLD
()PRINT TEXT STYLE
SET TEXT TO BOLDITALIC
()PRINT TEXT STYLE
WAIT KEY
 
تابع TEXT WIDTH
این تابع اندازه ی طول عباراتمان را بر روی صفحه نمایشگر پیش بینی کرده و بصورت یک عدد برمیگرداند . مانند مثال زیر :
 
("PRINT TEXT WIDTH("Hello World
WAIT KEY
 
در این مثال طول عبارت Hello World با توجه به نوع فونت و اندازه ی آن بدست آمد . برای مثال ، اگر خواستیم عبارتی را در قسمت راست صفحه چاپ کنیم ( تحت هر مختصات طولی و عرضی نمایشگر ) می توانیم از این تابع استفاده کنیم . مانند مثال زیر :
 
"TEXT SCREEN WIDTH()-TEXT WIDTH("Hello World"),0,"Hello World
WAIT KEY
 
در این مثال طول عبارت Hello World توسط تابع ()TEXT WIDTH از طول مختصات طولی نمایشگر توسط تابع ()SCREEN WIDTH کم شد و توسط دستور TEXT عبارت Hello World در قسمت راست نمایشگر چاپ می شود . یعنی رزولوشن نمایشگر ( مختصات طولی و عرضی مانیتور ) هر مقداری باشد ، عبارت فوق با کمک این تابع در سمت راست نمایشگر چاپ خواهد شد .
 
تابع TEXT HEIGHT
این تابع اندازه ی ارتفاع عباراتمان را بر روی صفحه نمایشگر پیش بینی کرده و بصورت یک عدد برمی گرداند .  مانند مثال زیر :
 
("PRINT TEXT HEIGHT("Hello World
WAIT KEY
 
 
در این مثال ارتفاع عبارت Hello World با توجه به نوع فونت و اندازه ی آن بدست آمد . پس اگر خواستیم عبارتی را در قسمت پایین صفحه چاپ کنیم ( تجت هر مختصات طولی و عرضی نمایشگر ) می توانیم از این تابع استفاده کنیم . مانند مثال زیر :
 
"TEXT 0,SCREEN HEIGHT()–TEXT HEIGHT("Hello World"),"Hello World
WAIT KEY
 
تابع ASC
این تابع یک عبارت تک کاراکتری را دریافت کرده و شماره ی آن را به صورت یک عدد برمی گرداند . مانند مثال زیر :
 
("*")PRINT ASC
WAIT KEY
 
مانند مثال بالا ، هر کاراکتری طبق جدول زیر ( اسکی کد ASCII code ) دارای شماره ی منحصر به فردی می باشد .
 
جدول اسکی کدها ( ASCII CODES )
 
 
تابع CHR
این تابع شماره ی کاراکتری را بصورت یک عدد دریافت و کاراکتر همان شماره را طبق جدول اسکی کدها بصورت تک کاراکتر ، برمی گرداند . مانند مثال زیر :
 
(PRINT CHR$(42
WAIT KEY
 
 
تابع BIN
این تابع عددی از نوع Integer دریافت و مقدار عددی آن بر مبنای 2 را بصورت عبارتی از نوع کاراکتر برمی گرداند . مانند مثال زیر :
 
(PRINT BIN$(42
WAIT KEY
 
تابع HEX
این تابع عددی از نوع Integer دریافت کرده و عددی بر مبنای هگزادسیمال آن بصورت کاراکتر برمی گرداند . مانند مثال زیر :
 
(PRINT HEX$(42
WAIT KEY
 
 
تابع LEFT
این تابع دو ورودی دریافت می کند . یک عبارت کاراکتری ( متن / String ) و یک عدد از نوع Integer . سپس به مقدار عدد دریافتی از سمت چپ عبارت ورودی کاراکتر جدا می کند . مانند دستورالعمل زیر :
 
(strLeft$ = LEFT$(strValue,intValue
 
طبق این دستورالعمل به مقدار intValue از سمت چپ عبارت strValue کاراکتر جدا شده و تابع ()$LEFT مقدار آن را بر می گرداند . مانند مثال زیر :
 
(PRINT LEFT$("hello world",5
WAIT KEY
 
 
با اجرای این مثال 5 کاراکتر از سمت چپ عبارت hello world جدا شده . یعنی عبارت  hello توسط تابع ()$LEFT برگردانده شده و سپس توسط دستور PRINT نمایش داده می شود .
 
تایع RIGHT
این تابع همانند تابع ()$LEFT عمل می کند . با این تفاوت که از سمت راست عبارت ، کاراکتر جدا می کند . مانند مثال زیر :
 
"myString$ = "hello world
(A$ = RIGHT$(myString$,5
 
$PRINT A
WAIT KEY
 
تابع MID
این تابع مانند تابع های گذشته دو ورودی کاراکتری و عددی دریافت می کند . با این تفاوت که عبارت ورودی را در نظر گرفته و از سمت چپ کاراکتر ها را به مقدار عدد ورودی می شمارد و تنها همان یک کاراکتر را بر می گرداند . مانند مثال زیر :
 
(PRINT MID$("hello world",7
WAIT KEY
 
با اجرای این مثال هفتمین کاراکتر عبارت ورودی hello world از سمت چپ ، یعنی w توسط تابع ()$MID برگردانده شده ( بدست می آید ) و توسط دستور PRINT چاپ می شود .
 
تابع LEN
این تابع عبارت کاراکتری را بعنوان ورودی دریافت می کند و تعداد کاراکتر های تشکیل دهنده آن را می شمارد . مانند مثال زیر :
 
("PRINT LEN("hello world
WAIT KEY
 
با اجرای این مثال تعداد کاراکتر های تشکیل دهنده ی عبارت hello world که 11 کاراکتر است ، توسط تابع ()LEN برگردانده شده و توسط دستور PRINT چاپ می شود . فضاها هم جزء کاراکترهای یک عبارت متنی محسوب می شوند . یعنی بین hello و world یک فضا قرار داده شده که آن هم جزء کاراکتر ها حساب می شود .
 
تابع Val
اگر به جدول اسکی کد ها نگاه کنیم ، خواهیم دید که تعدادی از کاراکتر ها شبیه اعداد می باشند . این تابع عباراتی را که به شکل عدد است ، بصورت عبارت کاراکتری دریافت کرده و بصورت عدد ، برمی گرداند . مانند مثال زیر :
 
PRINT VAL("42")+1
WAIT KEY
 
همانطور که می بینید ، تابع VAL عبارت 42 را که شبیه عدد 42 است ، به عدد تبدیل کرد . در این مثال عدد برگشت داده شده با عدد 1 جمع و نتجه آن که 43 باشد ، چاپ می شود .
 
تابع $SPACE
این تابع یک عدد دریافت کرده و به مقدار آن عدد فضای خالی ( SPACE ) ایجاد میکند و فضاهای خالی را بصورت یک عبارت کاراکتری برمی گرداند . مانند مثال زیر :
 
"PRINT "Place ten spaces" + SPACE$(10) + "here
WAIT KEY
 
 
با اجرای این مثال با قرار دادن تابع ()$SPACE بین دو عبارت Place ten spaces و here به مقدار 10 کاراکتر فضای خالی ایجاد کردیم .
 
تابع UPPER و تابع LOWER
در حروف انگلیسی ، هر حرف به دو شکل کوچک و یا بزرگ نوشته می شود . مثلا A و a . تابع ()$UPPER تمامی کاراکتر های عبارت ورودی اش را به شکل بزرگ آن تبدیل میکند و تابع ()$LOWER تمامی کاراکتر های عبارت ورودی اش را به شکل کوچک تبدیل میکند . مانند مثال زیر :
 
 ("PRINT LOWER$("ALL lower CASE")+" "+UPPER$("all upper case
WAIT KEY
 
مهم ترین کاربرد این دستور زمانی است که می خواهیم از کاربر ( فردی که بازی را انجام می دهد ) عبارتی را دریافت کنیم . برای آنکه در قبال ورودی از کاربر تصمیم خاصی را بگیریم از دستور زیر استفاده می کنیم :
 
$Input "Please Inter Password Key ? " ; Key
"If  Key$ = "Cls" Then Print "Ok" Else Print "No
Wait Key
 
با اجرای این مثال اگر دقیقا عبارت Cls توسط بازیکن وارد شود ، کلمه ی Ok چاپ می شود . مگرنه اگر هر کدام از عبارات CLS و cls و cLS و ClS و ... را وارد کنیم ، عبارت Ok چاپ نخواهد شد . اگر توابع UPPER و LOWER نبودند ، ما مجبور بودیم به این شکل برنامه را بنویسیم .
 
$Input "Please Inter Password Key ? " ; Key
$Select Key
"Case "cls
"Print "Ok
   EndCase
"Case "CLS
"Print "Ok
   EndCase
"Case "cLS
"Print "Ok
   EndCase
   ..
   ..
   Case Default
"Print "No
   EndCase
EndSelect
Wait Key
 
ولی با استفاده از یکی از این دو تابع می توانیم به جای خطوط بیشمار بالا از کدهای زیر استفاده کرد .
 
$Input "Please Inter Password Key ? " ; Key
"If  UPPER$( Key$) = "CLS" Then Print "Ok" Else Print "No
Wait Key
 
با اجرای این مثال عبارت دریافتی با شکل بزرگ در نظر گرفته شده و با عبارت CLS که با حروف بزرگ است مقایسه می شود . حالا فرقی نمی کند که موقع ورود عبارت دکمه ی Caps Lock روشن و یا خاموش باشد و یا اینکه کاربر دکمه ی Shift را نگه داشته باشد .
 

 



چهار شنبه 21 فروردين 1392برچسب:, :: 5:19 ::  نويسنده : ابوالفضل
برای توضیح راجع به تابع مثالی می زنیم . فرض کنید دوستی داریم که نامش علی است . به او یاد می دهیم تا هر موقع به او عددی را گفتیم ، آن عدد را به توان 2 برساند و جواب را به ما بگوید . در واقع ما یک تابع با نام علی ایجاد کردیم ( علی تابع ما شد ) و یک ورودی شامل یک عدد به او دادیم و یک عدد از او می گیریم . در DarkBasic توابع به همین سادگی ایجاد می شوند . مانند دستورالعمل زیر :
 
(...,Function FunctionName(Value1,Value2
...+Return = Value1+Value2
EndFunction Return
 
طبق این دستورالعمل به جای FunctionName نام تابع و داخل پرانتز به جای Value1 و Value2 و ... هر تعداد ورودی نیاز داشته باشیم به همان تعداد متغیر قرار می دهیم . البته تابع می توانید فاقد ورودی هم باشد ، بین دستور Function و EndFunction دستورات و محاسبات روی ورودی ها صورت می گیرد و روبروی دستور EndFunction خروجی تابع را قرار می دهیم . مانند مثال زیر .
 
(FUNCTION Tvalue(Value
Value = Value ^ 2
ENDFUNCTION Value
 
در این مثال با استفاده از دستور FUNCTION در خط اول شروع یک تابع را آغاز و با نام Tvalue آن تابع را نامگذاری کردیم . متغیر Value را بین دو پرانتز بعد از نام Tvalue به عنوان ورودی تابع مشخص کردیم . ما می توانیم هر نام و یا متغری را به دلخواه به جای Tvalue و Value بنویسیم . سپس با استفاده از دستور ENDFUNCTION اتمام تابع خود را مشخص کردیم و متغیر نوشته شده در آخر ( Value ) که روبروی دستور ENDFUNCTION تایپ شده ، مقدار برگشتی تابع را مشخص می کند . به مثال زیر دقت کنید :
 
REM Start of program
("Print BetterPrint(10,10,"Hello world
Wait Key
END
($FUNCTION BetterPrint(x,y,t
Z = x * y
$PRINT t
ENDFUNCTION Z
 
با اجرای این مثال در خط پنجم تابعی با نام BetterPrint با سه وردی ( دو ورودی x و y از نوع عدد و $t از نوع کاراکتر ) ایجاد و داخل تابع ورودی x و y در هم ضرب شدند ، و در Z ذخیره شد و در خط هفتم مقدار ورودی $t چاپ شد و در خط هشتم توسط دستور EndFunction تابع به اتمام رسید و متغیر موجود روبروی دستور ENDFUNCTION ( یعنی Z ) مقدار برگشتی تابع را مشخص می کند که در خط دوم توسط دستور Print چاپ شد .
 
لزومی ندارد که توابع حتما مقدار ورودی و خروجی داشته باشند . مانند مثال زیر :
 
()Example
Wait Key
End
()FUNCTION Example
"PRINT "Hello
ENDFUNCTION
 
با اجرای این مثال عبارت Hello چاپ خواهد شد .
 
دستور EXITFUNCTION
از این دستور برای خروج ناگهانی از تابع می توان استفاده کرد . یعنی شرایطی به وجود می آید که ما مجبور می شویم تا قبل از رسیدن به دستور ENDFUNCTION از تابع خارج شویم . مانند مثال زیر :
 
(Function myAdad(x
If x<2 Then ExitFunction
For I = 1 To x
Print I
Next I
EndFunction
 
توابع داخلی DarkBasic
تا الان چگونگی ایجاد و بکارگیری توابع را یاد گرفتیم . DarkBasic خود نیز توابع گوناگونی دارد که بسیار کاربردی و سودمندند . این توابع همگی مخفی و غیر قابل ویرایش هستند . برای استفاده از آنها کافی است با نام و کاربرد هر یک آشنا شویم که عبارتند از :
 
تابع COS
این تابع کسینوس زاویه ای را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = COS(Value
 
طبق این دستورالعمل کسینوس زاویه ی Value در متغیر Return از نوع Float ذخیره می شود . مانند مثال زیر :
 
myValue As Float
(myValue = Cos(45
Print myValue
Wait key
 
با اجرای این مثال کسینوس زاویه ی 45 درجه در متغیر myValue ذخیره می شود . دقت داشته باشید که متغیر myValue حتما از نوع اعشاری ( Float یا Real ) باشد . زیرا برای مثال کسینوس زاویه ی 45 درجه که برابر 0.707107 است در یک متغیر از نوع Integer نشان داده نمی شود و برابر صفر ذخیره خواهد شد .
 
تابع SIN
این تابع سینوس زاویه ای را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = Sin(Value
 
طبق این دستورالعمل سینوس زاویه ی Value در متغیر Return از نوع Float ذخیره می شود . مانند مثال زیر :
 
myNumber As Float
(myNumber = Sin(40
Print myNumber
 
Wait key
 
با اجرای این مثال سینوس زاویه ی 40 درجه در متغیر myNumber ذخیره می شود . دقت داشته باشید که متغیر myNumber حتما از نوع اعشاری ( Float یا Real ) باشد . زیرا برای مثال سینوس زاویه ی 40 درجه که برابر 0.642788 است در متغیر از نوع Integer نشان داده نمی شود و برابر صفر ذخیره خواهد شد .
 
تابع TAN
این تابع تانژانت عددی را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = Tan(Value
 
طبق این دستورالعمل تانژانت زاویه ی Value در متغیر Return از نوع Float ذخیره می شود . مانند مثال زیر :
 
myNumber As Float
(myNumber = Tan(40
Print myNumber
Wait key
 
تابع ACOS
این تابع آرک کسینوس عددی را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = ACos(Value
 
طبق این دستورالعمل آرک کسینوس Value در متغیر Return از نوع Float ذخیره می شود .
 
تابع ASIN
این تابع آرک سینوس عددی را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = ASin(Value
 
طبق این دستورالعمل آرک سینوس Value در متغیر Return از نوع Float ذخیره می شود .
 
تابع ATAN
این تابع آرک تانژانت زاویه ای ( محدوده ی 0 تا 360 درجه ) را برمی گرداند .
 
تابع HCOS
این تابع هایپر بولیک کوسینوس عددی را برمی گرداند .
 
تابع HSIN
این تابع هایپر بولیک سینوس عددی را برمی گرداند .
 
تابع HTAN
این تابع هایپربولیک عددی را برمی گرداند .
 
تابع SQRT
این تابع رادیکال عددی را برمی گرداند . مثلا رادیکال 64 برابر 8 است .
 
تابع ABS
این تابع قدرمطلق عددی را برمی گرداند . مثلا قدر مطلق 500- برابر 500 است .
 
تابع INT
این تابع مقدار صحیح ( Integer ) عددی را بر می گرداند . یعنی مقدار بعد از اعشار آن عدد را حذف می کند . مثلا مقدار صحیح عدد 1.23 برابر 1 است .
 
تابع RND
این تابع عددی تصادفی بین صفر و مقداری که در این تابع وارد شده را که از نوع Integer است ، برمی گرداند . مانند مثال زیر :
 
()RANDOMIZE TIMER
A As Integer
DO
(A=Rnd(640
Sleep 100
PRINT A
LOOP
 
با اجرای این مثال اعدادی بین 0 و 640 بصورت تصادفی چاپ خواهند شد . ما می توانیم به جای 640 عدد دلخواهمان را قرار دهیم تا اعداد مابین صفر تا آن عدد چاپ شود .
دستور ()RANDOMIZE TIMER نوشته شده در اولین خط باعث می شود تا اعداد بدست آمده با تایمر بایوس مطابقت کنه و تابع ()Rnd کاملا تصادفی باشد .
 
تابع ATANFULL
این تابع زاویه ی بین دو نقطه را در صفحه بر می گرداند . برای مثال اگر دو نقطه ی ( x1 و y1 ) و ( x2 و y2 ) داشته باشیم . زاویه ی بین این دو نقطه از طریق زیر بدست می آید :
 
x1# = 0
y1# = 0
x2# = 640
y2# = 480
(dx# = ABS(x1#-x2#
(dy# = ABS(y1#-y2#
(#angle# = ATANFULL(dx#,dy
#PRINT angle
WAIT KEY
 
تابع TIMER
این تابع با استفاده از تایمر سیستم ( Main Board ) عددی از نوع Integer برمی گرداند ، که دائما و بطور دقیق هر یک هزارم ثانیه یک واحد به آن اضافه می شود . یعنی هر ثانیه 1000 واحد به آن عدد اضافه می شود . مانند مثال زیر :
 
Do
()Print Timer
Loop
 
تابع INKEY
این تابع یک عبارت تک کاراکتری ( از نوع String ) را برمی گرداند که معادل فشرده شدن کلیدی از کیبورد است . یعنی اگر کلید [G] از کیبورد ( Key Board ) را فشار دهیم . تابع ()$Inkey مقدار g را بر می گرداند . مانند مثال زیر :
 
DO
CLS
()$PRINT INKEY
LOOP
 
این مثال را اجرا کنید . سپس چند کلید را بطور دلخواه فشار دهید . خواهید دید که هر کلیدی را فشار می دهید ، حرف چاپ شده بر روی همان دکمه از کیبورد بر روی مانیتور نمایش داده می شود .
 
تابع GET TIME
این تابع مقدار ساعت جاری سیستم را بصورت یک عبارت 8 کاراکتری از نوع String برمی گرداند . یعنی ساعتی که در نوار TaskBar ویندوز مشاهده می کنید ، توسط تابعی در ویندوز از روی چیپستی که در Main Board نصب شده خوانده می شود . در DarkBasic هم می توان توسط دستور ()$Get Time ساعت سیستم را خواند . مانند مثال زیر :
 
Do
()$Print Get Time
Loop
 
با اجرای این مثال ، خواهید دید که یک عبارت رشته ای 8 کاراکتری ، ساعت سیستم را نمایش می دهد ،
که کاراکتر اول و دوم ساعت ، کاراکتر سوم ثابت با علامت ( : ) ، کاراکتر چهارم و پنجم دقیقه ، کاراکتر ششم ثابت با علامت ( : ) و کاراکتر هفتم و هشتم ثانیه را نشان می دهند .
 
تابع GET DATE
عملکرد این تابع مانند تابع قبلی ( ()$Get Time ) می باشد . با این تفاوت که این تابع تاریخ جاری سیستم را بصورت عبارت کاراکتری ( از نوع String ) بر می گرداند . مانند مثال زیر :
 
()$strDate$ = Get Date
$Print strDate
Wait Key
 
تابع FLOOR
این تابع اعداد ممیزدار را رند می کند و بصورت عددی از نوع Flooat برمی گرداند . البته به سمت کمتر . یعنی حاصل 1.5 را 1 و حاصل 1.5- را 2- برمی گرداند . مانند مثال زیر :
 
(Print "Floar (1.5) = " ; Floor(1.5
(Print "Floar (1) = " ; Floor(1
(Print "Floar (0) = " ; Floor(0
(Print "Floar (-1.5) = " ; Floor(-1.5
(Print "Floar (-1) = " ; Floor(-1
Wait Key
 
تابع CEIL
این تابع مانند تابع قبل اعداد ممیز دار را رند می کند و بصورت عددی از نوع Flooat بر می گرداند . البته به سمت بیشتر . یعنی حاصل 1.5 را 2 و حاصل 1.5- را 1- برمی گرداند . مانند مثال زیر :
 
(Print "Ceil 1.5 = " ; Ceil(1.5
(Print "Ceil 1 = " ; Ceil(1
 
(Print "Ceil 0 = " ; Ceil(0
(Print "Ceil -1.5 = " ; Ceil(-1.5
(Print "Ceil -1 = " ; Ceil(-1
Wait Key
 
تابع EXP
این تابع  eرا به توان عدد ورودی در تابع می رساند . مانند مثال زیر :
 
(Print Exp(10
Wait Key
 
 
تابع WRAPVALUE
این تابع عدد ورودی اش را بر حسب 0 تا 359 درجه حساب می کند . یعنی فرض می کند که اعداد بر روی دایره ای با 360 درجه در حال زیاد شدن و یا کم شدن هستند . مثلا اگر عدد از 0 گذشت و شد 361 آن را 1 در نظر می گیرد . و یا اگر عدد برابر 400 شد ، آن را 40 ( 40=360-400 ) در نظر می گیرد
و اگر عدد برابر 50- بود ، آن را 310 (310=[50-]-360) در نظر می گیرد . مانند مثال زیر :
 
A = 0
Do
A = A + 1
Set Cursor 10,10
Print "A : ";A
Set Cursor 10,30
(Print "WrapValue(A) : ";WrapValue(A
Wait 20
Cls
Loop
 
نکته : همیشه بعد از نام توابع ، پرانتز باز و پرانتز بسته ی آنها را هم قرار دهید . هرچند تابع ورودی نداشته باشد .


چهار شنبه 21 فروردين 1392برچسب:, :: 5:17 ::  نويسنده : ابوالفضل

 دستورات این فصل شامل فرامینی هستند که روند اجرای برنامه را کنترل می کنند . برای نوشتن هر برنامه ای ، یادگیری این دستورات الزامی است . با استفاده از دستورات این فصل می توانیم به سادگی برنامه های سودمندی ایجاد کنیم .

 
دستور Print ( چاپ )
این دستور متن ، عدد ، مقادیر ذخیره شده درون متغیر های عددی و کاراکتری را روی صفحه ی نمایشگر ( Monitor ) چاپ می کند . مانند دستورالعمل زیر :
 
PRINT PrintStatements
 
طبق این دستورالعمل ابتدا دستور PRINT را تایپ و بعد از قرار دادین یک فضای خالی ( فشردن دکمه ی Space ) به جای PrintStatements عبارت مورد نظرمان را تایپ می کنیم . مانند مثال زیر :
 
Print 123
 
در این مثال عدد 123 چاپ خواهد شد . همانطور که قبلا هم گفتیم ، این دستور توانای چاپ عبارات گوناگون از نوع عدد و کارکتر ، همچنین مقادیر مختلف متغیر ها را نیز دارد . مانند مثال زیر .
 
intAdad = -12
"strText$ = "Example
Print 34.65
"Print "Hellow Word
Print intAdad
$Print strText
Wait Key
 
این دستورات را تایپ و اجرا می کنیم ، تا نتیجه را ببینیم . در خط اول متغیر intAdad از نوع Integer ایجاد و مقدار 12- در آن ذخیره شد . در خط دوم متغیر $strText ( توسط نماد $ ) از نوع String ایجاد و عبارت Example چون عدد نیست توسط دو نماد " و " ( به نام کوتیشن ) در آن ذخیره شد . در خط سوم عدد 34.65 چاپ و در خط چارم عبارت Hellow Word چاپ شدند . در خط پنجم مقدار متغیر عددی intAdad و در خط ششم مقدار متغیر کاراکتری $strText که در خطوط یک و دو مقداردهی شده بودند ، چاپ شدند و در خط هفتم بوسیله ی دستور Wait Key مفسر DarkBasic منتظر می ماند تا ما دکمه ای را فشار دهیم . به محض فشار دادن هر دکمه از کیبورد ، برنامه تمام می شود .
 
با قرار دادن علامت ( ; ) یا ( , ) بین چند عبارت و یا متغیر می توانیم تمامی آنها را با هم در یک سطر چاپ کنیم . مانند مثال زیر :
 
"myName$ = "Hamid Reza
myAge = 20
"Print "My Name Is " ; myName$ ; " And My Age Is " , myAge , " Year
Wait Key
 
با اجرای این مثال خواهیم دید که تمامی عبارات و متغیر ها در کنار هم چاپ می شوند .
 
توجه ! بدلیل اینکه طول برخی از خطوط برنامه آن قدر بلند است که در عرض کتاب جا نمی شود ، بعد از این برای اینکه بتوانیم تمامی دستورات نوشته شده در یک خط از برنامه را در این کتاب نمایش دهیم ، ما ادامه ی آن خط را در خط بعدی اش چاپ و زیر تمامی آنها خط تیره می کشیم تا معلوم شود که خطوط خط دار نوشته شده در این کتاب ، متعلق به یک خط در برنامه ی DarkBasic می باشد . یعنی خطوط برنامه ی بالا در کامپیوتر بصورت زیر بوده است .
 
"myName$ = "Hamid Reza
myAge = 20
"Print "My Name Is " ; myName$ ; " And My Age Is " , myAge , " Year
Wait Key
 
همانطور که می بینید خط سوم این برنامه همان خطوط سوم و چهارم مثال پیشین است .
 
دستور SET CURSOR
با استفاده از دستور Print هر عبارتی را چاپ می کردیم . منتهی عبارات به ترتیب از بالا به پائین و از چپ به راست چاپ می شدند . با استفاده از این دستور می توانیم قبل از چاپ عبارات ، مختصاتی را بر روی صفحه چاپ مشخص کنیم تا عبارت در آن مختصات ( موقعت مکانی در صفحه نمایشگر ) چاپ شوند . مانند دستورالعمل زیر :
 
Set Cursor X,Y
 
طبق این دستورالعمل ابتدا عبارت Set Cursor و بعد به جای X مختصات افقی ( مقدار فاصله ی عبارت از قسمت چپ صفحه ی نمایشگر ) و به جای Y مختصات عمودی ( مقدار فاصله ی عبارت از قسمت بالای صفحه ی نمایشگر ) را قرا می دهیم مانند مثال زیر :
 
Set Cursor 40,50
"Print "Hello
Wait Key
 
در این مثال کرسر به مقدار 40 پیکسل از سمت چپ صفحه به سمت راست و به مقدار 50 پیکسل از سمت بالای صفحه به پایین حرکت کرد و در موقعیت ( 50 و 40 ) قرار گرفت و عبارت Hello توسط دستور Print در همان موقعیت چاپ شد . برای فهم بیشتر به شکل زیر نگاه کنید :
 
 

در این شکل یک شبکه ی فرضی را می بینیم که قسمت کوچکی از مختصات طولی و عرضی صفحه ی نمایش را نشان می دهد . در این مختصات برای مثال دو نقطه در نظر گرفته شده . یکی در بالا و سمت چپ که مختصات آن ( 0 و 0 ) است و دیگری کمی پایین تر و سمت راست که مختصات آن ( 2 و 6 ) می باشد . یعنی به مقدار 6 واحد از مختصات X به سمت راست و به مقدار 2 واحد از مختصات Y به سمت پایین حرکت کرده و هم اکنون در موقعت ( 2 و 6 ) قرار دارد .

 

دستورات زیر را در نظر بگیرید :

 

Set Cursor 350,100

"Print "H

Wait Key

 

با اجرای این مثال عبارت H در موقعیت 350 و 100 چاپ می شود . یعنی اگر عبارت H را داخل یک مربع در نظر بگیریم ، گوشه ی بالا و سمت چپ آن مربع دقیقا بر روی موقعیت Y = 100 و X = 350 منطبق می شود . مانند شکل زیر :

 

 

در این مثال عبارت H در مختصات 100 و 350 چاپ شد . بیشترین اعدادی که برای تعیین مختصات X و Y مشخص می کنیم بستگی به تنظیمات پروژه دارد .

دستور INPUT
از این دستور برای گرفتن ورودی ( عدد یا عبارت متنی ) از کاربر ( فردی که بازی می کند ) در حین اجرای برنامه ( بازی ) استفاده می کنیم . یعنی در حین اجرای برنامه می توانیم عدد و یا هر عبارتی را توسط کیبورد ، داخل متغیر ها ذخیره کنیم . مانند دستورالعمل زیر :
 
INPUT PrintStatements;InputVariable
 
طبق این دستورالعمل ابتدا کلمه ی کلیدی INPUT را تایپ و سپس به جای PrintStatements توضیحاتی راجع به ورودی بصورت متن ، و یا متغیر کاراتری ( String ) قرار می دهیم و بعد از علامت ( ; ) به جای InputVariable نام متغیر را تایپ می کنیم . نوع متغیر انتخاب شده بستگی به نیازمان دارد . اگر به عدد نیاز داشتیم متغیری از نوع عدد و اگر عبارت مورد نیازمان بود ، متغیری از نوع کاراکتر ( String ) قرار می دهیم . مانند مثال زیر :
 
$INPUT "enter your name ?";name
$PRINT "your name is ";name
WAIT KEY
 
با اجرای این مثال ابتدا عبارت ? enter your name چاپ شده و ما می توانیم نامی را تایپ کنیم . بعد از زدن دکمه ی Enter عبارت تایپ شده در متغیر $name ذخیره خواهد شد و در خط دوم ، عبارت your name is همراه با مقدار ذخیره شده در متغیر $name چاپ خواهد شد .
قرار دادن عبارت در دستور Input اختیاری است . یعنی می توان از دستور Input بصورت زیر استفاده کرد .
 
Input MyNumber
 
در این مثال یک عدد از کاربر گرفته می شود و در متغیر MyNumber ذخیره خواهد شد .
 
دستور CLS
با استفاده از این دستور می توان صفحه ی نمایشگر را از متون نوشته شده ی قبلی پاک کرد . یعنی هر آنچه که از قبل در صفحه ی نمایشگر چاپ شده بود ، پاک می شود . مانند مثال زیر :
 
"Print "Hello
"Print "World
Cls
"Print "DarkBasic
Wait Key
 
با اجرای این مثال عبارات چاپ شده قبل از دستور Cls ، یعنی Hello و World پاک شده ، و بعد عبارت DarkBasic چاپ خواهد شد .
 
دستور REM
با استفاده از این دستور ، می توانیم توضیحاتی داخل خطوط برنامه ، یادداشت کنیم . مفسر DarkBasic توضیحات نوشته شده بعد از این دستور ( در همان خط ) را نادیده می گیرد و بی تفاوت از آن عبور می کند . مانند دستورالعمل زیر :
 
Rem Comments
 
طبق این دستورالعمل به جای Comments ، عبارت مورد نظرمان را می نویسیم . DarkBasic هر عبارتی را که بعد از دستور Rem نوشته شده باشد را ، نادیده گرفته و از آن عبور می کند . ما می توانیم بهر تعدادی که نیاز داشته باشیم ، از این دستور در خطوط برنامه استفاده کنیم . مانند مثال زیر :
 
.Rem This is a comment that doesn't do anything
"Print "Hello
Wait Key
 
با اجرای این مثال خواهیم دید که تنها نوشته ی ( Hello ) چاپ شد و خط اول بی تاثیر می ماند .
 
توجه !  دستور Rem مزایای فراوانی دارد . ما می توانیم برای غیر فعال کردن یک یا چند خط از برنامه ، بطور موقت ، این دستور را ابتدای آن خطوط تایپ و یا به جای کلمه ی Rem از علامت ( ` ) هم می توانیم استفاده کنیم ( همان دکمه ای که علامت ~ هم روی آن است ) . مانند مثال زیر :
 
"Print "Hello`
"Print "Word
Wait Key
 
با اجرای این مثال تنها خطوط دوم و سوم اجرا خواهند شد .
 
دستور REMSTART و REMEND
در برخی مواقع نیاز داریم ، تعدادی از خطوط برنامه را ( که پشت سر هم هستند ) غیر فعال کنیم . تا مفسر DarkBasic آن ها را نادیده گرفته و از آن ها عبور کند . مثلا می خواهیم توضیحاتی راجع به برنامه ، در ابتدای خطوط متن برنامه یادداشت کنیم ( مثلا ده خط پشت سر هم ) . برای این کار از دستور RemStart برای شروع و RemEnd برای اتمام غیرفعال سازی خطوط پشت سر هم در برنامه ، استفاده می کنیم . مانند مثال زیر :
 
REMSTART
----------------------------------------------
Author : Hamid Reza Heidary
Date : April 3 , 2009
.Description : Demonstrates the use of comments
REMEND
"Print "Test
Wait key
 
با اجرای این مثال می بینیم که فقط کلمه ی Test چاپ شد و اتفاق دیگری نیفتاد . یعنی خطوط نوشته شده بین دستور REMSTART و REMEND نادیده گرفته شدند . اگر بخواهیم تعداد زیادی از خطوط را غیر فعال کنیم ، استفاده از این دو دستور راحت تر است از اینکه بخواهیم برای هر خط ، از دستور Rem استفاده کنیم .
 
دستور END
این دستور برنامه را می بندد ( یعنی با این دستور از برنامه خارج می شویم ) . ما می توانیم در هر خطی از برنامه از این دستور استفاده کنیم . منتها باید بدانیم که چه موقعی می خواهیم از برنامه خارج شویم . مانند مثال زیر :
 
Rem Start Of Program
"Print "One
Wait Key
End
"Print "Two
Wait Key
 
با اجرای این مثال کلمه ی One برروی صفحه ی مانیتور چاپ خواهد شد . مفسر DarkBasic بر روی دستور Wait Key می ایستد و منتظر می ماند تا کلیدی را فشار دهیم . بعد از فشار دادن یکی از دکمه های کیبورد از برنامه خارج می شویم زیرا با زدن یکی از کلید ها مفسر DarkBasic به خط بعد از فرمان Wait Key مراجعه می کند و با اجرای دستور End از برنامه خارج می شویم و بقیه ی برنامه بدون اجرا رها خواهد شد .
 
نکته ! مفسر DarkBasic به بزرگی و کوچکی حروف نوشته شده ی دستورات حساس نمی باشد . یعنی می توانیم ، دستور End را بصورت های END ، end ، EnD ، eNd و ... هم تایپ کنیم .
 
دستور GOTO
در حالت عادی ، مفسر DarkBasic برنامه را خط به خط از بالا به پائین اجرا می کند . با استفاده از این دستور می توانیم مفسر DarkBasic را به خط مورد نظرمان بفرستیم . تنها کافی است یک برچسب در آن خط مورد نظر ایجاد ، سپس از دستور Goto برای پرش به آن خط ، استفاده می کنیم . مانند مثال زیر :
 
:MyLabel
"PRINT "Hello World
GOTO MyLabel
 
با اجرای این مثال می بینیم که عبارت Hello World دائما در حال چاپ شدن است . دلیل آن این است که در خط اول برچسبی ( برای مثال ) با نام MyLabel ایجاد کردیم و بعد از آن علامت ( : ) را قرار دادیم . زمانی که مفسر DarkBasic به دستور Goto می رسد ، عبارت نوشته شده ی ( برای مثالMyLabel ) جلوی دستور Goto را می خواند و به دنبال خطی با همان عبارت ( برچسب با عنوان :MyLabel ) می گردد . سپس به آن خط پرش می کند و برنامه را از آنجا ادامه می دهد . علامت ( : ) بعد از نام برچسب باید تایپ شود .
 
دستور GOSUB
عملکرد دستور Gosub شباهت زیادی با دستور Goto دارد . با این تفاوات که دستور Gosub بلوک خاصی از برنامه را اجرا می کند و سپس به همان خطی که آن را ترک کرده بود باز می گردد . مانند مثال زیر :
 
"PRINT "Hello
GOSUB MySubroutine
Wait Key
END

:MySubroutine
"PRINT "World
RETURN
 
در مثال بالا ، در خط ششم یک برچسب با نام MySubroutine توسط علامت ( : ) ایجاد کردیم . با اجرای این مثال ابتدا عبارت Hello چاپ می شود . سپس دستور Gosub با توجه به عبارت نوشته شده ی جلوی خود ( یعنی عبارت MySubroutine ) به برچسبی با همین عنوان ( :MySubroutine ) یعنی به خط هفتم جهش می کند . سپس دستورات بعدی را اجرا می کند . یعنی عبارت World را چاپ می کند و زمانی که به دستور RETURN نوشته شده در خط هشتم می رسد ، دوباره به مکان ترک شده ( یعنی به خط دوم ) برمی گردد . یعنی دستور خط سوم به بعد را اجرا می کند . ما می توانیم بین خط :MySubroutine و دستور RETURN هر تعداد دستوری را که نیاز داشته باشیم ، اضافه کنیم تا همگی اجرا شوند .
 
دستور DO … LOOP
در واقع این دستور به دو دستور Do و Loop تقسیم می شود که جزء دستورات حلقه ای محسوب می شوند . به مثال زیر دقت کنید تا بعد از آن به توضیح دستور Do … Loop بپردازیم .
 
:Label7
"PRINT "Hello World
GOTO Label7
 
در این مثال عبارت Hello World دائما چاپ می شود . یعنی مفسر DarkBasic در خط سوم توسط دستور Goto به خط اول پرش می کند و عبارت Hello World مجددا چاپ می شود و این کار تا ابد ادامه دارد . یعنی اجرای دستورات نوشته شده بین خطوط یکم و سوم دائما تکرار می شوند . می توان به جای ایجاد این برچسب ( یعنی :Label7 ) و استفاده از دستور Goto از دستور Do … Loop استفاده کنیم مانند مثال زیر :
 
Do
"PRINT "Hello World
Loop
 
با اجرای این مثال ، دستورات نوشته شده بین دو دستور Do و Loop دائما در حال اجرا شدن می باشند . یعنی عبارت Hello World دائما در حال چاپ شدن خواهد بود . ما می توانیم به جای دستور Print تعداد زیادی دستور بین Do و Loop قرار دهیم تا دائما اجرا شوند .
 
دستور EXIT
این دستور در واقع جزئی از دستور Do … Loop است که می توان بنا به ضرورت از آن استفاده کرد . وظیفه ی این دستور خروج از حلقه ی Do … Loop می باشد . مانند مثال زیر :
 
A = 1
Do
A = A + 1
Print A
If A >= 10000 Then Exit
Loop
 
با اجرای این مثال زمانی که متغیر A به 10000 می رسد ، برنامه توسط دستور Exit از حلقه ی Do … Loop خارج شده و چون از دستور Wait Key استفاده نکردیم ، کامپایلر رها شده و از برنامه خارج خواهیم شد .
 
دستور FOR … NEXT
در دستور پیشین ( Do … Loop ) دستورات نوشته شده بین Do و Loop دائما در حال اجرا شدن بودند . ولی اگر بخواهیم این دستورات به تعداد معینی تکرار شوند ، از دستور For … Next استفاده می کنیم . مانند دستورالعمل زیر :
 
For Counter = StartValue To EndValue Step StepValue
Next Counter
 
طبق این دستورالعمل به جای Counter یک متغیر قرار می دهیم . دستور For متغیر Counter را از شماره ی StartValue تا EndValue می شمارد و هر بار به اندازه ی StepValue به مقدار Counter اضافه می کند و دستور Next انتهای حلقه را مشخص می کند . یعنی ما می توانیم دستورات مورد نظرمان را بین این دو خط تایپ کنیم . مانند مثال زیر :
 
I As Integer
For I = 1 To 7 Step 2
Print I
Next I
Wait Key
 
با اجرای این مثال متغیر I از 1 تا 7 بین خطوط دوم و پنجم  شمرده می شود و هر بار توسط دستور Step به مقدار 2 عدد به متغیر I اضافه می شود . هر بار متغیر مقدار دهی شده ی I ، توسط دستور Print چاپ می شود .
 
اگر در هر شمارش بخواهیم تنها یک عدد به متغیرمان اضافه شود ، می توانیم Step StepValue را ننویسیم . یعنی اگر بخواهیم اعداد 5- تا 5 را چاپ کنیم ، مانند مثال زیر عمل می کنیم .
 
For intValue = -5 To 5
Print intValue
Next intValue
Wait Key
 
دستور For … Next می تواند متغیر ها را بصورت معکوس هم بشمارد مانند زیر :
 
For k = 10 To -2 Step -2
Print k
Next K
Wait Key
 
دستور REPEAT … UNTIL
این دستور یکی دیگر از دستورات حلقه ای DarkBASIC می باشد . با این تفاوت که دستورات نوشته شده بین Repeat و Until دائما تکرار می شوند ، تا اینکه شرط نوشته شده روبروی دستور Until منطقی شود . یعنی تا زمانی که شرط منتقی نباشد ، دستورات بین Repeat و Until دائما اجرا خواهند شد . مانند مثال زیر :
 
myNumber = 0
REPEAT
myNumber = myNumber + 1
"... PRINT "Please Wait
UNTIL myNumber = 3000
 
با اجرای این مثال دستور نوشته شده بین دستور REPEAT و UNTIL یعنی خطوط سوم تا چهارم دائما اجرا میشوند تا زمانی که شرط نوشته شده روبروی دستور UNTIL درست و منطقی باشد . یعنی در این مثال اگر myNumber برابر 3000 شود ، DarkBasic از حلقه خارج می شود .
 
می توانیم روبروی دستور UNTIL به جای یک شرط از چندین شرط هم استفاده کنیم ، مانند مثال زیر :
 
A = 0
Repeat
print "a = ";a;" b = ";b
a = a + 1
b = 1000
Until a > 3000 And b = 1000
 
دستور WHILE … ENDWHILE
این دستور شباهت زیادی با دستور گذشته ( Repeat … Until ) دارد . با این تفاوت که در دستور گذشته دستورات مابین Repeat و Until تا زمانی اجرا می شوند که شرط روبروی Until درست نباشد . ولی در این دستور فرامین بین دستورات While … EndWhile تا زمانی اجرا می شوند که شرط نوشته شده روبروی While منطقی باشد . مانند مثال زیر :
 
A = 0
While A < 4000
PRINT A
A = A + 1
EndWhile
 
با اجرای این مثال فرامین نوشته شده بین خطوط دوم و پنجم تا زمانی اجرا می شوند که شرط نوشته شده روبروی While درست باشد ، یعنی تا زمانی که A < 4000 باشد ، فرامین اجرا خواهند شد . بعد از آن DarkBasic حلقه را رها و به اجرای دستورات نوشته شده بعد از آن می پردازد .
 


چهار شنبه 21 فروردين 1392برچسب:, :: 5:14 ::  نويسنده : ابوالفضل

 متغیر ها مکان هایی از حافظه موقت ( Ram ) هستند که هر کدام یک عدد و یا عبارت را برای ما نگه می دارند ، هر کدام را با یک نام ایجاد می کنیم . می توانیم مقدار درون آن ها را هر لحظه که خواستیم ، تغییر دهیم . تمامی زبانهای برنامه نویسی از متغیر ها برای محاسبات استفاده می کنند .

 

متغیر واقعا چیست و کجا است و به چه دردی می خورد ؟

زمانی که متغیری ایجاد می کنیم ، قسمت کوچکی از حافظه ی Ram کامپیوتر با نام همان متغیری که ایجاد کرده ایم ، اختصاص پیدا می کند ، تا بتواند اعداد و عبارات مورد نظرمان را برای محاسبات ، داخل آنها نگه داریم . اندازه ی مکان اشغال شده بستگی به نوع متغیری است که تعریف می کنیم .

 

هدف از ایجاد متغیر و استفاده از آن :

همه ی ما در طول زندگی از واحد هایی متشکل از اعداد و عبارات استفاده می کنیم و آن ها را بصورت مقادیری مشخص ، بکار می بریم . مثلا موقع خریدن میوه از فروشنده تقاضای 3 کیلو سیب می کنیم و یا می خواهیم 7 ساعت بعد به سر کار بریم و یا 5.2 متر پارچه بخیرم . همانطور که می دانید ما نمی توانیم بگوییم که همیشه باید فقط سه کیلو سیب بخریم یا همیشه باید 5.2 متر پارچه بخریم چون نیاز ما در هر زمان تغییر می کند . پس مقدار میوه ای که باید هر روز بخریم مانند یک عدد ثابت نیست بلکه متغیر است یعنی هر روز مقدار نیازمان متفاوت از روز قبل است . علت اینکه به این واحد اشغال شده در کامپیوتر ، متغیر می گویند نیز همین است . چون می توانیم در هر زمان مقدار آن ها را تغییر دهیم .

 

توجه ! اعداد و عبارات موجود در متغیر ها تنها در همین برنامه ی DarkBasic قابل استفاده ، دسترسی و تغییر می باشند . یعنی سایر برنامه ها نمی توانند از وجود یا مقدار درون متغییر های ایجاد شده اطلاع پیدا کنند .

 

انواع داده ای متغیر ها ( Data Types ) :

در برنامه ی DarkBasic می توانیم تعداد زیادی متغیر با انواع و گنجایش های متفاوتی ایجاد کنیم . جدول زیر انواع متغیرها و محدوده ی ( گنجایش ) هر کدام را نشان می دهد .

 

 جدول متغیر ها :

 

محدوده ( گنجایش )    نوع متغیر

INTEGER      -2,147,483,648   To   2,147,483,647

(REAL       3.4 E +/- 38 ( 7 Digits

BOOLEAN      0   To   1

BYTE     0   To   255

WORD 0   To   65535

DWORD 0   To   4,294,967,295

DOUBLE INTEGER -9,223,372,036,854,775,808   To   9,223,372,036,854,775,807

 ( DOUBLE FLOAT    1.7 E +/- 38 ( 15 Digits

String 2 Million Character

 

چگونگی ایجاد متغیر :

برای ایجاد متغیر که به معنای شناساندن آن به DarkBasic می باشد ، از دستورالعمل زیر استفاده می کنیم :

 

VariableName As Type

 

طبق این دستورالعمل به جای عبارت VariableName نام متغیری را که می خواهیم ایجاد کنیم قرار می دهیم . دستور  As جزء دستورات کلیدی DarkBasic می باشد که باید حتما نوشته شود . سپس به جای عبارت Type نوع متغیری را که می خواهیم تعریف کنیم از جدول بالا انتخاب و تایپ می کنیم ( بغیر از REAL ) . به مثال زیر توجه کنید .

 

worAdad As Word

 

در این مثال متغیری با نام worAdad از نوع Word ایجاد و معرفی کردیم . یعنی عبارت As Word به DarkBasic می گوید که متغیری با نام worAdad از نوع Word که گنجایش آن طبق جدول متغیر ها بین محدوده ی 0 تا 65535 می باشد در حافظه موقت Ram ایجاد شود .

 

ما می توانیم به جای نام worAdad ، هر عبارتی را که مناسب می دانیم بکار ببریم . البته بغیر از کلمات رزرو شده در برنامه ی DarkBasic . یعنی دارک بیسیک به تعدادی از کلمات حساسیت دارد چون خود باید از آن کلمات بعنوان دستور در برنامه استفاده کند . باید دقت کنیم که در تمام طول برنامه از متغیر و یا اسامی ای به غیر از دستورات رزرو شده توسط DarkBasic استفاده کنیم تا متغیر ها با دستورات اصلی تداخل پیدا نکنند . مثلا چون کلمه ی Print جزء دستورات اصلی DarkBasic است ما به جای استفاده از این کلمه ( به عنوان نام متغیر یا هر چیز دیگری ) می توانیم از کلمه ی worPrint استفاده کنیم چون سه حرف اول آن یعنی wor برای ما تداعی کننده ی نوع Word بودن آن متغیر می باشد . و یا مثل IntPrint

 

در مجموع متغیر ها به سه دسته ی اصلی تقسیم می شوند  . که عبارتند از

 

1 - متغیر از نوع عدد طبیعی (  Integer Number )

این نوع متغیر ، اعداد طبیعی را در خود نگه می دارد ، نه اعداد دارای اعشار ( ممیز دار ) . برای منفی کردن اعداد طبیعی ، کافیست علامت – را قبل از آن ها درج کنیم تا منفی حساب شود . اعداد زیر نمونه هایی از اعداد طبیعی هستند که در این نوع متغیر ذخیره می شوند :

 

0

42

10000

-233000

-100

 

2 - متغیر از نوع عدد صحیح (  Real Number )

این نوع متغیر ، هم می تواند اعداد طبیعی بدون ممیز را در خود نگه دارد و هم اعداد صحیح اعشاری ( ممیز دار ) را . برای منفی کردن عدد صحیح کافیست علامت – را قبل از آن درج کنیم تا منفی حساب شود . اعداد زیر نمونه هایی از اعداد صحیح ( ممیزدار یا بدون ممیز ) هستند که در این نوع متغیر ذخیره می شوند :

 

20.0005

99.9

0

-5000.12

1000

 

3 - متغیر از نوع رشته ای ( String )

متغیر از نوع String برای ذخیره داده های کاراکتری استفاده می شود . در واقع عدد نیست . یعنی کاراکتر ها شامل حروف ، اعداد ، و علائم  و ... می با شند . مانند نمونه های زیر :

 

"A"

"Hello World"

"Telephone"

""

"I am 99 years old     "

"1.2.3.4.5"

 

همانطور که می بینید برای مقدار دهی به متغیر از نوع رشته ( کاراکتری یا همان String ) باید عباراتمان را داخل دو علامت هم شکل ( " ) به نام کوتیشن قرار دهیم تا تفاوت آن با عدد مشخص شود . یعنی عبارت بین این دو علامت مقدار داخل متغیر را معلوم می کند و علامات " و " فقط نوشته می شوند .

 

توجه ! متغیر از نوع String می تواند مقدار خالی ( تهی ) را هم در خود نگه دارد . مانند مثال زیر :

 

""=$Name

 

همانطور که می بینید چیزی داخل علامات "" ننوشتیم ، یعنی متغیر فقط ایجاد شد و داخل آن خالیست .

 

توجه ! اگر دقت کرده باشید . ما اصلا درباره ی گنجایش متغیر از نوع String صحبتی نکردیم . دلیل آن این است که این نوع از متغیر دارای گنجایشی تغییر پذیر می باشد . یعنی هر مقدار عبارت داخل آن بزرگ باشد ، گنجایش آن بطور خودکار زیاد می شود و لازم نیست محدوده ای برای آن تعریف کنیم .

 

راهی ساده تر برای ایجاد متغیر ها :

به عبارت زیر توجه کنید .

 

Adad = 4

 

عبارت Adad = 4 در DarkBasic به این معناست که ما متغیری با نام Adad ایجاد کردیم و مقدار 4 را توسط نماد = به آن اختصاص دادیم . ولی چون نوع متغیر را مشخص نکردیم ، DarkBasic بطور خودکار آن را Integer در نظر میگیرد . یعنی طبق جدول متغیر ها ، متغیر ایجاد شده با نام Adad دارای محدوه ای بین 2147483648- تا 2147483647 می باشد . به عبارتی دیگر عددی که در این متغیر ذخیره خواهد شد ، که در این محدوده باشد . یعنی نه کمتر از 2147483648- و نه بزرگ تر از 2147483647 باشد . 

 

توجه ! باید متغیر ها را با توجه به گنجایششان طبق جدول مقدار دهی کنیم . در غیر اینصورت محاسباتمان به هم خواهد خورد .

 

- می توانیم متغیر را با استفاده از نماد های # و $ هم ایجاد کنیم بعنوان مثال به عبارت زیر توجه کنید .

 

"strText$ = "Total Is 57

 

در این عبارت متغیری با نام $strText از نوع String تعریف شد و عبارت Total Is 57 بین دو نماد " و " در $strText ذخیره شد . همانطور که قبلا گفته شد متغر هایی از نوع String می توانند عبارات کاراکتری را در خود ذخیره کنند .

 

از کاراکتر # مانند مثال زیر برای ایجاد متغییر از نوع عدد صحیح دارای اعشار ( ممیزدار Real ) ، می توان استفاده کرد .

 

Number# = 12.45

 

در این عبارت متغیری با نام  #Number از نوع عدد صحیح ( دارای اعشار یا همان Real Number ) ایجاد گردید و مقدار داخل آن 12.45 می باشد .

 

استفاده ی عملی از متغیر ها :

برنامه ی زیر سن افراد را با استفاده از عدد 1387 (سال 1387 ) و تاریخ تولد ( مثلا 1350 ) محاسبه و نمایش می دهد .

 

intYear = 1387

worSen As Word = 1350

YourSen = intYear – worSen

Print YourSen

Wait Key

 

برنامه شامل 5 خط می باشد . طبق معمول DarkBasic برنامه را خط به خط از بالا به پایین اجرا می کند . طبق گفته های پیشین خط اول به DarkBasic متغیری با نام intYear معرفی می کند و مقدار 1387 را توسط علامت = به آن اختصاص می دهد و چون نوع متغیر را مشخص نکردیم بطور خودکار Integer در نظر گرفته می شود که گنجایش آن طبق جدول بین 2147483648- تا 2147483647 می باشد . سپس در خط دوم متغیری با نام worSen از نوع Word مشخص کردیم که گنجایش آن طبق جدول بین 0 تا 65535 می باشد و توسط علامت = مقدار 1350 را در آن ریختیم . در خط سوم متغیر YourSen بطور خودکار از نوع Integer ایجاد و همان زمان مقدار داخل متغیر با نام worSen از مقدار داخل متغیر با نام intYear توسط نماد – کم شد و داخل متغیر با نام YourSen ریخته شد و DarkBasic محاسبات عددی داخل متغیر ها را بصورت معادله حل کرد و در خط چهارم دستور Print که جزء دستورات اصلی DarkBasic می باشد ، مقدار داخل متغیر YourSen را چاپ کرد . در خط پنجم دستور Wait Key مفسر DarkBasic را معطل نگه می دارد تا ما حاصل کارمان را ببینیم . همانطور که قبلا گفته بودیم دلیل استفاده از دستور Wait Key این است که جلوی خروج از اجرای برنامه را بگیرد . در نتیجه Wait Key برنامه را تا زمانی که کلیدی فشرده نشود ، منتظر نگه می دارد .

 

سیستم محاسبات معادلات ریاضی در DarkBasic

قبلا در مبحث ریاضیات با معادله آشنا شدیم . معادلات متشکل از اعداد ( مانند 10 یا 75.90 یا هر عدد دیگر ) و متغیر ها ( مانند X ، Y و یا هر عبارت دیگری ) ، و همچنین علامات ( عملگرهایی مانند + ، - و دیگر علائم ) و توابع ریاضی میباشند . مانند معادله ی زیر :

 

X + 10 = 3X - 10

 

با حل این معادله ، حاصل X عدد 10 می شود . در DarkBasic معادله ها را باید به شکل خاصی نوشته شود . همانطور که قبلا گفته شد ، باید برای ارتباط با هر فردی زبان گفتگو با او را بلد بود . در این زبان مانند سایر زبان های برنامه نویسی قسمت راست علامت = محاسبه شده و حاصل به سمت چپ = ریخته می شود . یعنی در این زبان باید معادلات مور نظر طوری طراحی شود تا DarkBasic بتواند قسمت راست تساوی را محاسبه و مقدار آن را تنها به یک متغیر در سمت چپ بریزد . یعنی عبارت را بصورت زیر باشد تا DarkBasic آن را محاسبه کند . مانند عبارات زیر :

 

A = 10

B = 90

X = A + B * 1000

 

نکته : در هر معادله تنها یک علامت مساوی ( = ) باید وجود داشته باشد .

 

عملگر ها ( Operators ) :

عملگر ها علائم یا عباراتی هستنند مانند = و + و / و یا  Andو Or و > و =< و ... که هر کدام عملی بر روی اعداد ، کاراکتر ها ، متغیر ها و همچنین معادلات و عبارات انجام می دهند ، مانند عملیات ریاضی . همچین عملگر ها به مقایسه درستی و نادرستی معادلات و مقادیر اعداد و متغیر ها نیز می پردازند .

 

1 - عملگر های حسابی :

عملگر های حسابی برای انجام محاسبات ریاضی بر روی اعداد و متغیر های عددی بکار می روند که عبارتند از :

 

1 – الف : عملگر ^ ( توان )

عملگر ^ عددی را به توان عددی دیگر می رساند . مانند دستورالعمل زیر :

 

Result = Number1 ^ Number2

 

طبق این دستورالعمل ، عدد Number1 به توان عدد Number2 می رسد و حاصل آن در متغیر Result ریخته می شود . مانند مثال زیر :

 

Adad = 3.5 ^ 2

 

در این مثال اگر 3.5 به توان 2 برسد حاصل آن برابر 12.25 خواهد بود . پس اگر متغیر Adad از نوع عدد طبیعی باشد ( Integer ، Boolean ، Byte ، Word ، Dword و Double Integer ) عدد 12 در آن ذخیره می شود و اگر متغیر Adad از نوع عدد صحیح باشد ( Real و Double Float ) عدد 12.25 در آن ذخیره می شود . پس زمان استفاده از عملگر ها باید به نوع متغیری که عدد داخل آن ریخته می شود ، توجه داشته باشیم . 

 

توجه ! بهتر است دستورات را مانند مثال زیر آزمایش کنیم .

 

Adad = 3 ^ 2

Print Adad

Wait Key

 

توجه ! باید بین دستورات ، متغیر ها و عبارات و علائم موجود بین آنها فاصله ( استفاده از دکمه ی Space جهت ایجاد فضای خالی ) بگذاریم . در غیر اینصورت دستور برای برنامه قابل فهم نخواهد بود . مثلا مثال بالا را بصورت زیر ننویسیم :

 

Adad=3^2

PrintAdad

WaitKey

 

1 – ب : عملگر * ( ضرب )

عملگر * دو عدد را در هم ضرب می کند . مانند دستورالعمل زیر :

 

Result = Number1 * Number2

 

طبق این دستورالعمل ، دو عدد Number1 و Number2 در هم ضرب شده و حاصل آن در متغیر Result ریخته خواهد شد . مانند عبارت زیر :

 

Number = 4 * 76

 

در این مثال حاصل ضرب 4 در 76 برابر  304 می باشد . پس اگر متغیرمان از نوع Byte باشد ، طبق جدول متغیر ها محدوده ای بین 0 و 255 داشته باشد عدد 304 در آن به درستی ذخیره نخواهد شد . پس باید زمان استفاده از عملگر ها به محدوده ی ( گنجایش ) متغیر ها توجه داشته باشیم . به عبارتی دیگر پیش بینی کنیم که چه عددی در متغیر ریخته خواهد شد . آیا متغیر گنجایش ذخیره ی عدد حاصل را دارد یا نه ؟ اگر گنجایش آن را نداشته باشد ، به جای آن متغیری با گنجایش بالاتر را انتخاب می کنیم .

 

1 – ج : عملگر / ( تقسیم )

عملگر / عددی را بر عدد دیگر تقسیم می کند . مانند دستورالعمل زیر :

 

Result = Number1 / Number2

 

طبق این دستورالعمل ، عدد Number1 تقسیم بر Number2 می شود و حاصل آن در متغیر Result ریخته خواهد شد . مانند مثال زیر :

 

Adad = 5 / 2

 

در این مثال حاصل تقسیم 5 بر 2 برابر 2.5 می باشد . پس اگر متغیر Adad از نوع عدد طبیعی باشد ( Integer ، Boolean ، Byte ، Word ، Dword و Double Integer ) عدد 2 در آن ذخیره می شود و اگر متغییر Adad از نوع عدد صحیح باشد ( Real و Double Float ) عدد 2.5 در آن ذخیره خواهد شد .

توجه ! زمان استفاده از تقسیم به ترتیب قرار گرفتن دو عدد دقت داشته باشید . در مثال گفته شده عدد 5 بر دو تقسیم شد و حاصل آن 2.5 می باشد . ولی اگر جای آن دو را عوض کنیم ، یعنی اگر 2 سمت چپ علامت / و 5 سمت راست علامت / باشد 2 بر 5 تقسیم می شود و حاصل آن 0.4 خواهد بود . مانند نمونه ی زیر :

 

Adad = 2 / 5

 

1 – د : عملگر + ( جمع )

عملگر + عددی را با عدد دیگر جمع می کند . مانند دستورالعمل زیر :

 

Result = Number1 + Number2

 

طبق این دستورالعمل ، عدد Number1 با عدد Number2 جمع می شود و حاصل آن در متغیر Result ریخته خواهد شد . مانند مثال زیر :

 

Adad = 5 + 2.5

 

در این مثال حاصل جمع 5 با 2.5 برابر 7.5 می باشد . پس اگر متغیر Adad از نوع عدد طبیعی باشد ( Integer ، Boolean ، Byte ، Word ، Dword و Double Integer ) عدد 7 در آن ذخیره می شود و اگر متغییر Adad از نوع عدد صحیح باشد ( Real و Double Float ) عدد 7.5 در آن ذخیره می شود .

 

عملگر + علاوه بر جمع میان اعداد ( همچنین متغیر ها ) توانایی اتصال میان کاراکتر ها ( عبارات متنی ) را هم دارد . مانند دستورالعمل زیر :

 

Result = Text1 + Text2

 

طبق این دستورالعمل ، عبارت Text1 به عبارت Text2 متصل می شود و حاصل آن در متغیر Result ریخته خواهد شد . مانند مثال زیر :

 

"Example$ = "Thank " + "You

 

در این مثال عبارت Thank با عبارت You متصل و حاصل آن یعنی Thank You در متغیر $Example ذخیره خواهد شد .

 

توجه ! عبارات کاراکتری به ترتیب ، از سمت چپ به راست به هم متصل می شوند .

 

1 – ه : عملگر - ( کسر )

عملگر - عددی را از عدد دیگر کسر می کند . مانند دستورالعمل زیر :

 

Result = Number1 - Number2

 

طبق این دستورالعمل ، عدد Number2 از عدد Number1 کسر می شود و حاصل آن در متغیر Result ریخته خواهد شد . مانند مثال زیر :

 

Adad = 6 – 2.5

 

در این مثال عدد 2.5 از عدد 6 کسر و برابر 3.5 می باشد . پس اگر متغیر Adad از نوع عدد طبیعی باشد ( Integer ، Boolean ، Byte ، Word ، Dword و Double Integer ) عدد 3 در آن ذخیره می شود و اگر متغییر Adad از نوع عدد صحیح باشد ( Real و Double Float ) عدد 3.5 در آن ذخیره می شود .

 

توجه ! زمان استفاده از کسر به ترتیب قرار گرفتن دو عدد دقت داشته باشید . در مثال گفته شده عدد 2.5 از 6 کسر شد و حاصل آن 3.5 می باشد . ولی اگر جای آن دو را عوض کنید یعنی اگر 2.5 سمت چپ علامت - و 6 سمت راست علامت - باشد 6 از 2.5 کسر می شود و حاصل آن 3.5- خواهد بود . مانند نمونه ی زیر :

 

Adad = 2.5 - 6

 

1 – و : عملگر Mod ( باقیمانده )

عملگر Mod عددی را بر عدد دیگر تقسیم کرده سپس باقیمانده ی دو عدد را حساب می کند . مانند دستورالعمل زیر:

 

Result = Number1 Mod Number2

 

طبق این دستور العمل ، عدد Number1 تقسیم بر Number2 می شود و باقیمانده ی حاصل در متغیر Result ریخته خواهد شد . مانند مثال زیر :

 

 Adad = 12 Mod 4.3

 

در این مثال حاصل تقسیم 12 بر 4.3 برابر است با 2 و باقیمانده ی آن یعنی 3.4 در متغیر Adad ریخته می شود . پس اگر متغیر Adad از نوع عدد طبیعی باشد ( Integer ، Boolean ، Byte ، Word ، Dword و Double Integer ) عدد 3 در آن ذخیره می شود و اگر متغیر Adad از نوع عدد صحیح باشد ( Real و Double Float ) عدد 3.4 در آن ذخیره خواهد شد .



چهار شنبه 21 فروردين 1392برچسب:, :: 5:12 ::  نويسنده : ابوالفضل

 حتما مشتاق هستید تا نوشتن برنامه و اجرای آن را امتحان کنید .

برنامه ی DarkBasic Pro Free رو از منوی Start ویندوز و یا از روی صفحه Desktop کامپیوترمون اجرا می کنیم ، از منوی File گزینه ی New و بعد Project را انتخاب می کنیم . مانند شکل زیر .



پنجره ی New Project باز میشه مثل شکل زیر .



 

عبارت Example را بعنوان نام پروژه ( بازی ای که میخوایم بسازیم ) روبروی :Name تایپ می کنیم ( من برای مثال عبارت Example رو تایپ کردم شما هر چی دوست دارین بنویسین ) .

روبروی گزینه ی :Location مسیر ایجاد پروژه مشخص شده .

اگه گزینه ی Create directory for this project رو تیک بزنین پوشه ای با همان نام پروژمون ( برای مثال Example ) در مسیر :Location ایجاد میشه و فایلهای مرتبط با پروژه داخلش قرار میگیرن .

تیک گزینه ی Create directory for this project رو به هیچ وجه برندارین ( اگه تیکشو بردارین پشیمون میشین )

دکمه ی skip & Create a new blank project هم برای ایجاد پروژه ی خالی بکار میره ( استفاده نکنید )

حالا دکمه ی Ok را می زنیم تا پروژه ی جدید با نام Example ایجاد شود .

وقتی دکمه OK رو زدیم یه پوشه با نامی که انتخاب کردیم ( برای مثال Example ) در مسیر :Location ایجاد شد .

C:\Program Files\The Game Creators\Dark Basic Pro Free\Dark Basic Pro\Projects

شکل زیر پوشه ایجاد شده را در مسیر :Location نشان میدهد .


 


حالا پوشه ایجاد شده رو باز میکنیم تا ببینیم توش چیه . مانند شکل زیر .



 

اگه شکل بالا رو ببینین دو تا فایل داخل پوشه ایجاد شده . یکی با نام Example.dbpro که فایل اصلیه پروژمونه که تنظیمات مهم بازی داخلش ذخیره میشه و دیگری فایل Example که متن برنامه مون به زبان Basic داخلش نوشته و ذخیره میشه و آیکنش مثل چکش میمونه . همونطور که دیدین نام پوشه و فایل های مربوطه با همون اسمی که موقع ایجاد پروژه انتخاب کرده بودیم ایجاد شدن .

حالا برای شروع کار باید دستوراتی تایپ کنیم تا DarkBasic آن را بخواند و اجرا کند . آیا ما میتوانیم هر چیز دلخواهی را که دوست داشتیم داخل ویرایشگر بنویسیم ؟ جواب منفی است . چرا ؟ بهتر است مثالی بزنم . آیا تابحال از خودمان پرسیده ایم که زمانی که با دوستمان صحبت می کنیم ، او چگونه حرف های ما را میفهمد ؟ دلیل آن این است که دوستمان کلماتی را که بر زبان می آوریم ، می شناسد . مثلا زمانی که به او می گوئیم : هوا سرد است ، او این سه کلمه ی گفته شده ی ما را می شناسد و از ترتیب گفتن آن ها متوجه منظورمان می شود و یا اگر به او بگوئیم که : لطفا کتاب مرا بده . او متوجه منظورمان می شود . پس دلیل اینکه حرف هایمان را می فهمد این است که کلمات و جملاتی که به او می گوئیم برایش آشنا هستند . آیا اگر هر چیزی که معنی نداشته باشد به او بگوئیم ، او میفهمد ؟ مثلا به او بگویم : ( ینتا نعبع نکحفهسن نت ) . آیا او می فهمد که ما چه گفتیم ؟ قطعا متوجه نخواهد شد . پس باید کلماتی را که او با آن ها آشنایی دارد را ، بطور مرتب و معنی دار و پشت سر هم ، بصورت زبانی که او متوجه می شود ، بگوییم . مثلا اگر او فارسی زبان است ، به زبان فارسی و اگر انگلیسی زبان است ، باید با زبان انگلیسی با او صحبت کنیم . زبان های کامپیوتر از جمله DarkBasic ، دارای زبانی مخصوص به خود می باشند و برای فهماندن منظورمان به آن ، کافی است آن زبان را یاد بگیریم . برای یاد گیری این زبان ، باید کلمات و دستورات آن را مطالعه کنیم . برای مثال کد زیر را داخل ویرایشگر برنامه تایپ می کنیم . بطوری که به غیر از کد زیر ، چیز دیگری نوشته نشده باشد .

 

"Print "Welcome


 

سپس برای اجرای برنامه کلید F5 را فشار می دهیم .


نکته : اگه ابتدای اجرای برنامه با خطا مواجه شدین مبنی بر اینکه Direct X 9.0c نصب نیست میتونید با نصب یه بازی که به همراه خودش Direct X هم نصب می کنه مشک رو حل کنید و یا در Internet موتور Direct X رو تهیه کنید .

ما بغیر از ظاهر و ناپدید شدن یه پنجره مشکی رنگ چیز دیگری مشاهده نکردیم . علت چیست ؟ در این خط از برنامه ، فرمان چاپ عبارت welcome را با استفاده از دستور Print دادیم . منتهی سرعت اجرای برنامه آن قدر زیاد است که چشم ما قادر به دیدن این عبارت نشد و برنامه به سرعت به اتمام رسید . پس چکار باید کرد ؟ DarkBasic برنامه را خط به خط از بالا به پایین اجرا می کند . مثلا اگر چهار خط برنامه نوشته باشیم ابتدا خط اول ، بعد خط دوم ، بعد خط سوم و سر انجام خط چهارم را اجرا می کند . اگر در خطوط بعدی چیزی نوشته نشده باشد ، برنامه به پایان می رسد و چیز دیگری قابل مشاهده نخواهد بود . چون DarkBasic به محض این که کار خواندن و اجرای برنامه به پایان برسد ، از برنامه خارج می شود . پس برای آن که برنامه ی ما به این سرعت به پایان نرسد ، باید دستوری از دستوات DarkBasic را به برنامه اضافه کنیم تا مفسر DarkBasic را نگهدارد تا ما فرصت دیدن کلمه ی چاپ شده را داشته باشیم . پس خط بعدی را به برنامه اضافه می کنیم . در نتیجه برنامه بصورت زیر خواهد شد .


 

"Print "Welcome

Wait Key

 

برای اجرای برنامه سه کار را می توانیم به دلخواه انجام دهیم . راه اول فشردن دکمه ی F5 کیبورد است ، دومین راه زدن گزینه ی Compile & Run از منوی Compile و روش سوم زدن دکمه ی Compile & Run از نوار ابزار بالای برنامه که به شکل مثلث سبز رنگ است .


توجه ! در DarkBasic برنامه از سمت چپ به راست نوشته می شود و خطوط برنامه به ترتیب از بالا به پائین اجرا می شوند .

با اجرای برنامه پنجره ی برنامه نوشته شدمون باز میشه و عبارت welcome رو میتونیم ببینیم . بقیه ی صفحه هم به رنگ مشکیه .
DarkBasic برنامه را برای اجرا از خط اول می خواند . در خط اول از برنامه نوشته شده "Print "Welcome یعنی کلمه ی Print را که تایپ کریدم جزء دستورات کیلیدی DarkBasic است . به خاطر همین رنگ آن به شکل آبی در می  آید . بعد از آن عبارتی را که می خواهیم چاپ شود چون یک عدد نیست داخل دو علامت کوتیشن به شکل " و " نوشتیم و مفسر DarkBasic متوجه شد که با توجه به دستور  Print باید کلمه ی welcome مابین دو علامت " و " را چاپ کند . در خط بعدی عبارت Wait Key یکی دیگر از دستورات DarkBasic می باشد که بصورت دو کلمه ای است و وظیفه ی این دستور به این صورت است که مفسر DarkBasic را آن قدر منتظر نگه می دارد تا اینکه ما دکمه ای را فشار دهیم ( هر دکمه ای مثل دکمه ی Enter ) . سپس DarkBasic ابتدا خط اول را خواند و کلمه ی Welcome  را چاپ کرد و سپس در خط دوم فرمان Wait Key را خواند و صبر کرد تا دکمه ای زده شود . هم اکنون هر دکمه ای از کیبورد را که بزنیم برنامه به پایان می رسد .

به همین راحتی می توانیم هر کلمه و یا عبارتی را که دوست داشته باشیم تایپ کنیم ، تا نمایش داده شود . فرقی نمیکند که کلمه از چند حرف و یا چه حرف هایی تشکیل شده باشد ، فقط کافی است آن را بعد از تایپ کلمه ی Print بنویسیم .

تا الان دو دستور از دستورات موجود در DarkBasic را یاد گرفتیم .


توجه در مطالب اول همین صفحه که گفته شد : وقتی پروژه ای ایجاد میکنیم دو تا فایل داخل پوشه ایجاد میشه . یکی با نام Example.dbpro که فایل اصلیه پروژمونه که تنظیمات مهم بازی داخلش ذخیره میشه و دیگری فایل Example که متن برنامه مون به زبان Basic داخلش نوشته و ذخیره میشه و آیکنش مثل چکش میمونه . ولی به محص اینکه برنامه رو اجرا میکنیم یک فایل اجرایی هم تو همون پوشه پروژمون بوجود میاد با فرمت Exe و اگه تو هر کامپیوتری ببرین اجرا میشه بدون اینکه DarkBasic در اون کامپیوتر نصب شده باشه .

شکل زیر فایل های مربوطه به پروژه رو نشون میده .

 


 


 

همونطور که میبینید فایل Example با آیکن ذوزنقه زرد رنگ هم ایجاد شده . این فایل اجرایی رو هر بار که تو دارک بیسیک دکمه اجرا یا کامپایل رو بزنید با آخرین تغییراتی که تو برنامه و پروژه ایجاد کرده باشین به روز رسانی میشه .
این فایل ماهسل نتیجه کار شماست که برای اجرا شدنش نیازی به دارک بیسیک نداره و به زبان ماشین ترجمه شده و تو هر کامپیوتری که Direct X 9.0c نصب شده باشه اجرا میشه .


چهار شنبه 21 فروردين 1392برچسب:, :: 5:10 ::  نويسنده : ابوالفضل

 شرکت د گیم کرییتورس این برنامه قدرتمند رو بطور رایگان در اختیارمون گذاشته با کلیک بر روی لینک زیر نرم افزار را رایگان از سایت خود شرکت می تونید دانلود کنید . ( اگر نرم افزار Download Manager رو کامپیوترتون نصب باشه سرعت دانلودتون چندیدن برابر میشه )


www.thegamecreators.com/


 

فعال سازی نصب نرم افزار Dark Basic Professional

فعالسازی این برنامه خیلی راحته کافیه فقط یه ایمیل داشته باشین . حالا نرم افزار رو که دانلود کردین اجرا کنید تا با این پنجره مواجه بشین



ابتدا دکمه اولی ( Get Free Order Key ) رو کلیک کنید تا پنجره زیر باز شود .

 


سپس دکمه Next را بزنید تا پنجره زیر باز شود .

 


 

در پنجره ی بالا در قسمت Email Address ایمیل خودتون رو تایپ کنید و سپس دکمه Next را بزنید و منتظر بمانید .

بعد از مدت کوتاهی فعال سازی کامل میشه وکد فعال سازی Ordey Key به ایمیلتون صادر میشه در ایمیلتون پیام شرکت The Game Creator رو میبینین مثل شکل زیر



 

 

حالا اینبار Order Key را که به ایمیلتون فرستاده شده بود و کپی کرده بودین رو وارد کنید و مراحل رو کامل کنید .

حالا نرم افزار برای استفاده آمادس . ( برو حالشو ببر ) 


نکته : اگه برنامه موقع اجرا اعلام کرد Direct X9.0c مورد نیازه کافیه Direct X9.0c رو از اینترنت دانلود و نصب کنید و یا زمانی که یه بازی 3 بعدی نصب میکنید Direct X9.0c هم همراه بازی رو سیستمون خود به خود نصب میشه .

 

نکته : اگه یه موقع برنامه رو نصب کردین اجرا نشد دلیلش اینه که قدیمی شده و باید فایل آپگریدشو دانلود و نصب کنید . و اگه هم دوست داشتین کل فایل رو دوباره دانلود کنید .



چهار شنبه 21 فروردين 1398برچسب:, :: 5:7 ::  نويسنده : ابوالفضل

 سلام  به وبلاگ من خوش اومدین . در این وبلاگ درباره ی dark basic professional نرم افزار ساخت بازی های سه بعدی ( 3d ) به زبان بیسیک ( basic ) مطلب می نویسم . بعد از اینکه این صفحه رو تا آخر خوندین برای یادگیری دستورات به ستون موضوعات برین و روی موضوع مورد نظر کلیک کنین تا صفش باز بشه . دوستان چون مطالب این برنامه متنوس و تکنولوژی اون در حال گسترشه نتونستم براش کتاب چاپ کنم چون شرکت سازنده ی این نرم افزار هر بار قابلیت تازه و قدرتمندی بهش اضافه می کنه و من هم تصمیم گرفتم این وبلاگ رو با تکنولوژی روز به روز رسانی کنم تا دانش و تجربمو رو در خصوص این برنامه رایگان به اشتراک بذارم . بهتره اینم بگم که اهل لینکم هر کس خواست میتونه با من تبادل لینک داشته باشه . در ضمن استفاده از مطالب این وبلاگ کاملا رایگانه .

چند سالیه که بازی های دو بعدی و سه بعدی با موضوعات و کیفیت های متفاوتی تولید میشن . تا چند وقت پیش این صنعت تنها دست افراد نابغه و فوق العاده باهوش ، بخصوص در بخش برنامه نویسی بود . در این بین افرادی هم بودن که دارای خلاقیت هایی همسو در این زمینه بودن . ولی چون کار با برنامه های مرتبط با اون ، مثل کار با زبان برنامه نویسی c یا ++visual c کار خیلی مشکل و پرزحمتی بود ، معمولا افراد از انجام این کار منصرف میشدند . ولی با وجود برنامه ی dark basic professional که رابط بین دستورات ساده ی basic و دستورات پیچیده ی کامپیوتره ، دیگه ساخت بازی کار مشکلی نیست و هدف از تولید این برنامه نیز همینه . چند سالی است که برنامه dark basic professional تولید و معرفی شده و هم اکنون بصورت محصولی حرفه ای در اومده و هر از چند گاهی با ورژن کامل تری به بازار عرضه می شه . تابحال در ایران هیچ مرجعی در این زمینه فعالیت نداشته ، به همین دلیل مطالب این وبلاگ به ما آموزش می ده تا به راحتی بتونیم به کمک دستورات basic ، بازی های سه بعدی مورد علاقه مون رو در محیط windows ایجاد کنیم . شاید در ابتدا تصور هر فردی از واژه ی بیسیک این باشد که این برنامه تنها توان ایجاد بازی های کوچک و ساده را داره ، ولی اینطور نیست . بلکه دستورات این برنامه به سادگی میتواند به موتور گرافیکی direct x فرمان اجرای دستورات ما را بدهد ، بدون اینکه با دستورات پیچیده و سنگین این موتور گرافیکی روبرو بشیم و یا مجبور باشیم تمام ریزه کاری های مرتبط با اونو یاد بگیریم . تنها کار لازم ، یادگیری این زبان و عمل به دستواتشه . نمیدونم اطلاع دارین یا نه ولی مایکروسافت سیاست عجیب و غریبه داره که هر بار تحول عظیمی در محصولات و کاراش دیده میشه مثلا کسایی که قبلا بصورت مستقیم از طریق برنامه هایی مثل c با موتور گرافیکی direct x کار میکردن در ورژن جدید شاهد تغییرات زیادی در دستوراتش شدن که خوشایندشون نیست و روند کار شرکت سازنده بازی رو با کندی روبرو می کنه ولی کسایی که با دارک بیسیک کار میکنن فقط کافیه با دستورات سادش کار کنن و اگر هم تغییراتی بوجود بیاد جزئیه و به بهبود کار کمک میکنه و کافیه دستورات دارک بیسیک که به زبان basic طراحی شده رو یاد بگیریم . در این وبلاگ به معرفی دستورات موجود در این ورژن از برنامه بهمراه توضیحات و مثال مربوط به آن پرداخته شده . البته سعی دارم هر بار روی دستور تازه ای کار کنم ، تا بتونم چگونگی استفاده از اون رو یاد بدم . امیدوارم با کار و تمرین به یک برنامه نویس حرفه ای در این زمینه تبدیل شین . خواهشا با نظراتتون منو در ارائه ی مطالب کامل تر یاری کنید .

نکته . دوستان با اینکه عنوان وبلاگ رو آموزش ساخت بازی های 3 بعدی ( 3d ) گذاشتم ولی این برنامه قدرت ایجاد بازی های 2 بعدی ( 2d ) رو هم داره و اگه وقت کنم مطالب ساخت بازی های 2 بعدی رو هم به اون اضافه می کنم و عنوان وبلاگ رو به آموزش ساخت بازی های سه بعدی و دو بعدی تغییر میدم . برنامه دارک بیسیک بر خلاف سایر کامپایلر ها ولنگ و واز نیست و بدون شلوغ پلوغی برنامه های دیگه توانایی ایجاد هر برنامه ای رو که فکرش رو کنین داره . هر برنامه ای مثل جمع دو عدد و یا محاسبات پیچیده ریاضی تا ساخت بازی های سنگین و پیچیده . و شما میتونید به راحتی ایجاد هر برنامه ای که در فکرتون میگذره رو بصورت فایل اجرایی در بیارین و به دیگران نشون بدین یا در اینترنت بذارین و یا بفروشین و یا حتی برنامه آموزشی بسازین و تفکراتتون رو به نمایش بذارین .

 

مطالب این وبلاگ به درد چه کسایی میخوره ؟

    مطالب این وبلاگ هم برای افرادیست که تازه وارد دنیای برنامه نویسی شده اند و هم برنامه نویسانی که قبلا با محیط های دیگری کار کرده باشن ، میتونن با یادگیری دستورات این برنامه در کوتاه ترین زمان اقدام به ساخت بازی سه بعدی کنن . البته گروه اول باید با ویندوز آشنا باشن و مفاهیم ابتدایی کار با کامپیوتر را از قبل بلد باشن . همانطور که قبلا اشاره شد این برنامه فاقد پیچیدگی های برنامه های دیگر است . قطعا هنگام کار با این برنامه ، از قدرت و سادگی آن در کنار هم متعجب خواهید شد و قابلت های قدرتمند این برنامه شما را راضی خواهد کرد . من به شما اطمینان می دم که برنامه ی فوق یعنی dark basic professional بهترین و قوی ترین محصولی است که میتونه شما را برای تولید هر نوع بازی که تصورش را بکنید یاری بده .

 

 

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

     در این وبلاگ سعی شده با توضیح دستورات و مثال های مهم به شما کمک کنه تا بتونید بازی های سه بعدی با کیفیت و هوشمندی بالایی بسازید . البته قابلیت های بازی ساخته شده در واقع بستگی به هوش و خلاقیت شما خواهد داشت . زیرا اکثر بازی ها برای اجرا از موتور direct x استفاده می کنند و رقابت با آنها دور از انتظار نخواهد بود . برای آشنایی با قابلیت های این برنامه و کیفیت بازی ساخته شده میتوانید پروژه های نمونه که هنگام نصب بر روی پوشه ی projects ( در مسیر نصب این برنامه ) ایجاد شده اند را اجرا کرده و ببینید .

البته این مثال ها بسیار ساده و ابتدایی هستند و بازی های سنگین با هوشمندی و کیفیت بسیار بالا را هم میشه با dark basic professional ساخت .

 

 

آیا dark basic می تواند به تنهایی بازی سه بعدی ایجاد کند ؟

     بله . برنامه دارک بیسیک وظیفه ی مدیریت و اجرای بازی نوشته شده ی ما را داره . مثلا آبجکت هایی مثل آدم و ماشین و هواپیما و ... را به حرکت در میاره و صدا های انتخابی را پخش می کنه . باید بدانیم که تهیه ی آبجکت ها ، عکس ها ، صداها و ابزاری که dark basic professional از آن در اجرای بازی استفاده می کند بر عهده ی ماست . یعنی ما باید از طریق خرید از فروشگاه ها ، internet و یا خودمان آن ها را ایجاد و در ساخت بازی از آن استفاده کنیم . البته  دارک بیسیک فایل اجرایی exe میسازه که تو هر کامپیوتری اجرا میشه . البته راه های ساده تری هم هست که برای ایجاد محیط و ابجکت بکار می ره که در اینده ی نزدیک بهتون میگم .



صفحه قبل 1 2 3 صفحه بعد

درباره وبلاگ


به وبلاگ من خوش آمدید
آخرین مطالب
پيوندها

تبادل لینک هوشمند
برای تبادل لینک  ابتدا ما را با عنوان آموزش ساخت بازی 3D ( سه بعدی ) به زبان Basic با دارک بیسیک D و آدرس darkbasic.LXB.ir لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.





نويسندگان


آمار وب سایت:  

بازدید امروز :
بازدید دیروز :
بازدید هفته :
بازدید ماه :
بازدید کل :
تعداد مطالب : 24
تعداد نظرات : 3
تعداد آنلاین : 1