1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: مرحبا. 3 00:00:13,715 --> 00:00:17,800 أنا روب، وآمل الخاص لعبة لعبة 15. 4 00:00:17,800 --> 00:00:22,040 الآن، وهناك أربع وظائف تحتاج لتنفيذ هذا البرنامج في - الحرف الأول، 5 00:00:22,040 --> 00:00:24,650 رسم، تتحرك، وفاز. 6 00:00:24,650 --> 00:00:27,230 لذلك، دعونا ننظر في الحرف الأول. 7 00:00:27,230 --> 00:00:32,930 >> هنا، ونحن نرى أول شيء نحن بصدد القيام به هو تعريف متغير 8 00:00:32,930 --> 00:00:34,600 دعا العداد. 9 00:00:34,600 --> 00:00:37,620 انها تسير ليتم تهيئتها إلى العصور د د ناقص 1. 10 00:00:37,620 --> 00:00:40,200 تذكر أن د هو البعد من مجلسنا. 11 00:00:40,200 --> 00:00:43,840 كيف الحرف الأول هو الذهاب إلى العمل هو انه سيكون لتكرار عبر المجلس بأكمله 12 00:00:43,840 --> 00:00:46,050 ونحن في طريقنا للبدء في الجزء العلوي الأيسر. 13 00:00:46,050 --> 00:00:48,570 >> ودعنا نقول فقط نحن لديك لوحة 4 بنسبة 4. 14 00:00:48,570 --> 00:00:51,220 وبالتالي فإن أعلى اليسار نحن أريد أن أقول هو 15. 15 00:00:51,220 --> 00:00:53,960 ثم نحن ذاهبون لمجرد الاعتماد من خلال لوحات، قائلا 15، 14، 13، 16 00:00:53,960 --> 00:00:58,510 12، 11، 10، 9، 8، 7، 6، 5، 4، وهلم جرا. 17 00:00:58,510 --> 00:01:03,780 حتى الجزء العلوي الأيسر، ونحن نتوقع أن تكون أوقات د د ناقص 1، والتي في 4 بنسبة 4 18 00:01:03,780 --> 00:01:08,290 الحالة ستكون 16 تحت الصفر 1، الذي هو بشكل صحيح 15. 19 00:01:08,290 --> 00:01:10,885 >> والآن هنا حيث نحن ذاهبون ل تكرار عبر المجلس بأكمله. 20 00:01:10,885 --> 00:01:14,720 ونحن في طريقنا إلى تعيين كل موقف في المجلس إلى القيمة الحالية لل 21 00:01:14,720 --> 00:01:19,090 مكافحة دينا، ومن ثم مكافحة يجري لإنقاص، بحيث المقبل 22 00:01:19,090 --> 00:01:22,300 موقف نصل ستكون لدينا عداد تكون أقل من واحد 23 00:01:22,300 --> 00:01:23,690 الموقف السابق. 24 00:01:23,690 --> 00:01:26,970 لذلك كان علينا في البداية 15 و إنقاص العداد. 25 00:01:26,970 --> 00:01:30,065 حتى ذلك الحين ونحن في طريقنا لتعيين 14 إلى موقف المقبل، إنقاص العداد، 26 00:01:30,065 --> 00:01:33,710 ونحن في طريقنا للتعيين 13، وهلم جرا. 27 00:01:33,710 --> 00:01:37,620 >> أخيرا، نحن بحاجة الى التعامل مع تلك الزاوية الحالة التي يكون فيها، وإذا كان المجلس لديه حتى 28 00:01:37,620 --> 00:01:44,450 البعد، ثم القيام بعد 15، 14، 13، 12، على طول الطريق وصولا الى 3، 2، 1، هو 29 00:01:44,450 --> 00:01:46,780 تسير على ترك لنا مع لوحة غير قابلة للحل. 30 00:01:46,780 --> 00:01:49,390 وعلينا أن مبادلة 1 و2. 31 00:01:49,390 --> 00:01:52,930 لذلك، إذا د زارة الدفاع 2 يساوي 0، وهذا كيف ونحن في طريقنا للتحقق 32 00:01:52,930 --> 00:01:54,410 لمعرفة ما اذا كان حتى. 33 00:01:54,410 --> 00:01:59,810 إذا د زارة الدفاع 2 يساوي 0، ثم في الصف د ناقص 1، والذي هو الصف السفلي، و 34 00:01:59,810 --> 00:02:05,430 موقف د ناقص 2 أو عمود د ناقص 2، ونحن في طريقنا إلى تعيين هذا إلى 2، و 35 00:02:05,430 --> 00:02:07,860 العمود د ناقص 3 نحن الذهاب الى تعيين إلى 1. 36 00:02:07,860 --> 00:02:12,170 ذلك أن مجرد عكس حيث 1 و 2 حاليا. 37 00:02:12,170 --> 00:02:16,270 >> أخيرا، ونحن في طريقنا لتعيين جدا أسفل اليمين يساوي فارغة، حيث 38 00:02:16,270 --> 00:02:20,700 فارغة تم تجزئة المعرفة في الجزء العلوي ك 0. 39 00:02:20,700 --> 00:02:26,785 لذلك، لم يكن ذلك ضروريا تماما، لأن هذا لحلقة ستكون لدينا 40 00:02:26,785 --> 00:02:30,610 تعيين أسفل اليمين إلى 0، منذ وسوف تصل بشكل طبيعي مضادة 0. 41 00:02:30,610 --> 00:02:34,610 ولكن هذا يعتمد علينا مع العلم أن تم تجزئته فارغة لإيجاد 0. 42 00:02:34,610 --> 00:02:38,280 إذا ذهبت إلى هذا البرنامج في وقت لاحق و تغيير فارغة في الجزء العلوي إلى 100، فإنه 43 00:02:38,280 --> 00:02:39,770 يجب أن لا تزال تعمل. 44 00:02:39,770 --> 00:02:43,180 >> لذلك هذا هو مجرد التأكد من أن أسفل اليمين هو في الواقع يساوي لدينا 45 00:02:43,180 --> 00:02:44,870 قيمة فارغة. 46 00:02:44,870 --> 00:02:50,270 أخيرا، لدينا اثنين من المتغيرات العالمية، لذلك أنا وفارغة ي فارغة، ونحن نرى 47 00:02:50,270 --> 00:02:53,360 تلك المعلنة في الأعلى. 48 00:02:53,360 --> 00:02:56,270 ونحن في طريقنا إلى استخدام تلك العالميتين المتغيرات للحفاظ على تعقب من 49 00:02:56,270 --> 00:02:59,040 موقف فارغة، لذلك ما نقوم به لا بحاجة الى ان ننظر من خلال بأكمله 50 00:02:59,040 --> 00:03:03,890 مجلس للعثور على كل واحد فارغ مرة ونحن في محاولة لجعل هذه الخطوة. 51 00:03:03,890 --> 00:03:08,450 وبالتالي فإن موقف فارغة دائما سوف تبدأ في أسفل اليمين. 52 00:03:08,450 --> 00:03:13,270 بحيث يتم إعطاء الحق السفلي بواسطة المؤشرات 1 د ناقص 1، د ناقص. 53 00:03:13,270 --> 00:03:14,880 لذلك، وهذا هو الحرف الأول. 54 00:03:14,880 --> 00:03:17,040 >> الآن ننتقل إلى رسم. 55 00:03:17,040 --> 00:03:19,370 لذلك، التعادل ستكون مماثلة أين نحن ذاهبون إلى تكرار 56 00:03:19,370 --> 00:03:20,970 على المجلس بأكمله. 57 00:03:20,970 --> 00:03:25,400 ونحن نريد فقط لطباعة القيمة وهذا في كل موقف للمجلس. 58 00:03:25,400 --> 00:03:29,580 حتى هنا، ونحن طباعة قيمة هذا في كل موقف للمجلس. 59 00:03:29,580 --> 00:03:32,280 وتلاحظ أن نقوم به -. 60 00:03:32,280 --> 00:03:37,410 وهذا مجرد إخبار أن printf بغض النظر عن ما اذا كان رقم واحد أو 61 00:03:37,410 --> 00:03:42,010 عدد اثنين من أرقام، ونحن لا تزال تريد أن يستغرق عمودين في الطباعة بها، 62 00:03:42,010 --> 00:03:46,290 بحيث إذا كان لدينا اثنين من أرقام واحد أرقام أرقام في المجلس نفسه، لدينا 63 00:03:46,290 --> 00:03:49,450 ويكون لمجلس تزال تبدو لطيفة ومربع. 64 00:03:49,450 --> 00:03:54,190 >> لذلك نحن نريد أن نفعل ذلك كل قيمة في المجلس، فيما عدا فارغا. 65 00:03:54,190 --> 00:03:58,260 لذلك، إذا كان الموقف في مجلس يساوي الفراغ، فإننا على وجه التحديد 66 00:03:58,260 --> 00:04:01,730 تريد طباعة فقط تسطير لتمثيل فارغة، بدلا من 67 00:04:01,730 --> 00:04:05,150 مهما كانت قيمة فارغ هو في الواقع. 68 00:04:05,150 --> 00:04:08,500 >> أخيرا، ونحن نريد لطباعة من سطر جديد. 69 00:04:08,500 --> 00:04:11,970 لاحظ أن هذا لا يزال داخل الخارجي للحلقة، ولكن خارج 70 00:04:11,970 --> 00:04:13,200 والداخلية للحلقة. 71 00:04:13,200 --> 00:04:17,930 لأن هذا الخارجي للحلقة وبالتكرار على كل الصفوف، وهكذا هذا هو printf 72 00:04:17,930 --> 00:04:22,130 الذهاب الى مجرد طباعة سطر جديد، لذلك نحن الانتقال إلى طباعة الصف التالي. 73 00:04:22,130 --> 00:04:23,910 وهذا كل شيء عن التعادل. 74 00:04:23,910 --> 00:04:27,770 >> لذا، دعونا الآن ننتقل إلى التحرك. 75 00:04:27,770 --> 00:04:32,590 الآن، ونحن تمرير الخطوة، البلاط أن يتم إدخال المستخدم في اللعبة - أنها 76 00:04:32,590 --> 00:04:36,360 أدخل البلاط كانوا يريدون التحرك - و كنت من المفترض أن ترجع منطقي، لذلك 77 00:04:36,360 --> 00:04:39,300 إما صحيحة أو خاطئة، اعتمادا على إذا كان هذا التحرك في الواقع 78 00:04:39,300 --> 00:04:43,360 صالحة - سواء كان ذلك يمكن أن يكون البلاط انتقل إلى مساحة فارغة. 79 00:04:43,360 --> 00:04:48,340 >> حتى هنا، فإننا نعلن متغير محلي، tile_1 وtile_j، والتي تسير على 80 00:04:48,340 --> 00:04:52,150 تكون مشابهة لblank_i وblank_j، إلا انها سوف تتبع 81 00:04:52,150 --> 00:04:54,910 موقف البلاط. 82 00:04:54,910 --> 00:05:00,370 الآن هنا، ونحن ذاهبون الى استخدام blank_i وblank_j ويقول كل الحق، لذلك 83 00:05:00,370 --> 00:05:01,930 وهنا فارغة على متن الطائرة. 84 00:05:01,930 --> 00:05:04,420 >> الآن، هو فوق البلاط فارغة؟ 85 00:05:04,420 --> 00:05:06,210 هو البلاط إلى يسار فارغة؟ 86 00:05:06,210 --> 00:05:07,420 هو البلاط على يمين الفراغ؟ 87 00:05:07,420 --> 00:05:08,970 هو البلاط تحت فارغة؟ 88 00:05:08,970 --> 00:05:13,330 لذلك، إذا كان البلاط هو في أي من تلك مواقف، ثم نحن نعلم أن البلاط 89 00:05:13,330 --> 00:05:16,390 يمكن نقل الى المركز فارغة و يمكن نقل فارغة إلى حيث 90 00:05:16,390 --> 00:05:18,240 بلاط حاليا. 91 00:05:18,240 --> 00:05:26,400 >> حتى هنا، ونحن نقول إذا متن على الموقف blank_i ناقص 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 لذلك هذا هو القول هو البلاط أعلاه الفراغ الحالي؟ 93 00:05:31,120 --> 00:05:34,350 وإذا كان الأمر كذلك، ونحن في طريقنا إلى تذكر هذا هو موقف البلاط. 94 00:05:34,350 --> 00:05:37,870 البلاط هو في موقف blank_i ناقص 1 وblank_j. 95 00:05:37,870 --> 00:05:40,660 الآن أول، لدينا أيضا هذا الاختيار الحق هنا، ذلك هو blank_i 96 00:05:40,660 --> 00:05:41,760 أكبر من 0. 97 00:05:41,760 --> 00:05:43,410 >> لماذا نريد أن نفعل ذلك؟ 98 00:05:43,410 --> 00:05:47,290 حسنا، إذا كان الفراغ هو في الصف العلوي مجلس الإدارة، ثم نحن لا نريد ل 99 00:05:47,290 --> 00:05:51,240 تبدو فوق فارغة لبلاط منذ لا يوجد شيء فوق قمة 100 00:05:51,240 --> 00:05:52,430 صف من المجلس. 101 00:05:52,430 --> 00:05:55,950 هذه هي الطريقة التي كنت قد ينتهي الحصول على شيء من هذا القبيل خطأ أو تجزئة 102 00:05:55,950 --> 00:05:59,030 البرنامج قد يكون مجرد عمل بطرق غير متوقعة. 103 00:05:59,030 --> 00:06:04,310 لذلك، وهذا هو التأكد من أننا لا البحث في الأماكن التي هي غير صالحة. 104 00:06:04,310 --> 00:06:08,470 >> الآن ونحن في طريقنا للقيام بنفس الشيء ل جميع التوليفات الممكنة الأخرى. 105 00:06:08,470 --> 00:06:13,250 حتى هنا، نحن نبحث أدناه فارغة لمعرفة ما إذا كان هذا هو البلاط. 106 00:06:13,250 --> 00:06:16,950 وعلينا أيضا أن نتأكد من أننا ليس على الصف السفلي، وإلا فإننا 107 00:06:16,950 --> 00:06:18,910 يجب أن لا ننظر للبلاط. 108 00:06:18,910 --> 00:06:25,040 هنا، ونحن في طريقنا للبحث على يسار فارغة لمعرفة ما اذا كان البلاط. 109 00:06:25,040 --> 00:06:27,860 وعلينا أن لا ننظر إلى اليسار إذا نحن في العمود أقصى اليمين. 110 00:06:27,860 --> 00:06:30,100 وهنا ونحن في طريقنا للنظر إلى حق فارغة، ونحن لا ينبغي 111 00:06:30,100 --> 00:06:33,340 نتطلع إلى الحق إذا كنا في العمود أقصى اليمين. 112 00:06:33,340 --> 00:06:37,820 >> لذلك، إذا لم تكن أي من تلك الأشياء الحقيقية، وهذا يعني ان لا البلاط المجاورة 113 00:06:37,820 --> 00:06:39,640 إلى فارغة ويمكن أن نعود كاذبة. 114 00:06:39,640 --> 00:06:41,230 ان هذه الخطوة غير صالح. 115 00:06:41,230 --> 00:06:47,010 ولكن، إذا كانت واحدة من تلك الحقيقية، ثم في هذه النقطة، ونحن نعلم أن tile_i و 116 00:06:47,010 --> 00:06:50,540 tile_j هي مساوية ل موقف البلاط. 117 00:06:50,540 --> 00:06:55,210 وهكذا، يمكننا استكمال المجلس في مواقف tile_i وtile_j. 118 00:06:55,210 --> 00:06:59,820 ونحن نعلم أن القيمة الجديدة أن تكون فارغة وأن موقف blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j، الذي كان الأصلي فارغة - ونحن نعلم البلاط هو الذهاب الى 120 00:07:02,950 --> 00:07:04,030 الانتقال إلى هناك. 121 00:07:04,030 --> 00:07:07,610 >> لاحظ أننا لا نملك في الواقع للقيام مبادلة حقيقية هنا، لأننا نعرف 122 00:07:07,610 --> 00:07:09,850 القيم التي ينبغي إدراجها في تلك المواقف. 123 00:07:09,850 --> 00:07:13,780 نحن لسنا بحاجة مؤقت المتغير حولها. 124 00:07:13,780 --> 00:07:16,920 >> أخيرا، علينا أن نتذكر أننا لديك متغيرات العالمية التي هي لدينا 125 00:07:16,920 --> 00:07:18,980 تتبع الموقف من فارغة. 126 00:07:18,980 --> 00:07:22,780 لذلك نحن نريد لتحديث موقف الفراغ ليكون فيها البلاط 127 00:07:22,780 --> 00:07:24,190 كان في الأصل. 128 00:07:24,190 --> 00:07:27,680 وأخيرا، فإننا العودة الحقيقية منذ كانت خطوة ناجحة. 129 00:07:27,680 --> 00:07:31,110 نحن مبادلة بنجاح فارغة مع البلاط. 130 00:07:31,110 --> 00:07:34,890 >> كل الحق، ونحن لذلك الماضي تحتاج إلى التحقق وون. 131 00:07:34,890 --> 00:07:39,900 لذلك، فاز بالمثل بإرجاع منطقي حيث صحيح هو الذهاب للإشارة إلى أن 132 00:07:39,900 --> 00:07:41,460 وقد فاز مستخدم اللعبة. 133 00:07:41,460 --> 00:07:43,780 وكاذبة وتشير إلى أن اللعبة لا يزال مستمرا. 134 00:07:43,780 --> 00:07:46,340 لم يفز المستخدم. 135 00:07:46,340 --> 00:07:52,100 لذلك، وهذا سيكون الى حد كبير على العكس من الحرف الأول، حيث الحرف الأول، 136 00:07:52,100 --> 00:07:56,920 نتذكر، ونحن تهيئة المجلس إلى 15، 14، 13، 12، هلم جرا. 137 00:07:56,920 --> 00:08:03,000 في حين فاز، ونحن نريد لمعرفة ما اذا كان المجلس هو 1، 2، 3، 4، 5، وهلم جرا. 138 00:08:03,000 --> 00:08:06,600 >> لذلك، نحن ذاهبون لتهيئة لدينا مواجهة ل1 منذ هذا ما أعلى 139 00:08:06,600 --> 00:08:08,400 وينبغي أن يكون الأيسر من اللوحة. 140 00:08:08,400 --> 00:08:10,860 ثم نحن في طريقنا للحلقة على المجلس بأكمله. 141 00:08:10,860 --> 00:08:13,690 دعونا تجاهل هذا الشرط لثانية واحدة. 142 00:08:13,690 --> 00:08:18,410 وهذا الشرط هو مجرد الذهاب الى الاختيار هو لوحة في هذا الموقف 143 00:08:18,410 --> 00:08:20,790 يساوي التهم الحالية؟ 144 00:08:20,790 --> 00:08:27,040 إذا كان الأمر كذلك، زيادة العد بحيث موقف القادمة ونحن ننظر إلى أعلى واحد 145 00:08:27,040 --> 00:08:29,690 من الموقف ونحن في الوقت الراهن. 146 00:08:29,690 --> 00:08:32,700 >> لذلك هذا هو كيف نحصل على أعلى اليسار يجب أن يكون 1. 147 00:08:32,700 --> 00:08:33,950 زيادة العد إلى 2. 148 00:08:33,950 --> 00:08:35,010 ننظر إلى موقف المقبل. 149 00:08:35,010 --> 00:08:35,690 هذا هو 2؟ 150 00:08:35,690 --> 00:08:37,659 إذا كان الأمر كذلك، زيادة العدد إلى 3. 151 00:08:37,659 --> 00:08:39,179 موقف المقبل، وهذا هو 3؟ 152 00:08:39,179 --> 00:08:42,440 إذا كان الأمر كذلك، زيادة العد إلى 4، وهلم جرا. 153 00:08:42,440 --> 00:08:49,190 لذلك، إذا كان هناك أي موقف بشأن المجلس الذي لا يساوي العد لدينا، 154 00:08:49,190 --> 00:08:52,640 ثم نريد أن عودة كاذبة منذ ذلك يعني هناك بعض البلاط التي هي 155 00:08:52,640 --> 00:08:55,490 ليس في الموضع الصحيح. 156 00:08:55,490 --> 00:08:58,810 >> حتى هنا، ما هو هذا الشرط تفعل؟ 157 00:08:58,810 --> 00:09:02,170 كذلك، تذكر أن الفراغ هو من المفترض أن تذهب في أسفل اليمين. 158 00:09:02,170 --> 00:09:06,180 وربما قيمة فارغة لن يساوي بالضرورة قيمة 159 00:09:06,180 --> 00:09:11,080 مواجهة ذلك سوف يتم التوصل في أسفل اليمين. 160 00:09:11,080 --> 00:09:15,760 لذلك نحن نريد تحديدا للتحقق مما إذا ط يساوي يساوي د ناقص 1 وي التساوي 161 00:09:15,760 --> 00:09:19,470 د يساوي ناقص 1 - الذي يقول إذا كنا تبحث في أسفل يمين 162 00:09:19,470 --> 00:09:22,050 مجلس - ثم نحن فقط تريد الاستمرار. 163 00:09:22,050 --> 00:09:26,200 نحن نريد لتخطي هذا خاص التكرار من حلقة ل. 164 00:09:26,200 --> 00:09:31,250 >> وهكذا، إذا ما تمكنا من الحصول من خلال هذا متداخلة للحلقة، وهذا يعني أن 165 00:09:31,250 --> 00:09:34,690 لم يكن هناك البلاط التي كانت في موقف غير صحيحة. 166 00:09:34,690 --> 00:09:38,900 ونحن خروج من حلقة وتأتي هنا، حيث يمكننا العودة الحقيقية. 167 00:09:38,900 --> 00:09:41,800 كانت جميع البلاط في المواضع الصحيحة وهذا يعني أن المستخدم لديه 168 00:09:41,800 --> 00:09:43,230 فاز في المباراة. 169 00:09:43,230 --> 00:09:44,460 وهذا كل شيء. 170 00:09:44,460 --> 00:09:46,550 اسمي روب بودين، وكان هذا 15. 171 00:09:46,550 --> 00:09:52,726