>> ROB BOWDEN: Salut.
Je suis Rob, et j'espère que votre jeu de jeu de 15.
Maintenant, il ya quatre fonctions dont vous avez besoin à mettre en œuvre dans ce programme - init,
dessiner, déplacer, et a gagné.
Alors, regardons initialisation.
>> Ici, nous voyons la première chose que nous sommes vais faire est de déclarer une variable
appelé compteur.
Ça va être initialisé à d fois d moins 1.
Rappelez-vous que d est la dimension de notre conseil d'administration.
Comment initialisation va travailler est qu'il va pour parcourir l'ensemble du conseil
et nous allons commencer en haut à gauche.
>> Et disons que nous avoir un conseil 4 par 4.
Donc, en haut à gauche, nous sommes vais dire est 15.
Et puis nous allons juste compter à travers les planches, en disant 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, et ainsi de suite.
Donc, en haut à gauche, nous nous attendons à avoir des moments d d moins 1, qui, dans le quatre par quatre
cas va être 16 moins 1, qui est correctement 15.
>> Et maintenant, voici où nous allons itérer sur l'ensemble du conseil.
Et nous allons régler chaque position dans le conseil de la valeur actuelle de
notre compteur, puis contre va pour décrémenter, de sorte que la prochaine
position que nous atteignons va avoir compteur soit un de moins que
la position précédente.
Donc nous avons d'abord eu 15 et décrémenter compteur.
Alors nous allons attribuer 14 à la position suivante, décrémentation compteur,
et nous allons attribué 13, et ainsi de suite.
>> Enfin, nous devons gérer ce coin cas où, si le conseil d'administration a un même
dimension, puis il suffit de faire 15, 14, 13, 12, tout en bas à 3, 2, 1, est
va nous laisser avec un conseil insoluble.
Et nous avons à échanger le 1 et le 2.
Donc, si d mod 2 est égal à 0, c'est comment nous allons vérifier
pour voir si elle est encore.
Si d mod 2 est égal à 0, alors la ligne d moins 1, qui est la ligne du bas, et
la position d moins 2, ou de la colonne d moins 2, nous allons définir ce à 2, et
colonne d moins 3 nous sommes va mettre à 1.
Donc, c'est juste inverser où le 1 et 2 sont actuellement.
>> Enfin, nous allons définir la très en bas à droite égale à vide, où
blanc a été défini hachage dans la partie supérieure en tant que 0.
Donc, ce n'était pas strictement nécessaire, puisque cette boucle va avoir
mettre en bas à droite à 0, puisque compteur naturellement atteindre 0.
Mais qui repose sur nous en sachant que blanc a été haché de trouver un 0.
Si je vais dans ce programme et plus tard changer vierge en haut à 100, il
devrait fonctionner.
>> Donc, c'est juste de s'assurer que la en bas à droite est en fait égal à notre
valeur à blanc.
Enfin, nous avons deux variables globales, si vide i et j en blanc, et nous voyons
ceux déclarés au sommet.
Et nous allons utiliser ces deux mondial variables pour garder une trace de l'
position de la vierge, de sorte que nous ne faisons pas besoin de regarder à travers l'ensemble du
conseil pour trouver la vierge à chaque unique fois que nous essayons de faire un geste.
Ainsi, la position de l'ébauche est toujours va commencer en bas à droite.
Donc, en bas à droite est donnée par indices d moins 1, moins 1 d.
Donc, c'est initialisation.
>> Nous passons maintenant à dessiner.
Donc, tirage va être similaire où nous allons parcourir
sur tout le forum.
Et nous voulons juste pour imprimer la valeur c'est dans chaque position de la carte.
Donc, ici, nous l'impression de la valeur qui est dans chaque position de la carte.
Et remarquons que nous faisons -.
Et c'est juste dire que printf indépendamment de si c'est un un chiffre ou
nombre à deux chiffres, nous voulons toujours à prendre deux colonnes dans l'imprimé,
de sorte que si nous avons deux chiffres et un nombres à un chiffre dans la même commission, notre
conseil sera toujours aussi agréable et carré.
>> Donc, nous voulons le faire pour chaque valeur dans le conseil, sauf pour le blanc.
Donc, si la position de la commission est égale à le vide, nous avons expressément
voulez imprimer juste un trait de soulignement pour représenter l'ébauche, au lieu d'
quelle que soit la valeur de l' blanc est en fait.
>> Enfin, nous voulons imprimer une nouvelle ligne.
Notez que ceci est encore à l'intérieur la boucle for extérieure, mais à l'extérieur
l'intérieur de la boucle.
Depuis cette boucle for extérieure est l'itération sur toutes les lignes, et si ce n'est printf
va juste imprimer une nouvelle ligne, de sorte que nous passer à imprimer la ligne suivante.
Et c'est tout pour tirage au sort.
>> Donc, maintenant passons à déplacer.
Maintenant, nous passons mouvement, la tuile que l' utilisateur est entré dans le jeu - ils
entrer le carreau ils veulent aller - et vous êtes censé retourner un bool, si
soit vrai ou faux, selon si ce mouvement était en fait
valable - si cette tuile peut être déplacé dans l'espace vide.
>> Donc, ici, nous déclarons une variable locale, tile_1 et tile_j, qui vont
être similaire à blank_i et blank_j, sauf qu'il va garder une trace de l'
la position de la tuile.
Ici, nous allons utiliser blank_i et blank_j et dire tout droit, si
voici la vierge sur le plateau.
>> Maintenant, est la tuile au-dessus du vide?
Le carreau à la gauche de l'ébauche?
Est la tuile à la droite de la vierge?
Est la tuile en dessous du vide?
Donc, si la tuile est en tout état de ceux positions, alors nous savons que la tuile
peut être déplacé dans la zone vide et le flan peut être déplacé à l'endroit où l'
tuile est actuellement.
>> Donc, ici, nous disons si le conseil à la position blank_i moins 1 blank_j.
Donc, cela veut dire, c'est la tuile au-dessus du vide actuel?
Et si c'est le cas, nous allons rappeler c'est la position de la tuile.
La tuile est en position blank_i moins 1 et blank_j.
maintenant d'abord, nous avons aussi cette vérification ici, si blank_i est
supérieur à 0.
>> Pourquoi voulons-nous faire?
Eh bien, si le blanc est dans la ligne supérieure du conseil d'administration, nous ne voulons pas
regarder au-dessus du vide pour le carreau depuis il n'y a rien au-dessus du haut
rangée du conseil.
C'est la façon dont vous pourriez finir par avoir quelque chose comme une erreur de segmentation ou
votre programme pourrait marcher de manière inattendue.
Donc, cela est de s'assurer que nous ne faisons pas regarder dans des endroits qui ne sont pas valides.
>> Maintenant, nous allons faire la même chose pour toutes les autres combinaisons possibles.
Donc, ici, nous sommes à la recherche-dessous de la vierge pour voir si c'est la tuile.
Et nous devons aussi nous assurer que nous sommes pas sur la ligne du bas, ou bien nous
ne doit pas chercher la tuile.
Ici, nous allons regarder à la gauche de le vide pour voir si c'est la tuile.
Et nous ne devrions pas voir à gauche si nous sommes dans la colonne de gauche.
Et ici, nous allons examiner à la droit de l'ébauche, et nous ne devrions pas
regarder à droite si nous sommes dans la colonne la plus à droite.
>> Donc, si aucune de ces choses était vrai, cela signifie que la dalle n'est pas adjacent
à l'ébauche et nous pouvons retourner false.
Le mouvement n'est pas valide.
Mais, si l'un de ceux était vrai, alors à ce point, nous savons que tile_i et
tile_j sont égaux à l' la position de la tuile.
Et ainsi, nous pouvons mettre à jour la carte à positions tile_i et tile_j.
Nous savons que la nouvelle valeur sera le vide et que la position blank_i
blank_j, qui était l'original blanc - nous savons que la tuile va
déplacer là-bas.
>> Notez fait nous ne sommes pas à faire un réel échange ici, puisque nous savons que le
valeurs qui doivent être insérées dans ces positions.
Nous n'avons pas besoin d'un temporaire variables autour.
>> Enfin, nous devons nous rappeler que nous que nos variables globales qui sont
garder la trace de la position de l'ébauche.
Donc, nous voulons mettre à jour la position de l'ébauche d'être là où la tuile
était à l'origine.
Enfin, nous revenons vrai que le mouvement a été couronnée de succès.
Nous échangeons avec succès la blanc avec la tuile.
>> Très bien, alors dernier, nous avons besoin de vérifier won.
Donc, a remporté renvoie de même un bool où vrai va indiquer que l'
l'utilisateur a gagné la partie.
Et le faux est ce qui indique que le jeu est toujours en cours.
L'utilisateur n'a pas gagné.
Donc, cela va être à peu près à l'opposé de init, où init,
Rappelons, on initialise la carte à 15, 14, 13, 12, etc.
Considérant que gagné, nous voulons vérifier si l' planche est 1, 2, 3, 4, 5, et ainsi de suite.
>> Donc, nous allons initialiser notre contre 1 puisque c'est ce que le haut
gauche de la carte devrait être.
Et puis nous allons boucle sur tout le forum.
Ignorons cette condition pour une seconde.
Et cette condition va juste chèque est le conseil à ce poste
égal aux chiffres actuels?
Si c'est le cas, incrémenter le comptage de sorte que le position suivante que nous voyons est un plus
que la position que nous sommes à l'heure actuelle.
>> C'est comme ça que nous avons l' en haut à gauche doit être de 1.
Incrémenter le compteur à 2.
Regardez la position suivante.
Est-ce 2?
Si oui, incrémenter le compteur à 3.
Position suivante, est-ce 3?
Si oui, incrémenter le compteur à 4, et ainsi de suite.
Ainsi, s'il existe une position sur la conseil qui ne correspond pas à notre compte,
alors nous voulons retourner faux puisque que signifie qu'il ya une certaine tuile qui est
pas dans la position correcte.
>> Donc, ici, ce qui est fait de cette condition?
Eh bien, rappelez-vous que le vide est censé aller en bas à droite.
Et la valeur de la vierge peut-être pas nécessairement égale à la valeur de l'
compteur qui va être atteint en bas à droite.
Donc, nous voulons spécifiquement pour vérifier si i est égal à égal d moins 1 et j égaux
est égal à d moins 1 - ce qui veut dire, si nous sont à la recherche en bas à droite de
le conseil - alors que nous venons de vouloir continuer.
Nous voulons passer ce particulier itération de la boucle de.
>> Et donc, si nous parvenons à passer à travers cette niché pour la boucle, ce qui signifie que
il n'y avait pas de carreau qui a été en la position incorrecte.
Et nous sortir de la boucle et venons ici, où nous pouvons revenir vrai.
Toutes les tuiles sont dans la bonne position et cela signifie que l'utilisateur a
gagné la partie.
Et c'est tout.
Mon nom est Rob Bowden, et ce fut 15.