1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: Oi 3 00:00:13,715 --> 00:00:17,800 Estou Rob, e eu espero que a súa xogo para xogo da 15. 4 00:00:17,800 --> 00:00:22,040 Agora, hai catro funcións que precisa a aplicar neste programa - init, 5 00:00:22,040 --> 00:00:24,650 deseñar, moverse, e gañou. 6 00:00:24,650 --> 00:00:27,230 Entón, imos ollar para o init. 7 00:00:27,230 --> 00:00:32,930 >> Aquí vemos o primeiro que nós estamos vai facer é declarar unha variable 8 00:00:32,930 --> 00:00:34,600 chamado contador. 9 00:00:34,600 --> 00:00:37,620 Vai ser inicializado para d veces d menos 1. 10 00:00:37,620 --> 00:00:40,200 Lembre que d é a dimensión do noso consello. 11 00:00:40,200 --> 00:00:43,840 Como o init funcionará é o que vai para repetir en todos os foros 12 00:00:43,840 --> 00:00:46,050 e nós imos comezar na esquina superior esquerda. 13 00:00:46,050 --> 00:00:48,570 >> E imos só dicir que teño unha tarxeta de 4 por 4. 14 00:00:48,570 --> 00:00:51,220 Así, a parte superior esquerda estamos vai dicir é 15. 15 00:00:51,220 --> 00:00:53,960 E entón nós só estamos indo para contar a través das placas, dicindo 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, e así por diante. 17 00:00:58,510 --> 00:01:03,780 Así, o ángulo superior esquerdo, esperamos estar d veces d menos 1, que na posición 4 por 4 18 00:01:03,780 --> 00:01:08,290 caso será 16 menos 1, que é axeitadamente 15. 19 00:01:08,290 --> 00:01:10,885 >> E agora aquí é onde nós imos repetidas en toda a liña. 20 00:01:10,885 --> 00:01:14,720 E nós estamos indo a definir cada posición a tarxeta co valor actual de 21 00:01:14,720 --> 00:01:19,090 noso balcón, e logo, contador vai para diminuír, para que o seguinte 22 00:01:19,090 --> 00:01:22,300 posición chegamos terá contador de ser un a menos que 23 00:01:22,300 --> 00:01:23,690 a posición anterior. 24 00:01:23,690 --> 00:01:26,970 Así, inicialmente tiña 15 e diminuír balcón. 25 00:01:26,970 --> 00:01:30,065 Entón imos asignar 14 á posición seguinte, contra decrecemento, 26 00:01:30,065 --> 00:01:33,710 e imos lle atribúe 13, e así por diante. 27 00:01:33,710 --> 00:01:37,620 >> Por último, hai que tratar con este recuncho caso en que, se a tarxeta ten un mesmo 28 00:01:37,620 --> 00:01:44,450 dimensión, entón é só facer 15, 14, 13, 12, todo o camiño ata a 3, 2, 1, é 29 00:01:44,450 --> 00:01:46,780 vai deixarnos con unha placa insoluble. 30 00:01:46,780 --> 00:01:49,390 E nós temos que cambiar o 1 eo 2. 31 00:01:49,390 --> 00:01:52,930 Así, se d mod 2 é igual a 0, isto é como imos comprobar 32 00:01:52,930 --> 00:01:54,410 a ver se o é. 33 00:01:54,410 --> 00:01:59,810 D mod 2 é igual a 0, entón na liña d menos 1, que é a liña de fondo, e 34 00:01:59,810 --> 00:02:05,430 posición d menos 2, ou columna d menos 2, nós imos establecer que a 2, e 35 00:02:05,430 --> 00:02:07,860 columna d menos 3 que estamos definirá a 1. 36 00:02:07,860 --> 00:02:12,170 Entón, iso é só inverter onde o 1 e 2, actualmente. 37 00:02:12,170 --> 00:02:16,270 >> Por último, imos definir o moi inferior dereita igual en branco, onde 38 00:02:16,270 --> 00:02:20,700 en branco foi de hash definido na parte superior, como 0. 39 00:02:20,700 --> 00:02:26,785 Entón, iso non era estrictamente necesario, xa que este ciclo se terá 40 00:02:26,785 --> 00:02:30,610 definir o ángulo inferior dereito a 0, xa que contador suposto acadar 0. 41 00:02:30,610 --> 00:02:34,610 Pero iso depende de nós, sabendo que branco foi hash para atopar un 0. 42 00:02:34,610 --> 00:02:38,280 Se eu fose para este programa e máis tarde cambiar branco na parte superior a 100, que 43 00:02:38,280 --> 00:02:39,770 aínda debe funcionar. 44 00:02:39,770 --> 00:02:43,180 >> Polo tanto, esta é só estar seguro de que o ángulo inferior dereito é realmente igual ao noso 45 00:02:43,180 --> 00:02:44,870 valor en branco. 46 00:02:44,870 --> 00:02:50,270 Por último, temos dúas variables globais, tan en branco i e j en branco, e vemos 47 00:02:50,270 --> 00:02:53,360 os declarados na parte superior. 48 00:02:53,360 --> 00:02:56,270 E nós imos usar os dous mundial variables para seguir o 49 00:02:56,270 --> 00:02:59,040 posición do branco, para que non que mirar a través de todo o 50 00:02:59,040 --> 00:03:03,890 consello para atopar o espazo en branco a cada xa que intentamos facer unha xogada. 51 00:03:03,890 --> 00:03:08,450 Así, a posición da peza en bruto é sempre comezará na esquina inferior dereita. 52 00:03:08,450 --> 00:03:13,270 Así, a parte inferior dereita é dada por índices d menos 1, d menos 1. 53 00:03:13,270 --> 00:03:14,880 Entón, iso é o init. 54 00:03:14,880 --> 00:03:17,040 >> Agora imos pasar para debuxar. 55 00:03:17,040 --> 00:03:19,370 Entón, sorteo será semellante onde imos facer unha iteración 56 00:03:19,370 --> 00:03:20,970 ao longo de todo o taboleiro. 57 00:03:20,970 --> 00:03:25,400 E nós só queremos imprimir o valor que está en cada posición do taboleiro. 58 00:03:25,400 --> 00:03:29,580 Entón, aquí, estamos a imprimir o valor que é en cada posición do taboleiro. 59 00:03:29,580 --> 00:03:32,280 E teña en conta que estamos a facer -. 60 00:03:32,280 --> 00:03:37,410 E iso é só a dicir que printf independentemente de se é un un díxito ou 61 00:03:37,410 --> 00:03:42,010 número de dous díxitos, aínda quere que ocupar dúas columnas na impresión, 62 00:03:42,010 --> 00:03:46,290 de xeito que, se temos dous díxitos e un números na mesma tarxeta, o noso 63 00:03:46,290 --> 00:03:49,450 consello aínda vai estar bo e cadrado. 64 00:03:49,450 --> 00:03:54,190 >> Por iso, queremos facelo para cada valor na tarxeta, excepto para o branco. 65 00:03:54,190 --> 00:03:58,260 Así, se a posición na tarxeta é igual a o espazo en branco, entón nós especificamente 66 00:03:58,260 --> 00:04:01,730 desexa imprimir só un subliñado para representar a tarxeta, en vez de 67 00:04:01,730 --> 00:04:05,150 calquera que sexa o valor do en branco realmente é. 68 00:04:05,150 --> 00:04:08,500 >> Por último, queremos imprimir unha nova liña. 69 00:04:08,500 --> 00:04:11,970 Nótese que este aínda está dentro o loop for externo, pero fóra 70 00:04:11,970 --> 00:04:13,200 o interior de loop. 71 00:04:13,200 --> 00:04:17,930 Xa que este loop for externo é iteración sobre todas as liñas, e por iso este é printf 72 00:04:17,930 --> 00:04:22,130 vai só imprimir unha nova liña, de xeito que pasar a imprimir a seguinte liña. 73 00:04:22,130 --> 00:04:23,910 E iso é por sorteo. 74 00:04:23,910 --> 00:04:27,770 >> Entón, agora imos pasar a moverse. 75 00:04:27,770 --> 00:04:32,590 Agora pasamos movemento, a tella que a usuario insírese no xogo - eles 76 00:04:32,590 --> 00:04:36,360 entrar na tella queren pasar - e ten que voltar un booleano, entón 77 00:04:36,360 --> 00:04:39,300 verdadeira ou falsa, dependendo se ese movemento era realmente 78 00:04:39,300 --> 00:04:43,360 válido - se que a tella pode ser mudouse para o espazo en branco. 79 00:04:43,360 --> 00:04:48,340 >> Entón, aquí, declaramos unha variable local, tile_1 e tile_j, que van 80 00:04:48,340 --> 00:04:52,150 ser semellante ao blank_i e blank_j, excepto que vai seguir o 81 00:04:52,150 --> 00:04:54,910 posición do azulexo. 82 00:04:54,910 --> 00:05:00,370 Agora aquí, imos usar blank_i e blank_j e dicir todo ben, entón 83 00:05:00,370 --> 00:05:01,930 aquí é o espazo en branco no taboleiro. 84 00:05:01,930 --> 00:05:04,420 >> Agora, é a tella por enriba do negro? 85 00:05:04,420 --> 00:05:06,210 É a tella á esquerda da barra de papel? 86 00:05:06,210 --> 00:05:07,420 É a tella á dereita da barra de papel? 87 00:05:07,420 --> 00:05:08,970 É o azulexo baixo do negro? 88 00:05:08,970 --> 00:05:13,330 Así, se a tella é en calquera dos posicións, entón sabemos que a tella 89 00:05:13,330 --> 00:05:16,390 pode ser movido para o espazo baleiro e a tarxeta pode ser movida a onde a 90 00:05:16,390 --> 00:05:18,240 tella actualmente. 91 00:05:18,240 --> 00:05:26,400 >> Entón, aquí, nós dicimos que a tarxeta na posición blank_i menos 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Entón, iso está dicindo é a tella enriba da cadea en branco? 93 00:05:31,120 --> 00:05:34,350 E se é así, imos lembrar que é a posición do azulexo. 94 00:05:34,350 --> 00:05:37,870 O azulexo está na posición blank_i menos 1 e blank_j. 95 00:05:37,870 --> 00:05:40,660 agora por primeira vez, tamén temos esa comprobación aquí, por iso é blank_i 96 00:05:40,660 --> 00:05:41,760 maior que 0. 97 00:05:41,760 --> 00:05:43,410 >> Por que quere facer isto? 98 00:05:43,410 --> 00:05:47,290 Ben, se o branco é na liña superior do consello de administración, así que non queremos 99 00:05:47,290 --> 00:05:51,240 mirar por riba do branco ao azulexo dende non hai nada enriba da parte superior 100 00:05:51,240 --> 00:05:52,430 fileira do taboleiro. 101 00:05:52,430 --> 00:05:55,950 Isto é como pode acabar recibindo algo así como un fallo de segmento ou 102 00:05:55,950 --> 00:05:59,030 o programa só podería traballar de formas inesperadas. 103 00:05:59,030 --> 00:06:04,310 Entón, iso é estar seguro de que non buscar en lugares que non son válidos. 104 00:06:04,310 --> 00:06:08,470 >> Agora imos facer o mesmo para todas as outras posibles combinacións. 105 00:06:08,470 --> 00:06:13,250 Entón, aquí, nós estamos mirando baixo o espazo en branco a ver se ese é o azulexo. 106 00:06:13,250 --> 00:06:16,950 E nós tamén temos que ter seguro que estamos non na liña de abaixo, ou entón nós 107 00:06:16,950 --> 00:06:18,910 non debe ollar para o azulexo. 108 00:06:18,910 --> 00:06:25,040 Aquí, imos ollar para a esquerda de o espazo en branco para ver se é o azulexo. 109 00:06:25,040 --> 00:06:27,860 E non hai que mirar cara á esquerda se estamos na columna máis á esquerda. 110 00:06:27,860 --> 00:06:30,100 E aquí imos ollar para o dereito de o espazo en branco, e non hai que 111 00:06:30,100 --> 00:06:33,340 ollar para a dereita, se estamos na columna da dereita. 112 00:06:33,340 --> 00:06:37,820 >> Entón, se ningunha destas cousas fose verdade, isto significa que o azulexo non é adxacente 113 00:06:37,820 --> 00:06:39,640 para o espazo en branco e podemos voltar false. 114 00:06:39,640 --> 00:06:41,230 O movemento non era válido. 115 00:06:41,230 --> 00:06:47,010 Pero, se unha destas fose verdade, entón a Neste punto, sabemos que tile_i e 116 00:06:47,010 --> 00:06:50,540 tile_j son iguais aos posición do azulexo. 117 00:06:50,540 --> 00:06:55,210 E así, podemos actualizar a tarxeta de posicións tile_i e tile_j. 118 00:06:55,210 --> 00:06:59,820 Sabemos que o novo valor será o branco e que a posición blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, que era o orixinal en branco - sabemos o azulexo vai 120 00:07:02,950 --> 00:07:04,030 cambiar para alí. 121 00:07:04,030 --> 00:07:07,610 >> Teña en conta que en realidade, non ten que facer un cambio real aquí, xa que sabemos que o 122 00:07:07,610 --> 00:07:09,850 os valores que precisan ser inserido naquelas posicións. 123 00:07:09,850 --> 00:07:13,780 Non necesitamos un temporal variable arredor. 124 00:07:13,780 --> 00:07:16,920 >> Finalmente, cómpre lembrar que nós temos as nosas variables globais que son 125 00:07:16,920 --> 00:07:18,980 manter o control da situación do branco. 126 00:07:18,980 --> 00:07:22,780 Por iso, queremos actualizar a posición de o espazo en branco para estar onde a tella 127 00:07:22,780 --> 00:07:24,190 orixinalmente era. 128 00:07:24,190 --> 00:07:27,680 Por último, volvemos realidade, pois o movemento foi exitoso. 129 00:07:27,680 --> 00:07:31,110 Nós intercambiar con éxito o en branco coa tella. 130 00:07:31,110 --> 00:07:34,890 >> Todo ben, entón pasada nós que comprobar won. 131 00:07:34,890 --> 00:07:39,900 Así, gañou regresa do mesmo xeito un bool onde certo que vai indicar que o 132 00:07:39,900 --> 00:07:41,460 usuario gañou o xogo. 133 00:07:41,460 --> 00:07:43,780 E falso está indicando que o partido aínda está en curso. 134 00:07:43,780 --> 00:07:46,340 O usuario aínda non gañou. 135 00:07:46,340 --> 00:07:52,100 Entón, que vai ser moi bonito o contrario de inicio, onde init 136 00:07:52,100 --> 00:07:56,920 lembre, nós arrincar a bordo a 15, 14, 13, 12, etc. 137 00:07:56,920 --> 00:08:03,000 Considerando gañou, queremos comprobar que o tarxeta é 1, 2, 3, 4, 5, e así por diante. 138 00:08:03,000 --> 00:08:06,600 >> Entón, imos comezar o noso contrarrestar a 1, xa que é o que o principio 139 00:08:06,600 --> 00:08:08,400 esquerda da tarxeta debe ser. 140 00:08:08,400 --> 00:08:10,860 E entón nós imos facer un loop ao longo de todo o taboleiro. 141 00:08:10,860 --> 00:08:13,690 Imos ignorar esta condición por un segundo. 142 00:08:13,690 --> 00:08:18,410 E esa condición só vai comprobación é a tarxeta nesta posición 143 00:08:18,410 --> 00:08:20,790 igual as contas actuais? 144 00:08:20,790 --> 00:08:27,040 Se é así, incrementa a conta de modo a que o seguinte posición que é mirar para un maior 145 00:08:27,040 --> 00:08:29,690 que a posición estamos no momento. 146 00:08:29,690 --> 00:08:32,700 >> Entón é así que temos a superior esquerda debe ser 1. 147 00:08:32,700 --> 00:08:33,950 Incrementar a conta de 2. 148 00:08:33,950 --> 00:08:35,010 Olhe a seguinte posición. 149 00:08:35,010 --> 00:08:35,690 Este é o 2? 150 00:08:35,690 --> 00:08:37,659 De ser así, incrementar a conta de 3. 151 00:08:37,659 --> 00:08:39,179 Seguinte posición, é dicir 3? 152 00:08:39,179 --> 00:08:42,440 De ser así, incrementar a conta a 4, e así por diante. 153 00:08:42,440 --> 00:08:49,190 Así, se calquera posición sobre o placa que non coincide a nosa conta, 154 00:08:49,190 --> 00:08:52,640 entón queremos volver falsa, xa que significa que hai algunha peza que é 155 00:08:52,640 --> 00:08:55,490 non na posición correcta. 156 00:08:55,490 --> 00:08:58,810 >> Entón, aquí, o que é esa condición está facendo? 157 00:08:58,810 --> 00:09:02,170 Ben, lembre que o espazo en branco é debería ir na parte inferior dereita. 158 00:09:02,170 --> 00:09:06,180 E o valor do branco non pode necesariamente igual ao valor do 159 00:09:06,180 --> 00:09:11,080 contador que vai ser alcanzado na parte inferior dereita. 160 00:09:11,080 --> 00:09:15,760 Por iso, quere especialmente para comprobar se i coincide é igual a menos d 1 e j iguais 161 00:09:15,760 --> 00:09:19,470 d é igual a menos 1 - o que está dicindo, se están mirando para o ángulo inferior dereito da 162 00:09:19,470 --> 00:09:22,050 a bordo - entón nós só Quere continuar. 163 00:09:22,050 --> 00:09:26,200 Queremos saltar este particular iteración do bucle para. 164 00:09:26,200 --> 00:09:31,250 >> E así, se logramos pasar por iso aniñados en loop, o que significa que 165 00:09:31,250 --> 00:09:34,690 non houbo tella que foi en a posición incorrecta. 166 00:09:34,690 --> 00:09:38,900 E nós saír do loop e vir aquí, onde podemos volver verdade. 167 00:09:38,900 --> 00:09:41,800 Todos os azulexos estaban nas posicións correctas e iso significa que o usuario ten 168 00:09:41,800 --> 00:09:43,230 gañou o partido. 169 00:09:43,230 --> 00:09:44,460 E é iso. 170 00:09:44,460 --> 00:09:46,550 O meu nome é Rob Bowden, e este tiña 15 anos. 171 00:09:46,550 --> 00:09:52,726