- 👇👇👇👇👇
-
لینک دانلود
☝☝☝☝☝
با توجه به دو بعدی بودن حرکت روبات از جهت های چپ (L) به جای غرب یا West ، راست (R) به جای شرق یا East ، بالا ((U به جای شمال یا North ، پائین (D) به جای جنوب یا South استفاده شده است - برای زیبایی و تفهیم بهتر پسوند رتبه عددی (مانند st در 1 و ...) از تابع rankpost استفاده شده استکه عدد را گرفته و در خروجی پسوند ترتیبی مربوط به آن عدد را می دهد. این تابع برای نشان دادن این که مثلا چندمین داده را باید وارد کنیم مناسب است
- تابع finalPositionX مختصات فعلی روبات را همراه با دستور حرکت (راست، چپ ، بالا، پایین) گرفته ومولفه افقی مختصات روبات را تغییر میدهد تا مختصات جدید را نشان دیم
- تابع finalPositionY مختصات فعلی روبات را همراه با دستور حرکت (راست، چپ، بالا، پایین) گرفته و مولفه عمودی مختصات روبات را تغییر میدهد تا مختصات لجظه ای را نشان دهیم
- تابع gridBoundControl محدوده صفحه مجاز و نیز مختصات لحظه ای روبات را گرفته و با مقایسه آن با کران های بالا و پایین در راستاهای قائم و افقی تعیین میکند که آیا روبات داخل محدوده مجاز است (بر میگرداند true ) یا نه (بر میگرداند false )
- تابع obstControl لیست شامل مختصات موانع، تعداد موانع و مختصات فعلی روبات را گرفته و اگر مولفه افقی لحظه ای روبات با هر یک از اندیس های زوج لیست مساوی شد و همزامن مولفه عمودی لحظه ای روبات با هر یک از اندیس های فرد لیست مساوی شد، آنگاه یعنی روبات به مانع برخورد کرده (برمیگرداند false ) و در غیر این صورت به مانع برخورد نشده و بر میگرداند true
- در تابع main ابتدا رنگ فونت و بک گراند صفحه بترتیب به زرد روشن(کدE ) و آبی (کد۱) تغییر یافته است (صرفا جهت جذابیت بیشتر برنامه برای کاربر)
- محدوده های ناحیه مجاز حرکت یا همان کران ها از کاربر گرفته شده به همراه ساختارهای امنیتی و کنترلی تا در هیچ راستای افقی یا قائم ، کران بالا از کران پایین کمتر نشود
- مختصات نقطه شروع روبات از کاربر گرفته شده به همراه ساختار کنترل ورودی تا مطممئن شویم روبات شروع اش از ناحیه مجاز بوده است
- سپس با چاپ عبارت How many obstacles exist? کاربر باید تعداد موانع در ناحیه مجاز را وارد کند و سپس مختصات آنها را در ادامه
- بعد از **************** Start move commands with (begin) and exit with (end) ***************** باید دستورات جهت دهی را به صورت مزبور (راست ، چپ ، پایین و بالا) وارد کنیم
- در صورت برخورد با مانع پیام خطای Collision with barrier نمایش داده میشود و درصورت خروج از محدوده مجاز پیام Out Of Grids Boundaries Error
- موقعیت لحظه ای تنها در صورت عدم برخورد به مانع و نیز حرکت در محدوده مجاز در صفحه نمایش داده خواهد شد
if (gridBoundControl(Lx, Ux, Ly, Uy, Xf, Yf) == true && obstControl(obstaclesOrdination, 2 * ObsN, Xf, Yf) == true)
cout << "Current position = (" << Xf << ", " << Yf << ")";
- هر بار حرکت مجاز که یک واحد میباشد یه واحد به کمیت مسافت می افزاید
If (gridBoundControl(Lx, Ux, Ly, Uy, Xf, Yf) == true )
distance ++ ;
- جابه جایی نیز طبق قانون فیثاغورس محاسبه خواهد ش
displacement = sqrt(pow(Ox - Xf, 2) + pow(Oy - Yf, 2));