اريد ان ابرمج لعبه مثل التى فى الجوال (الثعبان)
لكن كيف اجعل اجزاء الجسم تتبع رأس الثعبان
اعتقد انها بالمصفوفه لكن كيف :(
اريد ان ابرمج لعبه مثل التى فى الجوال (الثعبان)
لكن كيف اجعل اجزاء الجسم تتبع رأس الثعبان
اعتقد انها بالمصفوفه لكن كيف :(
تم تعديل هذه المشاركة بواسطة sayedf1 في 16 أغسطس 2005 في 19:31

لاتنسى السلام :) ,,
فيه لعبة للاخ VB_ROCKET *** ان شاء الله اني كتت الاسم صح ***
ثعبان على البيسك ..
بمنتدى البيسك . .
يمكن تلقى الرابط في توقيعه .,,
اما عن الفكرة ... فالان قاعدة تطبخ في رأسي ... من اسبوع :) ,,, وشخصيا ما احب تقليد الاكواد ... تخترع كود افضل من نسخه ...:)
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
أخي الشمري .... الفكرة قد تكون بسيطة .... وخطرت ببالي للتو:
- حركة مفاتيح الأسهم تحدد الموقع التالي لرأس الثعبان
- يرسم رأس الثعبان وفقاً للمعطيات
- يبدأ التسارع في اتجاه مفتاح السهم المضغوط
- يبدأ رسم النقاط التالية على أن تأخذ الاحداثيات الجديدة للنقطة الحالية = الاحداثيات الحالية للنقطة السابقة
- تكرر الخطوات حتى يتم رسم كامل النقاط الضوئية
- وهكذا .... !!!!!
هذا في عجالة ..... أقترح استخدام الـ classes فهي مفيدة جداً في مثل هذه الحالات !!!!!! .... وبالتوفيق !!!!!!!
Live Free ... Die Well
The Scorpion King
انا لو في مكانك
كنت استخدم هيكل البيانات LinkedList كهيكل للدودة و جسمها عقد و من الممكن إضافة اي عقدة Node في مكان من القائمة و في اي موضع ...
BEng , Electronics and communications.
Embedded systems engineer.
Graphics Programmer
عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح
يمكنك ان تعتبر الدودة LinkedList و كل Node تحتوي على الCurrent Direction و تأخذ الHead ال Current Direction من الUser و كل لحظة تتحرك كل نقطة في اتجاه الCurrent Direction ثم تنسخ الCurrent Direction الخاص بالNode التي تليها و هكذا
طبعا الCurrent Direction هو واحد من اربع قيم Right, Left, Up, Down
Sr. Software Development Engineer
Hulu, LLC
My Blogs
أخواني .... بالتأكيد استخدام الـ Linked Lists هو المطلوب .... فهي عبارة عن طريقة في تمثيل المعطيات واستخدامها .... ولكني قصدت أن فعاليتها القصوى هي استخدامها مع الـ Classes .... عندها سيكون لديك بنائية برمجية أفضل في طريقة الوصول إلى معطياتك وإدارة الـ Linked List .... !!!!!
كتبت المثال المرفق .... وهو عبارة عن مكتبة مصغرة لإدارة Linked List باستخدام الـ Classes .... أرجو أن يكون مفيداً للجميع !!!!!!!!!!!!!!!
وبالتوفيق ،،،،،،،،،،،،،،،،،،،،
Live Free ... Die Well
The Scorpion King
اما انا فلا افكر ابدا بlinked list لسبب واحد وهو وجود نجوم كثيرة ,,,
احاول الان بطريقة مبسطة ,,, مثلا
for(int i=0;i<=point;i++)
CreateNewPart();
مثلا ... حيث Point رح تزيد عندما ياكل الثعبان نقطة .. لكن المشكلة تكمن عند زيادة عدد point عندها ومع الحلقة while رح تتاخر اللعبة ..
وهذه سبق ان جربتها ..
الفيجوال بيسك صممت العاب snake بدون linked list ... اعتقد فيه شيء يسمى dynamic arraysعلى ما اذكر ... معلوماتي قديمة شوي ...
اذا خطأ صححوا لي ..
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
استخدام Linked List او غيره لتمثيل الدودة في الذاكرة ليست مشكلة و لكن ربما لأن الLinkedList تشبه الدودة :lol: فقد طرأت في أذهاننا فوراً و لكن يمكنك استخدام اي شئ تريده.
سأضع هنا خوارزمية أرجو ان تعمل فأنا لم أجربها و لكني أراها مناسبة
1- مثل الSnake كما يحلو لك و لكني هنا سأعتبر أنها LinkedList مكونة من مجموعة Nodes كل Node تشير الى ما بعدها و يوجود 2 Pointers واحد يشير للHead و الاخر يشير للTail و كل Node تحتوي على variable يخزن فيه ال NodeDirection و هو عبارة عن قيمة من اربعة قيم تمثل الاتجاهات الاربعة.
2- عند البداية تكون جميع الNodes لها الDirection المساوي الى UP (أو من الاخر كلها لها نفس الDirection)
3- عندما يضغط المستخدم على اتجاه معين فإن الSnake Head يتغير الDirection الخاص بها الى هذا الاتجاه.
4- عندما تتحرك الدودة فإن كل Node تتحرك في الاتجاه المخزن داخلها ثم تغير الDirection الخاص بها الى الDirection الخاص بالNode التي تسبقها (في اتجاه الHead ) و هنا ستصبح أول Node بدون Direction و هذا صحيح لأن أول Node تأخذ الDirection من المستخدم.
5- عندما تأكل الدودة فأنه يتم عمل Add في ال Linked List من ناحية الTail و تكون الNode الجديدة لها نفس الDirection الخاص بالNode التي كانت Tail أو ما سأسميها Old Tail
هذا بالنسبة للدودة
و ماذا عن الرقعة التي ستكون الدودة عليها؟؟؟؟؟؟
يمكننا ان نمثل الرقعة بأنها 2D Array من Pointers من نوع Node
و هكذا يجب علينا ان نجعل كل من الSnake Nodes و ال Food تقوم بعمل Inheritance من Node فيصبح لدينا FoodNode و SnakeNode .
و هكذا تكون الدودة عبارة عن List of Snake Nodes
و تكون جميع الDirections في الرقعة تساوي سالب واحد مثلا و هذا يمكننا من معرفة اذا كان المربع فارغ أم به طعام ام به دودة
ربما يكون هذا الDesign عقيما و لكن نتناقش فيه أو نقترح غيره أو نعدل فيه .
شكرا
Sr. Software Development Engineer
Hulu, LLC
My Blogs
تعديل بسيط في الخوارزمية
في الخطوة 4
ستتحرك جميع الNodes أولا الى الDirection المخزن داخلها و بعد أن تنتهي جميع الNodes من الحركة فإن كل Node بدأُ من الTail الى الHead تأخذ قيمة الDirection الخاص بالNode التي تسبقها في اتجاه الHead و تظل الHead Node بنفس الDirection
Sr. Software Development Engineer
Hulu, LLC
My Blogs
ماهي مكتبة الجرافكس التي تحب ان تستخدمها ....
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
شوفوا هذا بشكل مؤقت ...
http://www.pscode.com/vb/scripts/ShowCode....d=2575&lngWId=3
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
الشمري كتب:شوفوا هذا بشكل مؤقت ...http://www.pscode.com/vb/scripts/ShowCode....d=2575&lngWId=3
عند تجربه المثال ظهر هذا الخطأ

أخي غيرها إلى stdlib.h ..... لا يوجد ملف رأسي بهذا الاسم في ++C\C .... لاحظ أيضاً استخدام الـ Classes .... وبالتوفيق
Live Free ... Die Well
The Scorpion King
المثال متعب ... لانه على البورلاند .. على ما اظن .
سأحوله الى فيجوال سي .
على فكره المبرمج عربي ..
كثير من امثلة pscode من ايدي عربية مسلمة ... مثل امثلة قرطبة .. وهو احدهم .. وغيره الكثير .
السؤال/
لماذا هجروا المواقع العربية .
اعتقد انهم على حق ..
تم تعديل هذه المشاركة بواسطة الشمري في 20 أغسطس 2005 في 16:21
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
أخي الشمري ، حتى وإن كان على Borland ..... فإن صيغة تضمين اسم الملف الرأسي هي قياسية على جميع بيئات التطوير (فما بالك بملف رئيسي مثل هذا الملف) ...... على كل حال ، بالتوفيق !!!!!!!!!!!!
Live Free ... Die Well
The Scorpion King
ترى ما هي الطريقة التي استخدمتها يا سيد؟
أعتقد أن الطريقة المطروحة تستهلك الكثير من الحسابات والجمل التكرارية، لهذا أضع إليكم هذا الحل، وكما قال بعضكم، كلما زاد حجم الدودة سيزيد الوقت لحساب مواقع أجزاء الدودة!
فرضيات:
1- الدودة مكونة من فقرات.
2- كل فقرة من فقرات الدودة تحمل موقعا.
3- رأس الدودة هي أول فقرة!
4- الفقرات موزعة على مصفوفة، أو أي نوع من المجموعات، أما اختيار النوع فله حديث آخر!
طريقة حساب المواقع الجديدة:
1- إذا تحركت الدودة إلى اتجاه معين:
أ- نأخذ آخر فقرة ونحذفها من المصفوفة.
ب- نضيف هذه الفقرة إلى أول المصفوفة لتكون رأس الثعبان.
ج- نغير إحداثيات هذه الفقرة لتأخذ موقع الرأس الجديد.
وبهذا لا نستخدم جمل تكرارية تحسب لنا موقع كل فقرة،، فنحن فقط سنحسب موقع الفقرة الجديدة ونضيف إليها آخر فقرة لتكون أول فقرة.. وهكذا...
2- إذا تناولت الدودة طعاما وبهذا ستزيد فقرة:
أ- نضيف الفقرة الجديدة في أي مكان في المصفوفة وتحمل الموقع نفسه المشابه لجارتها أين ما كانت!(يصبح لدينا فقرتين تحمل نفس الموقع)>> (قد تساعد هذه الطريقة في جعل الحبة المأكولة ظاهرة على الحية وكأن بطنها منتفخ) وهذا يرجع إلى خيال المصمم!
ملاحظة: هذا لن يضر منطق اللعبة أبدا!!
نلاحظ أنه إذا زاد حجم الدودة فلن تزيد الحسابات ولا زمن تحرك الدودة، ولا تتأثر سرعة البرنامج!
بالتوفيق!!
صفحاتي: صفحة حسام الملحم www.hussam.ws مدونة
آخر المشاريع: مشروع لغة برمجة عربية شيئية التوجه
ألعاب على الجوال : 1-(لعبة O X على الجوال ) 2-(لعبة الرقم السري على الجوال ) 3-(لعبة آخر حبة على الجوال )
ألعاب على الحاسب: لعبة الوزراء الثمان ، لعبة شطرنج ، لعبة التركيب Tetris
مواضيعي:
الفرق الجذري بين الجافا و C# شرح التعامل مع WTK لبرمجة الجوالات
مشاركاتي:
برنامج (كاتب) للكاتب فهد OMLX، برنامج (المحول) للكاتب فهد OMLX، برنامج (Unit Storm) للكاتب بشير C&Dell، أيهما أكبر الأعداد الصحيحة أم الطبيعية للكاتب Romanof، سؤال رياضي بحت للكاتب VB6-Rocket، التحدي الكبير للكاتب ANSI،
بسم الله الرحمن الرحيم
السلام عليكم جميعا
الطريقه التى برمجت بها حركةالثعبان هى
- اعلنت عن خصائص (Type)
. Public Type snake_F
. X As Long
. Y As Long
. ax As Long
. aY As Long
. Used As Boolean
. End Type
-اعلنت عن مصفوفه ذات بعد واحد ولها الخصائص المعلن عنها
. Public snake(1 To 200) As snake_F
- العنصر الأول فى المصفوفه هو دماغ الثعبان
بعد رسم الدماغ انقل قيم الإحداثيات من العنصر الأول الى الثانى والثانى الى الثالث وهاكذا الى اخر عنصر فى المصفوفه
. For r = 1 To 200
. If snake®.Used = True then
. snake(r + 1).X = snake®.ax
. snake(r + 1).Y = snake®.aY
. End If
. next
هذه هى الطريقه التى استخدمتها ولو هناك اى نقطه غير واضحه انا جهاز للشرح
وشكرا لكم جميعا

ممكن اتحط كود حق حركات ثعبان وشكرا
بعد أن أرفقت الطريقة السريعة السهلة السابقة في الرد رقم 22:
بقي أن نتكلم عن المصفوفة أو المجموعة التي ستحمل الفقرات:
وحتى أجعل الموضوع أكثر سخونة، السؤال هو: كيف ننفذ الطريقة السابقة على مصفوفة معينة أو مجموعة عمليا وليس نظريا؟
إذ كيف ستحذف الفقرة الأخيرة من المصفوفة وتضيفها وتجعلها الأولى في المصفوفة؟
تم تعديل هذه المشاركة بواسطة أبومازن في 11 سبتمبر 2005 في 02:15
صفحاتي: صفحة حسام الملحم www.hussam.ws مدونة
آخر المشاريع: مشروع لغة برمجة عربية شيئية التوجه
ألعاب على الجوال : 1-(لعبة O X على الجوال ) 2-(لعبة الرقم السري على الجوال ) 3-(لعبة آخر حبة على الجوال )
ألعاب على الحاسب: لعبة الوزراء الثمان ، لعبة شطرنج ، لعبة التركيب Tetris
مواضيعي:
الفرق الجذري بين الجافا و C# شرح التعامل مع WTK لبرمجة الجوالات
مشاركاتي:
برنامج (كاتب) للكاتب فهد OMLX، برنامج (المحول) للكاتب فهد OMLX، برنامج (Unit Storm) للكاتب بشير C&Dell، أيهما أكبر الأعداد الصحيحة أم الطبيعية للكاتب Romanof، سؤال رياضي بحت للكاتب VB6-Rocket، التحدي الكبير للكاتب ANSI،
هذا الموضوع مغلق.