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 I راب هستم، و من امیدوارم که شما بازی برای بازی 15. 4 00:00:17,800 --> 00:00:22,040 در حال حاضر، چهار توابع نیاز شما وجود ندارد برای پیاده سازی در این برنامه - init انجام، 5 00:00:22,040 --> 00:00:24,650 قرعه کشی، حرکت، و به دست آورد. 6 00:00:24,650 --> 00:00:27,230 بنابراین، اجازه دهید در init انجام است. 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 به یاد داشته باشید که D بعد است از هیئت مدیره است. 11 00:00:40,200 --> 00:00:43,840 چگونه init انجام شده است به کار است آن را به تکرار کل سایت 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 بنابراین بالا سمت چپ، ما انتظار داریم که d بار D منهای 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 بنابراین، اگر D وزارت دفاع 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 موقعیت D منفی، یا ستون د منهای 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 بنابراین سمت راست پایین است با شاخص D منهای 1، D منهای 1. 53 00:03:13,270 --> 00:03:14,880 بنابراین، آن init انجام است. 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 توجه کنید که این است که هنوز در داخل بیرونی حلقه for، اما در خارج 70 00:04:11,970 --> 00:04:13,200 به حلقه for. 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 بنابراین، به دست آورد به طور مشابه bool را که در آن درست است که به نشان می دهد که 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 بنابراین، این است که برای رفتن به تقریبا در مقابل init انجام، که در آن init انجام، 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 بنابراین ما به طور خاص می خواهید برای چک کردن من برابر برابر با D منهای 1 و j برابر 161 00:09:15,760 --> 00:09:19,470 برابر با D منهای 1 - است که گفت: اگر ما به دنبال در سمت راست پایین 162 00:09:19,470 --> 00:09:22,050 هیئت مدیره - پس ما فقط مایل به ادامه. 163 00:09:22,050 --> 00:09:26,200 ما می خواهیم به جست و خیز این خاص تکرار از حلقه for. 164 00:09:26,200 --> 00:09:31,250 >> و به این ترتیب، اگر ما را از طریق این دریافت تو در تو حلقه for، که بدان معنی است که 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 نام من راب Bowden است، و این 15 بود. 171 00:09:46,550 --> 00:09:52,726