السلام عليكم و رحمة الله
مرحبا بكم في درس جديد من دورة تعلم الاكشن سكربت3
في الدرس السابق قمنا بانشاء أول كلاس لنا اسمها player
في هذا الدرس سنقوم بتطويرها و سنشرح طريقة استعمالها و كيفية تغيير قيم attributes الخاصة بها
و استدعاء ال methods التي تملكها
_________________________________________________________
سنقوم بصنع لعبة بسيطة جدا
و هي انشاء لاعبين
حيث أن كل لاعب لديه اسم و نقاط خبرة و حياة
و كل لاعب بامكانه مهاجمة لاعب اخر و في كل هجمة تتضاعف نقاط خبرته الى الضعف اذا لم تكن معدومة و الا سيتحصل على نقطة واحدة
و كل لاعب يتلقى هجمة من الاعب الاخر و تنقص قيمة حياته نفس قيمة الخبرة التي يملكها الاعب المتعدي
اذا وصلت نقاط الحياة الى 0 او اقل يموت الاعب
مثلا:
الاعب 1 يملك 0 نقاط خبرة
الاعب 2 يملك 0 نقاط خبرة
كلاهما يملكان حياة قيمتها 100
سيناريو :
الاعب 1 يهاجم الاعب 2
اذن نقاط خبرة الاعب واحد ستصبح نقطة واحدة لانها حاليا معدومة
الاعب 2 يتلقي الضربة و تنقص حياته نفس قيمة خبرة الاعب1 يعني ستصبح 99
-الاعب 1 يهاجم الاعب 2 مجددا
اذن نقاط خبرة الاعب1 ستتضاعف لانها ليست معدومة و ستصبح 1*2 يعني 2
الاعب2 يتلقى الهجمة و تنقص قيمته ب 2 و تصبح 97
...
و هكذا الى ان تصل قيمة حياة واحد منهما الى 0 أو أقل
__________________________________
حسنا ما هي ال attributes و methods الازمة التي يمكن استنتاجها من الفقرة السابقة؟
كل لاعب لديه اسم اذن هناك attribute من نوع String
كل لاعب لديه نقاط خبرة و حياة اذن هناك attribute للخبرة فليكن xp و الاخر للحياة life
كلاهما من نوع int
كل لاعب يهاجم و يتلقى ضربات اذن هناك method للمهاجمة ()attack و الاخر لتلقي الضربات ()receive
و كل لاعب يموت ()die
_______________________________________
الكود
نفتح نفس الكلاس السابق و نقوم بتعديله
package
{
public class player
{
//attributes
var playerName:String;
var xp:int;
var life:int;
//methods
public function player(playerName :String= "player_anonyme")
{
//constructor
/*
هذه أول method يتم تنفيذها اوتوماتكيا مع انشاء الكائن (()new player)
*/
this.playerName = playerName;
xp = 0;
life = 100;
}
public function attack( p2:player):void
{
if( xp == 0)
xp = 1;
else
xp = xp * 2;
p2.receive(xp);
}
public function receive(xp:int):void
{
life = life - xp;
if(life <= 0)
die();
}
public function die():void
{
trace(this.playerName + " is died!");
}
}
}
ملاحظات مهمة بخصوص ال constructor :
فيه يتم عمل initialisation لكل المتغيرات و نقصد بها القيمة الابتدائية لكل attributes
1.
نلاحظ اننا نملك attribute اسمه playerName
و لدينا مدخل اسمه playerName أي نفس الاسم
كيف نفرق بينهما؟
الحل هو this الذي يعني اننا سنتعمل attribute موجود داخل الكلاس
و هو اجباري فهذا النوع من المواقف لكي نفرق بين المتغيرين
هل playerName هو ذلك الخاص بالمدخل ام attribute
الكلمة this ليست اجبارية في مواقف اخرى يمكن وضعها و يمكن الاستغناء عنها
لكن من الافضل كتابها
2.
نلاحظ ان المدخل اختياري مثلما رأينا في درس الدوال
و هنا عند انشاء instance لل player يمكننا اعطاء مدخل و سيأخذ playerName نفس قيمته
و في حالة عدم اعطاء مدخل سيكون اسمه player_anonyme
الدالة attack نضع فيها الاعب الثاني في المدخل (نوع player)
لان بعد مهاجته سيكون (الاعب الثاني) باستدعاء الدالة receive لكي تنقص قيمة حياته
________________________________
سنقوم بانشاء زوجين من instance ل player
حيث يقوم الاعب 1 بمهاجمة الاعب 2
الاعب 2 يلزمه 7 ضربات لكي يموت
(الضربة الاولى تنقص له نقطة لتصبح نقاط حياته 99
الثانية 97
الثالثة 93
..الخ)
نعود الى timeline لانشاء لاعبين
var p1 : player = new player("player 1 ");
var p2 : player = new player("player2");
for(vari:int = 0 ; i<7; i++)
p1.attack(p2);
في الاخير سيكتب لنا
player2 is died
____________________________________________________________________________
كيفية الدخول الى attributes و methods الخاصة بالكائن من كلاس اخر :
نقصد بهذا كيف نقوم بتنفيذ method
أو قراءة أو تغيير قيمة attribute
كما رأينا في الكود السابق
p1.attack(p2);
قمنا باستدعاء الدالة attack الخاصة بالكائن p1 و ذلك بفصل اسم الكائن و اسم الدالة بنقطة
طبعا مع احترام ترتيب و عدد المداخل الخاص ب method مثلما كنا نرى سابقا
اظن أننا متعودون على هذا فلقد سبق و أن استعملناها في درس الجداول عندما كنا نستدعي الدوال push , pop, shift, splice..
اذن تلك الدوال تخص الكلاس Array التي تم برمجتها من طرف مطوري الاكشن سكربت!
____________________
نفس الشئ اذا اردنا الدخول الى attributes خاصة بالكائن
الفرق بين استدعاء attribute و method:
الفرق بين استدعاء attribute و method:
ال method تمتلك مداخل (و قد لا تملك)
عموما تنتهي بقوسين
object.method();
لكن ال attribut لا نضع فيه اقواس
مثلما كنا نرى في درس الجداول مع المتغير length
myArray.length
كنا ندخل الى attribute اسمه length و الذي يحتوي على عدد الخانات (طول الجدول)
____________________________________________________________________
الان سأطرح عليكم هذا الكود و قوموا بتجريبه قبل الدخول الى الدرس القادم
أطلب منكم تغيير كود timeline لاظهار قيمة life الخاصة بالاعب p1
يعني
var p1 : player = new player("player 1");
trace(p1.life);
ليست هناك تعليقات:
إرسال تعليق