ROB BOWDEN: Oi Estou Rob, e eu espero que a súa xogo para xogo da 15. Agora, hai catro funcións que precisa a aplicar neste programa - init, deseñar, moverse, e gañou. Entón, imos ollar para o init. Aquí vemos o primeiro que nós estamos vai facer é declarar unha variable chamado contador. Vai ser inicializado para d veces d menos 1. Lembre que d é a dimensión do noso consello. Como o init funcionará é o que vai para repetir en todos os foros e nós imos comezar na esquina superior esquerda. E imos só dicir que teño unha tarxeta de 4 por 4. Así, a parte superior esquerda estamos vai dicir é 15. E entón nós só estamos indo para contar a través das placas, dicindo 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, e así por diante. Así, o ángulo superior esquerdo, esperamos estar d veces d menos 1, que na posición 4 por 4 caso será 16 menos 1, que é axeitadamente 15. E agora aquí é onde nós imos repetidas en toda a liña. E nós estamos indo a definir cada posición a tarxeta co valor actual de noso balcón, e logo, contador vai para diminuír, para que o seguinte posición chegamos terá contador de ser un a menos que a posición anterior. Así, inicialmente tiña 15 e diminuír balcón. Entón imos asignar 14 á posición seguinte, contra decrecemento, e imos lle atribúe 13, e así por diante. Por último, hai que tratar con este recuncho caso en que, se a tarxeta ten un mesmo dimensión, entón é só facer 15, 14, 13, 12, todo o camiño ata a 3, 2, 1, é vai deixarnos con unha placa insoluble. E nós temos que cambiar o 1 eo 2. Así, se d mod 2 é igual a 0, isto é como imos comprobar a ver se o é. D mod 2 é igual a 0, entón na liña d menos 1, que é a liña de fondo, e posición d menos 2, ou columna d menos 2, nós imos establecer que a 2, e columna d menos 3 que estamos definirá a 1. Entón, iso é só inverter onde o 1 e 2, actualmente. Por último, imos definir o moi inferior dereita igual en branco, onde en branco foi de hash definido na parte superior, como 0. Entón, iso non era estrictamente necesario, xa que este ciclo se terá definir o ángulo inferior dereito a 0, xa que contador suposto acadar 0. Pero iso depende de nós, sabendo que branco foi hash para atopar un 0. Se eu fose para este programa e máis tarde cambiar branco na parte superior a 100, que aínda debe funcionar. Polo tanto, esta é só estar seguro de que o ángulo inferior dereito é realmente igual ao noso valor en branco. Por último, temos dúas variables globais, tan en branco i e j en branco, e vemos os declarados na parte superior. E nós imos usar os dous mundial variables para seguir o posición do branco, para que non que mirar a través de todo o consello para atopar o espazo en branco a cada xa que intentamos facer unha xogada. Así, a posición da peza en bruto é sempre comezará na esquina inferior dereita. Así, a parte inferior dereita é dada por índices d menos 1, d menos 1. Entón, iso é o init. Agora imos pasar para debuxar. Entón, sorteo será semellante onde imos facer unha iteración ao longo de todo o taboleiro. E nós só queremos imprimir o valor que está en cada posición do taboleiro. Entón, aquí, estamos a imprimir o valor que é en cada posición do taboleiro. E teña en conta que estamos a facer -. E iso é só a dicir que printf independentemente de se é un un díxito ou número de dous díxitos, aínda quere que ocupar dúas columnas na impresión, de xeito que, se temos dous díxitos e un números na mesma tarxeta, o noso consello aínda vai estar bo e cadrado. Por iso, queremos facelo para cada valor na tarxeta, excepto para o branco. Así, se a posición na tarxeta é igual a o espazo en branco, entón nós especificamente desexa imprimir só un subliñado para representar a tarxeta, en vez de calquera que sexa o valor do en branco realmente é. Por último, queremos imprimir unha nova liña. Nótese que este aínda está dentro o loop for externo, pero fóra o interior de loop. Xa que este loop for externo é iteración sobre todas as liñas, e por iso este é printf vai só imprimir unha nova liña, de xeito que pasar a imprimir a seguinte liña. E iso é por sorteo. Entón, agora imos pasar a moverse. Agora pasamos movemento, a tella que a usuario insírese no xogo - eles entrar na tella queren pasar - e ten que voltar un booleano, entón verdadeira ou falsa, dependendo se ese movemento era realmente válido - se que a tella pode ser mudouse para o espazo en branco. Entón, aquí, declaramos unha variable local, tile_1 e tile_j, que van ser semellante ao blank_i e blank_j, excepto que vai seguir o posición do azulexo. Agora aquí, imos usar blank_i e blank_j e dicir todo ben, entón aquí é o espazo en branco no taboleiro. Agora, é a tella por enriba do negro? É a tella á esquerda da barra de papel? É a tella á dereita da barra de papel? É o azulexo baixo do negro? Así, se a tella é en calquera dos posicións, entón sabemos que a tella pode ser movido para o espazo baleiro e a tarxeta pode ser movida a onde a tella actualmente. Entón, aquí, nós dicimos que a tarxeta na posición blank_i menos 1 blank_j. Entón, iso está dicindo é a tella enriba da cadea en branco? E se é así, imos lembrar que é a posición do azulexo. O azulexo está na posición blank_i menos 1 e blank_j. agora por primeira vez, tamén temos esa comprobación aquí, por iso é blank_i maior que 0. Por que quere facer isto? Ben, se o branco é na liña superior do consello de administración, así que non queremos mirar por riba do branco ao azulexo dende non hai nada enriba da parte superior fileira do taboleiro. Isto é como pode acabar recibindo algo así como un fallo de segmento ou o programa só podería traballar de formas inesperadas. Entón, iso é estar seguro de que non buscar en lugares que non son válidos. Agora imos facer o mesmo para todas as outras posibles combinacións. Entón, aquí, nós estamos mirando baixo o espazo en branco a ver se ese é o azulexo. E nós tamén temos que ter seguro que estamos non na liña de abaixo, ou entón nós non debe ollar para o azulexo. Aquí, imos ollar para a esquerda de o espazo en branco para ver se é o azulexo. E non hai que mirar cara á esquerda se estamos na columna máis á esquerda. E aquí imos ollar para o dereito de o espazo en branco, e non hai que ollar para a dereita, se estamos na columna da dereita. Entón, se ningunha destas cousas fose verdade, isto significa que o azulexo non é adxacente para o espazo en branco e podemos voltar false. O movemento non era válido. Pero, se unha destas fose verdade, entón a Neste punto, sabemos que tile_i e tile_j son iguais aos posición do azulexo. E así, podemos actualizar a tarxeta de posicións tile_i e tile_j. Sabemos que o novo valor será o branco e que a posición blank_i blank_j, que era o orixinal en branco - sabemos o azulexo vai cambiar para alí. Teña en conta que en realidade, non ten que facer un cambio real aquí, xa que sabemos que o os valores que precisan ser inserido naquelas posicións. Non necesitamos un temporal variable arredor. Finalmente, cómpre lembrar que nós temos as nosas variables globais que son manter o control da situación do branco. Por iso, queremos actualizar a posición de o espazo en branco para estar onde a tella orixinalmente era. Por último, volvemos realidade, pois o movemento foi exitoso. Nós intercambiar con éxito o en branco coa tella. Todo ben, entón pasada nós que comprobar won. Así, gañou regresa do mesmo xeito un bool onde certo que vai indicar que o usuario gañou o xogo. E falso está indicando que o partido aínda está en curso. O usuario aínda non gañou. Entón, que vai ser moi bonito o contrario de inicio, onde init lembre, nós arrincar a bordo a 15, 14, 13, 12, etc. Considerando gañou, queremos comprobar que o tarxeta é 1, 2, 3, 4, 5, e así por diante. Entón, imos comezar o noso contrarrestar a 1, xa que é o que o principio esquerda da tarxeta debe ser. E entón nós imos facer un loop ao longo de todo o taboleiro. Imos ignorar esta condición por un segundo. E esa condición só vai comprobación é a tarxeta nesta posición igual as contas actuais? Se é así, incrementa a conta de modo a que o seguinte posición que é mirar para un maior que a posición estamos no momento. Entón é así que temos a superior esquerda debe ser 1. Incrementar a conta de 2. Olhe a seguinte posición. Este é o 2? De ser así, incrementar a conta de 3. Seguinte posición, é dicir 3? De ser así, incrementar a conta a 4, e así por diante. Así, se calquera posición sobre o placa que non coincide a nosa conta, entón queremos volver falsa, xa que significa que hai algunha peza que é non na posición correcta. Entón, aquí, o que é esa condición está facendo? Ben, lembre que o espazo en branco é debería ir na parte inferior dereita. E o valor do branco non pode necesariamente igual ao valor do contador que vai ser alcanzado na parte inferior dereita. Por iso, quere especialmente para comprobar se i coincide é igual a menos d 1 e j iguais d é igual a menos 1 - o que está dicindo, se están mirando para o ángulo inferior dereito da a bordo - entón nós só Quere continuar. Queremos saltar este particular iteración do bucle para. E así, se logramos pasar por iso aniñados en loop, o que significa que non houbo tella que foi en a posición incorrecta. E nós saír do loop e vir aquí, onde podemos volver verdade. Todos os azulexos estaban nas posicións correctas e iso significa que o usuario ten gañou o partido. E é iso. O meu nome é Rob Bowden, e este tiña 15 anos.