PDA

نسخه کامل مشاهده نسخه کامل : راهنمایی در مورد پروژه دانشگاه



miladma
18-05-2011, 11:52
سلام به همه
من یه کمک می خوام نه خود کدو اگه میشه در مورد الگوریتم ها هم راهنمایی کین
پروژه ما اینه
پروژه : بازی مار
یک جدول 10 در 15 در نظر بگیرید، هر یک از خانه های این جدول میتواند

1- خالی باشد که در این صورت آن را با - نمایش می دهیم،
2- حاوی خوراکی باشد که آن را با * نمایش می دهیم.
3- نقطه شروع باشد که با s نمایش داده می شود. (نقطه شروع همیشه در پایین ترین سطر جدول است)
4- نقطه پایان باشد که با e نمایش داده می شود.(نقطه پایانی هم همیشه در بالاترین سطر است.)
5- مانع باشد که که با b نمایش داده می شود.
محل موانع و خوراکی ها به صورت تصادفی تعیین می شود. محل نقطه شروع در سطر پایین و نقطه پایان در سطر بالا هم به صورت تصادفی تعیین می شود.
قوانین بازی به این صورت است.
1- مار یک موجود انعطاف پذیر است که طول آن 4 است. سر مار با o و بدن او با m نشان داده می شود.
2- طول مار در بازی ثابت می ماند.
3- با رسیدن به خانه خوراکی مار خوراکی را می خورد و 10 امتیاز می گیرد.
4- هر 30 امتیاز یک جان حساب می شود.
5- اگر مار سعی کند وارد خانه ای بشود که مانع در آن است، یا اگر سعی کند از محیط بازی خارج شود، یکی از جان های مار از او گرفته می شود( 30 امتیاز). اگر مار جان نداشته باشد، مار سوخته و بازی تمام می شود.
6- در ابتدای بازی مار بیرون سر ما در خانه s و بقیه بدن او خارج از زمین است.
7- مار باید با گرفتن بیشترین امتیاز خود را به خانه e برساند و از آن خارج شود.
8- کنترل حرکت مار به دست کاربر است. در هر بار :
1- ورودی 1 یعنی حرکت به بالا
2- ورود 2 یعنی حرکت به پایین
3- رورودی 3 یعنی حرکت به راست
4- ورودی 4 یعنی حرکت به چپ
9- پس از هر بار که کاربر یک ورودی وارد می کند( هر حرکت مار) باید وضعیت جدید و امتیاز کسب شده را به کاربر نشان بدهید.
لطفا راهنمایی کنین آخه 5 نمره داره و به زبان turbo ++c هستش و تا آخر آرایه ها بیشتر نخوندیم
بازم مرسی از همتون

mohsen_7
19-05-2011, 12:45
سلام دوست عزیز
برنامه واقعا جالب و خوبی طرح شده. منتها اگه خیلی تازه کار هستید شاید یه کم سخت باشه واستون. اما اگه وقت بذارید حتما شدنیه.

شما میتونید بازی رو بر روی یک آرایه دو بعدی یا همون ماتریس مدل کنید. یک ماتریس 10 در 15 از کاراکترها میسازید و در طول برنامه با مقدار دهی به خونه های ماتریس بازی رو به پیش میبرید. البته شاید برای برخی مسائل مجبور شید که یه خورده ماتریستون رو از حد واقعی بزرگتر انتخاب کنید که مسئله مهمی نیست.

هر بار که تغییری در بازی اتفاق میوفته صفحه رو پاک میکنید و از اول تمام ماتریس رو میکشید.

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

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

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

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

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

miladma
23-05-2011, 11:48
از شما ممنونم
من صحفه رو تونستم بنویسم با استفاده از تابع رندم تونستم صفحه رو ایجاد کنم
حالا می خوام که مقادیری آرایه پذیرفته رو عوض کنم مثلا خانه a[5][5]که الان b هست می خوام با "M" تغییرش بدم
سوال بعدی اینه که برای گرفتن مقادیر متوالی باید چیکار کنم

mohsen_7
23-05-2011, 20:44
خواهش میکنم دوست عزیز.

برای عوض کردن مقدار مثلا خونه a[5][5] احتیاج به یک عمل انتساب ساده دارید. به این شکل:


A[5][5] = ‘m’;

بخش دوم سوالتون رو هم یک بار دیگه توضیح بدید. متوجه منظورتون نشدم.

البته اگر منظورتون مقداردهی به خونه های قرارگیری مار در هنگام حرکته، یک روش راحتی هست که اگه به ذهنتون نیومد براتون توضیحشو میدم. موفق باشید

miladma
24-05-2011, 14:33
سپاسی مجدد دوست گرامی
آیا برای بدن مار که گفتین یه آرایه دو بعدی باید باشه آیا آرایه بدن با آرایه جدول باید نام مشترکی داشته باشه.

mohsen_7
24-05-2011, 14:46
پاسخ هر دو سوالتون خیر هست.

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


int snake1[2];
int snake2[2];
int snake3[2];
int snake4[2];

من ساده ترین شکلش رو در نظر گرفتم تا براتون واضحتر باشه.

این چهار آرایه هر کدوم مختصات یکی از خونه هایی که مار در جدول اشغال میکند رو نگهداری میکنند. مثلا snake1 مختصات فعلی سر مار رو در جدول نگهداری میکنه.

در این حالت اگر سر مار در خونه [4][5] (سطر پنج و ستون چهار) قرار داشته باشه مقدار snake1[0] پنج و مقدار snake1[1] چهار خواهد بود.

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

miladma
25-05-2011, 00:10
من این دستور رفرشی که میگید بلد نیستم لطفا راهنمایی کنید.

mohsen_7
25-05-2011, 10:41
ریفرش دستور خاصی نیست. منظورم این بود که با حرکت کردن مار ابتدا اون چهار آرایه ی دو تایی رو مقدار دهی میکنید و سپس جای مار رو در خونه های ماتریس با مقادیر تازه به روز میکنید.

mohsen_7
25-05-2011, 11:31
برای حرکت دادن مار در خونه های جدول الگوریتم ساده و جالبی وجود داره.

هروقت دستور جابجایی مار در جدول به برنامه رسید ابتدا مقادیر آرایه ای که مختصات سر مار رو نگهداری میکنه (snake1) رو در یک آرایه موقت دوتایی مثل temp1 ذخیره میکنید و سپس مختصات سر مار رو با توجه به فرمانی که آمده به روز میکنید.

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

در مرحله بعدی اینبار مختصات snake2 رو در temp2 دخیره میکنید و snake2 رو با مقادیر temp1 مقداردهی میکنید و همینطور الی آخر.

در واقع ما میخواهیم بعد از جلو بردن سر مار بقیه اعضا بدنش رو یکی یکی جلو بیاریم.

miladma
26-05-2011, 19:38
سلام محسن جان ازت بي نهايت ممنونم
من باز تو اين برنامه گيج شدم و واقعا ديگه هيچي بلد نيستم اگه ميشه الگوريتم کليشو همرا با جزئيات بهم بگي ممنونت ميشم و ببين آيا من اين کدي که نوشتم با برنامه که بايد بنويسم سنخيتي داره يا نه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
char a[15][10];
for(int i=0;i<=9;i++)
{
for(int j=0;j<=14;j++)
{int b;
char c;
b=rand()%3;
switch(b)
{
case 0:
c='b';
break;
case 1:
c='-';
break;
case 2:
c='*';
break;
}
a[j][i]=c;
}
} int f,e,y;
f=rand()%15;
a[f][0]='e';
e=rand()%15;
a[e][9]='s';

for(int l=0;l<=9;l++)
{
for(int k=0;k<=14;k++)
cout<<a[k][l]<<" ";
cout<<"\n";
}


return 0;
}

mohsen_7
30-05-2011, 20:13
دوست عزیز برنامتون رو اجرا کردم تا اینجا خوب بوده. یه خورده روش تغییرات دادم بررسی کن تفاوت هاش با برنامه خودت مشخصه. کار اصلی که کردم این بود که دور جدول رو با b پر کردم. شما هم تا جایی که میتونی کدهاش رو اصلاح کن من انشالله آخر هفته فرصت کردم حتما یه دست حسابی روش میکشم. متاسفانه این هفته اصلا فرصت نداشتم. یکی از کارهایی که باید انجام بدی اینه که خونه های وسط رو اول تماما با - پرش کنی بعد به تعدادی که میخوای خوراکی رو به صورت رندم تو خونه های جدول قرار بدی. کار بعدی هم اینه که بتونی چند تا مانع به هم متصل داخل جدول قرار بدی. کار سختی نیست شما سعی کن انجام بدی این کارارو اگه نتونستی من انشالله فرصت کنم حتما کمکت میکنم.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

miladma
31-05-2011, 23:34
مرسی محسن جان
اگه ممکنه یه راهنمایی هم در مورد بدن مار و حرکت بذار چون من چند روز تو هیمن مورد قفلم و هیچی هم نتونستم جلو برم
بدن مار باید آرایه باشه؟ کاراکتر باشه؟ چند بعدی باشه ؟ تعداد سطر و ستون ها چند تا باشه؟
چطور با آرایه table ارتباط برقرار کنه ؟
و ورد اولیه چطور باشه؟
:20:
بی نهایت تشکر

miladma
05-06-2011, 12:43
محسن جان من امیدم بعد از خدا به شماست دیگه چیزی به تاریخ تحویل پروژه نمونده لطفا کمک کن.

mohsen_7
05-06-2011, 16:00
عذر میخوام میلاد جان. من تصور میکردم آخر هفته فرصت خوبی داشته باشم اما متاسفانه اینطور نشد. خوب شد یادآوری کردی من حتما تا جایی که از دستم بر بیاد کمکت میکنم. چون میدونم تلاشتو کردی این کارو میکنم. امروز سعی میکنم یه حال اساسی به برنامت بدم. فقط شما باید بعد از دیدن کد حتما خط به خط بخونیش و از تمام جزئیاتش مطلع بشی تا هم یاد بگیری و هم اینکه اگه استادتون چیزی پرسید بتونی مسلط جواب بدی. اگر خودت هم چیزی نوشتی اینجا بذار ببینم چه کردی.

mohsen_7
05-06-2011, 21:00
الان دارم روش کار میکنم. فعلا تا اینجارو داشته باش و بررسیش کن تا بازم واست آپ کنم. سعی کن خودتم حتما روش کار کنی.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

mohsen_7
05-06-2011, 21:14
آقا میلاد من میتونم حرکت مار رو برات بنویسم. منتها شما قبلش کدی که برات فرستادم رو خوب نگاه کن و فرض کن مار یک خونه در جدول اشغال میکنه. سعی کن با کمک چیزی که برات فرستادم حرکت رو برای اون حالت بنویسی. بعدش روی حرکت مار بزرگتر با هم بحث میکنیم. اگر نتونستی من واست کاملش میکنم. این قسمت از کد واقعا میتونه به ذهنت برای برنامه نویسی کمک کنه. حیفم اومد این فرصت رو ازت بگیرم. موفق باشی من باز سر میزنم. فعلا بای

miladma
05-06-2011, 22:49
واقعا نمي دونم به چه زبوني ازتون تشکر کنم و حداقل کاري که مي تونم بکنم اينکه دکمه تشکر رو واستون بزنم تا بيشتر از اينها شرمنده شما نشم هرچند ميدونم در مقابل کار شما بسيار نا قابله
....
آقا محسن من اين برنامه که شما لطف کردين نوشتين رو ران کردم البته اون برنامه قبليتون هم همين طور
فک کنم شما با لینوکس یا حداقل به غیر از وزژنی که من باهاش کار میکنم کار میکنید و کامپایلر من از #include<vector> ارور میگیره که من با حذفش و با تقییر دادن while(true) به while (1)
مشکلو حل کردم و ران شد ولی استاد ما هینطوری جدولو خواسته که من نوشته بودم و موانع دور
برشو نخواسته اگه خواستی یه سری به وبلاگ استادمون بزن
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید البته شک ندارم که خود شما هم
استاد کسای دیگی هستین بازم مرسی امیداورم روزی در این دنیای کوچک بزرگ نما بهم برسیم
ومن بتونم جبران کنم.

mohsen_7
06-06-2011, 20:47
واقعا نمي دونم به چه زبوني ازتون تشکر کنم و حداقل کاري که مي تونم بکنم اينکه دکمه تشکر رو واستون بزنم تا بيشتر از اينها شرمنده شما نشم هرچند ميدونم در مقابل کار شما بسيار نا قابله
دشمنت شرمنده دوست عزیز




آقا محسن من اين برنامه که شما لطف کردين نوشتين رو ران کردم البته اون برنامه قبليتون هم همين طور فک کنم شما با لینوکس یا حداقل به غیر از وزژنی که من باهاش کار میکنم کار میکنید و کامپایلر من از #include<vector> ارور میگیره که من با حذفش و با تقییر دادن while(true) به while (1) مشکلو حل کردم و ران شد
نه من در visual c رانش کردم. اون فایل سرایندی که پاکش کردی واسه مثال دیگه ای بود که یادم رفته بود پاکش کنم. کار درستی کردی پاکش کردی.




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



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

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


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



در پناه حق باشی

miladma
07-06-2011, 15:52
محسن جان درود بر تو
من اون برنامه که شما نوشته بودید به زبون خودم ترجمه کردم:31: مثل برنامه اولی که نوشته بودم در آوردم منتها از بر شما الگو گیری کردمو با استفاده از تابع نوشتم.
همون طوری که گفتی ابتدا حرکت یه تیکه از بدن مار بنویس من نوشتم و فقط سر مار در جهات مختلف حرکت دادم.
حالا شما اگه ممکنه درمورد اعضای دیگه بدن مار یه خورده توضیح بدین وچه جوری می تونم بدن مار رو جا به جا کنم راهنمایی کنین
فک کنم یواش یواش داریم به امتیاز بندی و قوانین حرکت مار که استادمون تعیین کرده می رسیم اگه ممکنه در این مورد هم لطف کنین توضیح بدین
من تو این کد آرایه init رو یه خورده بزرگتر در نظر گرفتم تا با مقدار دهی اولیه به مشکل برنخورم
بعد در مورد اون آرایه که مختصات بدن مار نگهداری میکنه و کجا باید ازش استفاده کنم یه خورده توضیح بدین.
بازم ممنونم........

miladma
08-06-2011, 21:34
محسن جان من سعی کردم که مار ور حرکت بدم ولی نتونستم ابن کد نوشتم براش ولی حرکت نکرد من دیگه ایده ای براش ندارم واقعا دیگه گیج شدم.
اگه لطف کنی اشکال منو بگی ممنونت میشم بخدا
[

mohsen_7
09-06-2011, 22:41
سلام آقا میلاد

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

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

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

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

---------- Post added at 11:41 PM ---------- Previous post was at 11:39 PM ----------


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

miladma
09-06-2011, 22:50
محسن جان من دیگه تموم کردم مرسی ازت واقعا نمی دونم چطور ازت تشکر کنم
من برنامه رو میفرستم تو صندوقت

mohsen_7
09-06-2011, 23:39
خیلی عالیه که خودت تونستی بنویسی. ارزش این کارت واقعا عالیه. بهت تبریک میگم.

من برنامه رو توی visual c نوشتم اما چون میدونستم استادتون ازتون توی turbo c خواسته اینه که به یاد گذشته ها یه سری هم توربو سی زدم و برنامه رو برات کانورت کردم تا کارت ساده تر بشه. البته من واقعا هرچی فکر میکنم دلیل اینکه چرا هنوز بعضی از استاتید turbo c رو به دانشجوها معرفی میکنن متوجه نمیشم. چون با وجود ابزارهای جدید و عالی و راحت دیگه چه نیازی به سرو کله زدن با محیط مشکل توربو سی وجود داره؟ اگر منطقشون اینه که ویژوال سی خیلی بزرگه و خیلی سطح بالاست یا مثلا انحصاریه خب میتونن دانشجوها رو با gcc به همراه واسط های خیلی جالبی مثل eclipse آشنا کنن. این محیط ها هم خیلی کاربر پسند تر هستن و هم به روز هستن و با آخرین نسخه های کامپایلر ها کار میکنن. به هر حال شایدم اونا چون استاد هستن چیزایی میدونن که ما که تازه واردیم نمیدونیم الله یعلم :13: به هر حال میتونی با این کد راحتتر برنامه منو ران کنی و ببینی و با برنامه خودت مقایسش کنی. موفق باشی. به امید دیدار



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

miladma
09-06-2011, 23:51
مثل اینکه موقعی که من نوشتم شما هم در حال تایپ بودین
محسن جان برنامه رو نوشتم بودم و دقیقا شد همین طوری که استادمون گفته بود
ولی این لطفی که در حق من کردی رو هیچ وقت فراموش نمی کنم البته من در حد دانشجویی نوشتم نه مثل شما حرفه ای من مجبورم این کدها رو پاک کنم ولی کدی که نوشتم رو به صندوق شما میفرستم بازم از تشکر میکنم
شرینی نمره رو هم چون از دستم کاری برنمیاد فقط تو این شب آرزوها واست دعا میکنم تا به سلامت بری سربازی برگردی و موفق باشی

mohsen_7
10-06-2011, 00:28
خيلي ممنون دوست عزيز. همين دعات بزرگترين شيريني بود. شمام موفق باشي