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

برمجة المخزون او نوع السلاح

بدأه Gigaman في 11 أبريل 2008 · 6 رد · 1,269 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الاخوة الكرام

في العاب المغامرات او الالعاب الاستراتيجة

برمجة المخزون او نوع السلاح

يعني استطعنا التجول في عدة غرف

الان وجد الشخصية سكين كيف يلتقط السكين و يخزنها في الحقيبة

و ان وجد مسدس فانه يحتاج الى عشر رصاصات و يبحث عن دخيرة رصاص

لا يقدر ان يحمل عشر اشياء

اريد المنطق البرمجي فقط و ان امكن الكود

post-1386-1223033542.jpg
#2

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

لكل واحد طريقته في برمجة كل هذه المتغيرات

بالنسبة لي فأفضل شئ عمل خصائص للكلاس المتعلقة بالشخصية Character تحدد عدد الأسلحة وأقصى حد وكذلك الذخيرة الحالية

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

الأمر يجب أن يكون تطبيقي لكي تصل الفكرة

public class Character 
{
	public void addWeapon(..)
		{

		   ..
		}
}


public class Weapon
{

	public void Weapon()
		{
		   ..
		}
	public void setArmor(int value)
		{
if value<=max then
		 +=value;  
		}


}

هذا تخيلي فقط لعمل الفئة لكن عند التطبيق ربما ستتغير أشياء أخرى

يمكننا أن نضع خاصية في الفئة character لا تقبل إلا عدد محدد من الأسلحة

طبعا نعمل ArrayList من Weapon ونقوم بالتأكد من أن عدد الأسلحة من طول الArraylist

مناقشة كل تلك التفاصيل تتم ببرمجة فئات والتحكم فيها حسب طبيعة اللعبة

#3

قد لا تصدق ذلك ولكن بعض المبرمجين المخضرمين يتجنبون إنشاء صفوف (class) كلما أمكنهم ذلك وذلك لتسريع أداء اللعبة، مثلا، في معظم الألعاب تكون الأسلحة مصممة ومحددة سلفا أثناء تصميم اللعبة، فيقوم البرمج بكتابة بوليان من أجل كل سلاح!! مثلا:

Knife = true;
Pistol = false;
MachineGun = true;
LaserGun = true;
.
.
.

ولتسهيل التعامل، توضع هذه المتحولات في سلسلة Array يعرف المبرمج سلفا كل خانة في السلسلة تعبر عن سلاح:

int [ ] Weapon = {1, 0, 200, 53}
//NOTES:
//Weapon[0] is KNIFE (0 or 1)
//Weapon[1] is PISTOL (0 no pistol, Greater than 0, ammunition count)
.
.
.

نلاحظ أنه باعتماد سلسلة واحدة فقط يمكن لنا تحديد هل أن اللاعب يحمل السلاح المطلوب أم لا وما هي كمية الذخيرة فيه، لاحظ مثلا في السلسلة الأخيرة أن الخانة التي تعبر عن المسدس قيمتها صفر، وبالتالي اللاعب إما أنه لا يملك هذه السلاح بعد أو يملكه ولكن بدون ذخيرة، إذا رغبت أن تفرق بين الحالتين، يمكنك اعتبار أن اللاعب لا يملك ذخيرة ولكن لديه السلاح بوضع القيمة صفر، بينما تكون القيمة -1000 هي أن اللاعب لا يملك السلاح، في بعض الألعاب يمكن لك أن تملك ذخيرة دون السلاح، ببساطة يمكن جعل عدد الطلقات أو كمية الذخيرة بالقيمة السالبة، مثلا -200 يعني أنه لديك 200 رصاصة ولكن دون أن يوجد سلاح لها، بقي نقطة واحدة هنا، لماذا اخترنا -1000 للحالة التي ليس لديك لا سلاح ولا ذخيرة؟ سنفرض أن اللاعب لديه قيمة قصوى لعدد الطلقات هو 500 مثلا، وهكذا لن يكون هناك التباس بشأن القيمة -1000

الآن في Weapon[2 والمقصود بها الرشاش، لديك 200 طلقة، وتريد أن تقسم هذه الطلقات إلى مخازن، لنفترض أن المخزن يتسع لعشرين طلقة، هذا يعني أن لديك 10 مخازن، ماذا نفعل؟ هل ننشئ سلاسل Arrays لعدد المخازن؟ لا حاجة لذلك، في داخل اللعبة لا يهم كيف تخزن الطلقات، المسألة هي فقط الإيحاء للاعب بأنه يملك 10 مخازن وأن نظام اللعبة يحتفظ له بهذه المخازن.

عند تنفيذ حلقة اللعبة Game Loop كل ما عليك هو أن تنشئ متحول واحد هو لعدد الطلقات في مخزن واحد فقط Magazine، وما عليك متابعته هو:

1- عندما يطلق اللاعب النار يجب إنقاص قيمة المتحول Magazine

2- إذا أصبحت قيمة Magazine هي الصفر، نفذ الروتين ReloadGun

ReloadGun(){
  if(Weapon[2]  >= 20){
  Weapon[2] - = 20;
  Magazine + = 20;
  }
  else if(Weapon[2] > 0){
	Magazine = Weapon[2];
	Weapon[2] = 0;
	//Note in this case, showing or hiding the weapon depends on the Magazine value NOT on the Weapon value
  }
  else
  {
	 //No Weapon or No Ammunition
	HideCurrentWeapon();
  }
}

لاحظ أن الكود الأخير غير كامل، ولكن القصد منه توضيح الفكرة فقط

نأتي إلا حالة السكين، من الواضح أن قيمتها يمكن أن تأخذ أي رقم، ولكن من المنطقي أنها ستكون إما 1 أو صفر

أخيرا، كيف يتم التقاط السلاح من الأرض؟

يجب لروتين التصادم أن يعرف أن الجسم الذي اصطدم به اللاعب هو سلاح، وهذا شيء أساسي، بعد ذلك الأمر سهل، يمكنك تصميم روتين PickWeapon وبما أننا لدينا سلسلة واضحة لتخزين أسلحة اللاعب، يمكن الاعتماد على أرقام خاناتها من أجل تحديد نوعية السلاح الملتقط:

PickWeapon(arms){
  //We know it's a weapon from the collision test
  switch(arms)
  {
	case 0:
	  //do the knife

	case 1:
	  //do the pistol
		 ... to the end
  }
  //Finally, remove the weapon from the ground
  DeleteObject(arms);
}

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

#4

اخي العزيز ،

ابحث عن Scripting languages مثل lua .

http://www.gamedev.net/reference/articles/article1932.asp

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#5

الحقيقة كلمة شكرا لن توفي حقكم

اخواني الاعزاء

عربي عربي و DreamNet و احمد صالح

و المشروع جاري التطوير

post-1386-1223033542.jpg
#6

بانتظار أخبار مشروعك

#7

بالنسبة للمخزون في علم يسموه بحوث العمليات و على فكرة ممكن محاكاة هذا العلم على الحاسب الآلي .بإختصار حساب القيم المثلى للمشكلة ،، تحياتي

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…