Advertisement
  1. Code
  2. JavaScript

AS3 101: Arrays-Basix

Scroll to top
Read Time: 32 min
This post is part of a series called AS3 101.
AS3 101: Branching - Basix
AS3 101: Loops - Basix

() translation by (you can also view the original English article)

في هذه الدفعة من AS3 101، سوف ننفق كامل البرنامج التعليمي استكشاف نوع واحد من البيانات المتاحة لمعظم لغات البرمجة: الصفيف.

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

الخطوة 1: فما هو array؟

هو مبتذل قليلاً تبدأ الأمور مع "قاموس أكسفورد الأمريكي الجديد تعريف array as..." ولكن أنا ذاهب إلى القيام بذلك على أي حال.

كما ترون، جوهر العام أن array عبارة عن مجموعة من الأمور، عادة ما تكون نفس أنواع الأشياء: الصفيف من الأدب، المجموعة من الجنود، والمجموعة من المحلفين.

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

بلدي استخدام array كلمة غير البرمجة المفضلة لديك هو array كبير جداً، مجموعة الهوائيات 27 التي تشكل إنشاء مرصد إذاعة في نيو مكسيكو. إذا كنت قد رأيت الفيلم الاتصال، تعرف ما هذا. من الموقع الرسمي VLA:

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

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

صورة المجاملة AUI/NRAO

في علم الحاسوب، array هو عبارة عن مجموعة من البيانات، أو بعبارة أخرى، قائمة من القيم. وبعبارة أخرى، هو array متغير واحد يحتوي على العديد من القيم. حسنا، من الناحية التقنية المتغير يحمل قيمة واحدة: array نفسها. ثم array حاصل فعلا العديد من القيم. وكما يوحي الاسم، القيم المخزنة في array يتم عادة من أنواع مماثلة، على الرغم من أن كثيرا ما لا توجد قاعدة في هذا. النقطة الأساسية التي تعرف، رغم ذلك، أن صفيف مجموعة من القيم، كل القيم الفردية والهويات الخاصة بهم، ولكن أيضا مع هوية أعلى، والمجتمعية، كعضو مجموعة.

الخطوة 2: إنشاء الصفيف الأول الخاص بك

المضي قدما، وطباعة شهادة، لأن هذه لحظة خاصة! إذا كان هذا هو الصفيف الأول الخاص بك، ثم مرحبا بكم في عالم رائع من إدارة البيانات!

هناك في الواقع هناك طريقتان لإنشاء صفائف، وكل من هذه الطرق تسمح لك بإنشاء لهم مع عناصر في لهم أم لا. والطريقة الأولى، التي قد تنظر بالطريقة الرسمية، يبدو مثل هذا:

1
var ary:Array = new Array();

أننا ببساطة تقوم بإنشاء متغير يسمى ary، من نوع الصفيف، وتعيين القيمة الخاصة به إلى جديد وفارغ الصفيف. الكلمة الأساسية الجديدة في اكشن هي واحدة من التي سترى الكثير؛ كما يمكن أن يستنتج أنه يخلق ذاتها شيئا-أو-آخر، تبعاً لما يترتب على ذلك. في هذه الحالة، اتبع نحن أنه مع نوع صفيف، حتى يمكننا الحصول على مجموعة جديدة.

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

الخطوة 3: طرق بديلة لإنشاء صفائف

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

1
var ary:Array = [];

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

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

1
var ary:Array = new Array("one", "two", "three");

أن تفعل الشيء نفسه باستخدام قيمة حرفية الصفيف:

1
var ary:Array = ["one", "two", "three"];

علما بأن عدد الأصناف التي لا يهم، أنت تحتاج فقط إلى الفصل بينها بفواصل. ولا يهم النوع، أما. قمنا باستخدام سلاسل. يمكن استخدام الأرقام، MovieClips، صفائف الأخرى حتى (أننا سنصل إلى ذلك في خطوات قليلة). أنها لا تحتاج إلى أن تكون نفس النوع، أما. أن القائمة التالية صالحة تماما:

1
var ary:Array = ["one", 2, new MovieClip()];

..although هناك أسلوب يذكر لهذا الجنون. عموما، صفائف الأنسب لحفظ قوائم الأصناف المماثلة، لا تجمع عناصر متباينة.

هناك مسكتك واحد أن تكون على علم أثناء إنشاء الصفيف مع البيانات في نفس الوقت. ذكرت قليلاً في وقت سابق أن الإصدار الجديد والنسخة الحرفية هي نفسها، باستثناء حالة واحدة. هذا الحال: إذا حاولت إنشاء صفيف جديد مع عنصر واحد في ذلك، ويحدث هذا العنصر أن يكون عدد صحيح (سواء كان هو int أو ببساطة عدد ما يحدث أن يكون عدد صحيح)، لن تحصل على صفيف عنصر مفرد. إذا قمت بكتابة:

1
var ary:Array = new Array(10);

سوف تحصل على مجموعة البند 10، مع كل من مجموعة العناصر إلى null. ومع ذلك، إذا قمت بكتابة:

1
var ary:Array = [10];

سوف تحصل على صفيف عنصر مفرد، وهذا عنصر واحد هو الرقم 10.

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

بعد أي من هذه الأمثلة، يمكنك اختبار قيمة الصفيف قمت بإنشائه مع السطر التالي:

1
trace(ary);

سترى شيئا مثل:

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

الخطوة 4: فهرس الصفيف

يتم تعيين كل عنصر لتعقب كافة لدينا العناصر في الصفيف، فهرس رقمي. "معرف" من أنواع ليس فقط يعرف بشكل فريد هذا الموقف (والقيمة التي عقدت فيها)، ولكن كما يشير إلى موضع هذا العنصر داخل القائمة.

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

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

خطوة 5: إضافة العناصر إلى الصفيف

مع الأخذ في الاعتبار أن مصفوفات تحديد أعضائها بمؤشر رقمي، إلى الصفر، دعونا ننظر مباشرة في أكثر طريقة للحصول على العناصر في صفيف بعد إنشائه:

1
var ary:Array = ["one", "two", "three"];
2
ary[3] = "four";

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

دعونا نرى ما الذي فعله الصفيف:

1
trace(ary);

تشغيل البرنامج، ويمكنك أن ترى هذا في لوحة المخرجات:

يمكنك أن ترى الآن أن الصفيف الخاص بك لديه أربعة بنود في ذلك.

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

1
ary.push("five");

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

تتبع أرى مرة أخرى وسترى أنها العناصر الخمسة الآن.

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

1
ary.push("six", "seven", "eight");
2
trace(ary)

قد لا تكون بادية للعيان في لوحة المخرجات، ولكن قمت بإضافته ثلاثة بنود فردية للقائمة، ينمو طوله من 6 إلى 9. يمكنك إضافة العديد من العناصر كما تريد في أسلوب الدفع.

أونشيفت هو الأخ الصغير للدفع. أنه يعمل بشكل مماثل، وبنود حفظ لكون الصغيرة فإنه يضيف إلى بداية القائمة، بدلاً من النهاية. لاحظ أنه إذا قمت بذلك:

1
ary.unshift("zero");

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

المضي قدما وتتبع المصفوفة مرة أخرى ترى في هذا العمل.

الخطوة 6: الوصول إلى العناصر الموجودة في صفيف

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

يمكن استخدامها للحصول على البيانات نفس القدر من السهولة الحصول عليه تدوين الوصول إلى الصفيف. على افتراض أننا ما زال المتغير "أرى" لا تزال متاحة لنا، وأنه لديه 9 مواد في ذلك، تشكل "صفر" إلى "الثمانية،" ما يلي:

1
trace(ary[4]);

سيؤدي إلى:

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

وربما هذا هو الطريق الأكثر شيوعاً بكثير الوصول إلى البيانات في صفيف، ولكن اثنين من تقنيات أخرى شائعة أيضا. أسلوب pop البوب مثل ابن عمه، أو ربما الشر التوأم، ل push. وهي تعمل في الاتجاه المعاكس. في حالة إزالة العنصر الأخير من الصفيف. ولكن بينما هو تغيير الصفيف، تقوم بإرجاع هذا العنصر الأخير يعود إليكم. يجب مراعاة ما يلي:

1
trace(ary);
2
trace(ary.pop());
3
trace(ary);

سترى شيئا مثل هذا في لوحة الإخراج الخاص بك:

في السطر الأول، نرى الصفيف 9-البند الحالي.

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

في السطر الثالث، تتبع الصفيف بالكامل مرة أخرى، والتحقق من أن أنها فعلا يفتقد العنصر الأخير الآن.

التحول لموسيقى البوب وهو ما أونشيفت push. أنه يزيل العنصر الأول ويعيدها، انزلاق البنود المتبقية أسفل مؤشر واحد لسد الفجوة. يمكننا أن نحاول ممارسة مماثلة كما فعلنا مع pop العضوية الثابتة:

1
trace(ary);
2
trace(ary.shift());
3
trace(ary);

النتائج التي يؤمل أن يكون واضحا في هذه المرحلة.

الخطوة 7: عدد العناصر؟

من الشائع جداً ترغب في معرفة عدد العناصر في صفيف. يمكننا أن نسأل الصفيف نفسها لطوله. على سبيل المثال:

1
trace(ary.length);

على افتراض أننا تابعنا جنبا إلى جنب مع جميع العناصر المضافة وظهرت والتحول، يجب أن نرى

من المهم أن نتذكر أن رغم مؤشرات الصفيف إلى الصفر، الطول فعلا على أساس واحد. هذه ليست متناقضة؛ بيان للحقيقة. نحن نطلب الصفيف، "كيف العديد من البنود التي لديك؟" لا، "ما هو فهرس العنصر الأخير الخاص بك؟" حتى لو كانت صفائف المستندة إلى 42، ما دام هناك 7 العناصر في الصفيف (مؤشرات 42 من خلال 48)، سيظل الطول 7. هذا غالباً نقطة من الخلط بين تلك الجديدة لمصفوفات، وذلك في محاولة لتذكر التمييز الدقيق بين الفهرس للعنصر الأخير وطول الصفيف.

ملاحظة أن صفيف لا تتطلب أن تكون القيم الفعلية في الأرقام القياسية لعد صوب الطول هناك. النظر:

1
var ary:Array = [];
2
ary[42] = "Forty-two";
3
trace(ary.length);

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

خطوة 8: معالجة صفيف

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

join يأخذ الصفيف ويبني تمثيل سلسلة لذلك. يمكن (وربما يجب) تحدده delimiter (هو السلسلة استخدام الفترات الفاصلة بين كل عنصر). بشكل افتراضي أنها فاصلة، ولكن استخدام حرف سطر جديد يمكن أن تكون مفيدة عند تتبع المصفوفات:

1
trace(ary.join("\n"));

يعطي أن رصاصة واحدة ونرى ما سيحدث.

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

1
var text:String = "The rain in Spain falls mainly on the plain.";
2
trace(text.split("ain").join("AIN"));

يفعل العكس تماما ما كنت أعتقد أنها ستفعل. ومحاولة المضي قدما:

1
trace(ary);
2
ary.reverse();
3
trace(ary);

نأمل أن النتائج لم يكن مفاجأة لكم كثيرا.

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

1
trace(ary);
2
ary.sort();
3
trace(ary);

ولكن أسلوب sort يمكن أن يقال كيف وعلى ما للفرز. راجع مستندات للحصول على وصف كامل، ولكن إلى خلاصة القول أنه يمكن فرز رقمياً (بشكل افتراضي، يتم فرز الأرقام حسب الترتيب الأبجدي، حيث أن "10" تأتي قبل "9")، وحالة بعض (بشكل افتراضي "حديقة الحيوان" تأتي قبل "العداد")، تصاعدي أو تنازلي، ومع الآخر خيارات.

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

splice هو أسلوب صفيف الذي يتيح لك إزالة و/أو إدراج العناصر من وإلى الصفيف. وطريقة متطورة بدلاً من ذلك، يسمح لإزالة وإدراجه في نفس الوقت. دعونا نبدأ مع هذا الصفيف الأساسية:

1
var ary:Array = ["one", "two", "three", "four", "five", "six"];

لإزالة عنصر من الصفيف، نحن بحاجة إلى استخدام splice مع معلمتين: يجري أولاً الفهرس الذي نريد لبدء العملية، ويجري الثاني عدد العناصر لإزالة من نقطة البداية. حتى لإزالة العنصر "أربعة" (في الرقم 3)، ونحن كتابة:

1
ary.splice(3, 1);

ونحن أيضا استخدام splice لإدراج عنصر. لإدراج عنصر "أربعة-نقطة--اثنين" ما بين العناصر "الأربعة" و "خمسة"، يمكننا القيام بما يلي

1
ary.splice(4, 0, "three-point-two");

وهذا يبدأ مع البند 4 (قيمة "خمسة")، يحذف أي شيء (وهذا ما 0)، ومن ثم إدراج السلسلة، دفع كل شيء أسفل أحد لإفساح المجال.

indexOf هو أسلوب بسيط يتيح لك الفهرس للعنصر المحدد. على سبيل المثال:

1
var ary:Array = ["one", "two", "three"];
2
trace(ary.indexOf("three"));

وهذا يوفر لك عدد (أو، على وجه التحديد، int) 2. وهذا هو فهرس العنصر الأول مطابقة القيمة التي تم توفيرها. هذه طريقة سريعة للبحث من خلال مصفوفة لقيمة معروفة، أو حتى التحقق لمعرفة إذا كان صفيف يحتوي على القيمة، بمقارنة نتيجة indexOf معرفة ما إذا كان أكبر من-1 (indexOf إرجاع-1 إذا لم يتم العثور على القيمة في الصفيف).

هناك الكثير القيام به مع الصفيف، وحتى الطرق المسرودة هنا غالباً ما تكون قادرة على أكثر من ما يوحي لي وصف موجز. يسرد وثائق الصفيف كل الأساليب المتاحة وخصائص، مع وصف الأساسية على الأقل.

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

الخطوة 9: صفائف متداخلة

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

تخيل جدول بيانات، مع صفوف وأعمدة كاملة من الأرقام. وهذا يمكن بسهولة يمثل صفيف ثنائي الأبعاد. فهرس الصفيف الرئيسي (وهو البعد الأول) يساوي، مثلاً، الصف في جدول البيانات. فهرس sub الصفيف يعينه ذلك الفهرس الأول يساوي العمود.

اكشن نفسه يستخدم صفيف ثنائي الأبعاد لبضع عمليات، المعروفة باسم مصفوفة الرياضيات. وينطبق نفس الفكرة؛ الأرقام المخزنة في شبكة (المصفوفة) والعلاقات بين تلك الأرقام يكون لها أثر مبلغ. أننا لن يمكن النظر إليها بالتفصيل في هذا البرنامج التعليمي.

ونحن سوف نلقي نظرة عملية على صفيف ثنائي الأبعاد في خطوات قليلة، ولكن دعونا ننظر في كيفية هذه يتم تعيين الآن.

ونحن يمكن أن تتراكم هذه صفيف قبل بت بت:

1
var spreadsheet:Array = [];
2
spreadsheet[0] = [];
3
spreadsheet[0][0] = "row 0, col 0";
4
spreadsheet[0][1] = "row 0, col 1";
5
spreadsheet[0][2] = "row 0, col 2";
6
spreadsheet[1] = [];
7
spreadsheet[1][0] = "row 1, col 0";
8
spreadsheet[1][1] = "row 1, col 1";
9
spreadsheet[1][2] = "row 1, col 2";
10
spreadsheet[2] = [];
11
spreadsheet[2][0] = "row 2, col 0";
12
spreadsheet[2][1] = "row 2, col 1";
13
spreadsheet[2][2] = "row 2, col 2";

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

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

1
var spreadsheet:Array = [];
2
spreadsheet[0][0] = "row 0, col 0";
3
spreadsheet[0][1] = "row 0, col 1";
4
spreadsheet[0][2] = "row 0, col 2";

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

إذا كان عليك أن تفعل هذا النوع من مجموعة، قد تكون مهتمة بطريقة أكثر إيجازاً لكتابة الضبط نفس بنية البيانات:

1
var spreadsheet:Array = [
2
  ["row 0, col 0", "row 0, col 1", "row 0, col 2"],
3
	["row 1, col 0", "row 1, col 1", "row 1, col 2"],
4
	["row 2, col 0", "row 2, col 1", "row 2, col 2"]
5
];

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

لمزيد من القراءة في الصفائف المتعددة الأبعاد، الدخول في ويكيبيديا في صفيف يحتوي على قسم في الصفائف متعددة الأبعاد، وخلفية رياضية، زيارة الدخول في matrices لبعض القراءة الخفيفة. 3 اكشن استخدام المصفوفات في كائن flash.geom.Matrix.

الخطوة 10: Vector

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

سنقوم بإنشاء صفيف ويكون ذلك عقد مجموعة من السلاسل.

1
var ary:Array = new Array();
2
ary.push("one");
3
ary.push("two");
4
ary.push("three");

الآن، سوف نحصل على العنصر الثاني.

1
var item:String = ary[1];
1
trace(item.toUpperCase());

كل شيء على ما يُرام حتى الآن. ومع ذلك، لاحظ نوع البيانات على فأر "العنصر". هذا حقاً فقط لأنني أعرف أن لقد وضعت شيئا ولكن السلاسل إلى الصفيف. ماذا يحدث إذا كنت ثمل، ووضع int هناك، بدلاً من ذلك؟

1
var ary:Array = new Array();
2
ary.push("one");
3
ary.push(new Sprite());
4
ary.push("three");
5
var item:String = ary[1];
6
trace(item.toUpperCase());

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

حصلت تحولت الكائن العفريت سلسلة عند استرجاع من الصفيف.

ومع ذلك، ناقل، مكفول لالا يكون أحد أنواع الكائنات في ذلك. الإعداد يبدو غريبا قليلاً مقارنة ببقية اكشن:

1
var vec:Vector.<Sprite> = new Vector.<Sprite>();

وهذا خلق موجه جديدة الذي يتوقع فقط من أي وقت مضى السلاسل. لا والأقواس المعقوفة هي مجرد بناء الجملة من أجل هذا. نوع البيانات الكاملة هي "ناقلات الأمراض. <Sprite>",</Sprite> "العفريت" من الناحية الفنية يمكن فيها أي نوع من البيانات الأخرى التي تريد تخزينها.

والآن ننتقل من خلال إعداد البيانات لدينا، نحن نحاول هذا:

1
vec.push(new Sprite());
2
vec.push(42);

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

إذا نحن أن الإصلاح، ولكن ثم محاولة الحصول على بيانات الخروج منه كما يلي:

1
var item:int = vec[1];

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

لماذا تستخدم ناقلات على صفائف؟ والسبب الرئيسي لنوع الأمان. معظم الوقت فقط لديك نوع بيانات مفرد داخل الصفيف الخاص بك، حيث كنت قد يجعل من كذلك الرسمية. علاوة على ذلك، على الرغم من ناقلات من المفترض أن تكون أسرع من المصفوفات، خاصة بالنسبة لناقلات كبيرة تحتوي على أنواع أساسية مثل أرقام. شعوري هو أنه لا يمكنك حقاً الذهاب الخطأ مع ناقل، حتى إذا كنت تستخدم مشغل فلاش 10، المضي قدما واستخدام ناقلات. إذا كنت تشعر بالقلق حول التوافق مع فلاش 9، ومع ذلك، يجب عليك استخدام صفائف (على سبيل المثال، في مكتبة التعليمات برمجية التي لا تعتمد إلا على ميزات فلاش 10). لأن فلاشتوتس + ليست مستعدة لتأمين فلاش 9، للفترة المتبقية من هذا البرنامج التعليمي سنقوم باستخدام صفائف.

الخطوة 11: الشبكات

فقد حان الوقت البدء في وضع كل من learnin' هذا الكتاب إلى بعض حكمه الشارع. نحن ذاهبون لجعل لغز بسيط اللعبة، التي سيكون من المستحيل إلى حد كبير إلى عنصر تحكم دون مساعدة الصفائف. ربما كنت قد رأيت هذا النوع من لغز قبل. شبكة أزرار، كل منها في أي أو إيقاف تشغيله الدولة. عندما تضغط زر، فإنه يبدل حالته. لكن ليس فقط دولته الخاصة به؛ كما سيتم تبديل الأزرار الأربعة التي جارتان فورا إلى الضغط على الزر. والهدف لتشغيل (أو إيقاف تشغيلها، اعتماداً على كيف تنظرون إلى الأمر) كافة الأزرار. أنه من الأسهل لمجرد تشغيله نفسك بدلاً من شرح مع الكلمات:

لمشاهدة هذا العرض التوضيحي قطعة، يجب أن يكون لديك فلاش لاعب 9 أو الأحدث مثبتة، وتشغيل جافا سكريبت.

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

الخطوة 12: إنشاء رابطة العمل المنصف

إنشاء مستند جديد فلاش اكشن 3. تأكد من حفظه، وتعيين أبعاد المرحلة إلى 600 × 400. إعداد طبقة خلفية مع مستطيل في ذلك مع تعبئة متدرجة براون.

الخطوة 13: إنشاء زر الشبكة

على طبقة جديدة، رسم ساحة 99 بكسل بكسل 99 عالية. استخدام لون سيكون على النقيض من ذلك تماما مع الخلفية (استعملت تعبئة متدرجة اللون برتقالي). حدد هذا العمل الفني واضغط F8 لإنشاء رمز MovieClip جديدة فإنه.

الخطوة 14: إنشاء زر الانتقال

انقر نقراً مزدوجاً فوق MovieClip الخاص بك تم إنشاؤه حديثا لإدخال في الجدول الزمني. تمديد الفترة الزمنية للإطارات 9. اعتماداً على نوع الانتقال الذي تريده، وإصدار فلاش الذي تستخدمه، يجب عليك اتباع نهج مختلف لإنشاء الحركة الفعلية. واترك ما يصل إلى القارئ إلى هذا النوع من – في حالتي التي تم إنشاؤها شكل توين، والرسوم المتحركة التدرج. ومع ذلك فإنه يحدث بالفعل، والهدف هو أن على إطارات 1 و 9 سيكون لدينا دولة "طبيعية"، وفي الإطار 5 سيكون لدينا دولة "قبالة"، مع مرحلة انتقالية قصيرة وحلوة بين هاتين الدولتين.

على طبقة جديدة، ووضع إطار مفتاحي "تقليدية" على إطارات 1 و 5، ثم ضع نصي بسيط "stop ()" في تلك الأطر. والفكرة هي أننا سوف السيطرة على الحركة من التكرار إلى ما لا نهاية. ينبغي لها أن تبدأ في الإطار 1، والانتظار، وعندما نكتب بعض المنطق أكثر، ونحن سوف أقول القصاصة للعب، والتي سوف تسمح لحركة إعادة تشغيل حتى أنه يضرب الإطار 5، ومرة أخرى على الطريق.

الخطوة 15: تخطيط المرحلة

الآن بالنسبة للجزء مملة (لماذا قمت بتحميلها نأمل أن كاتب رابطة العمل المنصف). التراجع في المخطط الزمني الرئيسي، مكررة هذا MovieClip حيث لا توجد مثيلات 24 منه في المرحلة. ترتيب لهم حيث أنها تشكل شبكة من الأعمدة 6 والصفوف 4.

بدء تشغيل في المربع الأيسر العلوي وإعطائها اسم مثيل من "s1". انقر فوق في المربع التالي بالحق وتسميته "s2"، ويستمر كذلك حتى تحصل على ساحة الحق الأعلى، باسم "s6". ابدأ مرة أخرى على الجانب الأيسر، تتقدم إلى الصف الثاني، واسم "s7." متابعة بهذه الطريقة حتى ينتهي بك الأمر في الجهة اليمنى السفلي، باسم "s24."

علما بأن تدرج في التحميل برنامج نصي جسفل تسمى "nameGrid.jsfl". إذا قمت ببساطة بتحديد كافة المربعات 24، ثم انقر نقراً مزدوجاً فوق هذا البرنامج النصي، فإنه سيتم تشغيل، واسم الساحات لك (أمل).

الخطوة 16: إعداد البرنامج النصي

الآن أن لدينا صور لدينا إعداد، يمكننا أن نبدأ كتابة البرنامج النصي. سوف نبدأ بإنشاء طبقة جديدة حيث سيقيم التعليمات البرمجية، انقر فوق الإطار الخاص به، والضغط على F9 (Windows)/الأراضي الفلسطينية المحتلة-F9 (ماكنتوش).

سنقوم بأشياء المتداول بتعريف بعض المتغيرات. في الواقع، يمكن أن يكون الأول والثاني الثوابت:

1
const ROWS:int = 4;
2
const COLUMNS:int = 6;

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

1
var grid:Array = [];
2
var list:Array = [
3
	s1,
4
	s2,
5
	s3,
6
	s4,
7
	s5,
8
	s6,
9
	s7,
10
	s8,
11
	s9,
12
	s10,
13
	s11,
14
	s12,
15
	s13,
16
	s14,
17
	s15,
18
	s16,
19
	s17,
20
	s18,
21
	s19,
22
	s20,
23
	s21,
24
	s22,
25
	s23,
26
	s24
27
];

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

خطوة 17: إعداد "ساحة كل"

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

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

1
list.forEach(setupSquare);
2
function setupSquare(square:MovieClip, index:int, array:Array):void {
3
	square.addEventListener(MouseEvent.CLICK, onSquareClick);
4
}

ما الذي يحدث هنا؟ يأخذ الأسلوب forEach مرجع دالة كمعلمة (مثل الكثير من الأسلوب addEventListener). عندما يتم استدعاء forEach، الصفيف يمر كل عنصر يحتوي على، ويقوم باستدعاء الدالة المحدد مرة واحدة لكل عنصر. وسوف تحصل على تمرير الدالة:

  1. العنصر في الصفيف
  2. الرقم القياسي لهذا البند
  3. الصفيف نفسها

أننا سوف أعود إلى هذه الدالة واللحم هو من أكثر دقة، ولكن الآن، دعونا فقط كتابة الدالة أونسكواريكليك واختبار الفيلم:

1
function onSquareClick(me:MouseEvent):void {
2
	trace(me.currentTarget.name);
3
}

إذا قمت باختبار الفيلم الآن، يجب أن تكون قادراً على انقر فوق كل مربع وانظر اسم في المربع تظهر في لوحة المخرجات. نأمل أن يمكن أن نقدر لكم كمية العمل التي قمت بحفظها نحن أنفسنا باستخدام الأسلوب forEach بدلاً من إضافة 24 الحدث المستمعين على حدة.

خطوة 18: تبديل ساحة النقر

موافق، يمكن أن نصل أخيرا إلى شيئا قليلاً أكثر إثارة للاهتمام. دعونا تشغيل تأثير مرئي سترى عند النقر فوق مربع.

أولاً، دعنا نكتب دالة للتعامل مع تبديل ساحة (أي إيقاف تشغيله "" عندما يكون الساحة "على"، والعكس بالعكس).

1
function toggleSquare(square:MovieClip):void {
2
	if (!square) return;
3
	if (square.isOn) {
4
		square.isOn = false;
5
		square.gotoAndPlay(2);
6
	} else {
7
		square.isOn = true;
8
		square.gotoAndPlay(6);
9
	}
10
}

هنا ما يحدث:

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

ثم أننا التحقق لمعرفة ما إذا كان مربع "isOn." إذا، علينا التأكد من "isOn" غير صحيح، ونحن نقول مقطع مربع للعب في الفترة الزمنية من الإطار 2 (حيث أن الانتقال إلى حالة "إيقاف التشغيل" في الإطار 5). إذا لم يكن كذلك، نحن مجموعة "isOn" الحقيقية واللعب تيملين من الإطار 6 (التي سوف تلعب مرة أخرى إلى الدولة "على" في الإطار 9 وحلقة ثم العودة إلى الإطار 1، حيث أنها سوف تتوقف مرة أخرى).

ولكن الانتظار، حيث يأتي هذا "isOn" من؟ لدينا لإضافته. نحن فقط بشكل حيوي إضافة خاصية إلى MovieClip هو الساحة وترك كل مربع المسار الخاص به الدولة. لإعداد هذا هوب في البداية، العودة إلى الدالة سيتوبسكواري وإضافة هذا السطر:

1
square.isOn = true;

سوف نعمل مع هذا في وقت لاحق، لكن للآن نريد فقط أن نتأكد من المتغير تم تعريفه وله قيمة دقيقة (نظراً لأننا كنت بدء المجلس مع دولة "على الإطلاق"، تحتاج إلى تأكد من المتغير "isOn" صحيحاً).

واحد آخر بت هنا: في أونسكواريكليك، إزالة التتبع وإضافة هذا:

1
toggleSquare(me.currentTarget as MovieClip);

والمضي قدما في اختبار هذا؛ يجب عليك الآن شبكة قابلة لنقر لتبديل المربعات!

الخطوة 19: إعداد "الصفيف متعدد الأبعاد"

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

أولاً، نحن بحاجة إلى تحديد الصف والعمود. هنا، سوف نعتمد على حقيقة أن لدينا مقاطع أقيمت في "قائمة" الصفيف في ترتيب اليسار إلى اليمين من أعلى إلى أسفل. في سيتوبسكواري، أضف هذه الأسطر:

1
var row:int = Math.floor(index / COLUMNS);
2
var col:int = index % COLUMNS;

ما نقوم به هو استخدام "مؤشر" كوسيلة لمعرفة الأعمدة والصفوف التي نحن في. لن تحصل على جداً في الرياضيات، ولكن هذا خدعة كبيرة للسنجاب بعيداً واستخدامها عند الحاجة. أنا سوف تقدم شرحاً للرمز % في التعليمات البرمجية: مودولو المشغل، الذي يعطينا ما تبقى عملية تقسيم الرقمين (10% 3 يعطي لنا 1، لأن 10 مقسوماً على 3 من 3 مع قي 1). كتمرين للقارئ الخلط، اترك لكم أن تذهب من خلال كل مؤشر، واحداً تلو الآخر، والعمل خارج الرياضيات لنفسك (باستخدام الورق، وليس على الكمبيوتر). سترى بسرعة النقش، وعليك توفير لي بضع فقرات من كتابة.

الآن، استخدام هذه القيم لإنشاء صفيف متعددة الأبعاد:

1
if (!grid[col]) grid[col] = [];
2
grid[col][row] = square;

نحن بحاجة أولاً للتأكد من أن الشبكة [عمود] هو صفيف. إذا كان غير موجود، ثم نحن بحاجة إلى إعداد كمجموعة جديدة. ثم يمكن أن نتعامل مع الشبكة صفيف ثنائي الأبعاد والملوثات العضوية الثابتة في MovieClip في موضع الصف/العمود المناسب.

الخطوة 20: تبديل الجيران

مع صفيف ثنائي الأبعاد لدينا إعداد، يمكننا أن نضيف هذه التعليمات البرمجية للدالة أونسكواريكليك:

1
var index:int = list.indexOf(me.currentTarget);
2
var row:int = Math.floor(index / COLUMNS);
3
var col:int = index % COLUMNS;
4
5
toggleSquare(grid[col][row - 1]);
6
toggleSquare(grid[col][row + 1]);
7
if (col > 0) {
8
	toggleSquare(grid[col - 1][row]);
9
}
10
if (col < COLUMNS - 1) {
11
	toggleSquare(grid[col + 1][row]);
12
}

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

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

الآن، هناك فرصة أن الواقع لن مربع الموضع الجار. عند النقر فوق في الزاوية اليسرى العليا، على سبيل المثال، هناك لا الجيران العلوي الأيمن أو الأيسر. النقر فوق أي مكان في الصف السفلي يعني لا جاره السفلي.

لحماية ضد هذا، أضفنا الفعل الاختيار "إذا لم يكن هناك لا ساحة الفعلية التي مرت، لا تفعل أي شيء" توجليسكواري. ولكن في حالة الأعمدة الحافة، المشاكل الواقع مدعاة للعمود بأكمله غير موجود. تخيل هذا: قمت بالنقر فوق في العمود الأيسر. يتم تحديد العمود لتكون في الموضع 0. للبحث عن الجار الأيسر، يمكنك طرح واحد من موضع العمود. وهذا يعطينا عمود من-1. ومع ذلك، الوصول إلى الشبكة الصفيف مع فهرس-1 النتائج في لا قيمة؛ ليس هناك أي شيء مع قيمة-1! لذلك، نقوم بتدقيقات اثنين على قيمة العمود، للتأكد من أنها في حدود قبل محاولة التبديل بين المربع مع ذلك الفهرس العمود الجار.

إذا كنت تحاول أنه الآن، يجب عليك لعبة عاملة تقريبا.

خطوة 21: التحقق من الفوز

لمعرفة إذا كنت فزنا المباراة، نحن بحاجة إلى التحقق وين أساسا في كل مرة يحدث شيء أن يمكن أن تؤدي في فوز. وفي الحالة هذه اللعبة البسيطة، قد تحدث فوز أي وقت المستخدم بالنقر فوق مربع. لذا، نحن ذاهبون لإضافة التعليمات البرمجية للدالة أونسكواريكليك التي سوف تحقق من خلال متغير "isOn" كل مربع ويقرر إذا كان هناك مكسب أو لا اعتماداً على إذا كان متغير "isOn" أي ساحة false. إضافة هذه التعليمة البرمجية إلى نهاية الدالة "onSquareClick":

1
if (list.every(checkWin)) {
2
	trace("WIN!");
3
}

عنصر الصفيف كل أسلوب مماثلة في مفهوم إلى الأسلوب forEach، على الرغم من أنها وسيلة للتحقق من وجود نعم/لا الوضع داخل الصفيف. أساسا، الدالة نحن العرض إلى الأسلوب كل حاجة للعودة أما true أو false. الأسلوب نفسه سيعود true إذا كان كل عنصر في الصفيف أدت إلى عودة true من الدالة التي تم توفيرها، أو false إذا كان عنصر واحد على الأقل بسبب عودة false. سوف نكتب دالة "تشيكوين" التي تقوم بإرجاع true ساحة معينة في الصفيف "على"، وfalse إذا "قبالة". ضع هذه الدالة في أي مكان أن من المنطقي، خارج أي دالة أخرى:

1
function checkWin(square:MovieClip, index:int, array:Array):Boolean {
2
	return square.isOn;
3
}

مثل الأسلوب forEach، ستتلقى هذه الدالة العنصر في الصفيف (MovieClip)، جنبا إلى جنب مع الفهرس والمصفوفة نفسها. نحن مهتمون فقط في MovieClip، المتغير "isOn" الواردة فيه على وجه التحديد. ومع ذلك، خلافا للأسلوب forEach، نحن بحاجة إلى إرجاع قيمة منطقية. سوف نعود ببساطة قيمة المتغير "isOn" نفسها. إذا كان أي من المربعات، متغير "isOn" أنها ستكون مزورة، والأسلوب كل سترجع false، مما يعني أننا لا يفوز. إذا كانت كافة على، بيد أننا سنصل true من كل أسلوب، ولذلك سوف نرى الرسالة وين.

لماذا نستخدم كل بدلاً من forEach؟ حسنا، لأحد، أنها أكثر ملائمة لما نحاول القيام به. ونحن يمكن أن إنجاز هذا مع forEach، بل أنه ينطوي على مزيد من الخطوات. وثمة استحقاق آخر غير الكفاءة. في الزائفة الأولى عاد إلى كل, كل سيتم وقف التكرار والعودة ببساطة false. لذا، إذا كان المربع الأول، ثم نحن نعلم ليس فوز، ولسنا بحاجة للتكرار على الساحات 23 المتبقية.

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

الخطوة 22: البدء بطريقة عشوائية

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

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

ومع ذلك، نحن بحاجة للتأكد من أن يتم إعداد اللوحة بأكملها قبل أن علينا محاولة تبديل أي من المربعات. لذا سيكون نهج أسهل لإعداد مكالمة forEach أخرى بعد استدعاء forEach الذي يقوم بإعداد الساحات. إضافة هذا الحق خط أدناه (list.forEach(setupSquare؛ الخط:

1
list.forEach(setupBoard);

ثم ابحث عن بقعة جيدة لكتابة وظيفة جديدة (فمن المنطقي لوضعها بعد الدالة "سيتوبسكواري"، ولكن لا يهم حقاً. تنظيم التعليمات البرمجية الخاصة بك بطريقة يجعل الشعور لك):

1
function setupBoard(square:MovieClip, index:int, array:Array):void {
2
	if (Math.random() < 0.4) {
3
		square.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
4
	}
5
}

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

اختبار هذا الفيلم الآن، ويجب أن يكون مجلسا صعباً نسبيا جاهزة للعب. يمكن تغيير الصعوبة بزيادة العدد على الجانب الأيمن للمقارنة. لا تعيين إلى 0 أو 1، ولكن في أقرب إلى 0، فمن الأسهل؛ أقرب إلى 1، ازدادت صعوبة (عموما).

الاستنتاج

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

في المرة القادمة، سوف نتحدث عن حلقات الهياكل، التي تكمل صفائف طريقة بيز تكمل الجزر. ونحن في الواقع لقد تجنبت الحلقات على وجه التحديد في هذا البرنامج التعليمي، ولكن سوف نلقي نظرة طويلة لطيفة على منهم في أسابيع قليلة فقط.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.