الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

.. محاكاة ميتل قير .. لعبة جاسوسية .

مغلق
بدأه Abdullah.Alshammeri في 19 يوليو 2006 · 19 رد · 4,045 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

طبعا لن نقوم بعمل لعبة فالان نحن بمشروع المحرك .... وان شاء الله اذا انتهينا يحلها الف حلال ,

لكن ما اريده هو تشغيل العقل لاقصى درجة ممكنة .

ففكرت في عمل مثال شبيه باللعبة الجاسوسية ميتل قير

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

:D ..

طبعا نريد ( محاكاة ) .. وليس الواقع .

يعني ممكن يكون اللاعب عبارة عن مكعب :) ..

والاضواء عبارة ان دائرة ( لا راحت ولاجت .. )

وصوت الانذار عبارة عن صوت مسج بوكس ...BEEEEP . :D

وممكن ان يكون المثال ثنائي الابعاد او ثلاثي الابعاد ..

هاه .... صعبة او سهلة ...

حاولوا وش وراكم ... ( ما تسمعون باللي يقول فلان يستغل وقت فراغه ) .

طبعا كاتب الموضوع اللي هو انا .. ما عملت شيء الى الان ويمكن أني (أتوهق) او اتوهج .. :D

ننتظركم .. خلال ايام قليلة .. >>> لان ورانا مشاريع ما خلصناها الى الان .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

بسم الله الرحمن الرحيم

والله كتفكير أولي للمشكلة توصلت إلى يجب أن نعرف المعادلة الرياضية لمجال الكاميرة على المستوى الإحداثي حيث مجال الكاميرة يتكون من ثلاثة نقاط :

1. النقطة الأولى وهي موقع الكاميرة . حيث أن إحداثيها = إحداثي الكاميرة .

2. النقطتان الأخريتان وسوف أطلق عليها إتساع مجال الكاميرة حيث هذه النقطتين هي المسؤولة عن إتساع المجال .

وهذه الصورة تشرح ما أفكر فيه...post-85000-1153281240_thumb.gif

#3

فكرة جيدة اخي الشمري

و لكن ماذا عن الناس المثلي اللذين لم يلعبوا metal gear؟ ممكن تشرح الوضع شوية اكثر؟ يعني هل هناك منطقة معينة يحصل فيها الانذار؟ ام هناك كامرة يجب ان "ترى" اللاعب قبل ان تطلق صفارات الانذار؟ ولا شلون؟

#4

السلام عليكم ورحمة الله وبركاته

إختيار موفق, لقد اخترت اللعبه المناسبه والشامله لمعظم تطبيقات الذكاء الإصطناعي, حيث أن Metal gear تعد بيئه خصبه جدا لمحاولات المحاكاة .

طرحت موضوع يتحدث عن خاصية السمع في نفس هذه اللعبه قديما في vb4arab , وبمشاركات وتعليقات مفيده من أخي : الكريستال و يزيد الدليقان توصلنا إلى حل مناسب و يمكن تطبيقه على مثال الضوء . أما كاميرات المراقبه , فهي موضوع آخر لم نتوغل فيه, ولكنه بسيط ولا مانع من إكماله في هذا الموضوع .

أخي hasan_aljudy :

الأمر أن اللعبه تعد لعبة تجسس , والشخصيه الرئيسيه(Snake) تقابل كاميرات مراقبه و أضواء كاشفه و جنود في غاية الذكاء لهم حدود في السمع والنظر , وما إلى ذلك .أما عن ما إذا كان الإنذار يحصل في مكان معين , فحسب ما فهمت, الجواب : نعم. فعلى سبيل المثال, طرح الشمري نقطة الضوء, والذي هو عباره عن دائره واسعة القطر . فإن كنت داخل هذه الدائره فإن الإنذار سيعمل. وإن تمت رؤيتك من قبل أحد الحراس فيسعمل الإنذار أيضا.ونفس الشيئ مع كاميرات المراقبه .أتمنى أن تكون الرؤيه قد وضحت .

أخي DEMONIC:

أظن ان الشمري سيتطرق للكاميرات بعد الدائره, فكرتك مبدئيا معقوله.

و أخيرا, عن طريقة الكشف, فتخيل أنك تكشف التصادم بين دائرتين, هذا ما في الأمر ,أنت الدائره الأولى والضوء الدائره الثانيه.

تحياتي

#5

الاخ High volt شرح اللعبة .. كفى و وفى ..

لكن فقط نريد الان أن نطبق أسهل التطبيقات.

دائة واسعة القطر ( وممكن تكون مربع للتسهيل ) .. تمثل الضوء الكاشف ..

فاذا مر اللاعب داخل هذه النقطة تنطلق صفارة الانذار ..

اخ DEMONIC

اقتباس
بسم الله الرحمن الرحيم

والله كتفكير أولي للمشكلة توصلت إلى يجب أن نعرف المعادلة الرياضية لمجال الكاميرة على المستوى الإحداثي حيث مجال الكاميرة يتكون من ثلاثة نقاط :

1. النقطة الأولى وهي موقع الكاميرة . حيث أن إحداثيها = إحداثي الكاميرة .

2. النقطتان الأخريتان وسوف أطلق عليها إتساع مجال الكاميرة حيث هذه النقطتين هي المسؤولة عن إتساع المجال

هذه ممكن نؤجلها بعدين .. لانها اصعب شوي .. حل المشكلة صحيح تماما كما ذكرت ..

الان فقط نريد التركيز على مسألة كشف اللاعب تحت الضوء .. كمحاكاة فقط .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

بصراحة انا لخبط ما بين الكشاف و الكاميرا أنا حسبت إنو إنت بتتكلم عن الكاميرا

#7

وعليكم السلام

أخي العزيز الشمري

لو كنت تريد الضوء يكون على شكل مربع أو مصططيل

وأيضا الشخصيةعلى شكل مربع أو مصططيل

ستكون هناك حالتين

الأولى يحدث كشف الشخصية عندما تدخل كلها في الإضائة

والثانية عندما يدخل جزئ معين من الشخصية

طبعا هما متشابهين

فل نبدأ بالأولة (أحضر ورقة وقلم )

لنفرض أن لدينا مصططيل الإضائة

وإحداثيات

النقطه الأولى =(0و0)

النقطة الثانية =(10و0)

النقطة الثالثة =(10و8)

النقطة الرابعه=(0و8)

والآن إحداثيات مصططيل الشخصية

سنأخد إحداثيات نقاطه بشكل عام

النقطة الأولى =(س1وص1)

النقطة الثانية =(س2وص1)

النقطة الثالثة =(س2وص2)

النقطة الرابعة =(س1وص2)

الآن متى يكون مصططيل الشخصية داخل الضوء ؟

إذا كان إحداثيات الحدود داخل الإضائة

طيب كيف نعرف؟

بسيطة فقط تحتاج عملية مقارنة إحداثيات الشخصية مع إحداثيات الإضائة بهذه الطريقة

النقطة الأولى

س1 < 10

ص1<8

س1>=0

ص1>=0

النقطة الثانية

س2 <= 10

ص1<8

س2>0

ص1>=0

النقطة الثالثة

س2 <= 10

ص2<=8

س2>0

ص2>0

النقطة الرابعة

س1 < 10

ص2<=8

س1>=0

ص2>0

هذه هي المقارنة ضعها في عبارة شرطية وربط بن كل نقطة والأخرى ب

And

وضع فيها الأمر اللي يخبرك أن الشخصية إنكشفت

هذه الطريقة الأولة

بالنسبة للطريقة الثانية إحنا نحدد الجزء اللي إذا دخل في الإضائة ينكشف الشخصية

وذالك عن طريق نقطة واحده ولتكن منتصف مصططيل الشخصية

ونعمل مقارنه بهذا الشكل (س1وص1 هي إحداثيات النقطة )

س1<=10

ص1<=8

س1>=0

ص1>=0

وبالنسبه لو كانت دائرة بحاول وبرد عليكم

#8

اخي hunterxhunter .. كلامك صحيح .. لكن نريد ترجمته الى كود متكامل .

الفكرة معروفة .. لكن نريد الوصول لاقصى واقعية ..

بداية من رسم نقطة ودائرة ... الى استيراد مجسم ثري دي واضاءة .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9

أعتقد والله أعلم الآتي :

(x - h)^2 + (y - k)^2 = r^2

هذه هي معادلة الدائرة حيث

h= الإحداثي السيني للدائرة

k= الإحداثي الصادي للدائرة

r=نصف قطر الدائرة

ما أقصده هنا أي أنه إذا أردت أن تعرف ما إذا كانت النقطة تقع على الدائرة أم لا فقط عوض بإحداثيات هذه النقطة في المعادلة وفإذا إنطبقت المعادلة كانت النقطة على الدائرة وإلى فلا .

#10

السلام عليكم ..

عجزت لا اصبر وانتظر :) ..

هذه محاولة رقم 1 ..

الان 2d .. فقط .

استخدمت شكل رباعي بدلا من الدائرة لتمثيل الضوء .. لسبب بسيط .. انه في opengl لاتوجد دالة جاهزة لرسم الدائرة ..

هذه الصورة ,

19_07_06_09_36_55_1153370215aaaa.JPG

النقطة تمثل موقع اللاعب .. حرك النقطة بواسطة الاسهم .

اذا وقعت النقطة داخل المربع .. فانه ستنطلق صفارة الانذار ..

استخدمت دالة كشف التصادم . ..

bool TestPoint(int x,int y, RECT_ *rect)
{
	if(x>=rect->left && x<=rect->right)
	{
		if(y>=rect->top && y<=rect->bottom)
			return true;
	}
	return false; 

}

السورس كود في المرفقات وهو يعتمد على opengl+ glut .

التطبيق ايضا في المرفقات ..

ننتظر منكم الامثلة .. حتى لو كانت 2d وبنفس الفكرة .. فكل شخص له طريقته .. وسنستفيد بكل تأكيد من اي محاولة نراها .

سأقوم بتحويل المثال الى ثري دي .. ان شاء الله .

snake_1_2d.zip

تم تعديل هذه المشاركة بواسطة الشمري في 20 يوليو 2006 في 09:02

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#11

حلو مثالك :D

اعجبني انه هناك شيء من المؤثرات .. يعني لما تدخل في المربع يتغير لون الاطار و هناك صوت مختلف عندما تخرج من المربع!

بس ملاحظة, في الأول لم استطع تشغيله, كان يطلعلي

glutInitWithExit cannot be found in glut32.dll

و لكن بعد ان حذفت الـ glut32.dll المرفق مع الملف اشتغل كل شي تمام!

#12

مشكور على التجريب .. فعلا الخطأ ايضا عندي .. الان رفعت الملف من جديد وصلحت الخطأ

الخطأ بسبب المف glut32.dll .. لاني وضعته حتى يستطيع اي شخص تشغيل المثال .

ولكن صار الملف glut32 ملف معطوب .. فبدلته بالملف الاصلي .. على العموم هو غير مهم اذا كنت تملك glut32.dll عندك في system32 .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#13

السلام عليكم

أخواني الكرام بالنسبة الى الضوء على شكل دائرة والشخصية على شكل مصططيل

فهو أيضا سهل

لنأخد مثال لو فرضنا أن لدينا دائرة مركزها (0و0)

ونصف قطرها =2

ولدينا مصططيل ونعين له نقطة في منتصفه ولتكن (س وص)

إذا ذخلة الدائرة ينكشف الشخصية

طيب الآن كيف نعرف إذا دخلة ؟

تصططيع

بقانون طول القطع المستقيمة

وهو

طول القطع المستقيمه =(((س1-س2)^2+(ص1-ص2)^2)^ 0.5)

الآن نعوض بالقيم اللي عدنا

س1=0

ص1=0

س2= قيمت السينية للنقطة اللي تقع في منتصف المصططيل

ص2=قيمت الصادية للنقطة اللي تقع في منتصف المصططيل

الآن ضع المعادلة في جملة

if

والشرط يكون ناتج المعادلة <=2(نصف القطر)

أما لو كانواتصادم بين دائرتين فهي نفس الفكرة فقط الشرط يكون ناتج المعادلة =نق1+نق2

حيث نق1 =نصف قطر الدائرة الأولى

و نق2 =نصف قطر الدائرة الثانية

بالنسبة الى كلام الشمري خلاص أنا بحاول أعمل مثال بGL

وبرد عليكم لأني كنت أفكر بستبوا الفكرة

#14

هذا مثال ممتاز على مسألة اكتشاف التصادم بين دائرتين .. المتثال على VB .

circle_mode.zip

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#15

السلام عليكم

:o :o :o

أين عثرت عليه؟ هذا المثال كتبته منذ أيام,VB4arab .

إقتباس :

هذا مثال ممتاز على مسألة اكتشاف التصادم بين دائرتين .. المتثال على VB . :)

أشكرك على وصفه بالممتاز

#16

هلا هاي فولت ..

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

نتمنى الان انك تشارك في هذا الموضوع .

انا لا زلت انتظر امثلة الاعضاء قبل ان ننتقل الى الثري دي .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#17

السلام عليكم

تماما, فقد كان انتقادا لإستخدام يزيد لطريقة المربعات في كشف التصادم في لعبته جرادلي بسبب عدم تساوي الزوايا خصوصا مع المربعات مع المباني أو الأشكال الدائريه.

حسنا, مبدئيا سأشرح كود المثال, أما عن الإنتقال للـ 3D فالأمر : نسخ+لصق إلى انك ستغير المحور الصادي(Y) إلى (Z) هذا في حالة أنك ستستخدم المحورين X & Z أي السيني والعمق. أما في حالة أنك ستستخدم المحاور الثلاثه, وهي ستفيدك في العاب القتال أو الطيران(أي تطبيق ستستخدم فيه المحاور الثلاثه) فالمعادله نفسها ولكنك ستضع قيما لجميع المحاور (بديهيا). لاحظ أننا لم نضع قيما لكل المحاور , فالمثال ثنائي وليس ثلاثي الأبعاد.

حسنا, شرح الكود :

لدينا دائرتين : A & B, ولكل منهما خصائص:اللون, نصف القطر, والموقع

جعلنا الدائره A تتحرك وفقا لحركة الفاره, والتي هي الشخصيه, أما الدائره الأخرى فهي الضوء. حسنا, إذا كانت المسافه بين الدائرتين معدومه( أي صفر) فإن التصادم حاصل وبالتالي سيتغير لون الدائره.

الآن كيف لي أن اعرف ما إذا كانت الدائرتان متقاربتين أم لا ؟

قبل أن أبدأ, أود أن انبه ان هناك معادله تكشف المسافه بين نقطتين وهي الجذر التربيعي مربع الفرق النقطتين في المحور السيني + مربع الفرق بين النقطتين للمحور الصادي + مربع الفرق بين النقطتين لمحور العمق. فإن كان الناتج صفر, فإن التصادم حاصل كما ذكرت وهذا نص المعادله الذي إستخدمته :

Sqr((A.X - B.X) ^ 2 + (A.Y - B.Y) ^ 2 + (A.z - B.z) ^ 2)

هذا بالنسبة للنقاط, والدائره نفس الشيئ ولكن بإضافة طول نصف القطر. هذا مافي الأمر.

أما وقد وضحت الصوره, فسأحاول الإنتقال إلى البعد الثالث في مثال بسيط, في القريب العاجل بإذن الله.

تحياتي/ هاي فولت

#18

ولا واحد طبق الفكرة !!!

او لان الموضوع سهل جدا !!!

اجل سنفتح اسئلة اكثر قسوة .. : )

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#19

آآآسف جدا .. كنت اريد التطبيق لكني كسلت .. كالعادة!!

ساطبق ان شاء الله .. قريبا

#20

ماشاء الله عليك استاذ الشمري

على الموضوع الجميل ولكن تمهل شوية انا اريد افهم الكود بتاع المثال الاول بجد عجبنى جدا

الى معمول بالسى بلس بلس

ويا ريت يكون العمل كلة بيها

وشكرا

محارب بلا زمان

.................................................................................................................................................................................................

untitled6yk.png

هذا الموضوع مغلق.

مواضيع مشابهة