<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/posts/rss.xsl"?>
<rss version="2.0">
<channel>

<title>https://darkbasic.loxblog.com</title>
<link>https://darkbasic.loxblog.com</link>
<description>تهیه و آموزش نرم افزار دارک بیسیک</description>
<language>fa-ir</language>
<generator>loxblog.com</generator>
<copyright>loxblog.com</copyright>


<item>
<title>دستوارات ذرات ( PARTICLES Commands ) :</title>
<link>https://darkbasic.loxblog.com/دستوارات-ذرات--particles-commands</link>
<guid>https://darkbasic.loxblog.com/دستوارات-ذرات--particles-commands</guid>

<description><![CDATA[
&nbsp;این فصل شامل دستوراتی برای برای ایجاد ذراتی متحرک با اشکال مختلفی از جمله برف ، آتش و یا هر شکلی که نیاز داشته باشیم ، می باشد . می توانیم شدت ، بزرگی ، جهت و سرعت پخش ذرات را هم تنظیم کنیم .
&nbsp;
دستور MAKE PARTICLES
با این دستور می توانیم منبع پخش ذره ایجاد می کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE PARTICLES ParticleNumber,ImageNumber,Frequency,Radius
&nbsp;
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذره و به جای ImageNumber شماره ی تصویر مورد نظر و به جای Frequency مقدار تراکم و به جای Radius شعاع ذرات ( اندازه ی درشتی هر ذره ) را قرار می دهیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,1
Make Particles 2,1,10,8
Do
Loop
&nbsp;
در این مثال منبع ذره ای با شماره ی 2 و با تصویر شماره ی 1 و سرعت 10 و اندازه ی شعاع هر ذره 8 ایجاد و پخش می شود .
&nbsp;
دستور MAKE SNOW PARTICLES
با این دستور می توانیم یک منبع پخش برف در فضا ایجاد کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE SNOW PARTICLES ParticleNumber,ImageNumber,Frequency,X,Y,Z, Width,Height,Depth
&nbsp;
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذرات برف و به جای ImageNumber شماره ی تصویر مورد نظر ( برای شکل هر یک از ذرات برف ) و به جای Frequency مقدار تراکم و به جای X و Y و Z موقعیت مکانی منبع برف در مختصات سه بعدی و به جای Width و Height و Depth پهنا و ارتفاع و طول فضای پخش ذرات فرف را قرار می دهیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp&quot;,1
make snow particles 5,1,1500,-5,5,5,10,10,10
Position Camera -5,5,0
Do
Loop
&nbsp;
دستور MAKE FIRE PARTICLES
با این دستور می توانیم یک منبع پخش ذرات با رفتار و حرکتی شبیه به آتش ایجاد کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE FIRE PARTICLES ParticleNumber,ImageNumber,Frequency,X,Y,Z, Width,Height,Depth
&nbsp;
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذرات آتش و به جای ImageNumber شماره ی تصویر مورد نظر ( برای شکل هر یک از شراره های آتش ) و به جای Frequency مقدار تراکم و به جای X و Y و Z موقعیت مکانی منبع آتش در مختصات سه بعدی و به جای Width و Height و Depth پهنا و ارتفاع و طول فضای پخش ذرات آتش را قرار می دهیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\fire.Bmp&quot; , 1
make fire particles 5, 1, 1500,-5,5,5, 10,10,10
Position Camera -5,5,-5
Do
Loop
&nbsp;
دستور DELETE PARTICLES
این دستور منبع پخش ذرات ( آتش ، برف یا ذره ) را حذف می کند . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\fire.Bmp&quot;,1
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\snow.Bmp&quot;,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
&nbsp;
تابع PARTICLES EXIST
این تابع بررسی می کند که آیا منبع پخش مورد نظر وجود دارد را خیر . 
اگر وجود داشته باشد تابع ()PARTICLES EXIST عدد یک و اگر وجود نداشته باشد ، عدد صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,1
Make Particles 2,1,10,8
Do
(blnValue = PARTICLES EXIST(2
&quot;If blnValue = 1 Then Text 10,10,&quot;Exist
&quot;If blnValue = 0 Then Text 10,30,&quot;No Exist
Loop
&nbsp;
در این مثال دو منبع پخش ذره ایجاد شد . یک منبع پخش ذره از نوع آتش با شماره ی 5 و یک منبع پخش ذره از نوع برف . سپس بعد از 2 ثانیه منبع پخش ذره شماره ی 5 حذف شد .
&nbsp;
دستور HIDE PARTICLES
این دستور منبع پخش مورد نظر را بهمراه ذرات منتشر شده از آن را مخفی می کند . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp&quot;,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
&nbsp;
دستور SHOW PARTICLES
اگر منبع پخش مورد نظر را توسط دستور قبلی ( Hide particles ) مخفی کرده باشیم . با این دستور می توانیم آن را دوباره آشکار کنیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp&quot;,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
&nbsp;
دستور POSITION PARTICLES
با این دستور موقعیت منبع پخش را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
&nbsp;
POSITION PARTICLES ParticleNumber,X,Y,Z
&nbsp;
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش ذره و به جای X و Y و Z فاصله ی منبع پخش ذره تا محور X و Y و Z محور مختصات فضای سه بعدی را قرار می دهیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp&quot;,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
&nbsp;
تابع PARTICLES POSITION X و تابع PARTICLES POSITION Y و&nbsp;
تابع PARTICLES POSITION Z
تابع ()PARTICLES POSITION X فاصله ی منبع پخش مورد نظر تا محور X مختصات فضای سه بعدی و 
تابع ()PARTICLES POSITION Y فاصله ی منبع پخش مورد نظر تا محور Y مختصات فضای سه بعدی و 
تابع ()PARTICLES POSITION Z فاصله ی منبع پخش مورد نظر تا محور Z مختصات فضای سه بعدی را برمی گردانند . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\particles\Snow.Bmp&quot;,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,&quot;X = &quot;+Str$(PARTICLES POSITION X(5
((Text 10,30,&quot;Y = &quot;+Str$(PARTICLES POSITION Y(5
((Text 10,50,&quot;Z = &quot;+Str$(PARTICLES POSITION Z(5
Loop
&nbsp;
دستور SET PARTICLE EMISSIONS
این دستور تراکم ذرات منبع را در حین اجرای برنامه تنظیم می کنید . مانند دستورالعمل زیر :
&nbsp;
SET PARTICLE EMISSIONS ParticleNumber,Frequency
&nbsp;
طبق این دستورالعمل به جای ParticleNumber شماره ی منبع پخش و به جای Frequency مقدار تراکم منبع را قرار می دهیم که اگر Frequency صفر باشد هیچ ذره ای پخش نخواهد شد . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,1
make particles 2,1,10,5
Position Camera 0,0,-5
Wait 2000
Set Particle Emissions 2,20
Wait Key
&nbsp;
دستور POSITION PARTICLE EMISSIONS
این دستور موقعیت پخش ذرات را نسب به موقعیت منبع آن مشخص می کند . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,1
make particles 2,1,10,5
Position Camera 0,10,-15
Wait 2000
POSITION PARTICLE EMISSIONS 2,0,10, 0
Wait Key
&nbsp;
دستور COLOR PARTICLES
این دستور رنگ ذرات پخش شده از منبع را به رنگ دلخواهمان تغییر می دهد . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,1
make particles 2,1,10,5
Position Camera 0,0,-5
Wait 2000
Color Particles 2,255,0,0
Wait Key
&nbsp;
دستور ROTATE PARTICLES
این دستور منبع پخش مورد نظر را حول محور های X و Y و Z فضای سه بعدی می چرخاند . همانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,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
&nbsp;
دستور GHOST PARTICLES ON
این دستور ذرات پخش شده از منبع پخش ذرات را با 6 مدل مختلف بصورت نیمه شفاف در می آورد . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,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
&nbsp;
در این مثال N تعداد حالت های شفافیت می باشد ( از 1 تا 6 )
&nbsp;
دستور GHOST PARTICLES OFF
این دستور ، دستور قبلی ( GHOST PARTICLES ON ) را خنثی می کند . یعنی ذرات پخش شده از منبع به حال عادی برمی گردد . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,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
&nbsp;
دستور SET PARTICLE VELOCITY
با این دستور می توانیم شدت پرتاب ذرات را از منبع آن را تنظیم کنیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,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
&nbsp;
دستور SET PARTICLE GRAVITY
با این دستور وزن ذرات پخش شده از منبع را تنظیم می کنیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,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
&nbsp;
دستور SET PARTICLE FLOOR
با این دستور می توانیم مشخص کنیم که ذرات با سطح ارتفاع منبع برخورد داشته باشند و یا بصورت آزاد به سمت پائین حرکت کنند . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Demos\CShop\textures\misc\Caulk.tga&quot;,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
&nbsp;]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستورات برخورد :</title>
<link>https://darkbasic.loxblog.com/دستورات-برخورد-1</link>
<guid>https://darkbasic.loxblog.com/دستورات-برخورد-1</guid>

<description><![CDATA[
این دسته از دستورات وظیفه ی کنترل برخورد اشاء سه بعدی با یکدیگر را دارند . یعنی با بکارگیری این دستورات می توانیم کنترل کنیم که هنگام برخورد هر شیء با شیء دیگر ، چه کاری انجام شود . برای مثال دستورات زیر را اجرا می کنیم .
&nbsp;
sync on : sync rate 120 : hide mouse : color
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,1
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\fur.Bmp&quot;,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
&nbsp;texture object t,1
next t
&nbsp;texture object Adam,2
Do
if upkey()=1 Then move object Adam,2
if downkey()=1 Then move object Adam,-2
if leftkey()=1
&nbsp; &nbsp;(yrotate object Adam,WrapValue(object angle y(Adam)-2
EndIf
if rightkey()=1
&nbsp; &nbsp;(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
&nbsp;
در این مثال با استفاده از چند جعبه ، فضایی ایجاد کردیم . با زدن دکمه های جهت بالا ، جهت پائین ، جهت راست و جهت پائین جعبه ی کوچک به جلو ، عقب ، راست و چپ حرکت خواهد کرد . ولی زمانی که به موانع برخورد می کند از آنها عبور می کند . اگر بخواهیم موانع را واقعی جلوه دهیم ( مثل دیوار سخت شوند تا نتوانیم از آن عبور کنیم ) باید برای هر شیء ( چه دیوار و چه شیء شخصیت محرک ) فضای برخورد تعریف کنیم . مانند دستور زیر :
&nbsp;
دستور MAKE OBJECT COLLISION BOX
&nbsp;
MAKE OBJECT COLLISION BOX ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,CollisionFlag
&nbsp;
طبق این دستورالعمل به جای ObjectNumber نام شییء سه بعدی و به جای (X1 و Y1 و Z1 ) و (X2 و Y2 و Z2 ) مختصات دو نقطه نسبت به مرکز شیء سه بعدی را قرار می دهیم و به جای CollisionFlag عدد صفر یا یک را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Box 70 ,10,10,10
Make Object Collision Box 70,-5,-5,-5,5,5,5,1
Wait Key
&nbsp;
در این مثال ابتدا یک جعبه با شماره ی 70 ایجاد کردیم و در خط بعدی با استفاده از دستور Make Object Collision Box مختصات دو نقطه نسب به مرکز شیء یعنی ، نقطه ی اول با مختصات X1=-5 ( فاصله ی نقطه ی اول تا محور X شیء سه بعدی ) و Y1=-5 ( فاصله ی نقطه ی اول تا محور Y شیء سه بعدی ) و Z1=-5 ( فاصله ی نقطه ی اول تا محور Z شیء سه بعدی ) ، و نقطه ی دوم با مختصات X2=5 ( فاصله ی نقطه ی دوم تا محور X شیء سه بعدی ) و Y2=5 ( فاصله ی نقطه ی دوم تا محور Y شیء سه بعدی ) و Z2=5 ( فاصله ی نقطه ی دوم تا محور Z شیء سه بعدی ) را قرار می دهیم . این دستور این دو نقطه را بعنوان ابتدا و انتهای قطر یک مستطیل در فضای &nbsp;شیء سه بعدی در نظر گرفته و فضای برخوردی به شکل جعبه ی سه بعدی در شیء سه بعدی ایجاد می کند و در عین حال این فضا را به شیء می چسباند . اگر به جای CollisionFlag عدد یک را قرار دهیم ، موقع دوران شیء سه بعدی فضای برخورد ایجاد شده هم چرخش خواهد کرد . در هر حالت با حرکت شیء سه بعدی فضای برخورد هم همراه با شیء حرکت خواهد کرد .
&nbsp;
برای فهم بهتر فضای برخورد به شکل زیر دقت کنید .
&nbsp;

&nbsp;
همانطور که در شکل می بینید ، هر شیء خود نیز دارای محور X و Y و Z می باشد . می توانیم نقاطی را نسبت به شیء تصور کنیم . دستور Make Object Collision Box دو نقطه در شیء ایجاد می کند . مانند شکل زیر :
&nbsp;

&nbsp;
مختصات X و Y و Z دونقطه نسبت به مختصات شیء سه بعدی است . یعنی مختصات نقطه های فرضی ارتباط مستقیمی با مختصات فضای بازی ندارد . دستور فوق نقاط را ابتدا و انتهای قطر یک جعبه فرض می کند و جعبه ی فرضی را بعنوان فضای برخورد شیء سه بعدی در همان شیء ایجاد می کند . مانند شکل زیر :
&nbsp;

&nbsp;

در مثال بالا جعبه ی کوچک بعنوان فضای برخورد جعبه ی بزرگ می باشد .
&nbsp;
دستور DELETE OBJECT COLLISION BOX
با این دستور می توان فضای برخورد شیء سه بعدی را حذف کرد . مانند مثال زیر :
&nbsp;
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
&nbsp;
تابع OBJECT COLLISION
این تابع به بررسی برخورد همراه با فررفتگی دو شیء سه بعدی می پردازد . اگر دو شیء با هم برخورد همراه با فرو رفتگی داشته باشند ، تابع مقدار یک و اگر برخورد همراه با فرورفتگی در هم نداشته باشند ، عدد صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
&nbsp; &nbsp;&quot;If Object Collision(16,20)=1 Then Text 10,10,&quot;Collision
&nbsp; &nbsp;Sync
Next MyAngle
Loop
&nbsp;
با اجرای این مثال زمانی که کره با جعبه برخورد همراه با فرورفتگی داشته باشد ، تابع مقدار یک را برمی گرداند و عبارت Collision چاپ خواهد شد .
&nbsp;
تابع OBJECT HIT
این تابع تنها به بررسی برخورد دو شیء سه بعدی با یکدیگر خواهد پرداخت . اگر دو شیء با هم برخورد داشته باشند ، تابع مقدار یک و اگر برخورد نداشته باشند ، عدد صفر برگردانده می شود . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
&nbsp; &nbsp;&quot;If Object HIT(16,20)=1 Then Text 10,10,&quot;Hit
&nbsp; &nbsp;Sync
Next MyAngle
Loop
&nbsp;
با اجرای این مثال زمانی که کره با جعبه برخورد می کند ، تابع مقدار یک را برمی گرداند و عبارت Hit چاپ خواهد شد .
&nbsp;
دستور SET OBJECT COLLISION OFF و دستور SET OBJECT COLLISION ON
دستور SET OBJECT COLLISION OFF فضای برخورد شیء سه بعدی را غیرفعال 
و دستور SET OBJECT COLLISION ON فضای برخورد شیء سه بعدی را دوباره فعال می کند . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
&nbsp; &nbsp;&quot;If Object Collision(16,20)=1 Then Text 10,10,&quot;Collision
&nbsp; &nbsp;&quot;If Inkey$()=&quot;F&quot; Or Inkey$()=&quot;f
&nbsp; &nbsp;Set Object Collision Off 20
EndIf
&nbsp; &nbsp;&quot;If Inkey$()=&quot;N&quot; Or Inkey$()=&quot;n
&nbsp; &nbsp;Set Object Collision On 20
EndIf
&nbsp; &nbsp;Sync
Next MyAngle
Loop
&nbsp;
با اجرای این مثال با زدن دکمه ی F فضای برخورد کره غیرفعال شده و عبارت Collision چاپ نخواهد شد و اگر دکمه ی N را بزنیم فضای برخورد شیء کره فعال شده و موقع برخورد کره با جعبه ، عبارت Collision چاپ خواهد شد .
&nbsp;
تابع GET OBJECT COLLISION X و تابع GET OBJECT COLLISION Y و
تابع GET OBJECT COLLISION Z
تابع ()GET OBJECT COLLISION X مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور X ها و تابع ()GET OBJECT COLLISION Y مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Y ها &nbsp;و تابع ()GET OBJECT COLLISION Z مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Z ها را برمی گرداند . یعنی هر بار این توابع خوانده شود ، مقدار حرکتی که شیء ( سه بعدی ) با برخورد با شیء دیگر داشته را برمی گرداند . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Position Object 1 , Sin(WrapValue(MyAngle#))*30,0,0
&nbsp; &nbsp;If Object Collision(1,200)=1
&nbsp; &nbsp;&quot;Text 10,10,&quot;Collision Red Sphere
&nbsp; &nbsp;(()Text 10,30,&quot;GET OBJECT COLLISION X=&quot;+Str$(GET OBJECT COLLISION X
&nbsp; &nbsp;(()Text 10,50,&quot;GET OBJECT COLLISION Y=&quot;+Str$(GET OBJECT COLLISION Y
&nbsp; &nbsp;(()Text 10,70,&quot;GET OBJECT COLLISION Z=&quot;+Str$(GET OBJECT COLLISION Z
&nbsp; &nbsp;EndIf
&nbsp; &nbsp;Position Object 2 , 0,Sin(WrapValue(MyAngle#+45))*30,0
&nbsp; &nbsp;If Object Collision(2,200)=1
&quot;Text 210,10,&quot;Collision Green Sphere
&nbsp; &nbsp;(()Text 210,30,&quot;GET OBJECT COLLISION X=&quot;+Str$(GET OBJECT COLLISION X
&nbsp; &nbsp;(()Text 210,50,&quot;GET OBJECT COLLISION Y=&quot;+Str$(GET OBJECT COLLISION Y
&nbsp; &nbsp;(()Text 210,70,&quot;GET OBJECT COLLISION Z=&quot;+Str$(GET OBJECT COLLISION Z
&nbsp; &nbsp;EndIf
&nbsp; &nbsp;Position Object 3 , 0,0,Sin(WrapValue(MyAngle#+90))*30
&nbsp; &nbsp;If Object Collision(3,200)=1
&quot;Text 410,10,&quot;Collision Blue Sphere
&nbsp; &nbsp;(()Text 410,30,&quot;GET OBJECT COLLISION X=&quot;+Str$(GET OBJECT COLLISION X
&nbsp; &nbsp;(()Text 410,50,&quot;GET OBJECT COLLISION Y=&quot;+Str$(GET OBJECT COLLISION Y
&nbsp; &nbsp;(()Text 410,70,&quot;GET OBJECT COLLISION Z=&quot;+Str$(GET OBJECT COLLISION Z
&nbsp; &nbsp;EndIf
&nbsp; &nbsp;Sync
Next MyAngle
Loop
&nbsp;
نکته : با توجه به مثال بالا برای استفاده از این توابع ، باید حتما برای هر برخورد یک IF تعریف کنیم ، تا مقدار برگشتی تابع مطابق با شرط مورد نظرمان باشد .
&nbsp;
دستور SET OBJECT COLLISION TO SPHERES
این دستور فضای برخوردی به شکل کره در اطراف شیء ایجاد می کند . مانند دستورالعمل زیر :
&nbsp;
SET OBJECT COLLISION TO SPHERES ObjectNumber
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Box 10,100,10,100
SET OBJECT COLLISION TO SPHERES 10
Do
Loop
&nbsp;
دستور AUTOMATIC OBJECT COLLISION
این دستور فضایی با شعاع مشخص به دور شیء سه بعدی ایجاد می کند . مانند دستورالعمل زیر :
&nbsp;
AUTOMATIC OBJECT COLLISION ObjectNumber,Radius,Response
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Radius شعاع برخورد دور شیء را قرار می دهیم . اگر Response صفر باشد ، وقتی شیء به مانع متحرک برخورد کرد ، خودش به کنار کشیده میشود و اگر به مانع ثابت برخورد کرد ، نمی تواند از آن مانع عبور کند ( موانعی مثل دیوار یا تانک ) ، یا آن را کنار بزند . ولی اگر Response برابر یک باشد ، زمانی که به مانع برخورد می کند ، یا از داخل آن عبور می کند و اگر مانع متحرک باشد ( خود مانع از دستور بالا استفاده کرده باشد ) ، مانع را کنار خواهد زد . مانند مثال زیر :
&nbsp;
imgAsfalt = 1
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,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
&nbsp; &nbsp;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
&nbsp;
در این مثال زمانی که مکعب قرمز به موانع متحرک و یا ثابت برخورد می کند ( با کنترل ما توسط دکمه های جهت ) ، خود مکعب قرمز به کنار می رود . چون طبق دستورالعمل Response برابر صفر است . ولی در مثال زیر Response برابر یک شده ؛ خواهد دید موانع مقاومتی در برابر مکعب قرمز نخواهند داشت .
&nbsp;
&nbsp;imgAsfalt = 1
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,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
&nbsp; &nbsp;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
]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات سه بعدی ( BASIC3D Commands ) قسمت چهارم</title>
<link>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-چهارم</link>
<guid>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-چهارم</guid>

<description><![CDATA[
&nbsp;دستور TURN CAMERA LEFT و دستور TURN CAMERA RIGHT
دستور TURN CAMERA LEFT دوربین پیش فرض را حول محور Y خود ، به سمت چپ و دستورTURN CAMERA RIGHT دوربین پیش فرض را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
&nbsp;
TURN CAMERA LEFT AngleValue
TURN CAMERA RIGHT AngleValue
&nbsp;
&nbsp;
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If LeftKey()=1 Then Turn Camera Left 1
&nbsp; &nbsp;If RightKey()=1 Then Turn Camera Right 1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست گردش خواهد کرد .
&nbsp;
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور Y خود به سمت چپ و راست ، بچرخانیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If LeftKey()=1 Then Turn Camera Left 2,1
&nbsp; &nbsp;If RightKey()=1 Then Turn Camera Right 2,1
Loop
&nbsp;
دستور TURN OBJECT LEFT و دستور TURN OBJECT RIGHT
دستور TURN OBJECT LEFT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت چپ 
و دستور TURN OBJECT RIGHT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
&nbsp;
TURN OBJECT LEFT ObjectNumber,Value
TURN OBJECT RIGHT ObjectNumber,Value
&nbsp;
طبق این دستورالعمل ها به جای ObjectNumber نام شیء و به جای Value مقدار چرخش شیء را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If LeftKey()=1 Then Turn Object Left 20,1
&nbsp; &nbsp;If RightKey()=1 Then Turn Object Right 20,1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، جعبه به چپ و اگر دکمه ی جهت راست را فشار دهیم ، جعبه به راست گردش خواهد کرد .
&nbsp;
دستور PITCH CAMERA UP و دستور PITCH CAMERA Down
دستور PITCH CAMERA UP دوربین پیش فرض را حول محور X خود ، به سمت بالا و دستورPITCH CAMERA DOWN دوربین پیش فرض را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
&nbsp;
PITCH CAMERA UP AngleValue
PITCH CAMERA DOWN AngleValue
&nbsp;
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If UpKey()=1 Then Pitch Camera Up 1
&nbsp; &nbsp;If DownKey()=1 Then Pitch Camera Down 1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، دوربین پیش فرض به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، دوربین پیش فرض به پائین گردش خواهد کرد .
&nbsp;
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If UpKey()=1 Then Pitch Camera Up 2,1
&nbsp; &nbsp;If DownKey()=1 Then Pitch Camera Down 2,1
Loop
&nbsp;
دستور PITCH OBJECT UP و دستور PITCH OBJECT DOWN
دستور PITCH OBJECT UP شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت بالا و دستورPITCH OBJECT DOWN شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
&nbsp;
PITCH OBJECT UP Value
PITCH OBJECT DOWN Value
&nbsp;
&nbsp;
طبق این دستورالعمل ها به جای Value مقدار چرخش شیء ، را با یک عدد مشخص می کنیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If UpKey()=1 Then Pitch Object Up 20,1
&nbsp; &nbsp;If DownKey()=1 Then Pitch Object Down 20,1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، شیء به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، شیء به پائین گردش خواهد کرد .
&nbsp;
دستور ROLL CAMERA LEFT و دستور ROLL CAMERA RIGHT
دستور ROLL CAMERA LEFT دوربین پیش فرض را حول محور Z خود ، به سمت چپ و دستورROLL CAMERA RIGHT دوربین پیش فرض را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
&nbsp;
ROOL CAMERA LEFT AngleValue
ROOL CAMERA RIGHT AngleValue
&nbsp;
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If LeftKey()=1 Then Roll Camera Left 1
&nbsp; &nbsp;If RightKey()=1 Then Roll Camera Right 1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست چرخش خواهد کرد .
&nbsp;
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If LeftKey()=1 Then Roll Camera Left 2,1
&nbsp; &nbsp;If RightKey()=1 Then Roll Camera Right 2,1
Loop
&nbsp;
دستور ROLL OBJECT LEFT و دستور ROLL OBJECT RIGHT
دستور ROLL OBJECT LEFT شیء را حول محور Z خود ، به سمت چپ و دستورROLL OBJECT RIGHT شیء را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
&nbsp;
ROOL OBJECT LEFT ObjectNumber,Value
ROOL OBJECT RIGHT ObjectNumber,Value
&nbsp;
طبق این دستورالعمل ها به جای ObjectNumber شماره ی شیء سه بعدی و به جای Value مقدار چرخش شیء ، را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If LeftKey()=1 Then Roll Object Left 20,1
&nbsp; &nbsp;If RightKey()=1 Then Roll Object Right 20,1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، شیء به چپ و اگر دکمه ی جهت راست را فشار دهیم ، شیء به راست چرخش خواهد کرد .
&nbsp;
دستور CONTROL CAMERA USING ARROWKEYS
این دستور کنترل حرکت دوربین را به دکمه های جهت بالا و پایین و چپ و راست می سپارد . مانند دستورالعمل زیر :
&nbsp;
CONTROL CAMERA USING ARROWKEYS CameraNumber,MoveSpeed,TurnSpeed
&nbsp;
طبق این دستورالعمل به جای CameraNumber شماره ی دوربین و به جای MoveSpeed سرعت حرکت دوربین به جلو و عقب و به جای TurnSpeed سرعت چرخش دوربین به راست و چپ را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
اگر بخواهیم دوربین پیش فرض را با دستورالعمل بالا تحت کنترل درآوریم ، به جای CameraNumber عدد صفر را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
دستور SET CAMERA RANGE
با این دستور می توانیم شعاعی را که دوربین پیش فرض تا آن مسافت ، اشیاء را نمایش می دهد ، از نو تنظیم کنیم . مانند دستورالعمل زیر :
&nbsp;
SET CAMERA RANGE NearValue,FarValue
&nbsp;
طبق این دستورالعمل ، دوربین پیش فرض ، اشیاء موجود بین فاصله ی NearValue تا FarValue از خود را نشان خواهد داد . مانند مثال زیر :
&nbsp;
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 &gt; 150 Then FarValue = 150
If FarValue &lt; 20 Then FarValue = 20
(Text 10,10,&quot;Far = &quot;+Str$(FarValue
SET CAMERA RANGE NearValue,FarValue
Loop
&nbsp;
با اجرای این مثال با زدن دکمه های جهت بالا و پائین ، مسافت نمایش داده شده در دوربین پیش فرض تغییر خواهد کرد .
&nbsp;
با اضافه کردن شماره ی دوربین جدید می توانیم مسافت نمایش داده شده توسط دوربین جدید را نیز از نو تنظیم کنیم . مانند مثال زیر :
&nbsp;
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 &gt; 150 Then FarValue = 150
If FarValue &lt; 20 Then FarValue = 20
(Text 10,10,&quot;Far = &quot;+Str$(FarValue
SET CAMERA RANGE 2,NearValue,FarValue
Loop
&nbsp;
دستور SET CAMERA TO FOLLOW
با این دستور ، دوربین پیش فرض بطور خودکار به دنبال نقطه ی مورد نظر خواهد رفت . همانند دستورالعمل زیر :
&nbsp;
SET CAMERA TO FOLLOW X,Y,Z,Angle,Distance,Height,Smooth,Collision
&nbsp;
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ی مورد نظر و به جای Angle زاویه ی دوربین نسبت به نقطه حول محور Y آن نقطه و به جای Distance فاصله ی دوربین تا نقطه و به جای Height ارتفاع دوربین تا نقطه و به جای Smooth شدت حرکت دوربین به سمت نقطه و به جای Collision رفتار دوربین نسبت به برخورد با اجسام سخت را قرار می دهیم ( 0 یا 1 ) . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,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
&nbsp; &nbsp;move object 2,-1
EndIf
if leftkey()=1
&nbsp; &nbsp;(yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
(yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
&nbsp;
با اجرای این مثال شیء جعبه توسط دکمه های جهت بالا ، جهت پائین ، جهت چپ و جهت راست حرکت خواهد کرد . و دوربین پیش فرض به دنبال شیء حرکت می کند . با این کار نیازی به تعیین موقعیت مکانی دوربین نمی باشد . چون این دستور بطور خودکار این کار را انجام می دهد .
&nbsp;
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را هم به دنبال شیء مورد نظر حرکت دهیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,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
&nbsp; &nbsp;(yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
&nbsp; &nbsp;(yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
&nbsp;
دستور GHOST OBJECT ON
این دستور شیء سه بعدی را نیمه شفاف می کند . مانند دستورالعمل زیر :
&nbsp;
GHOST OBJECT ON ObjectNumber
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی مورد نظر را قرار می دهیم . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,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
&nbsp;
دستور GHOST OBJECT OFF
اگر با استفاده از دستور قبل ( GHOST OBJECT ON ) شیء سه بعدی شفاف شده باشد ، با این دستور شیء سه بعدی به حالت اولش برمی گردد . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp&quot;,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$()=&quot;f&quot; Or Inkey$()=&quot;F&quot; Then Ghost Object Off 15
If Inkey$()=&quot;n&quot; Or Inkey$()=&quot;N&quot; Then Ghost Object On 15
Next MyAngle
Loop
&nbsp;
با اجرای این مثال با زدن دکمه ی N شیء به حالت نیمه شفاف و با زدن دکمه ی F شیء به حالت عادی برمی گردد.
&nbsp;]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات سه بعدی ( BASIC3D Commands ) قسمت سوم</title>
<link>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-سوم</link>
<guid>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-سوم</guid>

<description><![CDATA[
2- اشیاء پیچیده :
اشیاء پیچده به اشیائی گفته می شود که از چندین شیء مختلف تشکیل شده اند و هر قسمت آن رنگ و بافت خاصی را دارد . و هر قسمت می تواند نسبت به قسمت دیگر بصورت لولایی حرکت داشته باشد . مثلا هلیکوپتر ، ماشین ، آدم ، درخت ، کوه و ... دارای اجزاء مختلفی هستند که برای مثال آرنج یک انسان می تواند نسبت به بازویش چرخش داشته باشد . اشیاء پیچیده در دارک بیسیک توسط نرم افزار های مختلفی ایجاد می شوند و بصورت فایل نگهداری می شوند و برای استفاده باید آنها را از روی Hard صدا کنیم . از مهم ترین فرمت های اشیاء در دارک بیسیک می توان به DBO و X اشاره کرد . اشیاء با فرمت DBO جزء اشیاء استاندارد نرم افزار DarkBASIC محسوب می شوند . و به راحتی و با سرعت زیاد می توان آنها را از روی Hard صدا زد ( از روی فایل خواند ) . شیء بافرمت X نیز استاندارد موتور Direct X می باشد . اشیاء پیچیده به غیر از شکل و رنگ توانایی حرکت را هم دارند ؛ یعنی فریم هایی در این اشیاء وجود دارد که می توانیم با فرامینی مختف شیء را به حرکت درآوریم . بسته هایی به نام DarkMatter هم توسط این شرکت در سایت WWW.DarkBasicPro.Com معرفی شده که فرمتشان DBO و بسته هایی نیز در سایت وابسته به همین شرکت یعنی در سایت WWW.FpsCreator.Com شامل اشیاء سه بعدی با فرمت X قابل تهیه می باشد .
&nbsp;
دستور LOAD OBJECT
با این دستور می توانیم یک شیء را از روی فایل صدا بزنیم . مانند مثال زیر :
&nbsp;
LOAD OBJECT Filename,ObjectNumber
&nbsp;
طبق این دستورالعمل به جای Filename مسیر و نام فایل و به جای ObjectNumber عددی طبیعی برای نام شیء قرار می دهیم تا بر روی شیء کنترل داشته باشیم . مانند مثال زیر :
&nbsp;
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
wait Key
&nbsp;
در این مثال شیء ای با شکل آدمک نشان داده می شود . ولی چون شیء بصورت خوابیده طراحی شده از دستور XRotate استفاده می کنیم . مانند مثال زیر :
&nbsp;
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
&nbsp;
نکته : تمامی فرامینی که به اشیاء ساده ی سه بعدی نسبت داده می شدند ، بر روی اشیاء پیچیده ی سه بعدی هم کاربرد دارد .
&nbsp;
نکته : هر فایل شیء سه بعدی با فرمت X در کنار خود فایلی دارد که بافت و رنگ آن شیء را مشخص می کند که باید همیشه در پوشه ای که شیء در آن است ، حضور داشته باشد .
&nbsp;
نکته : اگر شیء در پوشه ای باشد که فایل اجرایی در آن پوشه اجرا می شود . میتوانیم به جای کد بالا بصورت زیر عمل کنیم .
&nbsp;
&nbsp;
Load Object "ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
&nbsp;
در این مثال فرض بر این است که فایل شیء سه بعدی ما همراه با فایل گرافیکی اش در پوشه ی است که فایل اجرایی در آن وجود دارد و هم اکنون در حال اجراست .
&nbsp;
دستور PLAY OBJECT
با این دستور می توانیم اشیاء پیچیده ی سه بعدی را که در آن فریم هایی برای حرکت قرار داده شده به حرکت در آوریم . مانند دستورالعمل زیر :
&nbsp;
PLAY OBJECT ObjectNumber
&nbsp;
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
دستور SET OBJECT SPEED
با این دستور سرعت حرکت شیء پیچیده را تنظیم می کنیم . مانند دستورالعمل زیر :
&nbsp;
SET OBJECT SPEED ObjectNumber,Speed
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء پیچیده ی سه بعدی و به جای Speed سرعت حرکت را بصورت یک عدد قرار می دهیم . ولی هر شیئی با سرعت خاص خود طراحی شده که باید آن را توسط Speed تنظیم کنیم . البته تنظیم سرعت شیء یا Speed آن شیء نسبت به سرعت دستور Sync باید توسط ما تنظیم شود . مانند مثال زیر :
&nbsp;
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
&nbsp;
بدلیل اینکه شیء آدمک ما با سرعت بسیار کمی طراحی شده به خاطر همین سرعت معمولی آن را 1200 قرار دادیم . با اجرای این مثال تمامی فرم های شیء آدمک نشان داده شدند . یعنی در شیء تعدادی از فریم ها مثلا فریم 1 تا 6000 حرکت راه رفتن و 6000 تا 12000 پریدن و ... می باشد .
&nbsp;
تابع TOTAL OBJECT FRAMES
این تابع تعداد کل فریم های شیء را برمی گرداند . مانند دستورالعمل زیر :
&nbsp;
(varInteger = TOTAL OBJECT FRAMES(ObjectNumber
&nbsp;
این تابع تعداد کل فریم های شیء شماره ی ObjectNumber را در متغیر varInteger ذخیره می کند . مانند مثال زیر :
&nbsp;
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
&nbsp;
در این مثال تعداد کل فریم های شیء شماره ی 6 توسط تابع ()Total Object Frames در متغیر #HeroFrame ذخیره و بعد چاپ می شود .
&nbsp;
با اضافه کردن شماره ی شروع فریم به دستور PLAY OBJECT می توانیم حرکت شیء پیچیده را از همان فریم شروع کنیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
در این مثال حرکت شیء از فریم 6000 شروع شد . با اضافه کردن شماره ی شروع و پایان به دستور PLAY OBJECT می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی حرکت دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 حرکت می کند .
&nbsp;
دستور LOOP OBJECT
این دستور همانند دستور PLAY OBJECT می باشد . با این تفاوت که حرکت شیء از فریم شروع تا فریم پایانی دائما ادامه خواهد داشت . مانند دستورالعمل زیر :
&nbsp;
LOOP OBJECT ObjectNumber
&nbsp;
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
با اضافه کردن شماره ی شروع فریم به دستور LOOP OBJECT می توانیم حرکت شیء پیچیده را از آن فریم شروع کنیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
در این مثال حرکت شیء از فریم 6000 شروع و تا فریم آخر دائما در حال حرکت خواهد بود . با اضافه کردن شماره ی شروع و پایان به دستور Loop Object می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی دائما حرکت دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 دائما حرکت خواهد داشت .
 
دستور STOP OBJECT
این دستور باعث توقف حرکت شیء سه بعدی می شود . مانند مثال زیر :
&nbsp;
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
&nbsp;
با اجرای این مثال با زدن دکمه ی Enter حرکت شیء سه بعدی متوقف خواهد شد .
 
تابع OBJECT SPEED
این تابع سرعت حرکت شیء پیچیده ی سه بعدی را که آخرین بار تنظیم شده باشد ، حساب می کند . مانند مثال زیر :
&nbsp;
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
&nbsp;
تابع OBJECT FRAME
این تابع شماره ی فریم جاری حرکت شیء پیچیده را برمی گرداند . یعنی مشخص می کند که هم اکنون حرکت شیء در چه فریمی می باشد . مانند مثال زیر :
&nbsp;
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
&nbsp;
دستور SET OBJECT FRAME
با این دستور شماره ی شروع حرکت شیء را از نو تنظیم می کنیم . مانند مثال زیر :
&nbsp;
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
&nbsp;
تابع OBJECT EXIST
این تابع بررسی می کند که آیا شیء سه بعدی ( ساده یا پیچیده ) با شماره مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
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
&nbsp;
دستور HIDE OBJECT
این دستور باعث نامرعی شدن شیء سه بعدی ( ساده یا پیچیده ) می شود . مانند مثال زیر :
&nbsp;
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait Key
&nbsp;
دستور SHOW OBJECT
اگر شیئ سه بعدی ( ساده یا پیچیده ) توسط دستور قبلی ( Hide Object ) نامرعی شده باشد ، می توانیم توسط دستور Show Object دوباره آن را آشکار کنیم . مانند مثال زیر .
&nbsp;
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait 2000
Show Object 1
Wait Key
&nbsp;
تابع OBJECT VISIBLE
این تابع بررسی می کند که آیا شیء سه بعدی مورد نظر ( ساده یا پیچیده ) مرعی است یا نامرعی . اگر مرعی بود ، عدد یک و اگر نامرعی بود ، عدد صفر توسط تابع برمی گردد . مانند مثال زیر :
&nbsp;
Sync On:Sync Rate 30
Make Object Box 1,10,20,30
Do
&nbsp; &nbsp;Sync
&nbsp; &nbsp;If InKey$()="h" Or InKey$()="H" Then Hide Object 1
&nbsp; &nbsp;If InKey$()="S" Or InKey$()="s" Then Show Object 1
&nbsp; &nbsp;If Object Visible(1)=1
&nbsp; &nbsp; &nbsp; "Text 10,10,"Object Is Show
&nbsp; &nbsp;Else
&nbsp; &nbsp; &nbsp; "Text 10,10,"Object Is Hide
&nbsp; &nbsp;EndIf
Loop
&nbsp;
با اجرای این مثال با زدن دکمه ی H جعبه نامرعی و با زدن دکمه ی S جعبه مرعی می شود . و تابع ()Object Visible مرعی یا نامرعی بودن جعبه را بررسی و نتیجه را توسط دستور Text چاپ می کند .
&nbsp;
دستور FIX OBJECT PIVOT
با این دستور ، شیء ثابت و محور های X و Y و Z شیء مورد نظر ، موازی محور های X و Y و Z مختصات فضای سه بعدی خواهند شد . یعنی محور X شیء ، موازی محور X فضای سه بعدی و محور Y شیء ، موازی محور Y فضای سه بعدی و محور Z شیء ، موازی محور Z فضای سه بعدی خواهد شد و نسب به شیء ثابت هم می ماند . مانند مثال زیر :
&nbsp;
Make Object Box 1,10,10,10
ZRotate Object 1,45
Fix Object Pivot 1
Do
&nbsp; &nbsp; &nbsp; YRotate Object 1,Object Angle Y(1)+0.1
Loop
Wait Key
&nbsp;
دستور MOVE OBJECT
این دستور شیء را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود شیء ) حرکت می دهد . مانند دستورالعمل زیر :
&nbsp;
MOVE OBJECT ObjectNumber,Speed
&nbsp;
طبق این دستورالعمل به جای ObjectNumber مقدار حرکت شیء سه بعدی ( ساده یا پیچیده ) و به جای Speed سرعت حرکت شیء را توسط یک عدد مشخص می کنیم . یعنی اگر Speed بزرگتر از صفر باشد ، شیء به همان مقدار به جلو و اگر Speed کوچک تر از صفر باشد ، شیء به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If UpKey()=1 Then Move Object 6,10
&nbsp; &nbsp;If DownKey()=1 Then Move Object 6,-10
&nbsp; &nbsp;Sync
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . شیء شماره ی 6 به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم ، شیء شماره ی 6 به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات سه بعدی ( BASIC3D Commands ) قسمت دوم</title>
<link>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-دوم</link>
<guid>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-دوم</guid>

<description><![CDATA[
&nbsp;دوربین&nbsp;: با اجرای مثال های بالا ، راجع به ایجاد اشیاء ساده &nbsp;و پیچیده ی سه بعدی ، اشیاء توسط دوربین پیش فرض DarkBasic نمایش داده می شدند . یعنی ما از دریچه ی دوربین پیش فرض به اشیاء نگاه می کردیم . می توانیم به غیر از دوربین پیش فرض ، خود نیز دوربین های دیگری هم ایجاد کنیم و از دید هر یک از آنها به صحنه نگاه کنیم .

&nbsp;
دستور&nbsp;MAKE CAMERA
با این دستور می توانیم دوربین جدید ایجاد کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE CAMERA&nbsp;CameraNumber
&nbsp;
طبق این دستورالعمل به جای CameraNumber عددی طبیعی در محدوده ی مثبت متغیر Integer قرار می دهیم . این عدد به معنای نام دوربین می باشد . توسط همین عدد در خطوط بعدی برنامه بر روی دوربین کنترل خواهیم باشیم . مانند مثال زیر :
&nbsp;
Make Camera&nbsp;1
&nbsp;
در این مثال دوربین جدیدی با شماره ی 1 ایجاد شد .
&nbsp;
دستور&nbsp;DELETE CAMERA
با این دستور دوربین جدید ایجاد شده را حذف می کنیم . مانند مثال زیر :
&nbsp;
Make Camera 1
Make Camera 2
Delete Camera&nbsp;1
Wait Key
&nbsp;
تابع&nbsp;CAMERA EXIST
این تابع بررسی می کند که آیا دوربین مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
Make Camera 1
Make Camera 2
Delete Camera 1
Do
cls
&quot;If Camera Exist(1) Then Print &quot;Camera 1 Exist&quot; Else Print &quot;Camera 1 Not Exist
&quot;If Camera Exist(2) Then Print &quot;Camera 2 Exist&quot; Else Print &quot;Camera 2 Not Exist
Loop
&nbsp;
دستور&nbsp;Set Current Camera
با این دستور دوربین مورد نظرمان را فعال می کنیم . مانند مثال زیر :
&nbsp;
Make Camera 13
Make Camera 7
Make Camera 6
Set Current Camera&nbsp;7
&nbsp;
در این مثال سه دوربین با شماره های 13 و 7 و 6 ایجاد شدند و در آخر از بین این سه دوربین ، دوربین شماره ی 7 فعال شد . یعنی با اجرای دستور Set Current Camera ، صحنه ( تمام اشیاء ) از دید دوربین شماره ی 7 نشان داده خواهد شد .
&nbsp;
دستور&nbsp;POSITION CAMERA
با این دستور موقعیت مکانی دوربین پیش فرض را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
&nbsp;
POSITION CAMERA&nbsp;X,Y,Z
&nbsp;
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید دوربین پیش فرض را در فضای سه بعدی ، قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Box 5,10,10,10
Wait 2000
Position Camera&nbsp;0,10,-20
Wait Key
&nbsp;
با اجرای این مثال بعد از 2 ثانیه دوربین پیش فرض به موقعت مکانی ( مختصات 20-Z= &nbsp;و 10Y= و 0X= ) پرش خواهد کرد ( تغییر مکان خواهد داد ) . و جسم ، سر جایش بی حرکت می ماند .
&nbsp;
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل ، می توانیم موقعت مکانی دوربین جدید را نیز در فضای سه بعدی مشخص کنیم . مانند مثال زیر :
&nbsp;
Make Object Box 15,10,10,10
Make Camera 5
Position Camera&nbsp;5,0,10,-20
Set Current Camera 5
Wait Key
&nbsp;
در این مثال دوربین جدیدی با شماره ی 5 ایجاد شد و در خط سوم موقعت مکانی جدید آن در فضای سه بعدی مشخص شد و در خط &nbsp;چهارم ، توسط دستور Set Current Camera دوربین جدید که شماره اش 5 بود فعال شد و صحنه هم اکنون از دید دوربین جدید ( دوربین شماره 5 ) نشان داده می شود .
&nbsp;
تابع&nbsp;CAMERA POSITION X و&nbsp;تابع&nbsp;CAMERA POSITION Y و&nbsp;تابع&nbsp;CAMERA POSITION Z
تابع ()CAMERA POSITION X موقعیت X دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور&nbsp;X ها ) و تابع ()CAMERA POSITION Y موقعیت Y دوربین پیش فرض ( فاصله ی دوربین پیش&nbsp;فرض تا محور Y ها ) و تابع ()CAMERA POSITION Z موقعیت Z دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
&nbsp;
Position Camera 0,10,-20
()Print&nbsp;Camera Position X
()Print&nbsp;Camera Position Y
()Print&nbsp;Camera Position Z
Wait Key
&nbsp;
تا قرار دادن شماره ی دوربین های جدید بعنوان ورودی در سه تابع بالا ، می توانیم موقعت X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
&nbsp;
Make Object Box 15,10,10,10
Make Camera 5 : Position Camera 5,50,100,-20
Do
(X =&nbsp;Camera Position X(5
(Y =&nbsp;Camera Position Y(5
(Z =&nbsp;Camera Position Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
&nbsp;
دستور&nbsp;POSITION OBJECT
با این دستور موقعیت مکانی اشیاء سه بعدی را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
&nbsp;
POSITION OBJECT&nbsp;ObjectNumber,X,Y,Z
&nbsp;
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Box 5,10,10,10
Make Object Sphere 6,15
Wait 2000
Position Object&nbsp;6,10,20,10
Wait Key
&nbsp;
با اجرای این مثال ابتدا یک جعبه با شماره ی 5 و یک کره با شماره ی 6 ایجاد شدند و بعد از&nbsp;2&nbsp;ثانیه شیء کره با شماره ی 6 هر جا که بود هم اکنون به موقعت مکانی ( مختصات 10=Z&nbsp;و 20=Y و 10=X ) پرش کرد ( تغییر مکان داد ) .
&nbsp;
تابع&nbsp;Object POSITION X و&nbsp;تابع&nbsp;Object POSITION Y و&nbsp;تابع&nbsp;Object POSITION Z
تابع ()Object POSITION X موقعیت X شیء ( فاصله ی شیء تا محور X ها )
و تابع ()Object POSITION Y موقعیت Y شیء ( فاصله ی شیء تا محور Y ها )
و تابع ()Object POSITION Z موقعیت Z شیء ( فاصله ی شیء تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
&nbsp;
Make Object Cylinder 10,20
Position Object 10,-45,0,29
Do
(X =&nbsp;Object Position X(10
(Y =&nbsp;Object Position Y(10
(Z =&nbsp;Object Position Z(10
(Text 10,10,Str$(X
(Text 10,25,Str$(Y
(Text 10,40,Str$(Z
Loop
&nbsp;
دستور&nbsp;POINT CAMERA
با این دستور دوربین پیش فرض هر کجا که باشد ، از همان جا به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
&nbsp;
POINT CAMERA&nbsp;X,Y,Z
&nbsp;
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای ( منظور از نقطه ، مکانی در فضا می باشد ) را در فضای سه بعدی مشخص می کنیم ، تا دوربین پیش فرض به آن مکان نگاه کند . مانند مثال زیر :
&nbsp;
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&nbsp;Object Position X(15),Object Position Y(15),Object Position Z(15
&nbsp; &nbsp; &nbsp; Sync
Next MyAngle
Loop
&nbsp;
با اجرای این مثال ، کره دائما در حال حرکت است و دوربین پیش فرض هم دائما به آن نگاه می کند . با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدیدمان را به این کره خیره کنیم . مانند مثال زیر :
&nbsp;
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&nbsp;7,Object Position X(15),Object Position Y(15), Object Position Z(15
&nbsp; &nbsp; &nbsp; Sync
Next MyAngle
Loop
دستور&nbsp;POINT OBJECT
با این دستور شیء مورد نظر هر کجا که باشد ، به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
&nbsp;
POINT Object&nbsp;objectnumber,X,Y,Z
&nbsp;
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای را در فضای سه بعدی مشخص می کنیم تا شیء مورد نظر به آن نقطه نگاه کند ( یعنی محور Z شیء ، نقطه را هدف قرار دهد ) . مانند مثال زیر :
&nbsp;
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&nbsp;20,Object Position X(15),Object Position Y(15), Object Position Z(15
&nbsp; &nbsp; &nbsp; Sync
Next MyAngle
Loop
&nbsp;
با اجرای این مثال شیء جعبه به کره ( مختصات X و Y و Z کره ) خیره خواهد شد .
&nbsp;
دستور&nbsp;XROTATE CAMERA
این دستور دوربین پیش فرض را حول محور X خود دوربین ، دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
&nbsp;
XROTATE CAMERA&nbsp;XAngle
&nbsp;
طبق این دستورالعمل به جای XAngle زاویه دوربین حول محور X خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
&nbsp;
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
&nbsp; &nbsp;Xrotate Camera&nbsp;Xangle
Sync
Next Xangle
Loop
&nbsp;
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور X خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Xrotate Camera&nbsp;17,Xangle
Sync
Next Xangle
Loop
&nbsp;
&nbsp;
دستور&nbsp;YROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Y خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
&nbsp;
YROTATE CAMERA&nbsp;YAngle
&nbsp;
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود دوربین را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
&nbsp;
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
&nbsp; &nbsp; &nbsp;&nbsp;Yrotate Camera&nbsp;Yangle
Sync
Next Yangle
Loop
&nbsp;
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Y خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Yrotate Camera&nbsp;1,Yangle
Sync
Next Yangle
Loop
&nbsp;
دستور&nbsp;ZROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Z خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
&nbsp;
ZROTATE CAMERA&nbsp;ZAngle
&nbsp;
طبق این دستورالعمل به جای ZAngle زاویه دوربین حول محور Z خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
&nbsp;
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
&nbsp; &nbsp;Zrotate Camera&nbsp;Zangle
Sync
Next Zangle
Loop
&nbsp;
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Z خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;Zrotate Camera&nbsp;11,Zangle
Sync
Next Zangle
Loop
&nbsp;
در این سه مثال جعبه ثابت بود و تنها دوربین در حال چرخش بود .
&nbsp;
دستور&nbsp;ROTATE CAMERA
اگر بخواهیم به جای استفاده از دستورات قبلی جهت چرخش دوربین حول محور X و Y و Z خود دوربین ، تنها با یک دستور ، دوربین پیش فرض را حول محور X ها و Y ها و Z همان دوربین می چرخانیم ، پس از دستورالعمل زیر استفاده می کنیم .
&nbsp;
ROTATE CAMERA&nbsp;Xangle,Yangle,ZAngle
&nbsp;
طبق این دستورالعمل به جای Xangle مقدار چرخش دوربین حول محور X همان دوربین ، به جای Yangle مقدار چرخش دوربین حول محور Y همان دوربین ، و به جای ZAngle ، مقدار چرخش دوربین حول محور Z همان دوربین پیش فرض را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object box 22,40,40,40
Wait 2000
Rotate Camera&nbsp;10,50,30
Wait Key
&nbsp;
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محورهای X و Y و Z همان دوربین جدید ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
&nbsp;
Make Camera 6 : Set Current Camera 6
Make Object box 22,40,40,40
Wait 2000
Rotate Camera&nbsp;6,10,50,30
Wait Key
&nbsp;
دستور&nbsp;XROTATE Object
این دستور شیء را حول محور X همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
&nbsp;
XROTATE OBJECT&nbsp;XAngle
&nbsp;
طبق این دستورالعمل به جای XAngle زاویه شیء حول محور X خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
&nbsp;
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
&nbsp; &nbsp;Xrotate Object&nbsp;20,Xangle
Sync
Next Xangle
Loop
&nbsp;
دستور&nbsp;YROTATE OBJECT
این دستور شیء را حول محور Y همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
&nbsp;
YROTATE OBJECT&nbsp;YAngle
&nbsp;
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
&nbsp;
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
&nbsp; &nbsp; &nbsp;&nbsp;Yrotate Object&nbsp;20,Yangle
Sync
Next Yangle
Loop
&nbsp;
دستور&nbsp;ZROTATE OBJECT
این دستور شیء را حول محور Z همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
&nbsp;
ZROTATE OBJECT&nbsp;ZAngle
&nbsp;
طبق این دستورالعمل به جای ZAngle زاویه شیء حول محور Z خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
&nbsp;
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
&nbsp; &nbsp;Zrotate Object&nbsp;20,Zangle
Sync
Next Zangle
Loop
&nbsp;
شکل های زیر به ترتیب از سمت چپ به راست ، چرخش دوربین و یا اشیاء سه بعدی را حول محور های X و Y و Z خودشان نشان می دهد .

&nbsp;

&nbsp;

دستور&nbsp;ROTATE OBJECT
اگر بخواهیم به جای استفاده از دستورات بالا ، تنها با یک دستور ، شیء را حول محور X و Y و Z همان شیء بچرخانیم ، از دستورالعمل زیر استفاده می کنیم .
&nbsp;
ROTATE OBJECT&nbsp;ObjectNumber,Xangle,Yangle,ZAngle
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Xangle مقدار چرخش شیء حول محور X خود شیء ، به جای Yangle مقدار چرخش شیء حول محور Y خود شیء ، و به جای ZAngle ، مقدار چرخش شیء حول محور Z همان شیء را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object box 22,40,40,40
Wait 2000
Rotate Object&nbsp;22,10,50,30
Wait Key
&nbsp;
تابع&nbsp;CAMERA ANGLE X و&nbsp;تابع&nbsp;CAMERA ANGLE Y و&nbsp;تابع&nbsp;CAMERA ANGLE Z
تابع ()CAMERA ANGLE X زاویه ی محور X دوربین پیش فرض و تابع ()CAMERA ANGLE Y زاویه ی&nbsp;محور Y دوربین پیش فرض و تابع ()CAMERA ANGLE Z زاویه ی محور Z دوربین پیش فرض را حول محورهای خود دوربین بدست می آورند . مانند مثال زیر :
&nbsp;
Position Camera 0,10,-20
Rotate Camera 20,30,-10
()Print&nbsp;CAMERA ANGLE X
()Print&nbsp;CAMERA ANGLE Y
()Print&nbsp;CAMERA ANGLE Z
Wait Key
&nbsp;
تا قرار دادن شماره ی دوربین جدید بعنوان ورودی سه تابع بالا ، می توانیم زاویه ی محور هی &nbsp;X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
&nbsp;
Make Object Box 15,10,10,10
Make Camera 5 : Rotate Camera 5,50,100,-20
Do
(X =&nbsp;CAMERA ANGLE X(5
(Y =&nbsp;CAMERA ANGLE Y(5
(Z =&nbsp;CAMERA ANGLE Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
&nbsp;
تابع&nbsp;OBJECT ANGLE X و&nbsp;تابع&nbsp;OBJECT ANGLE Y و&nbsp;تابع&nbsp;OBJECT ANGLE Z
تابع ()OBJECT ANGLE X زاویه ی محور X شیء و تابع ()OBJECT ANGLE Y زاویه ی محور Y شیء&nbsp;و تابع ()OBJECT ANGLE Z زاویه ی محور Z شیء را بدست می آورند . مانند مثال زیر :
&nbsp;
Make Object Box 15,10,10,10
Rotate Object 15,30,-10,0
(Print&nbsp;Object ANGLE X(15
(Print&nbsp;Object ANGLE Y(15
(Print&nbsp;Object ANGLE Z(15
Wait Key
&nbsp;
دستور&nbsp;COLOR OBJECT
با این دستور می توانیم شیء سه بعدی را با رنگ دلخواه رنگ آمیزی کنیم . مانند دستورالعمل زیر :
&nbsp;
COLOR OBJECT&nbsp;ObjectNumber,ColorValue
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی و به جای ColorValue شماره ی رنگ مورد نظرمان را قرار می دهیم . مانند مثال زیر :
&nbsp;
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&nbsp;1,Rgb(255,0,0
(Color Object&nbsp;2,Rgb(0,255,0
(Color Object&nbsp;3,Rgb(0,0,255
Wait Key
&nbsp;
دستور&nbsp;LOAD IMAGE
این دستور فایل تصویری با فرمت Bmp ، Jpg ، Tga ، Dds ، Dib و یا Png را بر روی حافظه فراخوانی ( از فایل تصویری موجود در Hard موقتا به Ram کپی می شود ) می کند . مانند دستورالعمل زیر :
&nbsp;
LOAD IMAGE&nbsp;Filename,ImageNumber
&nbsp;
طبق این دستورالعمل به جای Filename مسیر و نام فایل تصویری مورد نظر و به جای ImageNumber شماره ای به تصویر می دهیم تا توسط همین شماره بر روی تصویر کنترل داشته باشیم . مانند مثال زیر :
&nbsp;
Load Image&nbsp;&quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg&quot;,1
Wait Key
&nbsp;
دستور&nbsp;TEXTURE OBJECT
این دستور تصویر فرخوانی شده در حافظه ( توسط دستور Load Image ) را به شیء سه بعدی می چسباند . مانند دستورالعمل زیر :
&nbsp;
TEXTURE OBJECT&nbsp;ObjectNumber,ImageNumber
&nbsp;
طبق این دستورالعمل به جای ObjectNumber نام شیء و به جای ImageNumber شماره ی تصویر فراخوانی شده در حافظه ( توسط دستور Load Image ) را قرار می دهیم تا تصویر به شیء سه بعدی بچسبد . مانند مثال زیر :
&nbsp;
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg&quot;,3
TEXTURE OBJECT&nbsp;5,3
Wait Key
&nbsp;
با اجرای این مثال ابتدا یک شیء کره با شماره ی 5 در خط اول ایجاد و بعد تصویری با فرمت Jpg با شماره ی 3 به حافظه فراخوانی شد ( از فایل تصویری موجود در Hard موقتا به Ram کپی شد ) و توسط دستور TEXTURE OBJECT تصویر شماره ی 3 به شیء شماره ی 5 چسبید .
&nbsp;
تابع&nbsp;IMAGE EXIST
این تابع بررسی می کند که آیا تصویری با شماره ی مورد نظر ایجاد شده یا نه .
اگر تابع ()Image Exist عدد یک را برگرداند یعنی تصویر ایجاد شده ( یعنی بر روی حافظه فراخوانی شده ) و اگر عدد صفر برگردانده شود ، یعنی تصویری با این شماره ایجاد نشده . مانند مثال زیر :
&nbsp;
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg&quot;,3
&quot;.If&nbsp;Image Exist(3) Then Print &quot;Image 3 Exist
&quot;.If&nbsp;Image Exist(5) Then Print &quot;Image 5 Exist
Wait Key
&nbsp;
در این مثال تنها تصویری با شماره ی 3 ایجاد شده . پس تنها عبارت ( .Image 3 Exist ) چاپ خواهد شد .
&nbsp;
دستور&nbsp;DELETE IMAGE
این دستور تصویر ایجاد شده در حافظه ( توسط دستور Load Image ) را حذف می کند . مانند دستورالعمل زیر :
&nbsp;
DELETE IMAGE&nbsp;ImageNumber
&nbsp;
طبق این دستورالعمل به جای ImageNumber شماره تصویر ایجاد شده را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image &quot;C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg&quot;,3
TEXTURE OBJECT 5,3
Wait 2000
Delete Image&nbsp;3
Wait Key
&nbsp;
با اجرای این مثال پس از دو ثانیه تصویر حذف شده و تصویر چسبانده شده به شیء نیز ناپدید می گردد .
&nbsp;
دستور&nbsp;MOVE CAMERA
این دستور دوربین پیش فرض را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود دوربین ) حرکت می دهد . مانند دستورالعمل زیر :
&nbsp;
MOVE CAMERA&nbsp;DistanceValue
&nbsp;
طبق این دستورالعمل به جای DistanceValue مقدار حرکت دوربین را توسط یک عدد مشخص می کنیم . یعنی اگر عدد بزرگتر از صفر باشد ، دوربین به همان مقدار به جلو و اگر عدد کوچک تر از صفر باشد ، دوربین به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If UpKey()=1 Then&nbsp;Move Camera&nbsp;1
&nbsp; &nbsp;If DownKey()=1 Then&nbsp;Move Camera&nbsp;-1
Loop
&nbsp;
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . دوربین پیش فرض به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم دوربین پیش فرض به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .
&nbsp;
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز (راستای محور Z خود ) به عقب و جلو حرکت دهیم . مانند مثال زیر :
&nbsp;
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
&nbsp; &nbsp;If UpKey()=1 Then&nbsp;Move Camera&nbsp;2, 1
&nbsp; &nbsp;If DownKey()=1 Then&nbsp;Move Camera&nbsp;2, -1
Loop
]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات سه بعدی ( BASIC3D Commands ) قسمت اول</title>
<link>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-اول</link>
<guid>https://darkbasic.loxblog.com/دستوارات-سه-بعدی--basic3d-commands--قسمت-اول</guid>

<description><![CDATA[
&nbsp;این فصل پرمطلب ترین فصل وبلاگ می باشد . و شامل دستوراتی سه بعدی برای ایجاد ، حذف و تغییرات بر روی اشیای ساده و پیچیده ی سه بعدی می باشد .


مختصات سه بعدی
به دنیای سه بعدی خوش آمدین . مختصات سه بعدی در محیط دارک بیسیک شباهت زیادی به دنیای واقعی ما دارد . یعنی مختصات سه بعدی شامل سه محور اصلی X و Y و Z است . سیستم مختصات سه بعدی در BarkBASIC بصورت شکل زیر می باشد .
&nbsp;

&nbsp;
در این شکل محور X ها طول و محور Y ها عرض و محور Z ها ارتفاع می باشد . یعنی زمانی که به مانیتور کامپیوتر نگاه می کنیم ، محور های مختصات سه بعدی بصورت شکل زیر است .
&nbsp;

&nbsp;
مطابق شکل ، محور X ها جهت چپ و راست و محور Y ها جهت بالا و پائین و محور Z ها به داخل و خارج از مانیتور ( عمود بر صفحه ی نمایشگر ) اشاره دارد . شکل زیر سه صفحه ی اصلی X-Y و X-Z و Y-Z را نشان می دهد .
&nbsp;

&nbsp;
هر جسم و یا نقطه ای در سیستم مختصات سه بعدی با هر یک از محور های X و Y و Z دارای یک فاصله منحصر به فرد می باشد . مانند نقطه ی P در شکل زیر :
&nbsp;

&nbsp;
&nbsp;
در شکل بالا به ترتیب از چپ به راست ، فاصله ی نقطه ی P با هر کدام از محور ها نشان داده شده است . مختصات نقطه ای که در تقاطع این سه محور وجود داشته باشد ( 0 و 0 و 0 ) می باشد . یعنی X آن برابر صفر و Y آن برابر صفر و Z آن برابر صفر است یا می توان گفت ( X = 0 , Y = 0 , Z = 0 ) . ولی اگر مطابق شکل بالا فاصله ی نقطه ی P از محور X ها 10 و از محور Y ها 12 و از محور Z ها 14 در نظر بگیریم ، مختصات نقطه ی P برابر ( 14 و 12 و 10 ) خواهد بود &nbsp;.


آزمایش عملی در فضای سه بعدی&nbsp;:
کدهای زیر را اجرا می کنیم . سپس موس را به بالا و پائین و چپ و راست حرکت می دهیم . همچنین می توانیم با حرکت چرخ مابین دکمه های موس به پایین و بالا ، در مجموع موقعیت یک کره را در مختصات سه بعدی تغییر دهیم .
&nbsp;
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&nbsp;1,OPX+MMX(),OPY+MMY()*-1,OPZ+MMZ
(OSX=Object Screen X(1
(OSY=Object Screen Y(1
(If OBJECT IN SCREEN(1
&quot;(&quot;+(Text OSX(1),OSY(1),&quot;(X=&quot;+Str$(OPX)+&quot;,Y=&quot;+Str$(OPY)+&quot;,Z=&quot;+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
&nbsp;
فعلا با دستورات نوشته شده ی این کد ها کاری نداریم . فقط آنها را تایپ و اجرا می کنیم . با اجرای این مثال و حرکت موس و چرخ مابین کلید های آن ، مختصات این کره بر روی صفحه چاپ خواهد شد . یعنی با حرکت موس به بالا و پائین موقعیت Y و با حرکت موس به چپ و راست موقعیت X و با حرکت چرخ مابین دو کلید موس ، موقعیت Z کره تغییر خواهد کرد . البته ما حرکت کره را محدود کردیم ، تا از صفحه زیاد دور نشود .
&nbsp;
نکته ی تکراری&nbsp;: برای اینکه طول بعضی از خطوط برنامه آن قدر بلند است که در عرض جا نمی شود ، ما تمام خطوطی که متعلق به یک خط در برنامه است را در این وبلاگ به رنگ نارنجی نوشتیم .


اشیاء سه بعدی در&nbsp;DarkBASIC :
اشیاء سه بعدی در DarkBasic به دو بخش تقسیم می شوند . بخش اول ، اشیاء ساده و بخش دوم اشیاء پیچیده .


1-&nbsp;اشیاء ساده&nbsp;:
اشیای ساده شامل جعبه ، کره ، مکعب ، مخروط و ... می باشند . مانند شکل زیر :
&nbsp;
&nbsp;

&nbsp;
&nbsp;
دستور&nbsp;MAKE OBJECT BOX
این دستور جعبه سه بعدی می سازد . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT BOX&nbsp;ObjectNumber,Width,Height,Depth
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد در محدوده ی مثبت Integer یعنی یک تا 2,147,483,647 قرار می دهیم . در واقع با ایجاد هر شیء باید یک عدد نیز به آن اختصاص دهیم که به معنای نام آن شیء می باشد . با وجود این عدد که به معنی نام آن شیء است ، می توانیم در خطوط بعدی ، دستورات لازم را به شیء اعمال کنیم . یعنی توسط همین عدد ، شیء را تحت کنترل در بیاوریم . و به جای Width عرض و به جای Height ارتفاع و به جای Depth عمق جعبه را قرار می دهیم . مانند مثال زیر :
&nbsp;
ObjectNumber = 1
Make Object Box&nbsp;ObjectNumber,10,20,30
Wait Key
&nbsp;
با اجرای این مثال جعبه ای با عرض 10 و ارتفاع 20 و عمق 30 ایجاد خواهد شد .


نکته&nbsp;: ما نمی توانیم دو شیء را با یک عدد نامگذاری کنیم . مثلا اگر مثال زیر نوشته شود ، برنامه با خطا روبرو خواهد شد .
&nbsp;
Make Object Box 2,10,5,30
Make Object Box 2,40,160,75
&nbsp;
در این مثال ابتدا در خط اول یک جعبه ایجاد می شود ولی در خط دوم چون عدد اختصاصی به جعبه ی دوم توسط جعبه ی اول رزرو شده بود ، برنامه دچار خطا شد . یعنی به جای عدد 2 باید عدد دیگری قرار می دادیم . مثلا 5&nbsp;


دستور&nbsp;MAKE OBJECT CONE
این دستور مخروط سه بعدی می سازد . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT CONE&nbsp;ObjectNumber,Size
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مخروط و به جای Size سایز مخروط را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Cone&nbsp;2,10
Wait Key
&nbsp;
دستور&nbsp;MAKE OBJECT CUBE
این دستور مکعب سه بعدی ( جعبه ای که هر سطح آن مربع و به یک اندازه باشد ) می سازد . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT CUBE&nbsp;ObjectNumber,Size
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مکعب و به جای Size سایز مکعب ( سایز هر ضلع آن ) را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Cube&nbsp;3,100
Wait Key
&nbsp;
دستور&nbsp;MAKE OBJECT CYLINDER
این دستور استوانه ی سه بعدی می سازد . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT CYLINDER&nbsp;ObjectNumber,Size
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام استوانه و به جای Size سایز استوانه ( قطر و ارتفاع استوانه هر دو به یک اندازه و به مقدار Size خواهند بود ) را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Cylinder&nbsp;3,70
Wait Key
&nbsp;
دستور&nbsp;MAKE OBJECT PLAIN
این دستور صفحه ای در فضا بشکل مستطیل می سازد . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT PLAIN&nbsp;ObjectNumber,Width,Height
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام صفحه و به جای Width عرض و به جای Height ارتفاع صفحه را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Plain&nbsp;70,10,10
Wait Key
&nbsp;
دستور&nbsp;MAKE OBJECT SPHERE
این دستور کره ی سه بعدی می سازد . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT SPHERE&nbsp;ObjectNumber,Size
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Sphere&nbsp;70,40
Wait Key
&nbsp;
کره از سطوحی تشکیل شده است که با استفاده از دستورالعمل زیر می توانیم تعداد سطوح عمودی و افقی کره را تنظیم کنیم .
&nbsp;
MAKE OBJECT SPHERE&nbsp;ObjectNumber,Size,Rows,Columns
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره و به جای Rows تعداد سطوح افقی و به جای Columns تعداد سطوح عمودی کره را قرار می دهیم . مانند مثال زیر :
&nbsp;
Make Object Sphere&nbsp;1,40,10,10
Wait Key
Make Object Sphere&nbsp;2,40,30,30
Wait Key
&nbsp;
با اجرای این مثال ابتدا یک کره با 10 سطح افقی و 10 سطح عمودی ساخته شد و با زدن یک کلید کره ی بعدی با 30 سطح افقی و 30 سطح عمودی ساخته شد . چون تعداد سطوح در کره ی دومی بیشتر بود ، پس کیفیت آن بالاتر از کیفیت کره ی اول خواهد بود . مانند شکل زیر :
&nbsp;

&nbsp;
&nbsp;
&nbsp;
دستور&nbsp;MAKE OBJECT TRIANGLE
با این دستور می توانیم مثلت در فضای سه بعدی ایجاد کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE OBJECT TRIANGLE&nbsp;ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3
&nbsp;
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مثلث و به جای X1 و Y1 و Z1 مختصات یکی از گوشه های مثلت و به جای X2 و Y2 و Z2 مختصات گوشه ی دوم مثلث و به جای X3 و Y3 و Z3 مختصات گوشه ی سوم مثلت را قرار می دهیم . مانند مثال زیر :
&nbsp;
MAKE OBJECT TRIANGLE&nbsp;2,3.5,6,7,2,0,3,5,0,3
Wait Key
&nbsp;
مثلث بالا در مختصات فضای سه بعدی توسط شکل زیر ، شبیه سازی شده است .
&nbsp;

&nbsp;

دستور&nbsp;DELETE OBJECT
با این دستور شیء مورد نظرمان را حذف می کنیم . مانند دستورالعمل زیر :
&nbsp;
DELETE OBJECT&nbsp;ObjectNumber
&nbsp;
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم تا حذف شود . مانند مثال زیر :
&nbsp;
Make Object Box 1,10,20,30
Make Object Sphere 2,25
Wait 2000
Delete Object&nbsp;1
Wait Key
&nbsp;
با اجرای این مثال شی جعبه با شماره ی 1 و کره با شماره ی 2 ایجاد شدند . سپس پس از 2 ثانیه شیء جعبه با شماره ی 1 حذف شد .
]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات موزیک ( Music Commands ) :</title>
<link>https://darkbasic.loxblog.com/دستوارات-موزیک--music-commands</link>
<guid>https://darkbasic.loxblog.com/دستوارات-موزیک--music-commands</guid>

<description><![CDATA[
&nbsp;
این فصل شامل دستوراتی برای پخش آهنگ با فرمت های گوناگون ، از جمله MP3 و MID از روی فایل می باشد . ما می توانیم آهنگ ها را ایجاد و یا حذف کنیم . همچنین می توانیم میزان بلندی صدا و سرعت پخش هر آهنگ را کم و زیاد کنیم .
&nbsp;
دستور&nbsp;LOAD MUSIC
با این دستور آهنگ مورد نظرمان را از روی فایل صدا می کنیم و یک عدد به آن اختصاص دهیم . مانند دستورالعمل زیر :
&nbsp;
LOAD MUSIC&nbsp;Filename,MusicNumber
&nbsp;
طبق این دستورالعمل به جای Filename مسیر و نام فایل مورد نظرمان را قرار می دهیم . و به جای MusicNumber یک عدد در محدوده ی 1 تا 65535 قرار می دهیم تا توسط آن عدد در خطوط بعدی به آهنگمان کنترل داشته باشید . مانند مثال زیر :
&nbsp;
Load Music&nbsp;&quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 1
Wait Key
&nbsp;
در این مثال موزیکی با نام Music fun با فرمت mp3 که در مسیر C:Program FilesDark Basic Professional XPMediaMusicMP3 بود بر روی حافظه فراخوانی کردیم . در واقع عدد یک اختصاص داده شده در مثال بالا ، نام موزیک ما می باشد و در هر جایی از برنامه این موزیک توسط همین عدد قابل ردیابی است و می توانیم فرامین مختلفی را توسط این عدد به موزیکمان اعمال کنیم .
&nbsp;
تابع&nbsp;MUSIC EXIST
این تابع بررسی می کند که آیا موزیک مورد نظرمان بر روی حافظه موجود است یا نه . اگر بر روی حافظه فراخوانی شده باشد ، تابع مقدار یک و اگر فراخوانی نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,1
&quot;.If&nbsp;Music Exist(1) Then Print &quot;Music 1 Is Exist
(Print&nbsp;Music Exist(2
Wait Key
&nbsp;
دستور&nbsp;PLAY MUSIC
اگر موزیکی را قبلا ( توسط دستور Load Music ) بر روی حافظه فراخوانی کرده باشیم و عددی به آن اختصاص داده باشیم ، با این دستور می توانیم با اشاره به عدد اختصاصی به آن موزیک آن را پخش کنیم . مانند دستورالعمل زیر :
&nbsp;
PLAY MUSIC&nbsp;MusicNumber
&nbsp;
طبق این دستورالعمل به جای MusicNumber عدد اختصاصی به موزیکمان را قرار می دهیم . یعنی اگر سه موزیک در حافظه فراخوانی کرده باشیم و به هر کدام یک عدد اختصاص داده باشیم . می توانیم با این دستور و همچنین قرار دادن عدد اختصاصی به موزیک ، آن را پخش کنیم . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 1
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3&quot; , 2
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3music misty room.mp3&quot; , 3
Play Music&nbsp;2
Wait Key
&nbsp;
در این مثال سه موزیک بر روی حافظه فراخوانی شد و در آخر موزیک شماره ی 2 پخش شد . در یک زمان چندین موزیک می توانند با هم در حال پخش باشند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 1
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3&quot; , 2
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3music misty room.mp3&quot; , 3
Play Music&nbsp;1
Play Music&nbsp;2
Play Music&nbsp;3
Wait Key
&nbsp;
تابع&nbsp;MUSIC PLAYING
این تابع بررسی می کند که آیا موزیک مورد نظرمان درحال پخش است یا نه . اگر موزیک در حال پخش باشد ، تابع عدد یک و اگر در حال پخش نباشد ، تابع عدد صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 1
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3&quot; , 2
Play Music 1
(Print&nbsp;Music Playing(1
(Print&nbsp;Music Playing(2
Wait Key
&nbsp;
دستور&nbsp;STOP MUSIC
این دستور باعث توقف کامل موزیک می شود . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 100
Play Music 100 : Print &quot;Playing Music .&quot; : Wait 2000
Stop Music&nbsp;100
Cls : Print &quot;Stop Music . Press Any Key To Exit .&quot; : Wait Key
&nbsp;
&nbsp;
دستور&nbsp;PAUSE MUSIC
این دستور باعث توقف موزیک بطور موقت می شود . یعنی اگر نصف موزیک پخش شده باشد ، با این دستور پخش موزیک متوقف شده و در خطوط بعدی می توانیم موزیک متوقف شده را از همانجا پخش کنیم . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 25
Play Music 25
Print &quot;Playing Music&quot; : Wait 2000
Pause Music&nbsp;25
Wait Key
&nbsp;
تابع&nbsp;MUSIC PAUSED
این تابع بررسی می کند که آیا موزیک مورد نظرمان موقتا متوقف شده یا نه . اگر موقتا متوقف شده باشد ، تابع مقدار یک و اگر متوفق نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,25
Play Music 25
Print &quot;Playing Music&quot; : Wait 2000
Pause Music 25
&quot;.If&nbsp;Music Paused(25)=1 Then Print &quot;Music Paused
Wait Key
&nbsp;
دستور&nbsp;RESUME MUSIC
اگر موزیک مورد نظر را توسط دستور Pause Music متوفق کرده باشیم ، می توانیم با این دستور ادامه ی موزیک را از همان جا پخش کنیم . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 10
Play Music 10
Print &quot;Playing Music&quot; : Wait 2000
Pause Music 10
Print &quot;Pause Music&quot; : Wait 2000
Resume Music&nbsp;10
Print &quot;Resume Music&quot; : Wait 2000
Wait Key
&nbsp;
دستور&nbsp;LOOP MUSIC
این دستور باعث پخش متوالی موزیک می گردد . یعنی موزیک مورد نظر را پخش می کند و اگر موزیک تمام شود ، دوباره از اول بطور خودکار پخش خواهد شد . پخش موزیک مورد نظر تا زمانی که دستور توقف در خطوط بعدی صادر نشده باشد ، ادامه خواهد داشت . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 4
Loop Music&nbsp;4
Print &quot;Press Any Key To Pause Music .&quot; : Wait Key
Stop Music 4
Cls : Print &quot;Press Any Key To Exit .&quot; : Wait Key
&nbsp;
تابع&nbsp;MUSIC LOOPING
این تابع بررسی می کند که آیا موزیک مورد نظر بطور متوالی در حال پخش است یا نه . یعنی اگر دستور Loop Music در باره ی موزیک مورد نظرمان اجرا شده باشد ، تابع مقدار یک و اگر اجرا نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot; , 4
Loop Music 4
&quot;.If&nbsp;Music Looping(4)=1 Then Print &quot;Music Looping
Wait Key
&nbsp;
دستور&nbsp;DELETE MUSIC
با این دستور موزیک مورد نظرمان را که از فایل به حافظه فراخوانده بودیم ، از حافظه پاک می کنیم . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,50
Play Music 50 : Print &quot;Playing Music .&quot; : Wait 2000
Stop Music 50 : Print &quot;Stop Music .&quot; : Wait 2000
Delete Music&nbsp;50
Print &quot;Delete Music .&quot; : Wait 2000 : End
&nbsp;
&nbsp;با پاک شدن موزیک از حافظه ، موزیک قابل پخش نمی باشد و برای پخش دوباره ، موزیک باید دوباره به حافظه فراخوانی شود .
&nbsp;
دستور&nbsp;SET MUSIC SPEED
با این دستور می توانیم سرعت پخش موزیک را تنظیم کنیم . مانند دستورالعمل زیر :
&nbsp;
SET MUSIC SPEED&nbsp;MusicNumber,Speed
&nbsp;
طبق این دستورالعمل به جای MusicNumber عدد موزیک و به جای Speed سرعت پخش موزیک را قرار می دهیم که پیش فرض آن 100 است . یعنی اگر سرعت موزیک را 50 قرار دهیم موزیک با نصف سرعت و اگر 200 قرار دهیم با دو برابر سرعت پخش خواهد شد و اگر 100 باشد با سرعت عادی پخش خواهد شد . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,50
&quot;.Play Music 50 : Print &quot;Playing Music Normal Speed
Wait 2000 : Cls
Set Music Speed&nbsp;50,200
&quot;.Print &quot;Playing Music 2X Speed
Wait 2000 : Cls
Set Music Speed&nbsp;50,50
&quot;.Print &quot;Playing Music Half Speed
Wait Key
&nbsp;
تابع&nbsp;MUSIC SPEED
این تابع مقدار سرعت پخش موزیک مورد نظرمان را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,50
Set Music Speed 50,200
(Print &quot;Music Speed = &quot; ;&nbsp;Music Speed(50
Wait Key
&nbsp;
دستور&nbsp;SET MUSIC VOLUME
با این دستور ، بلندی صدای موزیک مورد نظرمان را کم و زیاد کنیم . مانند دستورالعمل زیر :
&nbsp;
SET MUSIC VOLUME&nbsp;MusicNumber,Volume
&nbsp;
طبق این دستورالعمل به جای MusicNumber شماره موزیک و به جای Volume مقدار بلندی صدا را قرار می دهیم که پیش فرض آن 100 می باشد . یعنی اگر بلندی صدای موزیک را 50 قرار دهیم صدای پخش موزیک نصف و اگر 100 قرار دهیم ، بلندی صدای موزیک معمولی خواهد شد . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,50
&quot;.Play Music 50 : Print &quot;Playing Music Normal Volume
Wait 2000 : Cls
Set Music Volume&nbsp;50,50
&quot;.Print &quot;Playing Music Half Volume
Wait 2000 : Cls
Set Music Volume&nbsp;50,100
&quot;.Print &quot;Playing Music Normal Volume
Wait Key
&nbsp;
تابع&nbsp;MUSIC VOLUME
این تابع مقدار بلندی صدای موزیک مورد نظرمان را برمی گرداند . مانند مثال زیر :
&nbsp;
Load Music &quot;C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3&quot;,40
Play Music 40
Set Music Volume 40,50
(Print &quot;Music Volume = &quot; ;&nbsp;Music Volume(40
Wait Key
&nbsp;]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات بیتمپ ( Bitmap Commands ) :</title>
<link>https://darkbasic.loxblog.com/دستوارات-بیتمپ--bitmap-commands</link>
<guid>https://darkbasic.loxblog.com/دستوارات-بیتمپ--bitmap-commands</guid>

<description><![CDATA[
&nbsp;این فصل شامل دستوراتی برای ایجاد و حذف و ویرایش تصاویری با فرمت های BMP ، JPG ، TGA ، DDS ، DIB و PNG می باشد . می توان تصویر را از روی فایل فراخوانی کرد . کاربرد بیتمپ معمولا برای نمایش عکس و یا لوگوی تصویر اولیه بازی است .
&nbsp;
دستور&nbsp;LOAD BITMAP
این دستور تصویری را از روی فایل بر روی صفحه فراخوانی می کند . مانند دستورالعمل زیر :
&nbsp;
LOAD BITMAP&nbsp;Filename,BitmapNumber
&nbsp;
طبق این دستورالعمل به جای Filename آدرس و نام و فرمت فایل تصویری و به جای BitmapNumber شماره ای بین 0 تا 32 قرار می دهیم . توسط همین شماره می توانیم در خطوط بعدی ، تصویر مورد نظرمان را کنترل کنیم . مانند مثال زیر :
&nbsp;
Load Bitmap&nbsp;&quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 1
Wait Key
&nbsp;
اگر به جای BitmapNumber عدد صفر را قرار دهیم و یا هیچ گونه عددی قرار ندهیم ، تصویر بر روی صفحه نمایش ، نشان داده می شود . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
Wait Key
&nbsp;
نکته&nbsp;: در این دستور اگر به جای BitmapNumber عدد صفر قرار دهیم ، در حالت گرافیک قرار می گیریم . یعنی می توانیم از دستورات گرافیکی و چاپی استفاده کنیم . سایر اعداد برای محاسبات تصویری کاربرد دارند . یعنی اگر از این دستور استفاده کنیم و عددی بالا تر از صفر قرار دهیم ، فرامین چاپی و گرافیکی دیده نخواهند شد .
&nbsp;
دستور&nbsp;CREATE BITMAP
با این دستور می توانیم یک تصویر خالی با سایز دلخواه بسازیم . مانند دستورالعمل زیر :
&nbsp;
CREATE BITMAP&nbsp;BitmapNumber,Width,Height
&nbsp;
طبق این دستورالعمل به جای BitmapNumber یک عدد قرار می دهید تا در خطوط بعدی بر روی تصویرمان کنترل داشته باشیم . و به جای Width اندازه ی پهنای تصویر و به جای Height اندازه ی ارتفاع تصویر را قرار می دهیم . مانند مثال زیر :
&nbsp;
CREATE BITMAP&nbsp;1,640,480
WAIT KEY
&nbsp;
در این مثال تصویری با شماره ی یک و طول 640 و ارتفاع 480 ایجاد شد .
&nbsp;
دستور&nbsp;SET CURRENT BITMAP
این دستور تصویر دلخواهمان را از بین دیگر تصاویر ، فعال می کند . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
CREATE BITMAP 1,640,480
SET CURRENT BITMAP&nbsp;0
WAIT KEY
&nbsp;
اگر تصویر شماره صفر فعال باشد ، دستورات چاپی و گرافیکی قابل دیدن خواهند بود .
&nbsp;
دستور&nbsp;DELETE BITMAP
این دستور تصاویر ایجاد شده و یا خوانده شده از فایل را حذف می کند . در مانند دستورالعمل زیر :
&nbsp;
DELETE BITMAP&nbsp;BitmapNumber
&nbsp;
طبق این دستورالعمل به جای BitmapNumber شماره تصویر را قرار می دهیم تا تصویر مورد نظر حذف شود . مانند مثال زیر :
&nbsp;
CREATE BITMAP 1,640,480
Load Bitmap &quot;C:MyBitmap.bmp&quot;,2
DELETE BITMAP&nbsp;1
WAIT KEY
&nbsp;
در این مثال تصویر شماره ی 1 حذف می شود . البته از روی Ram حذف می شود، نه اینکه فایل از بین برود .
&nbsp;
دستور&nbsp;COPY BITMAP
این دستور تصویری را در تصویر دیگری کپی می کند . مانند دستورالعمل زیر :
&nbsp;
COPY BITMAP&nbsp;FromBitmap,ToBitmap
&nbsp;
طبق این دستورالعمل به جای FromBitmap شماره ی تصویری که می خواهیم از آن کپی تهیه کنیم و به جای ToBitmap شماره ی تصویری را که می خواهیم در آن بچسبانیم ، قرار می دهیم . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 1
Create Bitmap 2,200,200
Copy Bitmap&nbsp;1,2
Wait Key
&nbsp;
در این مثال تصویر شماره ی 1 در تصویر شماره ی 2 کپی می شود . از این دستور می توان به شکل دیگری هم استفاده کرد . مانند دستورالعمل زیر :
&nbsp;
COPY BITMAP&nbsp;FromBitmap,LEFT,TOP,RIGHT,BOTTOM,ToBitmap,left,top, right,bottom
&nbsp;
در این روش مختصات تصویر انتخابی از تصویر اول در مختصات تصویر انتخابی در تصویر دوم کپی می شود . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot;,1
Create Bitmap 2,200,200
COPY BITMAP&nbsp;1,50,50,100,100,2,0,0,50,50
COPY BITMAP 2,0
Set Current Bitmap 0
WAIT KEY
&nbsp;
دستور&nbsp;MIRROR BITMAP
این دستور تصویر را حول محور عمودی انعکاس می دهد . مانند تصویر در آینه عمودی . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot;,0
Do
MIRROR BITMAP&nbsp;0
Wait 500
Loop
&nbsp;
دستور&nbsp;FLIP BITMAP
این دستور تصویر را حول محور افقی انعکاس می دهد . مانند تصویر در آینه افقی . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
Do
Flip BITMAP&nbsp;0
Wait 500
Loop
&nbsp;
دستور&nbsp;FADE BITMAP
این دستور باعث محو شدن تصویر می شود ( تمایل به رنگ سیاه ) . مانند دستورالعمل زیر :
&nbsp;
FADE BITMAP&nbsp;BitmapNumber,FadeValue
&nbsp;
طبق این دستورالعمل به جای BitmapNumber عدد مربوط به تصویر و به جای FadeValue مقدار محوشدگی تصویر را قرار می دهیم که عددی در محدوده ی صفر تا 100 می باشد که این عدد درصد شفافیت تصویر را مشخص می کند . یعنی اگر عدد 90 را قرار دهیم ، تنها 90 درصد از شفافیت تصویر باقی خواهد ماند . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
For I = 1 To 10
Fade BITMAP&nbsp;0,90
Wait 500
Next I
&nbsp;
دستور&nbsp;BLUR BITMAP
این دستور باعث تار شدن تصویر می شود . مانند دستورالعمل زیر :
&nbsp;
BLUR BITMAP&nbsp;BitmapNumber,BlurValue
&nbsp;
طبق این دستورالعمل به جای BitmapNumber عدد مربوط به تصویر و به جای BlurValue مقدار تار شدگی تصویر را قرار می دهیم که عددی در محدوده ی 1 تا 6 می باشد که این عدد شدت تارشدگی تصویر را مشخص می کند . یعنی اگر عدد 1 را قرار دهیم ، تصویر به مقدار کم تار می شود و اگر بیشترین عدد یعنی 6 را قرار دهیم ، تصویر به مقدار زیاد ، تار خواهد شد . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
Wait 1000
Blur BITMAP&nbsp;0,5
Wait Key
&nbsp;
تابع&nbsp;CURRENT BITMAP
این تابع شماره ی تصویر فعال را برمی گرداند . مانند مثال زیر :
&nbsp;
CREATE BITMAP 1,640,480
SET CURRENT BITMAP 0
()PRINT&nbsp;CURRENT BITMAP
WAIT KEY
&nbsp;
تابع&nbsp;BITMAP EXIST
این تابع مشخص می کند که آیا تصویر مورد نظر در حافظه موجود است یا نه . مانند مثال زیر :
&nbsp;
CREATE BITMAP 1,640,480
Set Current Bitmap 0
(PRINT&nbsp;BITMAP EXIST(1
WAIT KEY
&nbsp;
در این مثال چون تصویری با شماره ی یک در حافظه ایجاد شده ، تابع مقدار 1 و اگر این شماره تصویر در حافظه نباشد ( مثلا با دستور Delete Bitmap حذف شده باشد ) ، تابع مقدار صفر را برمی گرداند .
&nbsp;
تابع&nbsp;BITMAP WIDTH و&nbsp;تابع&nbsp;BITMAP HEIGHT و&nbsp;تابع&nbsp;BITMAP DEPTH
این سه تابع به ترتیب پهنا و ارتفاع و عمق رنگ ( تعداد رنگ های تشکیل دهنده ی تصویر ، مثلا 32 بیت یعنی حدود 16 میلیون رنگ ) تصویر مورد نظر را برمی گردانند . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
(Print &quot;Bitmap Width = &quot; ;&nbsp;Bitmap Width(0
(Print &quot;Bitmap Height = &quot; ;&nbsp;Bitmap Height(0
(Print &quot;Bitmap Depth = &quot; ;&nbsp;Bitmap Depth(0
Wait Key
&nbsp;
تابع&nbsp;BITMAP MIRRORED
این تابع مشخص می کند که آیا تصویر مورد نظر در راستای محور افقی انعکاس پیدار کرده یا نه ( یعنی آیا از دستور MIRROR BITMAP استفاده شده است یا نه ) . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
Do
Wait 2000
MIRROR BITMAP 0
If&nbsp;BITMAP MIRRORED(0)=1
&nbsp; &nbsp;&quot;Print &quot;Bitmap Mirrored
Else
&nbsp; &nbsp; &nbsp; &quot;Print &quot;Bitmap Not Mirrored
EndIf
Loop
&nbsp;
تابع&nbsp;BITMAP FLIPPED
این تابع مشخص می کند که آیا تصویر مورد نظر در راستای محور عمودی انعکاس پیدار کرده یا نه ( یعنی آیا از دستور FLIPP BITMAP استفاده شده است یا نه ) . مانند مثال زیر :
&nbsp;
Load Bitmap &quot;C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomediaoomWalld.bmp&quot; , 0
Do
Wait 2000
Flip BITMAP 0
If&nbsp;BITMAP Flipped(0)=1
&nbsp; &nbsp;&quot;Print &quot;Bitmap Flipped
Else
&nbsp; &nbsp;&quot;Print &quot;Bitmap Not Flipped
EndIf
Loop]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات گرافیک دو بعدی ( basic2d Commands ) :</title>
<link>https://darkbasic.loxblog.com/دستوارات-گرافیک-دو-بعدی--basic2d-commands</link>
<guid>https://darkbasic.loxblog.com/دستوارات-گرافیک-دو-بعدی--basic2d-commands</guid>

<description><![CDATA[
&nbsp;این فصل شامل دستوراتی برای رسم اشکال دو بعدی مانند نقطه دایره خط و . . . می باشد . همچنین می توانیم رنگ قلم و زمینه آن را نیز مشخص کنیم .
&nbsp;
تابع&nbsp;RGB
با این تابع می توانیم عبارات عددی و یا کراکتری و همچنین اشکال دو بعدی و اشیاء سه بعدی را با رنگ دلخواهمان چاپ و یا رسم کنیم . این تابع سه ورودی دارد مانند دستورالعمل زیر :
&nbsp;
(NumberColor =&nbsp;RGB(Red,Green,Blue
&nbsp;
در کامپیوتر رنگ ها از سه رنگ اصلی قرمز و سبز و آبی بوجود آمده اند . یعنی هر رنگی یک شماره ی منحصر به فرد دارد &nbsp;. در تابع می توانیم به هر کدام از رنگ های اصلی ( قرمز و سبز و آبی ) عددی بین 0 تا 255 اختصاص دهیم و آن را وارد این تابع کنیم ، تا رنگ کل که خود یک عدد است توسط این تابع ایجاد شود . بعد می توانیم از آن عدد برای مشخص کردن رنگ قلم برای چاپ و ترسیم استفاده کنیم .
طبق این دستورالعمل به جای Red ( به معنای شدت رنگ قرمز ) عددی در محدوده ی 0 تا 255 و به جای Green ( به معنای شدت رنگ سبز ) عددی در محدوده ی 0 تا 255 و به جای Blue ( به معنای شدت رنگ آبی ) عددی در محدوده ی 0 تا 255 قرار می دهیم . تابع با توجه به مقادیر وارده عددی تولید می کند که حاصل مخلوط این سه عدد ( این سه رنگ اصلی ) است . یعنی این تابع با توجه به اعداد ورودی 16777216 رنگ تولید می کند . مانند مثال های زیر :
&nbsp;
(NumberColor =&nbsp;Rgb(255,0,0
&nbsp;
در این مثال شدت رنگ قرمز 255 و شدت رنگ سبز 0 و شدت رنگ آبی 0 می باشد . در نتیجه عدد NumberColor به دلیل شدت رنگ بالای قرمز عددی را برمی گرداند که آن عدد کد رنگ قرمز پررنگ می باشد .
&nbsp;
اگر (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 رنگ فیروزه ای را مشخص می کند .&nbsp;
برای ایجاد سایر رنگ ها باید عدد هایی بین صفر تا 255 را در تابع قرار دهیم .
&nbsp;
برای تعیین رنگ راه راحت تری هم وجود دارد .&nbsp;
&nbsp;
1 &ndash; ابتدا دستور مربوط به انتخاب رنگ مثلا INK را تایپ می کنیم .&nbsp;
2 &ndash; بعد از قرار داد یک فاصله ( فشردن دکمه ی Space ) ، کلیک سمت راست موس را فشار می دهیم . و گزینه ی ...Insert RGB Colour را از منوی ظاهر شده انتخاب می کنیم . کادری مانند شکل زیر باز خواهد شد .
&nbsp;
&nbsp;

&nbsp;
&nbsp;
می توانیم رنگ مورد دلخواهمان را انتخاب کنیم . با فشردن دکمه ی Ok تابع ()RGB بطور خودکار مقدار دهی می شود . به همین سادگی می توانیم رنگ مورد نظر مان را تنظیم کنیم .
&nbsp;
دستور&nbsp;CLS
این دستور کل صفحه نمایش را با رنگ دلخواه ما پاک می کند . مانند دستورالعمل زیر :
&nbsp;
CLS&nbsp;NumberColor
&nbsp;
طبق این دستورالعمل به جای NumberColor کد رنگ مورد نظرمان را قرار می دهیم . می توانیم از تابع ()RGB برای ایجاد کد رنگ استفاده کنیم . مثلا می خواهیم کل صفحه نمایش را با رنگ سبز پاک کنیم .&nbsp;
&nbsp;
(CLS&nbsp;Rgb(255,0,0
Wait Key
&nbsp;
دستور&nbsp;INK
با این دستور می توانیم رنگ قلم و رنگ زمینه را برای چاپ متون و ترسیمات دو بعدی انتخاب کنیم . مانند دستورالعمل زیر :
&nbsp;
INK&nbsp;ForegroundColor,BackgroundColor
&nbsp;
طبق این دستورالعمل به جای ForegroundColor رنگ قلم و به جای BackgroundColor رنگ پشت زمینه را &nbsp;قرار می دهیم . مانند مثال زیر :
&nbsp;
(Ink&nbsp;Rgb(0,0,255),Rgb(0,255,0
&quot;Print &quot;ForeGround Color Is Blue And BackGround Color Is Green
Wait Key
&nbsp;
دستور&nbsp;DOT
با این دستور می توانیم بر روی صفحه نمایشگر نقطه رسم کنیم . مانند دستورالعمل زیر :
&nbsp;
DOT&nbsp;X,Y
&nbsp;
طبق این دستورالعمل به جای X فاصله ی نقطه از سمت چپ صفحه ی نمایشگر و به جای Y فاصله ی نقطه از بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :
&nbsp;
(Ink Rgb(255,255,255),Rgb(0,0,0
Dot&nbsp;100,100
Wait Key
&nbsp;
بصورت زیر هم می توان نمای زیبایی ایجاد کرد .
&nbsp;
For I = 0 To 255
&nbsp; &nbsp;For J = 0 To 255
&nbsp; &nbsp; &nbsp; INK RGB(I,J,0),0
&nbsp; &nbsp; &nbsp; &nbsp;Dot&nbsp;I*2 , J*2
&nbsp; &nbsp;Next J
Next I
Wait Key
&nbsp;
دستور&nbsp;LINE
از این دستور برای رسم خط استفاده می کنیم . مانند دستورالعمل زیر :
&nbsp;
LINE&nbsp;X1,Y1,X2,Y2
&nbsp;
طبق این دستورالعمل برای رسم یک خط مختصات دو نقطه 1 و 2 را وارد می کنیم . یعنی به جای X1 فاصله ی نقطه ی اول از چپ صفحه و به جای Y1 فاصله ی نقطه ی اول از بالای صفحه و به جای X2 فاصله ی نقطه ی دوم از چپ صفحه و به جای Y2 فاصله ی نقطه ی دوم از بالای صفحه را قرار می دهیم و دستور LINE یک خط از نقطه ی اول به نقطه ی دوم رسم می کند . مانند مثال زیر :
&nbsp;
Ink Rgb (255,0,255) , 0
Line&nbsp;100,100,200,200
Wait Key
&nbsp;
با اجرای این مثال خطی با رنگ صورتی از نقطه ی 100 و 100 به نقطه ی 200 و 200 رسم می شود .
&nbsp;
در هر یک از توابع و دستوراتی که از اول تا الان گفته شد ، می توانیم به جای اعداد از متغیز هم استفاده کنیم . مانند مثال زیر :
&nbsp;
Do
Ink Rgb(Rnd(255),Rnd(255),Rnd(255)) , 0
(intAng = Rnd(360
(Line&nbsp;320,240,320+Sin(intAng)*Rnd(400),240+Cos(intAng)* Rnd(400
Loop
Wait Key
&nbsp;
دستور&nbsp;BOX
از این دستور برای رسم مستطیل استفاده می کنیم . مانند دستورالعمل زیر :
&nbsp;
BOX&nbsp;Left,Top,Right,Bottom
&nbsp;
طبق این دستورالعمل به جای Left فاصله ی ظلع چپ مستطیل تا ظلع چپ صفحه نمایش و به جای Top فاصله ی ظلع بالای مستطیل تا ظلع بالای صفحه نمایش و به جای Right فاصله ی ظلع راست مستطیل تا ظلع چپ صفحه نمایش و به جای Bottom فاصله ی ظلع پائین مسطیل تا ظلع بالای صفحه نمایش را قرار می دهیم . یعنی برای رسم یک مستطیل که طول آن 50 و ارتفاع آن 50 و فاصله ی آن تا بالای صفحه 50 و فاصله ی آن تا چپ صفحه 50 باشد ، باید مانند مثال زیر عمل کنید :
&nbsp;
(Ink Rgb(0,255,0
Box&nbsp;50,50,100,100
WAIT KEY
&nbsp;
دستور Box را می توان بشکل دیگری هم استفاده کرد . مانند زیر :
&nbsp;
BOX&nbsp;Left,Top,Right,Bottom,Color1,Color2,Color3,Color4
&nbsp;
در این دستورالعمل به جای Color1 و Color2 و Color3 و Color4 کد چها رنگ مختلف را قرار می دهیم تا هر گوشه از مستطیل به هر کدام از این رنگ ها گرایش پیدا کند . مانند مثال زیر :
&nbsp;
(BOX 50,50,250,250,RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),RGB(0,255,255
WAIT KEY
&nbsp;
دستور&nbsp;CIRCLE
با این دستور دایره رسم می کنیم . مانند دستورالعمل زیر :
&nbsp;
CIRCLE&nbsp;X,Y,Radius
&nbsp;
طبق این دستورالعمل به جای X فاصله ی مرکز دایره از چپ صفحه نمایش و به جای Y فاصله ی مرکز دایره تا بالای صفحه نمایش و به جای Radius شعاع دایره را قرار می دهیم . مانند مثال زیر :
&nbsp;
CIRCLE&nbsp;320,240,100
WAIT KEY
&nbsp;
در این مثال دایره ای با شعاع 100 در مختصات 320 و 240 رسم می شود .
&nbsp;
دستور&nbsp;ELLIPSE
با این دستور بیضی رسم می کنیم . مانند دستورالعمل زیر :
&nbsp;
ELLIPSE&nbsp;X,Y,XRadius,YRadius
&nbsp;
طبق این دستورالعمل به جای X فاصله ی مرکز بیضی از چپ صفحه نمایش و به جای Y فاصله ی مرکز بیضی تا بالای صفحه نمایش و به جای XRadius اندازه ی شعاع افقی (موازی محور X ها ) و به جای YRadius اندازه ی شعای عمودی (موازی محور Y ها ) بیضی را قرار می دهیم . مانند مثال زیر :
&nbsp;
ELLIPSE&nbsp;320,240,100,50
WAIT KEY
&nbsp;
تابع&nbsp;POINT
با این تابع ، شماره کد رنگ نقطه ای را در مختصات خاصی از صفحه نمایش ، بدست می آوریم . مانند دستورالعمل زیر :
&nbsp;
(ColorNumber =&nbsp;POINT(X,Y
&nbsp;
طبق این دستورالعمل به جای X فاصله ی نقطه از چپ صفحه ( محور افقی ) و به جای Y فاصله ی نقطه از بالای صفحه ( محور عمودی ) را قرار می دهیم . مانند مثال زیر .
&nbsp;
(CLS RGB(128,64,0
(PRINT&nbsp;POINT(320,240
WAIT KEY
&nbsp;
تابع&nbsp;RGBR
این تابع شدت رنگ قرمز را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :
&nbsp;
(CLS RGB(128,64,255
((PRINT &quot;AMOUNT OF RED = &quot; ;&nbsp;RGBR(POINT(320,240
WAIT KEY
&nbsp;
تابع&nbsp;RGBG
این تابع شدت رنگ سبز را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :
&nbsp;
(CLS RGB(128,164,255
(ColorNumber = POINT(320,240
(PRINT &quot;AMOUNT OF GREEN = &quot; ;&nbsp;RGBG(ColorNumber
WAIT KEY
&nbsp;
تابع&nbsp;RGBB
این تابع شدت رنگ آبی را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :
&nbsp;
(CLS RGB(128,64,5
((PRINT &quot;AMOUNT OF BLUE = &quot; ;&nbsp;RGBB(POINT(320,240
WAIT KEY]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


<item>
<title>دستوارات فایل ( File Commands ) :</title>
<link>https://darkbasic.loxblog.com/دستوارات-فایل--file-commands</link>
<guid>https://darkbasic.loxblog.com/دستوارات-فایل--file-commands</guid>

<description><![CDATA[
&nbsp;در این فصل یاد می گیریم تا بر روی فایل ها و پوشه های موجود در Hard کامپیوتر کار کنیم . مثلا فایل یا پوشه ای را کپی ، ایجاد ، حذف ، تغییر نام و ... را انجام دهیم .
&nbsp;
دستور&nbsp;DIR
این دستور اسامی تمامی فایل ها و پوشه هایی را که در مسیر جاری وجود دارند ، بر روی صفحه ی نمایشگر چاپ می کند . یعنی اگر مسیر جاری C:Example باشد ، اسامی فایل ها و پوشه های موجود در این مسیر چاپ خواهد شد . مانند مثال زیر :
&nbsp;
Dir
Do
Loop
&nbsp;
دستورات&nbsp;PERFORM CHECKLIST FOR FILES
این سلسله از دستورات ، مانند دستور قبلی ( یعنی دستور DIR ) اسامی تمامی فایل ها و پوشه هایی را که در مسیر جاری وجود دارند را برمی گرداند . با این تفاوت که علاوه بر نمایش آنها ، توابع این دستورات کنترل بیشتری بر روی داده ها به ما خواهد داد . مانند مثال زیر :
&nbsp;
Perform Checklist For Files
()For T = 1 to&nbsp;CheckList Quantity
(Print &quot;Files = &quot; +&nbsp;CheckList String$(T
Next T
Wait Key
&nbsp;
تابع&nbsp;GET DIR
با استفاده از این تابع می توانیم مسیر جاری را پیدا کنیم . مانند مثال زیر :
&nbsp;
()$Print &quot;Current Dir = &quot; +&nbsp;Get Dir
Wait Key
&nbsp;
دستور&nbsp;SET DIR
با این دستور می توانیم مسیر جاری را تغییر دهیم . یعنی اگر مسیر بر روی /:C تنظیم شود ، با استفاده از دستور Dir می توانیم اسامی فایل ها و پوشه های موجود در این مسیر را نمایش دهیم . مانند مثال زیر :
&nbsp;
&quot;/:Set Dir&nbsp;&quot;C
Dir
Wait Key
&nbsp;
با اجرای این مثال اسامی تمامی فایل ها و پوشه های موجود در مسیر /:C نمایش داده خواهد شد .
&nbsp;
تابع&nbsp;WINDIR
این تابع مسیری که ویندوز در آن نصب شده باشد را برمی گرداند . مانند مثال زیر :
&nbsp;
()$Print &quot;Current Windows Directory = &quot; +&nbsp;WinDir
Wait Key
&nbsp;
تابع&nbsp;APPNAME
این تابع نام و مسیر برنامه ی ما را در حالت اجرا برمی گرداند . یعنی اگر برنامه ای که می نویسیم در هر مسیری وجود داشته باشد . موقع اجرای برنامه ، تابع APPNAME مسیر و نام برنامه ی ما را برمی گرداند . مانند مثال زیر :
&nbsp;
()$Print &quot;AppName = &quot; +&nbsp;AppName
Wait Key
&nbsp;
دستور&nbsp;DRIVELIST
این دستور اسامی درایو های موجود در HARD را چاپ می کند . مانند مثال زیر :
&nbsp;
DriveList
do
loop
&nbsp;
دستورات&nbsp;PERFORM CHECKLIST FOR DRIVES
این تابع همانند دستور قبلی نام درایو های موجود را برمی گرداند . مانند مثال زیر :
&nbsp;
Perform Checklist For Drives
()For T = 1 to&nbsp;CheckList Quantity
(Print &quot;Drives = &quot; +&nbsp;Checklist String$(T
Next T
Wait Key
&nbsp;
تفاوت این دستورات با دستور قبلی ( Drive List ) در توابع آن می باشد . یعنی با این دستورات و توابع می توانیم کنترل بیشتری بروی نام و تعداد درایو ها داشته باشیم .
&nbsp;
دستور&nbsp;MAKE FILE
با این دستور می توانیم فایل خالی با فرمت دلخواه در هر مسیری ایجاد کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE FILE&nbsp;fileName
&nbsp;
طبق این دستورالعمل به جای fileName نام درایو و مسیر موجود و نام فایل و فرمت آن را قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;Make File&nbsp;&quot;C:MyDirectoryMyFile.txt
&nbsp;
با اجرای این مثال فایلی با نام MyFile با فرمت txt در مسیر C:MyDirectory ایجاد می شود .
نکته&nbsp;1 : اگر فایلی قبلا با همین نام و فرمت در همین مسیر وجود داشته باشد . آن فایل پاک خواهد شد و یک فایل خالی جایگزین آن می شود .
&nbsp;
نکته&nbsp;2 : اگر مسیر انتخابی برای ایجاد فایل وجود نداشته باشد ، هیچ فایلی ایجاد نخواهد شد . در این مثال اگر دارکتوری MyDirectory در درایو C وجود نداشته باشد ، هیچ فایلی ایجاد نخواهد شد .
&nbsp;
دستور&nbsp;MAKE DIRECTORY
با این دستور می توانیم یک دایرکتوری خالی ( پوشه ای برای نگه داشتن پوشه ها و فایل ها ) ایجاد کنیم . مانند دستورالعمل زیر :
&nbsp;
MAKE DIRECTORY&nbsp;DirectoryName
&nbsp;
طبق این دستورالعمل به جای DirectoryName مسیر و نام دایرکتوری ( پوشه ) جدید را قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;Make Directory&nbsp;&quot;C:/oldDirectory/NewDirectory
&nbsp;
با اجرای این مثال دارکتوری NewDirectory در مسیر C:/oldDirectory ایجاد می شود .
نکته&nbsp;: اگر مسیری برای ایجاد داریکتوری وجود نداشته باشد ، داریکتوری جدید ایجاد نخواهد شد .
&nbsp;
دستور&nbsp;DELETE FILE
با این دستور می توانیم فایلی را که از قبل ایجاد شده را ، حذف کنیم ( از بین ببریم ) . مانند دستورالعمل زیر :
&nbsp;
DELETE FILE&nbsp;Filename
&nbsp;
طبق این دستورالعمل به جای Filename مسیر و نام فایل مورد نظر را جهت پاک شدن قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;Delete File&nbsp;&quot;C:/MyDirectory/File.dat
با اجرای این مثال فایل File.dat موجود در مسیر C:/MyDirectory حذف می شود .
&nbsp;
دستور&nbsp;COPY FILE
این دستور فایلی که قبلا ایجاد شده باشد را ، در مسیری دلخواه کپی می کند . مانند دستوالعمل زیر :
&nbsp;
COPY FILE&nbsp;SourceFilename,DestinationFilename
&nbsp;
طبق این دستورالعمل به جای SourceFilename مسیر و نام فایلی که می خواهیم از روی آن کپی ایجاد کنیم را ، قرار می دهیم و به جای DestinationFilename مسیر و نام فایل جدید را قرار می دهیم .
می توانیم در قسمت DestinationFilename نام جدیدی برای فایل جدید در نظر بگیریم ، منتهی مسیر مورد نظر برای فایل جدید باید وجود داشته باشد .
&nbsp;
&quot;Copy File&nbsp;&quot;C:/data.dat&quot;,&quot;D:/MyDirextory/backupdata.dat
&nbsp;
با اجرای این مثال فایلی جدید با نام backupdata.dat در مسیر D:/MyDirextory از روی فایل data.dat موجود در مسیر :C ایجاد خواهد شد .
&nbsp;
دستور&nbsp;MOVE FILE
با این دستور می توانیم فایل موجود را به مسیر جدید انتقال دهیم . همچنین می توانیم نام جدیدی را هم در نظر بگیریم . مانند دستورالعمل زیر :
&nbsp;
MOVE FILE&nbsp;SourceFilename,DestinationFilename
&nbsp;
طبق این دستورالعمل به جای SourceFilename مسیر و نام فایلی را که می خواهیم انتقال دهیم ، قرار می دهیم و به جای DestinationFilename مسیر و نام جدیدی را برای انتقال در نظر می گیریم .
&nbsp;
نکته&nbsp;: مسیر مورد نظر برای انتقال فایل باید وجود داشته باشد .
&nbsp;
&quot;Move File&nbsp;&quot;C:oldfile.txt&quot;,&quot;d:oldfile.txt
&nbsp;
یا
&nbsp;
&quot;Move File&nbsp;&quot;C:oldfile.txt&quot;,&quot;d:
ewfile.txt
&nbsp;
دستور&nbsp;RENAME FILE
با استفاده این دستور می توانیم فایل مورد نظرمان را تغییر نام دهیم . مانند دستورالعمل زیر :
&nbsp;
RENAME FILE&nbsp;SourceFilename,NewFilename
&nbsp;
طبق این دستورالعمل به جای SourceFilename نام و مسیر فایل مورد نظرمان را قرار می دهیم و به جای NewFilename نام جدیدی را وارد می کنیم . مانند مثال زیر :
&nbsp;
&quot;Rename File&nbsp;&quot;C:Data.txt&quot;,&quot;C:
ewData.txt
&nbsp;
نکته&nbsp;: طبق دستورالعمل اگر به جای NewFilename مسیر جدیدی را قرار دهیم ، فایل به مسیر جدید و با نام جدید نقل مکان خواهد کرد . مانند مثال زیر :
&nbsp;
&quot;Rename File&nbsp;&quot;C:Data.txt&quot;,&quot;D:
ewData.txt
&nbsp;
در این مثال علاوه بر این که نام فایل از Data به newData تغییر پیدار کرد . خود فایل هم از مسیر :C به مسیر :D انتقال پیدا کرد .
&nbsp;
دستور&nbsp;EXECUTE FILE
از این دستور برای اجرای فایل ها استفاده می کنیم . مانند دستورالعمل زیر :
&nbsp;
EXECUTE FILE&nbsp;Filename,Commandline,Directory
&nbsp;
طبق این دستورالعمل به جای Filename نام و مسیر فایل اجرایی مورد نظرمان را قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;&quot;,&quot;&quot;,&quot;EXECUTE FILE&nbsp;&quot;C:WINDOWSNotePad.exe
Wait Key
&nbsp;
با اجرای این مثال برنامه ی NotePad اجرا خواهد شد . این برنامه فایلی است با فرمت Exe و به تنهایی اجرا می شود . ولی فایل هایی هم هستند که اجرایی نیستند ؛ بلکه اطلاعاتی را برای برنامه های دیگر نگه می دارند . مانند فایل هایی با فرمت Doc که توسط برنامه ی Microsot Word ایجاد شده اند . پس برای استفاده و باز کردن این فایل باید به جای Directory نام و مسیر فایل برنامه ی Microsoft Word را هم قرار دهیم . مانند مثال زیر :
&nbsp;
EXECUTE FILE&nbsp;&quot;C:MyFile.Doc&quot;,&quot;&quot;,&quot;C:Program FilesMicrosoft&nbsp;
&quot;OfficeOffice10WinWord.Exe
Wait Key
&nbsp;
اگر برنامه ی Microsoft Word از قبل نصب شده باشد . می توانیم تنها نام و مسیر فایل را قرار دهیم . مانند مثال زیر :
&nbsp;
&quot;&quot;,&quot;&quot;,&quot;EXECUTE FILE&nbsp;&quot;C:MyFile.Doc
Wait Key
&nbsp;
تابع&nbsp;FILE EXIST
با استفاده از این تابع می توانیم بفهمیم که آیا فایل مورد نظرمان وجود دارد یا خیر . مانند دستورالعمل زیر :
&nbsp;
(ReturnInteger =&nbsp;FILE EXIST(Filename
&nbsp;
طبق این روش به جای Filename نام و مسیر فایل مورد نظرمان را قرار می دهیم . اگر فایل مورد نظر در مسیر وجود داشته باشد ، ReturnInteger برابر یک و اگر وجود نداشته باشد ، ReturnInteger برابر صفر خواهد بود . مانند مثال زیر :
&nbsp;
&quot;myFile$ = &quot;C:MyDirectoryFile.exe
&quot;If&nbsp;File Exist(myFile$)=1 Then Print &quot;Yes&quot; Else Print &quot;No
Wait Key
&nbsp;
با اجرای این مثال اگر فایل File با فرمت exe در مسیر C:MyDirectory ، وجود داشته باشد ، عبارت Yes و اگر وجود نداشته باشد ، عبارت No چاپ خواهد شد .
&nbsp;
تابع&nbsp;PATH EXIST
با این تابع می توانیم بررسی کنیم که آیا مسیر مورد نظرمان وجود دارد یا خیر . مانند دستورالعمل زیر :
&nbsp;
(ReturnInteger =&nbsp;PATH EXIST(PATH
&nbsp;
طبق این دستورالعمل به جای PATH مسیر مورد نظرمان را قرار می دهیم . اگر مسیر مورد نظر وجود داشته باشد ، ReturnInteger برابر یک و اگر وجود نداشته باشد ، ReturnInteger برابر صفر خواهد بود . مانند مثال زیر :
&nbsp;
&quot;myPath$ = &quot;C:MyDirectoryDirect
&quot;If&nbsp;Path Exist(myPath$)=1 Then Print &quot;Yes&quot; Else Print &quot;No
Wait Key
&nbsp;
با اجرای این مثال اگر مسیر C:MyDirectoryDirect وجود داشته باشد ، عبارت Yes و اگر وجود نداشته باشد ، عبارت No چاپ خواهد شد .
&nbsp;
دستور&nbsp;OPEN TO WRITE و&nbsp;دستور&nbsp;ClOSE FILE
با استفاده از این دستور می توانیم فایلی را جهت نوشتن اطلاعات در آن باز کنیم . مانند دستورالعمل زیر :
&nbsp;
OPEN TO WRITE&nbsp;FileNumber,Filename
&nbsp;
طبق این دستورالعمل به جای Filename نام و مسیر فایل مورد نظرمان را قرار می دهیم . و به جای FileNumber یک عدد بین 1 تا 32 قرار می دهیم و در برنامه توسط همین شاخص عددی می توانیم به فایل باز شده ، فرمان خواندن و یا نوشتن اطلاعات را بدهیم . در واقع برای هر فایل باز شده در برنامه ، باید یک عدد به آن فایل اختصاص پیدا کند . مانند مثال زیر :
&nbsp;
&quot;Open To Write&nbsp;1,&quot;C:Data.dat
Close File&nbsp;1
&nbsp;
با اجرای این مثال فایل Data.dat را با هدف نوشتن اطلاعات در آن باز کردیم و عدد یک را به آن اختصال دادیم . و در خط بعدی با توجه به عددی که به فایل باز شده اختصاص داده بودیم ، فایل را بستیم . فایل باز شده بعد از اتمام کار باید بسته شود تا از آسیب دیدگی آن جلوگیری بعمل آید .
&nbsp;
تابع&nbsp;FILE OPEN
این تابع باز و یا بسته بود فایل را بررسی می کند . یعنی طبق عددی را که در برنامه به هر فایل اختصاص داده بودیم ، آن عدد در این تابع وارد شود ، اگر فایل مورد نظر باز بوده باشد ، مقدار این تابع عدد یک و در غیر اینصورت اگر فایل بسته باشد ، عدد صفر توسط این تابع برگردانده خواهد شد . یعنی اگر از دستور Close File استفاده شده باشد ، عدد صفر توسط این تابع برگردانده خواهد شد . مانند مثال زیر :
&nbsp;
&quot;Open To Write 1,&quot;C:Data.dat
&quot;If&nbsp;File Open(1)=1 Then Print &quot;File Is Open&quot; Else Print &quot;File Is Close
Close File 1
&quot;If&nbsp;File Open(1)=1 Then Print &quot;File Is Open&quot; Else Print &quot;File Is Close
Wait Key
&nbsp;
در این مثال در خط اول ، فایل Data.dat موجود در مسیر :C جهت نوشتن اطلاعت باز شد و در خط&nbsp;دوم تابع ()File Open به دلیل باز بودن فایل عدد یک را برگرداند و عبارت File Is Open چاپ شد و در خط سوم فایل بسته شد . به همین دلیل تابع ()File Open به دلیل بسته بودن فایل عدد صفر را برگرداند و عبارت File Is Close چاپ شد .
&nbsp;
توجه&nbsp;! اگر فایل Data.dat وجود نداشت ، با دستور Open To Write بطور خودکار ایجاد و باز می شد .
&nbsp;
دستور&nbsp;WRITE WORD
با این دستور می توانیم عددی را در محدوده ی متغیر از نوع Word ، داخل فایل بنویسیم . مانند دستورالعمل زیر :
&nbsp;
WRITE WORD&nbsp;FileNumber,Variable
&nbsp;
طبق این دستورالعمل به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable عددی با محدوده متغیر Word یعنی عددی بین 0 تا 65535 جهت ذخیره شدن در Hard قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;Open To Write 1,&quot;Data.dat
If File Open(1)=1
&nbsp; &nbsp;write word&nbsp;1,42
EndIf
Close File 1
&nbsp;
در این مثال ابتدا فایل Data.dat را جهت نوشتن اطلاعات باز می کنیم . سپس قبل از نوشتن اطلاعات داخل فایل بررسی می کنیم که آیا فایل برای نوشته شدن اطلاعات باز است یا بسته . در صورت باز بودن ، می توانیم اطلاعات را در آن بنویسیم و بعد فایل را ببندیم .
&nbsp;
نکته&nbsp;: در این مثال فرض بر این است که فایل Data.dat در پوشه ی پروژه است ( یعنی فایل Data.dat کنار فایل اجرایی است ) . به خاطر همین مسیر فایل را تایپ نکردیم .
&nbsp;
دستور&nbsp;OPEN TO READ
با استفاده از این دستور می توانیم فایلی را جهت خواندن اطلاعات از آن باز کنیم . مانند دستورالعمل زیر :
&nbsp;
OPEN TO READ&nbsp;FileNumber,Filename
&nbsp;
طبق این دستورالعمل به جای Filename نام و مسیر فایل مورد نظرمان را قرار می دهیم . و به جای FileNumber یک عدد بین 1 تا 32 قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;Open To Read&nbsp;1,&quot;C:Data.dat
Close File 1
&nbsp;
با اجرای این مثال فایل Data.dat را با هدف خواندن اطلاعات از آن باز کردیم و عدد یک را به آن اختصال دادیم . و در خط بعدی با توجه به عددی که به فایل باز شده اختصاص داده بودیم ، فایل را بستیم . دقت کنید تا فایل باز شده بعد از اتمام کار حتما بسته شود تا از آسیب دیدن جلوگیری شود .
&nbsp;
دستور&nbsp;READ WORD
با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Word ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :
&nbsp;
READ WORD&nbsp;FileNumber,Variable
&nbsp;
در این مثال به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable متغیری با محدوده متغیر Word قرار می دهید . مانند مثال زیر :
&nbsp;
&quot;Open To Read 1,&quot;Data.dat
If File Open(1)=1
Read word&nbsp;1,A
Print A
EndIf
Close File 1
&nbsp;
در این مثال ابتدا فایل را جهت خواندن اطلاعات باز می کنیم . سپس قبل از خواندن اطلاعات داخل فایل بررسی می کنیم که آیا فایل برای خواندن اطلاعات از آن باز است یا نه . در صورت باز بودن ، می توانیم اطلاعات را از آن بخوانیم و بعد فایل را ببندیم . در این مثال ما یک متغیر به نام َA ایجاد کردیم تا از داده استفاده کنیم .
&nbsp;
نکته&nbsp;: در مثال های اخیر ما مسیر فایل را مشخص نکردیم . یعنی عبارت , &quot;Data.dat&quot; به این معنی است که فایل در همان مسیری ایجاد شود که برنامه ما هم اکنون در آن مسیر در حال اجراست . یعنی اگر مسیر پروژه ی ما در آدرس زیر
C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsprjExample
&nbsp;ایجاد شده باشد . با اجرای برنامه ، فایل Data.dat در همین مسیر ایجاد خواهد شد . و اگر فایل را Compile کنیم . یعنی آن را اجرایی کنیم و فایلی با فرمت Exe ایجاد گردد ، می توانیم آن فایل را در هر مسیری و در هر کامپیوتری کپی کنیم و فایل Data.dat هم با این روش کنار فایل اجرایی یعنی در همان پوشه ای که فایل اجرایی در آن وجود دارد ایجاد خواهد شد . از این روش در تمامی دستورات مربوط به کار با فایل ها در تمامی وبلاگ می توان استفاده کرد . مگر اینکه مسیر جاری توسط دستور SET DIR تغییر پیدا کند .
&nbsp;
دستور&nbsp;WRITE BYTE
با این دستور می توانیم عددی در محدوده ی متغیری از نوع Byte ، داخل فایل بنویسیم . مانند دستورالعمل زیر :
&nbsp;
WRITE Byte&nbsp;FileNumber,Variable
&nbsp;
دستور&nbsp;READ BYTE
با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Byte ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :
&nbsp;
READ BYTE&nbsp;FileNumber,Variable
&nbsp;
دستور&nbsp;WRITE LONG
با این دستور می توانیم عددی در محدوده ی متغیری از نوع Integer ، داخل فایل بنویسیم . مانند دستورالعمل زیر :
&nbsp;
WRITE LONG&nbsp;FileNumber,Variable
&nbsp;
دستور&nbsp;READ LONG
با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Integer ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :
&nbsp;
READ WORD&nbsp;FileNumber,Variable
&nbsp;
دستور&nbsp;WRITE FLOAT
با این دستور می توانیم عددی اعشاری ( ممیزدار ) را در محدوده ی متغیری از نوع Float ، داخل فایل بنویسیم . مانند دستورالعمل زیر :
&nbsp;
WRITE Float&nbsp;FileNumber,Variable
&nbsp;
دستور&nbsp;READ FLOAT
با این دستور می توانیم عددی را در محدوده ی متغیری از نوع Float ، که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :
&nbsp;
READ Float&nbsp;FileNumber,Variable
&nbsp;
برای اینکه مقدار عدد ممیز دار درست خوانده شود باید از متغیری ممیز دار نیز برای خواندن استفاده شود ، مانند مثال زیر که از متغیر #a استفاده می کنیم :
&nbsp;
&quot;Open To Read 1,&quot;data.dat
If File Open(1)=1
#Read Float&nbsp;1,a
(#Print &quot;value = &quot;+str$(a
EndIf
Close File 1
Wait Key
&nbsp;
دستور&nbsp;WRITE STRING
با این دستور می توانیم عبارتی کاراکتری را ، داخل فایل بنویسیم . مانند دستورالعمل زیر :
&nbsp;
WRITE STRING&nbsp;FileNumber,Variable
&nbsp;
طبق این دستورالعمل به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable عبارتی کاراکتری قرار می دهیم ( بصورت عبارت و یا متغیر کاراکتری ) . مانند مثال زیر :
&nbsp;
&quot;Open To Write 1,&quot;Data.dat
If File Open(1)=1
&nbsp; &nbsp;&quot;.Write String&nbsp;1,&quot;This Is A Data
EndIf
Close File 1
&nbsp;
دستور&nbsp;READ STRING
با این دستور می توانیم عبارتی را که از قبل داخل فایل نوشته بودیم ، بخوانیم . مانند دستورالعمل زیر :
&nbsp;
READ STRING&nbsp;FileNumber,Variable
&nbsp;
طبق این دستورالعمل به جای FileNumber عدد اختصاص داده شده به فایل و به جای Variable متغیر کاراکتری قرار می دهیم . مانند مثال زیر :
&nbsp;
&quot;Open To Read 1,&quot;Data.dat
If File Open(1)=1
$Read String&nbsp;1,A
$Print A
EndIf
Close File 1
&nbsp;
تابع&nbsp;FILE SIZE
این تابع اندازه ی فایل مورد نظرمان را بر حسب بایت برمی گرداند . هر 1000 بایت 1 کیلو بایت می باشد . مانند مثال زیر :
&nbsp;
(&quot;Print&nbsp;File Size(&quot;C:data.dat]]></description>

<pubDate>Fri, 26 Jun 2026 01:54:58 +0330</pubDate>
</item>


</channel>
</rss>

