آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic
تهیه و آموزش نرم افزار دارک بیسیک
 
 
چهارشنبه 21 فروردین 1392 :: 05:20 ::  نويسنده : darkbasic
برای توضیح راجع به تابع مثالی می زنیم . فرض کنید دوستی داریم که نامش علی است . به او یاد می دهیم تا هر موقع به او عددی را گفتیم ، آن عدد را به توان 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
 
نکته : همیشه بعد از نام توابع ، پرانتز باز و پرانتز بسته ی آنها را هم قرار دهید . هرچند تابع ورودی نداشته باشد .



 
 
 

ورود کاربران

خوش آمدید! لطفا وارد حساب خود شوید

رمز عبور را فراموش کرده‌اید؟
حساب کاربری ندارید؟

فراموشی رمز عبور

نام کاربری یا ایمیل خود را وارد کنید

یا

ثبت نام کاربران

در چند ثانیه حساب کاربری خود را بسازید

قبلا ثبت نام کرده‌اید؟

نظرات کاربران

دیدگاه خود را با ما در میان بگذارید