المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : طريقة عمل لعبه Snake



TopCoder_FCI
09-17-2008, 02:46 AM
السلام عليكم ورحمه الله وبركاته

ازيكو يا جماعه ... كل سنه وانتم طيبين ...
أنا انهاردة هديلكو شويه اممممم هما شويه حلوين يعنى :D
فى طريقه عمل ال ( اكيد مش بسبوسه :P (
طريقه عمل ال سناك او ما تسمى بال ثعبان

تعالو كدة نفكر
يعنى اية سناك ...بلاش يعنى اية
طب اية هى هيئه ال سناك ... عبارة عن اية ...؟؟؟
انا من وجهة نظرى شفت ان ال سناك عبارة عن شويه حاجات مرتبطه ببعضها وبتتحرك
هتقولى ازاى ؟

هقولك دلوقتى ... لو جبت عقد مفكوك يعنى على هيئة خط مستقيم بالشكل دة
00000000000000
عبارة عن فصوص جنب بعضها وليها نفس الشكل
طب اية رأيك تحرك العقد دة على الأرض مثلاً وشوف طريقه تحريكه
هتلاقيه بياخد الباث ( المسار ) اللى انت اتحركت فيه ... من الآخر هتلاقيه
Flexible
طب ماهو ال سناك كدة فى الحقيقه بإختلاف
ان اول فص فى العقد ( اقصد ال سناك ) عبارة عن رأس ال سناك
واخر فص هو الذيل

يبقى اتفقنا ان ال سناك عبارة عن حاجة واحدة بإختلاف شكل اول جزء واخر جزء

طيب نسأل نفسنا سؤال ويمكن دة اهم جزء واخطر جزء فى ال سناك
وهو
ازى لما كنت بحرك العقد كان بيمشى على المسار اللى مشيت فيه ...؟؟؟ يعنى ازاى بيحتفظ بالمسار

هقولك طريقه حلوة

ما تيجى نجيب 10 زمايلنا ولا حتى 5 لأنى عارف انهم مش فاضيين :D
ونقف طابور واحد
ونخلى واحد لوحدة كدة واقف قدام هو اللى يحرك اول واحد يقوله روح او تعالى ادخل يمين ولا شمال اوك لحد كدة ..؟؟؟
واحنا طبيعى هنمشى زى ما مشى اللى قدامنا
احنا دلوقتى واقفين مش بنتحرك
رقم 1 مشى يمين
زى ما احنا قولنا كل واحد هياخد اتجاة حركته من اللى قدامه علطول اوك ؟؟
حد فاهم حاجة ...؟؟ :-S
هنفرض اننا واقفين على خط واحد بداية من نقطه
x=10 , y=10
لحد نقطه
x=6 , y=10
بالشكل دة
00000
دلوقتى قلت للأولانى اتحرك فوق حركه واحدة
يبقى الأولانى هينقص من محور الصادات نقطه واحدة وهيبقى واقف عند نقطه
x=10 , y=9
واللى بعديه علطول هياخد النقطه اللى كان واقف عليها اللى قدامه ويقف هو فيها يبقى التانى هيبقى عند نقطه
x=10 , y=10
التالت هياخد النقطه اللى كان واقف عليها التانى ويقف هو فيها , هيبقى التالت عن نقطه
x=9 , y=10
وهكذا لحد ما يبقى الخامس واقف عند النقطه بتاعت الرابع عند النقطه
x=7 , y=10
بالشكل دة
0
0000
حاول تتخيله كدة
وانا عملتلك صورة توضحها احسن كمان

SnakeImage

http://img504.imageshack.us/img504/2501/snake1nr8.gif

يبقى احنا كدة عرفنا ان كل واحد ياخد البوزيشن بتاع اللى قدامه بدايه من اخر واحد وليس اول واحد

دلوقتى اتفقنا ان كل جزء ليه مكان
x,y
ليه مثلاً لون
ليه مثلاً صورة

انا فى الجيم كنت عامل ستركشر صغير فيه الحاجات دى كلها

This is the Structure Signature



struct PartialSnake
{
int xPosition;
int yPosition;
char imageOfSnake;
int colorOfSnake ;

PartialSnake(){}

PartialSnake( int const & x , int const & y , int const & position , int const & color , char image );

PartialSnake& operator = ( PartialSnake const & ) ;

void updateSnake( );

bool intersectedWith( PartialSnake const & );

};

طب دلوقتى واحد هيسألنى هستفاد اية من الستركشر دة لوحدة
هقوله لأ اكيد مش هسيبه كدة ماهو ما ينفعش اجيب دقيق واقول انا هعمل كيكه
طب كيكه ازاى من غير مكوناتها ( اخواتنا البنات يفيدونا فى الموضوع دة :D(

دلوقتى احنا عايزين نربط الأجزاء ببعضها
طب ماهو فيه حاجة اسمها
Array
بس دة لو انت هتعمل سناك مش هيطول
طب لو هيطول اممممممممم ...؟؟
Vector , LinkedList , ArralyList ( in Java ).... Whatever you Choose ,The Concept is One.

انا مثلاً استخدمت
Vector
هتقولى ليه هقولك العمليات فيه اسهل ... هتقولى بس الف يكتور لو طول عن حد معين هيبدأ يعمل
Expande
لنفسه هقولك اوك .. بس انا عارف ان عمر السايز بتاعى ما هيكبر فوق19 او20 فطبيعى مش هيعمل
Expantion
ممكن غيرى يفكر بطريقه تانيه ... الإختلاف فى ال ستركشر لا يفسد فى ال سناك قضيه
بس الفيكتور كدة اسرعلى

|-------------------------|
| Set Data : O( 1 ) |
| Retrieve Data : O( 1 ) |
|-------------------------|

انا عن نفسى عملت كلاس صغير يعبرلى عن ال سناك

This is The Signature



class SnakeClass
{

private:
int xStartPosition;
int yStartPosition;

int colorOfSnake ;

int playerScore ;

bool isSnakeDead ;

bool isAteXFood ;

int healthOfSnake ;

static int MAX_SNAKE_LIFE ;
static int MAX_SNAKE_SIZE ;

public:
vector<PartialSnake>* Snake ;

int sizeOfSnake;

SnakeClass( );

SnakeClass( int xPosition , int yPosition , int color );

bool intersectedWith( SnakeClass * const & targetSnake , int start = 1 );

void killSnake();

bool isDead()const;

void setSnakeDead();

void setSnakeAlive();

int getScore()const ;

int getHealth()const ;

void setHealth( int );

void moveSnake( int const& x , int const& y , char const& image , bool isEatFood [] , bool & isDie , int& stateOfFinalMaze );

void undoXFoodFlag();

bool getXFoodFlag()const;

void resetSnake( int xPosition , int yPosition );

void save( ofstream& );

void load( ifstream& , char image );

};



دة كان بالنسبه لل سناك
فاضل اخر حاجة وهو الكلاس اللى ب
Implement 1 Snake || 2 Snakes

SingleSnakeClass and DoubleSnakesClass

ودة فيه ال
Start
اللى ببدأ اللعب منها وفيها شغل ال
Threads


بالنسبه لحاجة مهمه
وهو التحكم فى اللعبه عن طريق الأسهم
لأن ناس كتيـــــــــر سألتنى انت بتتحكم فيها ازاى
الإجابه: انا لما جربت علشان اعرف الأسكى كود بتاع الأسهم
لقيت حاجة غريبه
ان الأسهم وبعض ال
Key Like: Delete , Insert , PrintScreen , Page Up , F1 ,F2 , .... etc
ليهم اتنين اسكى

واحد بعرف منه انه جاى منين
يعنى كى ( زرار ) عادى ولا سهم وزرار من ال
F or Delete , insert.....

بالنسبه للأسهم
اول اسكى هو
-32
ودى صراحه مش عارف ليه سالب بس دة اللى لما كنت بجربها طلعتلى :D
وال اسكى التانى هو ال
Direction

Arrow_Up 72
Arrow_Down 80
Arrow_Left 75
Arrow_Right 77

اكيد واحد هيسألنى ازاى اعمل الموضوع دة دة ياعم اتنين اسكى مش واحد
هقولك حاجة لزيزة جداً

you know The Header File ( Conio.h ) ??

You Know "getch()" Function ... ??

getch() Get One Character From The Screen and Returns It's as Character Representation ( char )

ازاى اعرف الأسكى بتاع حرف




char anyChar;

anyChar = getch();
cout << (int)anyChar ;// This Prints The ASCII Representation



اخر حاجة انى اظبط موضوع الأسهم بقى




char handleArrows , arrowDirection ;

handleArrows = getch();

if( (int)handleArrows == -32 )// This Input From Arrows or [ delete , insert , page up ... ]
{
arrowDirection = getch();// Get The Direction

switch( (int) arrowDirection )
{
//Cases of Arrows , Implement it As You Like;
}
}



تقريباً كدة خلصت فكرة ال سناك

فاضل اهم حاجة انى ازاى اتعامل مع الكونسول
Like Axis
دى بقى هسيبكوا انتو تدوروا عليها ... انا مش مكسل والله اكتبها دى صغيرة موت
بس احلى حاجة لما تدور على حاجة عايزها وتلاقيها
لما هتلاقيها عمرك ما هتنساها
انا الحاجات دى ماحدش علمهانى ... الحاجات دى تعليم نفسى
ناهيك عن بدائيات بتاعت السى اللى الناس كلها بتعرفها

اتمنى من الله ان اكون وفقت فى الشرح
واى استفسار انا فى الخدمه

Thanks to All

This Explanation Made By "Mohamed Shabaan"

Copyright © 2008 TopCoder.FCI All rights reserved.

galaxy
09-17-2008, 06:09 AM
بسم الله ماشاء الله

طريقة شرحك سهلة و بسيطة


جزاك الله كل خير

A7med Baraka
09-17-2008, 03:20 PM
كلام جميل يا مان
لينا رجعة أن شاء الله

TopCoder_FCI
09-17-2008, 08:46 PM
MerC++ ya Galaxy
wenta ya Barakwy MerC :D

Lost
09-18-2008, 04:02 PM
شرح جميل جدا مشكوووور يا مان

eslam@fcis
10-29-2008, 12:38 AM
Gazak allah kol 5er 3lshr7 al gamed da

rose_2012
11-29-2008, 01:12 AM
لو سمحتم ياجماعة لو في حد هنا متمكن في ++c
يقدر يشرحلي for loopوتطبيقاتها بطريقة مبسطة وسهلة اكون شاكرة ليه جدا

توتةالبطوطة
12-09-2008, 08:27 PM
شرح مبسط وجميييييل اد ايه بتفهم جدا اتمنى لك مستقبل رائع

صدى
01-16-2009, 10:14 PM
بارك الله فيك

wa7edmenelnass
05-08-2009, 02:07 AM
Gamed ya Man
alf alf Shokr !:D