1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: Hi. 3 00:00:13,715 --> 00:00:17,800 Ik ben Rob, en ik hoop dat je spel voor spel van 15. 4 00:00:17,800 --> 00:00:22,040 Nu zijn er vier functies die u nodig hebt te implementeren in dit programma - init, 5 00:00:22,040 --> 00:00:24,650 tekenen, bewegen, en won. 6 00:00:24,650 --> 00:00:27,230 Dus, laten we eens kijken naar init. 7 00:00:27,230 --> 00:00:32,930 >> Hier zien we het eerste wat we gaan doen, is een variabele declareert 8 00:00:32,930 --> 00:00:34,600 genaamd teller. 9 00:00:34,600 --> 00:00:37,620 Het zal worden geïnitialiseerd aan d maal d minus 1. 10 00:00:37,620 --> 00:00:40,200 Vergeet niet dat d de dimensie van ons bestuur. 11 00:00:40,200 --> 00:00:43,840 Hoe init gaat werken is dat het gaat te itereren over het gehele bestuur 12 00:00:43,840 --> 00:00:46,050 en we gaan beginnen in de linker bovenhoek. 13 00:00:46,050 --> 00:00:48,570 >> En laten we gewoon zeggen dat we hebben een 4 bij 4 bord. 14 00:00:48,570 --> 00:00:51,220 Dus de top vertrokken we ga zeggen is 15. 15 00:00:51,220 --> 00:00:53,960 En dan zijn we gewoon gaan tellen door de raad, zeggende: 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, enzovoort. 17 00:00:58,510 --> 00:01:03,780 Dus linksboven, verwachten we in d keer d minus 1, die op de 4 bij 4 18 00:01:03,780 --> 00:01:08,290 geval gaat 16 min zijn 1, die correct is 15. 19 00:01:08,290 --> 00:01:10,885 >> En nu hier is waar we gaan itereren over het gehele forum. 20 00:01:10,885 --> 00:01:14,720 En we gaan elke positie in te stellen het bestuur om de huidige waarde van 21 00:01:14,720 --> 00:01:19,090 onze toonbank, en dan teller gaat stapsgewijs af, zodat de volgende 22 00:01:19,090 --> 00:01:22,300 positie die we bereiken zal hebben teller niemand minder dan 23 00:01:22,300 --> 00:01:23,690 de vorige positie. 24 00:01:23,690 --> 00:01:26,970 We aanvankelijk 15 en verlagen teller. 25 00:01:26,970 --> 00:01:30,065 Dus dan gaan we toekennen 14 tot de volgende positie, decrement teller, 26 00:01:30,065 --> 00:01:33,710 en we gaan toegewezen 13, enzovoort. 27 00:01:33,710 --> 00:01:37,620 >> Tot slot moeten we naar die hoek te behandelen geval, indien de raad van bestuur heeft een nog 28 00:01:37,620 --> 00:01:44,450 dimensie, dan gewoon doen 15, 14, 13, 12, helemaal naar beneden tot en met 3, 2, 1, is 29 00:01:44,450 --> 00:01:46,780 gaat ons verlaten met een onoplosbaar boord. 30 00:01:46,780 --> 00:01:49,390 En we moeten wisselen van de 1 en de 2. 31 00:01:49,390 --> 00:01:52,930 Dus, als d mod 2 gelijk is aan 0, dat is hoe we gaan controleren 32 00:01:52,930 --> 00:01:54,410 om te zien of het wel. 33 00:01:54,410 --> 00:01:59,810 Als d mod 2 gelijk is aan 0, dan in rij d minus 1, de onderste rij, en 34 00:01:59,810 --> 00:02:05,430 positie d min 2, of kolom d minus 2, gaan we stellen dat op 2, en 35 00:02:05,430 --> 00:02:07,860 kolom d min 3 zijn we naar 1 te zetten. 36 00:02:07,860 --> 00:02:12,170 Dus dat is gewoon omkeren waar de 1 en 2 op dit moment zijn. 37 00:02:12,170 --> 00:02:16,270 >> Tot slot gaan we de zeer stellen rechtsonder gelijk aan leeg, waar 38 00:02:16,270 --> 00:02:20,700 leeg is hash gedefinieerd aan de top als 0. 39 00:02:20,700 --> 00:02:26,785 Zo, dat was niet strikt noodzakelijk, aangezien deze lus zal hebben 40 00:02:26,785 --> 00:02:30,610 ingesteld rechtsonder op 0, omdat teller zal uiteraard bereiken 0. 41 00:02:30,610 --> 00:02:34,610 Maar dat is gebaseerd op ons wetende dat blanco werd gehashte het vinden van een 0. 42 00:02:34,610 --> 00:02:38,280 Als ik in dit programma en later blanco boven veranderen 100, met 43 00:02:38,280 --> 00:02:39,770 moet nog steeds werken. 44 00:02:39,770 --> 00:02:43,180 >> Dus dit is gewoon om ervoor te zorgen dat de Rechtsonder is eigenlijk gelijk aan onze 45 00:02:43,180 --> 00:02:44,870 lege waarde. 46 00:02:44,870 --> 00:02:50,270 Tot slot hebben we twee globale variabelen, zo leeg i en j leeg, en we zien 47 00:02:50,270 --> 00:02:53,360 die verklaarde aan de top. 48 00:02:53,360 --> 00:02:56,270 En we gaan die twee wereldwijde gebruiken variabelen voor het bijhouden van de te houden 49 00:02:56,270 --> 00:02:59,040 positie van de blanco, zodat we niet moeten kijken door de hele 50 00:02:59,040 --> 00:03:03,890 boord om de lege elke vinden keer dat we proberen om een ​​beweging te maken. 51 00:03:03,890 --> 00:03:08,450 Zodat de positie van de blanco altijd is gaat om te beginnen aan de onderkant rechts. 52 00:03:08,450 --> 00:03:13,270 Dus rechts onderaan wordt gegeven door indices d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 Dus, dat is init. 54 00:03:14,880 --> 00:03:17,040 >> Nu gaan we naar tekenen. 55 00:03:17,040 --> 00:03:19,370 Dus, is loting zou lijken op zijn waar we gaan herhalen 56 00:03:19,370 --> 00:03:20,970 over het gehele forum. 57 00:03:20,970 --> 00:03:25,400 En we willen gewoon de waarde af te drukken dat is in elke stand van het bord. 58 00:03:25,400 --> 00:03:29,580 Dus hier zijn we de waarde die het afdrukken in elke stand van het bord. 59 00:03:29,580 --> 00:03:32,280 En merk op dat we het doen -. 60 00:03:32,280 --> 00:03:37,410 En dat is gewoon te vertellen dat printf ongeacht of het een een cijfer of 61 00:03:37,410 --> 00:03:42,010 tweecijferig nummer, we willen het nog steeds nemen twee kolommen van de afdruk, 62 00:03:42,010 --> 00:03:46,290 dus dat als we twee cijfers en een cijferige nummers in hetzelfde bord, onze 63 00:03:46,290 --> 00:03:49,450 bestuur zal zien er nog mooi en plein. 64 00:03:49,450 --> 00:03:54,190 >> Dus we willen dat doen voor elke waarde in de raad, met uitzondering van de blanco. 65 00:03:54,190 --> 00:03:58,260 Dus, als de positie in het bestuur is gelijk aan de blanco, dan specifiek wij 66 00:03:58,260 --> 00:04:01,730 wilt afdrukken gewoon een underscore de lege vertegenwoordigen, in plaats van 67 00:04:01,730 --> 00:04:05,150 ongeacht de waarde van de blank eigenlijk is. 68 00:04:05,150 --> 00:04:08,500 >> Tot slot willen we afdrukken een nieuwe lijn. 69 00:04:08,500 --> 00:04:11,970 Merk op dat deze nog binnen de buitenste lus, maar buiten 70 00:04:11,970 --> 00:04:13,200 de binnenste lus. 71 00:04:13,200 --> 00:04:17,930 Aangezien dit buitenste lus wordt itereren over alle rijen, en dus is deze printf is 72 00:04:17,930 --> 00:04:22,130 zomaar af te drukken een nieuwe lijn, dus we overgaan tot printen van de volgende rij. 73 00:04:22,130 --> 00:04:23,910 En dat is het voor gelijkspel. 74 00:04:23,910 --> 00:04:27,770 >> Dus, laten we nu verder gaan om te bewegen. 75 00:04:27,770 --> 00:04:32,590 Nu passeren we verhuizen, de tegel die de gebruiker in het spel is ingevoerd - ze 76 00:04:32,590 --> 00:04:36,360 voer de tegel ze willen bewegen - en jij moet een bool terug, dus 77 00:04:36,360 --> 00:04:39,300 waar of onwaar, afhankelijk van of die verhuizing was eigenlijk 78 00:04:39,300 --> 00:04:43,360 geldig - of die tegel kan zijn verplaatst naar de lege ruimte. 79 00:04:43,360 --> 00:04:48,340 >> Dus hier, verklaren wij een lokale variabele, tile_1 en tile_j, die zullen 80 00:04:48,340 --> 00:04:52,150 zijn vergelijkbaar met blank_i en blank_j, tenzij het gaat om het bijhouden van de te houden 81 00:04:52,150 --> 00:04:54,910 positie van de tegel. 82 00:04:54,910 --> 00:05:00,370 Nu hier, we gaan blank_i gebruiken en blank_j en zeggen: oke, dus 83 00:05:00,370 --> 00:05:01,930 hier is het leeg op het bord. 84 00:05:01,930 --> 00:05:04,420 >> Nu, is de tegel boven de lege? 85 00:05:04,420 --> 00:05:06,210 Is de tegel links van de plano? 86 00:05:06,210 --> 00:05:07,420 Is de tegel aan de rechterkant van de blanco? 87 00:05:07,420 --> 00:05:08,970 Is de tegel onder de blanco? 88 00:05:08,970 --> 00:05:13,330 Dus, als de tegel in iedere posities, dan weten we dat de tegel 89 00:05:13,330 --> 00:05:16,390 kan worden verplaatst naar de lege plek en de lege kan worden verplaatst waar de 90 00:05:16,390 --> 00:05:18,240 tegel op dit moment is. 91 00:05:18,240 --> 00:05:26,400 >> Dus hier, zeggen we als raad op positie blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Dus dit zegt, is de tegel boven de huidige leeg? 93 00:05:31,120 --> 00:05:34,350 En zo ja, we gaan om te onthouden dat is de positie van de tegel. 94 00:05:34,350 --> 00:05:37,870 De tegel is in positie blank_i minus 1 en blank_j. 95 00:05:37,870 --> 00:05:40,660 nu eerste, hebben we ook deze controle hier, dus blank_i is 96 00:05:40,660 --> 00:05:41,760 groter dan 0. 97 00:05:41,760 --> 00:05:43,410 >> Waarom willen we dat doen? 98 00:05:43,410 --> 00:05:47,290 Nou, als het leeg is in de bovenste rij van de raad, dan hebben we niet willen 99 00:05:47,290 --> 00:05:51,240 kijk boven de spatie voor de tegel sinds er is niets boven de top 100 00:05:51,240 --> 00:05:52,430 rij van het bord. 101 00:05:52,430 --> 00:05:55,950 Dit is hoe je zou kunnen eindigen krijgen iets als een segmentatie fout of 102 00:05:55,950 --> 00:05:59,030 je programma kan gewoon werken op onverwachte manieren. 103 00:05:59,030 --> 00:06:04,310 Dus, dit is ervoor te zorgen dat we niet kijk op plaatsen die niet geldig zijn. 104 00:06:04,310 --> 00:06:08,470 >> Nu gaan we hetzelfde doen voor alle andere mogelijke combinaties. 105 00:06:08,470 --> 00:06:13,250 Dus hier zijn we op zoek onder de blanco om te zien of dat de tegel. 106 00:06:13,250 --> 00:06:16,950 En we moeten ook zorgen dat we niet op de onderste rij, of we 107 00:06:16,950 --> 00:06:18,910 moet niet kijken naar de tegel. 108 00:06:18,910 --> 00:06:25,040 Hier gaan we naar links kijken van het leeg om te zien of het de tegel. 109 00:06:25,040 --> 00:06:27,860 En we moeten niet kijken naar links als we in de linkerkolom. 110 00:06:27,860 --> 00:06:30,100 En hier zijn we gaan kijken naar de recht van de blanco, en we moeten niet 111 00:06:30,100 --> 00:06:33,340 kijk naar rechts als we in de meest rechtse kolom. 112 00:06:33,340 --> 00:06:37,820 >> Dus, als geen van die dingen waar waren, dat betekent dat de tegel was niet naast 113 00:06:37,820 --> 00:06:39,640 naar het lege en kunnen we valse terugkeren. 114 00:06:39,640 --> 00:06:41,230 De verhuizing was niet geldig. 115 00:06:41,230 --> 00:06:47,010 Maar als een van die waar zou zijn, dan bij dit punt, we weten dat tile_i en 116 00:06:47,010 --> 00:06:50,540 tile_j gelijk aan de positie van de tegel. 117 00:06:50,540 --> 00:06:55,210 En zo kunnen we de raad updaten posities tile_i en tile_j. 118 00:06:55,210 --> 00:06:59,820 We kennen de nieuwe waarde zal het leeg zijn en dat de positie blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, die het origineel was leeg - we weten dat de tegel gaat 120 00:07:02,950 --> 00:07:04,030 bewegen daar. 121 00:07:04,030 --> 00:07:07,610 >> Merken we eigenlijk niet hoeft te doen een echte swap hier, omdat we weten het 122 00:07:07,610 --> 00:07:09,850 waarden die moeten worden ingebracht in die posities. 123 00:07:09,850 --> 00:07:13,780 We hebben geen een tijdelijke behoefte variabele rond. 124 00:07:13,780 --> 00:07:16,920 >> Tot slot moeten we niet vergeten dat we hebben onze globale variabelen die 125 00:07:16,920 --> 00:07:18,980 het bijhouden van de positie van de blanco. 126 00:07:18,980 --> 00:07:22,780 Dus willen we de positie van de te actualiseren de lege plaats waar de tegel zijn 127 00:07:22,780 --> 00:07:24,190 oorspronkelijk was. 128 00:07:24,190 --> 00:07:27,680 Tot slot, we return true sinds de verhuizing was succesvol. 129 00:07:27,680 --> 00:07:31,110 Wij hebben met succes swap de leeg met de tegel. 130 00:07:31,110 --> 00:07:34,890 >> Oke, dus we eindelijk moeten won controleren. 131 00:07:34,890 --> 00:07:39,900 Dus, won op dezelfde wijze retourneert een bool waar trouw zal geven dat de 132 00:07:39,900 --> 00:07:41,460 gebruiker het spel heeft gewonnen. 133 00:07:41,460 --> 00:07:43,780 En valse geeft aan dat het spel is nog steeds gaande. 134 00:07:43,780 --> 00:07:46,340 De gebruiker heeft niet gewonnen. 135 00:07:46,340 --> 00:07:52,100 Dus, dit gaat vrij veel te zijn het tegenovergestelde van init, waar init, 136 00:07:52,100 --> 00:07:56,920 vergeet niet dat we initialiseren de raad 15, 14, 13, 12, enzovoort. 137 00:07:56,920 --> 00:08:03,000 Overwegende won, willen we controleren of de bord is 1, 2, 3, 4, 5, enzovoort. 138 00:08:03,000 --> 00:08:06,600 >> Dus, we gaan initialiseren onze tegen te gaan 1 want dat is wat de top 139 00:08:06,600 --> 00:08:08,400 Links van de raad van bestuur zijn. 140 00:08:08,400 --> 00:08:10,860 En dan gaan we lus over het gehele forum. 141 00:08:10,860 --> 00:08:13,690 Laten we negeren deze aandoening voor een tweede. 142 00:08:13,690 --> 00:08:18,410 En deze voorwaarde is slechts gaat check is het bestuur op deze positie 143 00:08:18,410 --> 00:08:20,790 gelijk aan de huidige tellingen? 144 00:08:20,790 --> 00:08:27,040 Als dat zo is, verhoog de telling zodat de volgende positie we kijken naar een hoger 145 00:08:27,040 --> 00:08:29,690 dan de positie die we zijn op dit moment. 146 00:08:29,690 --> 00:08:32,700 >> Dus dat is hoe we de linksboven moet 1. 147 00:08:32,700 --> 00:08:33,950 Verhoog de telling naar 2. 148 00:08:33,950 --> 00:08:35,010 Kijk naar de volgende positie. 149 00:08:35,010 --> 00:08:35,690 Is deze 2? 150 00:08:35,690 --> 00:08:37,659 Als dat zo is, verhogen de telling op 3. 151 00:08:37,659 --> 00:08:39,179 Volgende positie, is dit 3? 152 00:08:39,179 --> 00:08:42,440 Als dat zo is, verhoog de telling 4, enzovoort. 153 00:08:42,440 --> 00:08:49,190 Dus, als er een positie op de bord dat niet overeenkomt met onze telling, 154 00:08:49,190 --> 00:08:52,640 dan willen we valse sinds die terugkeren betekent dat er een aantal tegels die 155 00:08:52,640 --> 00:08:55,490 niet in de juiste positie. 156 00:08:55,490 --> 00:08:58,810 >> Dus hier, wat is deze aandoening aan het doen? 157 00:08:58,810 --> 00:09:02,170 Nou, bedenk dan dat de blanco is hoort te gaan aan de onderkant rechts. 158 00:09:02,170 --> 00:09:06,180 En de waarde van de blanco's misschien niet gelijk te zijn aan de waarde van de 159 00:09:06,180 --> 00:09:11,080 tegen te gaan dat zal worden bereikt rechts onderaan. 160 00:09:11,080 --> 00:09:15,760 Dus we specifiek willen controleren of ik gelijk gelijk d minus 1 en j gelijken 161 00:09:15,760 --> 00:09:19,470 is gelijk aan d minus 1 - die zegt als we zijn op zoek naar de rechterbenedenhoek van 162 00:09:19,470 --> 00:09:22,050 het bestuur - dan gewoon we willen blijven. 163 00:09:22,050 --> 00:09:26,200 We willen deze bijzondere overslaan iteratie van de lus. 164 00:09:26,200 --> 00:09:31,250 >> En dus, als we erin slagen dit afhandelen geneste lus, dat betekent dat 165 00:09:31,250 --> 00:09:34,690 er was geen tegel die was in de verkeerde positie. 166 00:09:34,690 --> 00:09:38,900 En breken we uit de lus en komen hier, waar we echt kunnen terugkeren. 167 00:09:38,900 --> 00:09:41,800 De tegels werden in de juiste positie en dat betekent dat de gebruiker 168 00:09:41,800 --> 00:09:43,230 won de wedstrijd. 169 00:09:43,230 --> 00:09:44,460 En dat is het. 170 00:09:44,460 --> 00:09:46,550 Mijn naam is Rob Bowden, en dit was 15. 171 00:09:46,550 --> 00:09:52,726