1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: Salut. 3 00:00:13,715 --> 00:00:17,800 Je suis Rob, et j'espère que votre jeu de jeu de 15. 4 00:00:17,800 --> 00:00:22,040 Maintenant, il ya quatre fonctions dont vous avez besoin à mettre en œuvre dans ce programme - init, 5 00:00:22,040 --> 00:00:24,650 dessiner, déplacer, et a gagné. 6 00:00:24,650 --> 00:00:27,230 Alors, regardons initialisation. 7 00:00:27,230 --> 00:00:32,930 >> Ici, nous voyons la première chose que nous sommes vais faire est de déclarer une variable 8 00:00:32,930 --> 00:00:34,600 appelé compteur. 9 00:00:34,600 --> 00:00:37,620 Ça va être initialisé à d fois d moins 1. 10 00:00:37,620 --> 00:00:40,200 Rappelez-vous que d est la dimension de notre conseil d'administration. 11 00:00:40,200 --> 00:00:43,840 Comment initialisation va travailler est qu'il va pour parcourir l'ensemble du conseil 12 00:00:43,840 --> 00:00:46,050 et nous allons commencer en haut à gauche. 13 00:00:46,050 --> 00:00:48,570 >> Et disons que nous avoir un conseil 4 par 4. 14 00:00:48,570 --> 00:00:51,220 Donc, en haut à gauche, nous sommes vais dire est 15. 15 00:00:51,220 --> 00:00:53,960 Et puis nous allons juste compter à travers les planches, en disant 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, et ainsi de suite. 17 00:00:58,510 --> 00:01:03,780 Donc, en haut à gauche, nous nous attendons à avoir des moments d d moins 1, qui, dans le quatre par quatre 18 00:01:03,780 --> 00:01:08,290 cas va être 16 moins 1, qui est correctement 15. 19 00:01:08,290 --> 00:01:10,885 >> Et maintenant, voici où nous allons itérer sur l'ensemble du conseil. 20 00:01:10,885 --> 00:01:14,720 Et nous allons régler chaque position dans le conseil de la valeur actuelle de 21 00:01:14,720 --> 00:01:19,090 notre compteur, puis contre va pour décrémenter, de sorte que la prochaine 22 00:01:19,090 --> 00:01:22,300 position que nous atteignons va avoir compteur soit un de moins que 23 00:01:22,300 --> 00:01:23,690 la position précédente. 24 00:01:23,690 --> 00:01:26,970 Donc nous avons d'abord eu 15 et décrémenter compteur. 25 00:01:26,970 --> 00:01:30,065 Alors nous allons attribuer 14 à la position suivante, décrémentation compteur, 26 00:01:30,065 --> 00:01:33,710 et nous allons attribué 13, et ainsi de suite. 27 00:01:33,710 --> 00:01:37,620 >> Enfin, nous devons gérer ce coin cas où, si le conseil d'administration a un même 28 00:01:37,620 --> 00:01:44,450 dimension, puis il suffit de faire 15, 14, 13, 12, tout en bas à 3, 2, 1, est 29 00:01:44,450 --> 00:01:46,780 va nous laisser avec un conseil insoluble. 30 00:01:46,780 --> 00:01:49,390 Et nous avons à échanger le 1 et le 2. 31 00:01:49,390 --> 00:01:52,930 Donc, si d mod 2 est égal à 0, c'est comment nous allons vérifier 32 00:01:52,930 --> 00:01:54,410 pour voir si elle est encore. 33 00:01:54,410 --> 00:01:59,810 Si d mod 2 est égal à 0, alors la ligne d moins 1, qui est la ligne du bas, et 34 00:01:59,810 --> 00:02:05,430 la position d moins 2, ou de la colonne d moins 2, nous allons définir ce à 2, et 35 00:02:05,430 --> 00:02:07,860 colonne d moins 3 nous sommes va mettre à 1. 36 00:02:07,860 --> 00:02:12,170 Donc, c'est juste inverser où le 1 et 2 sont actuellement. 37 00:02:12,170 --> 00:02:16,270 >> Enfin, nous allons définir la très en bas à droite égale à vide, où 38 00:02:16,270 --> 00:02:20,700 blanc a été défini hachage dans la partie supérieure en tant que 0. 39 00:02:20,700 --> 00:02:26,785 Donc, ce n'était pas strictement nécessaire, puisque cette boucle va avoir 40 00:02:26,785 --> 00:02:30,610 mettre en bas à droite à 0, puisque compteur naturellement atteindre 0. 41 00:02:30,610 --> 00:02:34,610 Mais qui repose sur nous en sachant que blanc a été haché de trouver un 0. 42 00:02:34,610 --> 00:02:38,280 Si je vais dans ce programme et plus tard changer vierge en haut à 100, il 43 00:02:38,280 --> 00:02:39,770 devrait fonctionner. 44 00:02:39,770 --> 00:02:43,180 >> Donc, c'est juste de s'assurer que la en bas à droite est en fait égal à notre 45 00:02:43,180 --> 00:02:44,870 valeur à blanc. 46 00:02:44,870 --> 00:02:50,270 Enfin, nous avons deux variables globales, si vide i et j en blanc, et nous voyons 47 00:02:50,270 --> 00:02:53,360 ceux déclarés au sommet. 48 00:02:53,360 --> 00:02:56,270 Et nous allons utiliser ces deux mondial variables pour garder une trace de l' 49 00:02:56,270 --> 00:02:59,040 position de la vierge, de sorte que nous ne faisons pas besoin de regarder à travers l'ensemble du 50 00:02:59,040 --> 00:03:03,890 conseil pour trouver la vierge à chaque unique fois que nous essayons de faire un geste. 51 00:03:03,890 --> 00:03:08,450 Ainsi, la position de l'ébauche est toujours va commencer en bas à droite. 52 00:03:08,450 --> 00:03:13,270 Donc, en bas à droite est donnée par indices d moins 1, moins 1 d. 53 00:03:13,270 --> 00:03:14,880 Donc, c'est initialisation. 54 00:03:14,880 --> 00:03:17,040 >> Nous passons maintenant à dessiner. 55 00:03:17,040 --> 00:03:19,370 Donc, tirage va être similaire où nous allons parcourir 56 00:03:19,370 --> 00:03:20,970 sur tout le forum. 57 00:03:20,970 --> 00:03:25,400 Et nous voulons juste pour imprimer la valeur c'est dans chaque position de la carte. 58 00:03:25,400 --> 00:03:29,580 Donc, ici, nous l'impression de la valeur qui est dans chaque position de la carte. 59 00:03:29,580 --> 00:03:32,280 Et remarquons que nous faisons -. 60 00:03:32,280 --> 00:03:37,410 Et c'est juste dire que printf indépendamment de si c'est un un chiffre ou 61 00:03:37,410 --> 00:03:42,010 nombre à deux chiffres, nous voulons toujours à prendre deux colonnes dans l'imprimé, 62 00:03:42,010 --> 00:03:46,290 de sorte que si nous avons deux chiffres et un nombres à un chiffre dans la même commission, notre 63 00:03:46,290 --> 00:03:49,450 conseil sera toujours aussi agréable et carré. 64 00:03:49,450 --> 00:03:54,190 >> Donc, nous voulons le faire pour chaque valeur dans le conseil, sauf pour le blanc. 65 00:03:54,190 --> 00:03:58,260 Donc, si la position de la commission est égale à le vide, nous avons expressément 66 00:03:58,260 --> 00:04:01,730 voulez imprimer juste un trait de soulignement pour représenter l'ébauche, au lieu d' 67 00:04:01,730 --> 00:04:05,150 quelle que soit la valeur de l' blanc est en fait. 68 00:04:05,150 --> 00:04:08,500 >> Enfin, nous voulons imprimer une nouvelle ligne. 69 00:04:08,500 --> 00:04:11,970 Notez que ceci est encore à l'intérieur la boucle for extérieure, mais à l'extérieur 70 00:04:11,970 --> 00:04:13,200 l'intérieur de la boucle. 71 00:04:13,200 --> 00:04:17,930 Depuis cette boucle for extérieure est l'itération sur toutes les lignes, et si ce n'est printf 72 00:04:17,930 --> 00:04:22,130 va juste imprimer une nouvelle ligne, de sorte que nous passer à imprimer la ligne suivante. 73 00:04:22,130 --> 00:04:23,910 Et c'est tout pour tirage au sort. 74 00:04:23,910 --> 00:04:27,770 >> Donc, maintenant passons à déplacer. 75 00:04:27,770 --> 00:04:32,590 Maintenant, nous passons mouvement, la tuile que l' utilisateur est entré dans le jeu - ils 76 00:04:32,590 --> 00:04:36,360 entrer le carreau ils veulent aller - et vous êtes censé retourner un bool, si 77 00:04:36,360 --> 00:04:39,300 soit vrai ou faux, selon si ce mouvement était en fait 78 00:04:39,300 --> 00:04:43,360 valable - si cette tuile peut être déplacé dans l'espace vide. 79 00:04:43,360 --> 00:04:48,340 >> Donc, ici, nous déclarons une variable locale, tile_1 et tile_j, qui vont 80 00:04:48,340 --> 00:04:52,150 être similaire à blank_i et blank_j, sauf qu'il va garder une trace de l' 81 00:04:52,150 --> 00:04:54,910 la position de la tuile. 82 00:04:54,910 --> 00:05:00,370 Ici, nous allons utiliser blank_i et blank_j et dire tout droit, si 83 00:05:00,370 --> 00:05:01,930 voici la vierge sur le plateau. 84 00:05:01,930 --> 00:05:04,420 >> Maintenant, est la tuile au-dessus du vide? 85 00:05:04,420 --> 00:05:06,210 Le carreau à la gauche de l'ébauche? 86 00:05:06,210 --> 00:05:07,420 Est la tuile à la droite de la vierge? 87 00:05:07,420 --> 00:05:08,970 Est la tuile en dessous du vide? 88 00:05:08,970 --> 00:05:13,330 Donc, si la tuile est en tout état de ceux positions, alors nous savons que la tuile 89 00:05:13,330 --> 00:05:16,390 peut être déplacé dans la zone vide et le flan peut être déplacé à l'endroit où l' 90 00:05:16,390 --> 00:05:18,240 tuile est actuellement. 91 00:05:18,240 --> 00:05:26,400 >> Donc, ici, nous disons si le conseil à la position blank_i moins 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Donc, cela veut dire, c'est la tuile au-dessus du vide actuel? 93 00:05:31,120 --> 00:05:34,350 Et si c'est le cas, nous allons rappeler c'est la position de la tuile. 94 00:05:34,350 --> 00:05:37,870 La tuile est en position blank_i moins 1 et blank_j. 95 00:05:37,870 --> 00:05:40,660 maintenant d'abord, nous avons aussi cette vérification ici, si blank_i est 96 00:05:40,660 --> 00:05:41,760 supérieur à 0. 97 00:05:41,760 --> 00:05:43,410 >> Pourquoi voulons-nous faire? 98 00:05:43,410 --> 00:05:47,290 Eh bien, si le blanc est dans la ligne supérieure du conseil d'administration, nous ne voulons pas 99 00:05:47,290 --> 00:05:51,240 regarder au-dessus du vide pour le carreau depuis il n'y a rien au-dessus du haut 100 00:05:51,240 --> 00:05:52,430 rangée du conseil. 101 00:05:52,430 --> 00:05:55,950 C'est la façon dont vous pourriez finir par avoir quelque chose comme une erreur de segmentation ou 102 00:05:55,950 --> 00:05:59,030 votre programme pourrait marcher de manière inattendue. 103 00:05:59,030 --> 00:06:04,310 Donc, cela est de s'assurer que nous ne faisons pas regarder dans des endroits qui ne sont pas valides. 104 00:06:04,310 --> 00:06:08,470 >> Maintenant, nous allons faire la même chose pour toutes les autres combinaisons possibles. 105 00:06:08,470 --> 00:06:13,250 Donc, ici, nous sommes à la recherche-dessous de la vierge pour voir si c'est la tuile. 106 00:06:13,250 --> 00:06:16,950 Et nous devons aussi nous assurer que nous sommes pas sur la ligne du bas, ou bien nous 107 00:06:16,950 --> 00:06:18,910 ne doit pas chercher la tuile. 108 00:06:18,910 --> 00:06:25,040 Ici, nous allons regarder à la gauche de le vide pour voir si c'est la tuile. 109 00:06:25,040 --> 00:06:27,860 Et nous ne devrions pas voir à gauche si nous sommes dans la colonne de gauche. 110 00:06:27,860 --> 00:06:30,100 Et ici, nous allons examiner à la droit de l'ébauche, et nous ne devrions pas 111 00:06:30,100 --> 00:06:33,340 regarder à droite si nous sommes dans la colonne la plus à droite. 112 00:06:33,340 --> 00:06:37,820 >> Donc, si aucune de ces choses était vrai, cela signifie que la dalle n'est pas adjacent 113 00:06:37,820 --> 00:06:39,640 à l'ébauche et nous pouvons retourner false. 114 00:06:39,640 --> 00:06:41,230 Le mouvement n'est pas valide. 115 00:06:41,230 --> 00:06:47,010 Mais, si l'un de ceux était vrai, alors à ce point, nous savons que tile_i et 116 00:06:47,010 --> 00:06:50,540 tile_j sont égaux à l' la position de la tuile. 117 00:06:50,540 --> 00:06:55,210 Et ainsi, nous pouvons mettre à jour la carte à positions tile_i et tile_j. 118 00:06:55,210 --> 00:06:59,820 Nous savons que la nouvelle valeur sera le vide et que la position blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, qui était l'original blanc - nous savons que la tuile va 120 00:07:02,950 --> 00:07:04,030 déplacer là-bas. 121 00:07:04,030 --> 00:07:07,610 >> Notez fait nous ne sommes pas à faire un réel échange ici, puisque nous savons que le 122 00:07:07,610 --> 00:07:09,850 valeurs qui doivent être insérées dans ces positions. 123 00:07:09,850 --> 00:07:13,780 Nous n'avons pas besoin d'un temporaire variables autour. 124 00:07:13,780 --> 00:07:16,920 >> Enfin, nous devons nous rappeler que nous que nos variables globales qui sont 125 00:07:16,920 --> 00:07:18,980 garder la trace de la position de l'ébauche. 126 00:07:18,980 --> 00:07:22,780 Donc, nous voulons mettre à jour la position de l'ébauche d'être là où la tuile 127 00:07:22,780 --> 00:07:24,190 était à l'origine. 128 00:07:24,190 --> 00:07:27,680 Enfin, nous revenons vrai que le mouvement a été couronnée de succès. 129 00:07:27,680 --> 00:07:31,110 Nous échangeons avec succès la blanc avec la tuile. 130 00:07:31,110 --> 00:07:34,890 >> Très bien, alors dernier, nous avons besoin de vérifier won. 131 00:07:34,890 --> 00:07:39,900 Donc, a remporté renvoie de même un bool où vrai va indiquer que l' 132 00:07:39,900 --> 00:07:41,460 l'utilisateur a gagné la partie. 133 00:07:41,460 --> 00:07:43,780 Et le faux est ce qui indique que le jeu est toujours en cours. 134 00:07:43,780 --> 00:07:46,340 L'utilisateur n'a pas gagné. 135 00:07:46,340 --> 00:07:52,100 Donc, cela va être à peu près à l'opposé de init, où init, 136 00:07:52,100 --> 00:07:56,920 Rappelons, on initialise la carte à 15, 14, 13, 12, etc. 137 00:07:56,920 --> 00:08:03,000 Considérant que gagné, nous voulons vérifier si l' planche est 1, 2, 3, 4, 5, et ainsi de suite. 138 00:08:03,000 --> 00:08:06,600 >> Donc, nous allons initialiser notre contre 1 puisque c'est ce que le haut 139 00:08:06,600 --> 00:08:08,400 gauche de la carte devrait être. 140 00:08:08,400 --> 00:08:10,860 Et puis nous allons boucle sur tout le forum. 141 00:08:10,860 --> 00:08:13,690 Ignorons cette condition pour une seconde. 142 00:08:13,690 --> 00:08:18,410 Et cette condition va juste chèque est le conseil à ce poste 143 00:08:18,410 --> 00:08:20,790 égal aux chiffres actuels? 144 00:08:20,790 --> 00:08:27,040 Si c'est le cas, incrémenter le comptage de sorte que le position suivante que nous voyons est un plus 145 00:08:27,040 --> 00:08:29,690 que la position que nous sommes à l'heure actuelle. 146 00:08:29,690 --> 00:08:32,700 >> C'est comme ça que nous avons l' en haut à gauche doit être de 1. 147 00:08:32,700 --> 00:08:33,950 Incrémenter le compteur à 2. 148 00:08:33,950 --> 00:08:35,010 Regardez la position suivante. 149 00:08:35,010 --> 00:08:35,690 Est-ce 2? 150 00:08:35,690 --> 00:08:37,659 Si oui, incrémenter le compteur à 3. 151 00:08:37,659 --> 00:08:39,179 Position suivante, est-ce 3? 152 00:08:39,179 --> 00:08:42,440 Si oui, incrémenter le compteur à 4, et ainsi de suite. 153 00:08:42,440 --> 00:08:49,190 Ainsi, s'il existe une position sur la conseil qui ne correspond pas à notre compte, 154 00:08:49,190 --> 00:08:52,640 alors nous voulons retourner faux puisque que signifie qu'il ya une certaine tuile qui est 155 00:08:52,640 --> 00:08:55,490 pas dans la position correcte. 156 00:08:55,490 --> 00:08:58,810 >> Donc, ici, ce qui est fait de cette condition? 157 00:08:58,810 --> 00:09:02,170 Eh bien, rappelez-vous que le vide est censé aller en bas à droite. 158 00:09:02,170 --> 00:09:06,180 Et la valeur de la vierge peut-être pas nécessairement égale à la valeur de l' 159 00:09:06,180 --> 00:09:11,080 compteur qui va être atteint en bas à droite. 160 00:09:11,080 --> 00:09:15,760 Donc, nous voulons spécifiquement pour vérifier si i est égal à égal d moins 1 et j égaux 161 00:09:15,760 --> 00:09:19,470 est égal à d moins 1 - ce qui veut dire, si nous sont à la recherche en bas à droite de 162 00:09:19,470 --> 00:09:22,050 le conseil - alors que nous venons de vouloir continuer. 163 00:09:22,050 --> 00:09:26,200 Nous voulons passer ce particulier itération de la boucle de. 164 00:09:26,200 --> 00:09:31,250 >> Et donc, si nous parvenons à passer à travers cette niché pour la boucle, ce qui signifie que 165 00:09:31,250 --> 00:09:34,690 il n'y avait pas de carreau qui a été en la position incorrecte. 166 00:09:34,690 --> 00:09:38,900 Et nous sortir de la boucle et venons ici, où nous pouvons revenir vrai. 167 00:09:38,900 --> 00:09:41,800 Toutes les tuiles sont dans la bonne position et cela signifie que l'utilisateur a 168 00:09:41,800 --> 00:09:43,230 gagné la partie. 169 00:09:43,230 --> 00:09:44,460 Et c'est tout. 170 00:09:44,460 --> 00:09:46,550 Mon nom est Rob Bowden, et ce fut 15. 171 00:09:46,550 --> 00:09:52,726