PDA

مشاهده نسخه کامل : الگوریتم بازی مار و پله با c



zahra_k
چهارشنبه 13 اردیبهشت 1385, 22:59
سلام دوستان و میخوام بازی مار و پله رو با C بنویسم ولی تا حالا با گرافیک C کار نکردم . کسی میتونه کمکم کنه؟

zahra_k
پنجشنبه 14 اردیبهشت 1385, 20:27
با یه الگوریتم هم کارم راه میفتاد ، راضی به زحمت نبودم

saalek110
پنجشنبه 14 اردیبهشت 1385, 21:05
من الگوريتمي ندارم. ولي نوشتنش ساده است.
من حاضرم كمك كنم. هم در گرافيكش. هم در كدنويسي اش.
.
من يك بازي مشابه ساخته ام قبلا. با سي++.
در مورد اين بازي،
يك ارايه دو بعدي تعريف كنيد.(شايد هم يك بعدي ساده تر باشه و موقع نمايش جور ديگر نمايش داد) بعد محتوي خانه ها مي تواند اعداد مختلفي داشته باشد كه نشانه وجود مهره ، يا سر و ته نردبان و مار است.
براي تاس هم از تابع راندوم ميشه استفاده كرد. و صدا هم ميشه اضافه كرد.
بعد اينكه مهره اي حركت كرد، يكسري تابع test بكار مي افته تا ببينه مهره ما وارد چه خانه اي شده. و حركت لازم را ايجاد مي كنه. من از سايتي نگاه نكرده ام ولي به احتمال قوي با سرچ مختصري ميشه سورس هاي مفيدي پيدا كرد. يك نمونه مارپيچي كه مهره بايد راه خروج را پيدا كند را سورسش را دارم. و يك سورس ساده شطرنج.
.

zahra_k
جمعه 15 اردیبهشت 1385, 11:31
ممنون که منو راهنمایی کردید من شروع می کنم ولی اگه میشه یه لطفی کنید و بگید از کجا می شه سورس هایی که میتونه کمکم کنه پیدا کرد

saalek110
جمعه 15 اردیبهشت 1385, 12:54
با سلام.
سورس ها را من با كلمات
c+source+game
پيدا مي كنم.
ولي آنقدر راه انداختن سورس ها كار داره كه آدم خودش 10 بار بنويسه راحت تره.
پس من نظر خودم اينه كه از طرز كدنويسي سورس ها ((فقط)) الهام بگيريم و برنامه را خودمان بنويسيم چون كار خيلي ساده تره.
خيلي از اين الهام ها را من از بازيهايي كه با وي بي نوشته شده بود گرفتم.
اگر نياز بود در عرض چند دقيقه من مي توانم سرچ كنم و لينك بدهم.
ولي من كل اين برنامه را خودم قبلا مشابه اش را نوشته ام. در يك بازي هر خانه يك مربع بود كه مجموعا شهري مي ساختند. همان
simcity 4
بازي معروف را من شبيه سازي كردم با سي در محيط گرافيكي و كار هم مي كرد.
قالب برنامه را بسازيد ، بعد از سورس ها براي بهينه سازي و افزودن جلو هاي زيبا با همان روش الهام گرفتن كار خواهيم كرد.
.

zahra_k
جمعه 15 اردیبهشت 1385, 23:18
خوب منم برای آشنایی با کدها اون برنامه ها رو می خوام ، شما نمی تونی همون کار خودتونو به من بدید تا ببینم ؟ یا لااقل یه سری از کدهای گرافیکیشو ؟

Colonel
شنبه 16 اردیبهشت 1385, 10:41
با توربو سی تحت داس میخواین این برنامه رو بنویسین؟
دستورات گرافیکی رو میتونید در Help خود توربو سی پیدا کنید با مثال های کافی و مناسب.

saalek110
شنبه 16 اردیبهشت 1385, 20:16
چشم.
همه را تقديم مي كنم.
البته از هاردم پاك كرده ام ولي به سرعت مي توانم اسكلت اصلي را باز ايجاد كنم.
.

saalek110
یکشنبه 17 اردیبهشت 1385, 02:22
بنام خدا.
لازمه چند نكته را اول كار بگم.
اولا انتخاب موضوع كار و روش كار با شماست و من هر چه الان مي گويم براي تبادل اطلاعات است.
اولين موضوع اينكه من يك cd خريدم كه مارپله و منچ را هر دو را داشت. يعني يك cd بازي بود. و بازي كامل با تمامي جوانب و كامل. در مورد مار پله راستش با وجودي كه خيلي قشنگ برنامه ساخته شده بود ، هيچ جذابيتي نداشت. ميخواهم بگويم حالا كه مي خواهيد زحمت بكشيد ، يك چيزي بسازيد كه بتوانيد به عنوان يك بازي جذاب بهش افتخار كنيد ولي در مورد مارپله وقتي ما چند نفري بازي مي كرديم ، فقط كار بازي كنان اين شده بود كه ماوس را بگيرند و روي يك دكمه كليك كنند و بعد اتوماتيك تاس ريخته مي شد و اتوماتيك مهره آن فرد جلو مي رفت و حالا اگر به نردبان يا مار برخورد مي كرد ، باز تغيرات لازم اتوماتيك انجام مي شد. در كل بازيكن فقط يك دكمه را مي زد و بعد ماوس را مي داد به نفر بعد. و كلا هيچ جذابيتي نداشت. يعني در آخر كار بازي غيرمهيجي خواهيد داشت. خودتان اينها را دقيق تصور كنيد تا درك كنيد چه محيط بي روحي ايجاد مي شود. بعد كلي زحمت به چيز جالبي نمي رسيد. ولي در مورد منچ در اين cd وقتي 3 نفره يا 4 نفره بازي مي شد خيلي هيجانش بيشتر بود. چون هر فرد 4 مهره دارد و قدرت انتخاب دارد. مثلا مي تواند به كسي ارفاق كند يا از كسي انتقام زدن مهره اش را بگيرد. حالا چون در اين cd اين دو بازي كنار هم بود مقايسه كردم. ولي مثلا مي توانيد يك واليبال ساده بسازيد كه خيلي باز قشنگ تر ميشه. من داسي آن را زماني كه هنوز one نيامده بود و 386 و 486 فقط آمده بود را ديده بودم. داسي اش هم قشنگ بود. يا بازيهاي ديگر كه الان در ذهنم نيست. كارتي يا مهره اي. خودتان به بازيهاي مختلف فكر كنيد.

دومين مسئله اينه كه استفاده از توابع گرافيكي در سي بسيار ساده است.
سومين نكته اينه كه اينترفيس شما چيه؟ اگر داسي است و با توربو سي كار مي كنيد ، محيط بازي هم داسي ميشه ولي با سي بيلدر يا ويژوال سي ميشه اينترفيس(شماي) ويندوزي توليد كرد. متاسفانه من تابحال موفق به كار با اين دو نشده ام. ولي مي توانم با ويژوال بيسيك كار كنم . اگر مي خواهيد كدنويسي سي نمرين و كار كنيد، مي توانيد اينترفيس را با وي بي توليد كنيد و بين كدهاي سي و برنامه وي بي به راحتي با دستور shell ارتباط برقرار كنيد. يعني برنامه سي نتايج را در يك جايي مثل يك فايل ذخيره كنه و برنامه وي بي آن را مورد استفاده قرار دهد و وظيفه برنامه وي بي فقط نمايش باشه. البته راههاي ديگري براي ارتباط غير فايل هم حتما هست كه دوستان ديگر راهنمايي مي كنند. اگر وي بي كار نكرده ايد ، من حاضرم آن قسمت را ايجاد كنم. حتي مي توانيد وي بي را هم اگر نصب نكرده ايد ، نصب نكنيد. قسمت وي بي را من مي نويسم و فايل exe وي بي را به شما مي دهم و شما قسمت سي را بنويسيد و بعد دو فايل سي و وي بي را كنار هم قرار مي دهيد و با دكمه هاي وي بي و دستور shell فايلهاي سي را به خدمت مي گيريد.
با ابزارهاي image و picturebox به راحتي ميشه عناصر بازي را با تنوع بالا كنار هم داشت و خيلي زيبا تر ميشه.

اما در مورد برنامه سي.
من در مورد بازي خودم ،
فايل اول را اختصاص دادم به باز كردن محيط گرافيكي و تابع main و تمامي include هاي لازم.
بقيه فايلها را با پسوند h ذخيره كردم. البته درستش اينه كه همه پسوندcpp داشته باشند و در يك پروژه قرار دهيم. ولي برنامه من هم هيچ مشكلي نداشت. در مورد سي بودن يا سي پلاس بودن هم فكر نمي كنم در مورد اين برنامه فرقي داشته باشه. برنامه من cpp بود پسوند فايل اولش و بقيه h بود.
در فايل دوم كه h بود، من حلقه اي ساختم براي دريافت كليدها از كاربر(بازي كننده) ولي بعدا ديدم با ماوس است كه برنامه جذاب ميشه و كلا تمام برنامه را تغيير دادم و به جاي كليد ، از ماوس استفاده كردم. مثلا براي رسم يك خيابان در شهر ، با ماوس دو طرف را علامت مي زدم و خيابان رسم مي شد. البته اين خوب نبود. ميشه كاري كرد كه برنامه پايين نگه داشته شدن ماوس را هم بفهمه كه با استفاده از وقفه هاي ديگري انجام ميشه. اين قسمتها را هم من آماده مي كنم و مشكلي نيست. و فرقي هم نمي كنه در چه بازي ئي. هر بازي ئي كه شما خواستيد.
پس فايل دوم شد حلقه. كه در ماوس و كيبورد فرق داره.
روش كار من اين بود كه در فايل دوم يك تابع ساختم و در فايل اول اعلان وجود تابع را كردم. و اين قضيه مسلسل وار ادامه خواهد داشت. يعني در فايل سوم هم تابعي داريم كه در فايل دوم مي گيم كه چنين تابعي داريم. البته ميشه همه برنامه را در يك فايل داشت ولي مي دانيد كه كشيدن اسكرول بار و طولاني بودن اين تك فايل باعث ميشه كه بعد مدتي ديگه نشود كار كرد. من سعي كردم هر فايل جوري باشه كه كل كدها را همزمان روي صفحه مانيتور بتوانم ببينم يا حدااكثر درازي كدها دو برابر اندازه مانيتور باشه.
من حدود 10 تا 15 فايل داشتم و مي دانستم هر فايل وظيفه اش چيست و اسم فايلها را هم با توجه به اين وظيفه گذاشته بودم.
در ضمن در ويندوز تنظيم كرده بودم كه وقتي روي فايل اول(با پسوند cpp ) كليك مي كردم ، با توربو سي اتوماتيك باز بشه تا وقتم اين جوري تلف نشه.
و همچنين من كار اديت كدها را در اديتور كدوايز انجام مي دادم چون از اديتور توربو سي خيلي راحت تر است. در تاپيكي در تالار سي موجود است ، اگر خواستيد دانلود كنيد. مثلا كپي پيست خيلي راحت تر است تا انجام اين كار در اديتور توربوسي. البته اگر شما هم از توربوسي استفاده مي كنيد. من تمامي تمرينات خود را در توربوسي انجام داده ام و با كامپايلرهاي ديگر خيلي خيلي كم آشنايي دارم.

خوب. كليات را گفتم. كدنويسي اش هم چه گرافيكي ، چه رياضي و ساختاري كاري نداره. و اكثرا تكرار كدهاي مشخصي است. آنچه فقط مهمه نظم بالاي كار است تا با error برخورد نكنيد. چون در برنامه هاي بزرگ پيدا كردن خطا به مراتب سخت تره. پس بايستي هميشه يك كپي از برنامه خود كنار داشته باشيد. چون ممكنه كه بعد ايجاد تغييرات ديگه نتوانيد رفع خطا كنيد و گاه مجبور مي شويد كه كل برنامه را از اول بنويسيد. پس هميشه يك بك آپ بگيريد. و وقتي ارتقا برنامه با موفقيت انجام شد كپي را نو كنيد يا كپي بعدي را بدون دست زدن به كپي قبلي باز ذخيره كنيد.
نكته ديگر اين كه گاهي شما مي خواهيد يك ابزار جديد را به برنامه بيافزاييد. مثلا يك تابع گرافيكي جديد يا يك چيزي مثل struct يا class . بهتره كه اول در يك برنامه تست كه هميشه كنار داريد آن ابزار جديد را امتحان كنيد و وقتي بهش مسلط شديد ، بياوريد داخل برنامه اصلي. ولي باز هم با داشتن كپي از برنامه در جايي امن. بهتره اول در محيط غيرگرافيكي(اگر ابزار جديد غيرگرافيكي است) امتحان كنيد و بعد در محيط گرافيكي تست و بعد در برنامه اصلي. البته با شرايط مختلف فرق دارد كه خودتان تصميم مي گيريد.
يك قابليت هست كه شما مي توانيد به محيط غير گرافيكي برويد و كارهايي را بكنيد و بعد بازگرديد به محيط گرافيكي. كه من اين كار را لازم ندانستم و تمام كارها را در محيط گرافيكي انجام دادم. مثل نمايش كلمات و اعداد.
قابليت ديگر اينه كه شما مي توانيد صفحات متعدد داشته باشيد. يعني در محيط گرافيكي شما مثلا 8 صفحه واقعا داريد كه فقط يكي را بر روي مونيتور مي بينيد. شما مي توانيد بر روي هر يك از اين 8 صفحه چيزهايي را به نمايش بگذاريد و هر صفحه را كه خواستيد را روي صفحه مونيتور به نمايش بگذاريد. اين كار باعث سرعت بسيار بالايي مي شود. چون براي پاك كردن صفحه و رسم صفحه جديد در حالت معمولي وقت بيشتري صرف مي شود. مثلا در صفحه 2 امتيازات بازي باشه كه با فشار يك دكمه بلافاصله بيايد و برود و خيلي با سرعت بالايي انجام شود.
صدا هم ميشه اضافه كرد. كه در مراحل بعدي مطرحه.
براي شروع ، شما براي فايل اول كه مشكلي نخواهيد داشت. فقط ايجاد حلقه در فايل دوم مي ماند. و فايلهاي بعدي هم يكسري مقايسه و محاسبات است. سعي كنيد حلقه را بسازيد. دستورش الان يادم نيست ولي پيدا مي كنم. كلا چند نوع حلقه ميشه ساخت. يك نوع اينه كه شما با while چرخش ايجاد مي كنيد و وسط حلقه يك getch مي گذاريد. عيبش اينه كه آنجا حلقه گير مي كنه تا شما دكمه اي را بزنيد.
نوع ديگر حلقه هست كه همين طور مي چرخه تا كليدي را نزده ايد و وقتي كليدي را بزنيد ، از حلقه خارج ميشه. اين نوع براي بازي مناسب است. يعني وقتي از حلقه خارج شد ما در زير حلقه(يعني در ادامه كدها بعد كدهاي حلقه) تدابيري مي ريزيم براي تصميم گيري براي كليد زده شده كه با if انجام ميشه. كه مثلا مي گيم



if (a==’x’ ) ….

البته شايد همين يك خط را هم من غلط نوشتم كه بايد بروم نگاه كنم.
ولي براي اين نوع حلقه يك تابعي هست كه مقدار صفر و يك برميگرداند موقعي كه كليد زده شده باشد يا زده نشده باشد.
البته تمامي اين نوع حلقه ها براي نوع ((صفحه كليدي)) است.
براي نوع ((ماوسي)) ما حلقه امان فرق دارد. براي اين نوع در وسط حلقه ماوس را مي خوانيم و بعد باز با if تصميم مي گيريم كه با كليك چپ يا راست كدام تابع احضار بشه.(كه هر تابع در يك فايل بود.)
.
البته روشهاي من همه ابتكار خودم بوده و مدعي نيستم درست باشه اين كارها و خوشحال مي شوم دوستان ديگر،راههاي بهتر را بگويند.
.

milani
سه شنبه 02 خرداد 1385, 10:14
من برنامه کامل آنرا برای فروش دارم
اینن برنامه به زبان C++ است که هم می شه با کامپیوتر با اون بازی کرد و هم دو نفری تو اون بازی کرد.

Lahum
جمعه 20 اردیبهشت 1387, 12:55
سلام دوستان
کسی برنامه بازی منچ رو توی محیط C داره؟
من گرافیکش رو نوشتم ولی بازیشو نمی تونم بنویسم اگه کسی کد بازی رو داره ممنون میشم اگه بده استفاده کنم :)

Lahum
جمعه 20 اردیبهشت 1387, 20:30
خواهش می کنم اگه کسی سورس این بازی رو داره بزاره اینجا خیلی بهش احتیاج دارم :sad:
ممنون میشم

azame mahmoodi
جمعه 31 خرداد 1387, 12:19
سلام خدمت دوستان عزیز
من عضو جدید هستم
من برنامه بازی ماروپله رو میخوام تورو خدا هرکی داره بهم بده تا 5روز دیگه میخوام به استاد تحویل بدم :sad:
با تشکر

حسین نوباغی
چهارشنبه 20 آذر 1387, 11:56
ببخشید اگه ممکنه برنامه بازی مار و پله با لیست پیوندی بهم بدین خیلی لازمه.