ورود

View Full Version : حرکت دادن یک شی روی آرایه2D



h_c2005
یک شنبه 24 تیر 1386, 12:40 عصر
با سلام خدمت دوستان
می خواستم بدونم چه طوری می شه ما یه شی را روی یک آرایه 20*20 طوری که وقتی به ورودی مثلا عدد 3 را می دهیم به راست بپیچد و عدد 4 را که م دهی به چپ بپیچد و 5 را که با یه عدد دیگه می دیم مثلا(5,6) شش قدم جلو برود .
با تشکر :لبخند:

alireza643
یک شنبه 24 تیر 1386, 14:22 عصر
سلام
میشه یه کم بیشتر توضیح بدید که این برنامه قراره چی کار بکنه؟
و دقیقا سوال چیه؟
تا این حد که شما فرمودید فقط میشه اینو گفت که شما عدد رو از ورودی بخونید و بعد با یه شرط ساده چک کنید ببیندی عدد سه است یا چهار برای چرخش به چپ باید از شماره ستون ها کم کنید و برای رفتن به راست به آن یک عدد اضافه کنید.
شرط:
اگر هنگام کار در ستون 1 بودید به جای کم کردن از شماره ستون، از شماره سطر کم کنید و شماره ستون را برابر با 20 قرار دهید.
اگر هنگام کار در ستون 20 بودید به جای اضافه کردن به شماره ستون، به شماره سطر اضافه کنید و شماره ستون را برابر با 1 قرار دهید.

من که چیز دیگه با این توضیحات به ذهنم نمیرسه.
موفق باشید.

emad_67
یک شنبه 24 تیر 1386, 14:50 عصر
فکر میکنم منظورتون مسئله گرافیک لاک پشتی باشه اگه درسته بگید که توضیح بدم در موردش

h_c2005
یک شنبه 24 تیر 1386, 15:28 عصر
دقیقا اگه میشه یه کم در موردش توضیح بدین
خب وقتی که جهت لاکپشت معلوم نیست ما از کجا بدونیم که باید از کدوم ستون یا سطر از شماره آن کم یا زیاد کنیم .
مشکل من همین جهت لاکپشت هست ..

emad_67
یک شنبه 24 تیر 1386, 16:35 عصر
جهت لاکپشت رو در ابتدا خودت میتونی تعیین کنی فرض کن در ابتدا جهت لاکپشت به سمت راست هست برای حرکت اول باید 4 جهت رو تعیین کنی یا با دستور enum یا اینکه 4 تا متغیر تعریف کنی و مثلا تو هر کدوم یه عدد که نمایانگر یه جهت هست رو قرار بدی خوب حال فرض کن که کاربر عدد 3 برای چرخش به راست رو میزنه او ابتدا باید جهت فعلی رو داشته باشی مثلا اگه جهت راست بود وقتی یه چرخش به راست داشته باشیم جهت به سمت پایین میشه برای بقیه جهت ها هم به همین صورت حالا که جهت مشخص شد دیگه میتونی حرکت بدی لاکپشت رو مثلا اگه جهت پایین باشه و کاربر هم بخواد که 6 خونه حرکت کنه باید یه همچین چیزی رو بنویسی


for(int i=0;i<6;i++)
{
if(x+1>0 && x+1<30)
x++;
if(n==1)
a[x][y]=1;
}

توی این کد فرض کد y=1 باشه و x=2 بعد از انجام حرکت مکان میشه y=1 و x=8
قبل از حزکت هم باید چک کنی ببینی که قلم پایین هست یا نه د واقع او شرط n==1 هم همین کار رو میکنه من فرض رو گرفتم که اگه n=0 بود قلم بالاست و 1 قلم پایینه

h_c2005
یک شنبه 24 تیر 1386, 17:16 عصر
یعنی ما باید برای تمام جهت ها و جهت هایی که توسط شماره بهش میدن یه شرط بذاریم
مثلااگه جهت لاک.. راست بود و ورودی چپ .. و.....
این که خیلی میشه؟

emad_67
یک شنبه 24 تیر 1386, 18:38 عصر
بزار یه مثال بزنم تا راحت تر متوجه بشی
این کد رو ببین:


enum status{up,right,down,left};
status direct;
if(direct==up)
direct=right;
else if(direct==right)
direct=down;
else if(direct==down)
direct=left;
else if(direct==left)
direct=up;

این کد رو من برا عدد 3 یعنی چرخش به راست نوشتم در واقع اگه جهت بالا باشه جهت جدید میشه راست و اگه راست باشه میشه پایین و همین طور برا دو جهت دیگه برا چرخش به چپ هم باید کدی عکس این بنویسی

daneshjo IT
یک شنبه 24 تیر 1386, 22:57 عصر
میشه صورت سوال را دقیق بگید.

emad_67
یک شنبه 24 تیر 1386, 23:10 عصر
صورت سوال اینه که فرض میکنیم که یه لاکپشت داریم که این لاکپشت قلم یا مدادی داره که ما باید با فرمان دادن بهش و حرکت اون هر شکلی رو بتونیم ایجاد کنیم دکمه های فرمان به این صورته:
1: قلم بالاست
2: قلم پایین است
3: به راست بپیچ
4: به چپ بپیچ
10و 5 :10 قدم به جلو برو ( یا عددی غیر از 10) و 5 کلید فرمان حرکت است
6 : آرایه را چاپ کن
به فرض یه آرایه 20*20 تعریف میکنیم و لاکپشت باید تو این محدوده حرکت کند

h_c2005
یک شنبه 24 تیر 1386, 23:11 عصر
می خواست از آقاemad گل بپرسم این شماره 5 که با یه عدد دیگه میاد چه جوریه ؟
یعنی مااون عدد بعدی راچه جوری بایدتاثیر بدیم ؟
(5,10) ؟؟؟

emad_67
دوشنبه 25 تیر 1386, 00:01 صبح
میتونی جوری بنویسی که وقتی کاربر 5 رو زد بعد یه پیغامی مبنی بر اینکه چند تا خونه باید حرکت کنه رو بپرسه و عدد 10 رو اونجا وارد کنی فکر میکنم این جوری بهتر باشه یا اینکه باید به صورت رشته دریافت کنی و اونو تفکیک کنی

h_c2005
دوشنبه 25 تیر 1386, 12:09 عصر
سلام دوست عزیز
چه جوری میشه نوع داده ای enum را به تابع فرستاد . ؟

emad_67
دوشنبه 25 تیر 1386, 14:58 عصر
برای فرستادن نوع داده enum به تابع وقتی که نوع داده رو ساختی یه متغییر از اون تعریف میکنی و اونو به تابع می فرستی مثل زیر:


#include <iostream>
enum status{up,right,down,left};
void get(status );
void main()
{
status fr;
get(fr);
}
void get(status a)
{

}

البته توجه داشته باش که نوع داده رو باید global یا سراسری تعریف کنی تا برا تابع شناخته باشه