>> ROB Bowden: Hi.
Estic Rob, i espero que la seva joc per al joc del 15.
Ara, hi ha quatre funcions que necessita per aplicar en aquest programa - init,
dibuixar, moure, i va guanyar.
Per tant, donem una ullada a init.
>> Aquí, veiem la primera cosa que estem farem és declarar una variable
anomenat comptador.
Això serà inicialitzat de vegades d d almenys 1.
Recordeu que d és la dimensió del nostre consell.
Com init funcionarà és que va iterar sobre els fòrums
i anem a començar a la part superior esquerra.
>> I direm que tenir una placa de 4 per 4.
Així que la part superior esquerra estem dirà és de 15.
I llavors només explicarem a través de les juntes, dient: 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, i així successivament.
Així que la part superior esquerra, esperem estar d vegades D menys 1, que en el 4 per 4
cas serà 16 menys 1, que és correcta 15.
>> I ara aquí és on anem a iterar sobre el fòrum sencer.
I anem a ajustar cada posició en el tauler per al valor actual de
nostre taulell, i després comptador es va per disminuir, de manera que la següent
posició que arribem tindrà comptador sigui un menys que
la posició anterior.
Així que al principi teníem 15 i decrementar comptador.
Així que anem a assignar 14 a la següent posició, comptador decreixent,
i que anem a assignar 13, i així successivament.
>> Finalment, hem de manejar aquesta cantonada cas en què, si el tauler té una encara
dimensió, a continuació, només fer 15, 14, 13, 12, fins al final baix a 3, 2, 1, és
ens deixarà amb una junta irresoluble.
I hem de canviar la 1 i la 2.
Per tant, si d mod 2 és igual a 0, això és com anem a comprovar
per veure si és encara.
Si d mod 2 és igual a 0, llavors a la fila d menys 1, que és la fila inferior, i
posició d almenys 2 o columna d menys 2, anem a establir que a 2, i
columna d mínim 3 estem va a establir en 1.
Així que això és només invertir on l'1 i 2 són actualment.
>> Finalment, anem a configurar el baix a la dreta igual al blanc, on
blanc ha estat definit de hash a la part superior com 0.
Per tant, això no era estrictament necessari, ja que aquest bucle tindrà
fixar la part inferior dreta de 0, ja que comptador naturalment arribar a 0.
Però això depèn de nosaltres, sabent que blanc s'aplica un algoritme hash per trobar un 0.
Si entro en aquest programa i més tard canviar en blanc a la part superior a 100, es
hauria de funcionar.
>> Així que això és simplement assegurar-se que el baix a la dreta és en realitat igual a la nostra
valor en blanc.
Finalment, tenim dues variables globals, tan en blanc i i j en blanc, i veiem
les declarades a la part superior.
I utilitzarem aquests dos mundial variables per realitzar un seguiment de la
posició del blanc, així que nosaltres no que hagi de mirar a través de la totalitat de
fòrum per trobar el blanc cada vegada que tractem de fer un moviment.
Així la posició de la peça en brut és sempre va a començar a la part inferior dreta.
Així que la part inferior dreta està donada per Índexs 1 d menys 1, d menys.
Llavors, això és init.
>> Ara passem a dibuixar.
Així, sorteig serà similar on repetirem
sobre el fòrum sencer.
I només volem imprimir el valor això és en cada posició de la junta.
Així que aquí, anem a imprimir el valor que és en cada posició de la junta.
I notem que estem fent -.
I això és simplement dir-li a printf que independentment de si és un dígit o
nombre de dos dígits, encara volem que ocupen dos columnes en la impressió,
pel que si tenim dos dígits i una nombre de dos dígits en el mateix tauler, el nostre
tauler encara es vegin bé i quadrat.
>> Així que volem fer que per cada valor a la taula, excepte per al blanc.
Per tant, si la posició en el tauler és igual l'espai en blanc, llavors específicament
voleu imprimir només un guió baix per representar l'espai en blanc, en lloc de
qualsevol que sigui el valor de la en blanc en realitat és.
>> Finalment, volem imprimir una nova línia.
Tingueu en compte que això és encara a l'interior el cicle for exterior, però fora
l'interior de bucle.
Atès que aquest cicle for exterior està iterant sobre totes les files, i pel que aquest és printf
voleu imprimir només una nova línia, de manera que passar a imprimir la següent fila.
I això és tot per sorteig.
>> Així que, ara anem a passar a moure.
Ara, passem moviment, la rajola que el usuari s'introdueix en el joc - que
entrar al taulell que volen moure - i se suposa que has de tornar un bool, per
ja sigui veritable o fals, depenent de si aquesta mesura era en realitat
vàlida - si aquesta fitxa pot ser mogut en l'espai en blanc.
>> Així que aquí, declarem una variable local, tile_1 i tile_j, que es va a
ser similar a blank_i i blank_j, excepte que realitzarà un seguiment de la
posició de la rajola.
Ara aquí, utilitzarem blank_i i blank_j i dir bé, pel que
aquí hi ha l'espai en blanc al tauler.
>> Ara, és el mosaic sobre el blanc?
És la rajola a l'esquerra de la peça en brut?
És la rajola a la dreta del blanc?
És la rajola sota del blanc?
Per tant, si la fitxa està en cap dels posicions, llavors sabem que la rajola
es pot moure en l'espai en blanc i la peça en brut es pot moure a on el
rajoles actualment és.
>> Així que aquí, diem si la targeta en la posició blank_i almenys 1 blank_j.
Així que això està dient és la rajola per sobre de la peça en brut actual?
I si és així, anem a recordar que és la posició de la rajola.
El taulell està en posició blank_i menys 1 i blank_j.
ara primer, també tenim aquesta comprovació aquí, pel que és blank_i
més gran que 0.
>> Per què volem fer això?
Bé, si el blanc es troba a la fila superior del tauler, llavors no volem
mirar per sobre del blanc per la rajola ja no hi ha res per sobre de la part superior
fila de la taula.
Aquesta és la forma en que podria acabar damunt d'aconseguir una mena de violació de segment o
el programa podria funcionar de maneres inesperades.
Per tant, aquest és assegurar-se que no ho fem buscar a llocs que no són vàlids.
>> Ara farem el mateix per totes les altres combinacions possibles.
Així que aquí, estem buscant per sota del blanc per veure si aquest és el taulell.
I també hem de assegurar-nos que estem no a la fila inferior, o en cas contrari
no ha de buscar la rajola.
Aquí, anem a mirar a l'esquerra l'espai en blanc per veure si es tracta de la rajola.
I no hem de mirar cap a l'esquerra si estem a la columna de l'esquerra.
I aquí anem a mirar cap al dret de l'espai en blanc, i no hem
mirar a la dreta si som a la columna més a la dreta.
>> Així que, si cap d'aquestes coses fos cert, això vol dir que la rajola no era adjacent
a la peça i podem tornar false.
El moviment no era vàlida.
Però, si un d'ells fos cert, llavors en aquest punt, sabem que tile_i i
tile_j són iguals a la posició de la rajola.
I així, podem actualitzar la pensió en posicions tile_i i tile_j.
Sabem que el nou valor serà l'espai en blanc i que la posició blank_i
blank_j, que era l'original blanc - sabem que la rajola es va a
mudar-se allà.
>> Noteu que en realitat no hem de fer una intercanvi real aquí, ja que sabem que el
valors que necessiten ser inserit en aquestes posicions.
No necessitem un temporal variable del voltant.
>> Finalment, hem de recordar que Disposem de variables globals que estan
fer el seguiment de la posició de la peça en brut.
Així que volem actualitzar la posició de l'espai en blanc per ser on la rajola
originalment era.
Finalment, tornem cert ja el moviment va ser reeixit.
Intercanviem amb èxit el en blanc amb la rajola.
>> Molt bé, així que passat necessitarà comprovar won.
Així, va guanyar retorna de manera similar un bool on veritat va a indicar que l'
usuari ha guanyat la partida.
I fals és el que indica que el joc està encara en curs.
L'usuari no ha guanyat.
Per tant, això serà més o menys el contrari init, on init,
Recordem, inicialitzem el tauler a 15, 14, 13, 12, etc.
Atès que el bestiar, volem comprovar si el Junta és 1, 2, 3, 4, 5, i així successivament.
>> Per tant, anem a inicialitzar la nostra contrarestar a 1 ja que això és el que la part superior
esquerre de la placa ha de ser.
I després anem a bucle sobre el fòrum sencer.
Anem a ignorar aquesta condició per un segon.
I aquesta condició és només va a xec és el consell en aquesta posició
igual als recomptes actuals?
Si és així, incrementar el recompte de manera que el següent posició observem és una major
que la posició que estem en aquests moments.
>> Així és com s'obté la dalt a l'esquerra ha de ser 1.
Incrementa el recompte de 2.
Mira la següent posició.
És això febrer?
Si és així, incrementar el compte de 3.
Posició següent, això és 3?
Si és així, incrementar el recompte a 4, i així successivament.
Així, si hi ha qualsevol posició en la tauler que no és igual al nostre compte,
llavors volem tornar false ja que vol dir que hi ha alguna peça que es va
no en la posició correcta.
>> Així que aquí, el que fa d'aquesta condició?
Bé, recordeu que el blanc és suposa anar a la part inferior dreta.
I el valor del blanc podria no necessàriament igual al valor de l'
responen que serà assolit a la part inferior dreta.
Així que específicament volem comprovar si i és igual a és igual a D menys 1 i j iguals
és igual a D almenys 1 - que ja és dir si estan buscant en la part inferior dreta de
la junta - llavors només desitja continuar.
Volem saltar aquest particular, iteració del bucle per.
>> I així, si aconseguim sortir d'això niat bucle, el que significa que
no hi havia rajola que estava en la posició incorrecta.
I vam sortir de bucle i venim aquí, on podem tornar realitat.
Tots les rajoles estaven en les posicions correctes i això significa que l'usuari té
guanyat el joc.
I això és tot.
El meu nom és Rob Bowden, i això va ser el 15.