>> ROB BOWDEN: Hi.
Estoy Rob, y espero que su juego para el juego del 15.
Ahora, hay cuatro funciones que necesita para aplicar en este programa - init,
dibujar, mover, y ganó.
Por lo tanto, echemos un vistazo a init.
>> Aquí, vemos la primera cosa que estamos vamos a hacer es declarar una variable
llamado contador.
Esto va a ser inicializado a veces d d menos 1.
Recuerde que d es la dimensión de nuestro consejo.
Cómo init va a funcionar es que va iterar sobre el foro entero
y vamos a empezar en la parte superior izquierda.
>> Y vamos a decir que tener una placa de 4 por 4.
Así que la parte superior izquierda estamos va a decir es de 15.
Y entonces sólo vamos a contar a través de las juntas, diciendo: 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, y así sucesivamente.
Así que la parte superior izquierda, esperamos estar d veces D menos 1, que en el 4 por 4
caso va a ser 16 menos 1, que es correcta 15.
>> Y ahora aquí es donde vamos a iterar sobre el foro entero.
Y vamos a ajustar cada posición en el tablero para el valor actual de
nuestro mostrador, y luego contador se va para disminuir, de manera que la siguiente
posición que lleguemos va a tener contador sea uno menos que
la posición anterior.
Así que al principio teníamos 15 y decrementar contador.
Así que vamos a asignar 14 a la siguiente posición, contador decreciente,
y que vamos a asignar 13, y así sucesivamente.
>> Por último, tenemos que manejar esa esquina caso en el que, si el tablero tiene una aún
dimensión, a continuación, sólo hacer 15, 14, 13, 12, hasta el final abajo a 3, 2, 1, es
nos va a dejar con una junta irresoluble.
Y tenemos que cambiar la 1 y la 2.
Por lo tanto, si d mod 2 es igual a 0, eso es como vamos a comprobar
para ver si es aún.
Si d mod 2 es igual a 0, entonces en la fila d menos 1, que es la fila inferior, y
posición d menos 2 o columna d menos 2, vamos a establecer que a 2, y
columna d menos 3 estamos va a establecer en 1.
Así que eso es sólo invertir donde el 1 y 2 son actualmente.
>> Por último, vamos a configurar el abajo a la derecha igual al blanco, donde
blanco ha sido definido de hash en la parte superior como 0.
Por lo tanto, eso no era estrictamente necesario, ya que este bucle va a tener
fijar la parte inferior derecha de 0, ya que contador naturalmente llegar a 0.
Pero eso depende de nosotros, sabiendo que blanco se aplica un algoritmo hash para encontrar un 0.
Si entro en este programa y más tarde cambiar en blanco en la parte superior a 100, se
debería funcionar.
>> Así que esto es simplemente asegurarse de que el abajo a la derecha es en realidad igual a nuestra
valor en blanco.
Por último, tenemos dos variables globales, tan en blanco i y j en blanco, y vemos
las declaradas en la parte superior.
Y vamos a utilizar esos dos mundial variables para realizar un seguimiento de la
posición del blanco, así que nosotros no que tenga que mirar a través de la totalidad de
foro para encontrar el blanco cada vez que tratamos de hacer un movimiento.
Así la posición de la pieza en bruto es siempre va a comenzar en la parte inferior derecha.
Así que la parte inferior derecha está dada por Índices 1 d menos 1, d menos.
Entonces, eso es init.
>> Ahora pasamos a dibujar.
Así, sorteo va a ser similar donde vamos a repetir
sobre el foro entero.
Y sólo queremos imprimir el valor eso es en cada posición de la junta.
Así que aquí, vamos a imprimir el valor que es en cada posición de la junta.
Y notamos que estamos haciendo -.
Y eso es simplemente decirle a printf que independientemente de si es un dígito o
número de dos dígitos, todavía queremos que ocupan dos columnas en la impresión,
por lo que si tenemos dos dígitos y una número de dos dígitos en el mismo tablero, nuestro
tablero todavía se vean bien y cuadrado.
>> Así que queremos hacer que por cada valor en la tabla, excepto para el blanco.
Por lo tanto, si la posición en el tablero es igual el espacio en blanco, entonces específicamente
desee imprimir sólo un guión bajo para representar el espacio en blanco, en lugar de
cualquiera que sea el valor de la en blanco en realidad es.
>> Por último, queremos imprimir una nueva línea.
Tenga en cuenta que esto es todavía en el interior el ciclo for exterior, pero fuera
el interior de bucle.
Dado que este ciclo for exterior está iterando sobre todas las filas, y por lo que este es printf
va a imprimir sólo una nueva línea, por lo que pasar a imprimir la siguiente fila.
Y eso es todo por sorteo.
>> Así que, ahora vamos a pasar a moverse.
Ahora, pasamos movimiento, el azulejo que el usuario se introduce en el juego - que
entrar en el azulejo que quieren moverse - y se supone que debes devolver un bool, por lo
ya sea verdadero o falso, dependiendo de si esa medida era en realidad
válida - si esa ficha puede ser movido en el espacio en blanco.
>> Así que aquí, declaramos una variable local, tile_1 y tile_j, que se va a
ser similar a blank_i y blank_j, excepto que va a realizar un seguimiento de la
posición de la baldosa.
Ahora aquí, vamos a utilizar blank_i y blank_j y decir bien, por lo que
aquí está el espacio en blanco en el tablero.
>> Ahora, es el mosaico sobre el blanco?
Es la baldosa a la izquierda de la pieza en bruto?
Es la baldosa a la derecha del blanco?
Es el azulejo debajo del blanco?
Por lo tanto, si la ficha está en ninguno de los posiciones, entonces sabemos que el azulejo
se puede mover en el espacio en blanco y la pieza en bruto se puede mover a donde el
baldosas actualmente es.
>> Así que aquí, decimos si la tarjeta en la posición blank_i menos 1 blank_j.
Así que esto está diciendo es el azulejo por encima de la pieza en bruto actual?
Y si es así, vamos a recordar que es la posición de la baldosa.
El azulejo está en posición blank_i menos 1 y blank_j.
ahora primero, también tenemos esta comprobación aquí, por lo que es blank_i
mayor que 0.
>> ¿Por qué queremos hacer eso?
Bueno, si el blanco se encuentra en la fila superior del tablero, entonces no queremos
mirar por encima del blanco para el azulejo ya no hay nada por encima de la parte superior
fila de la tabla.
Esta es la forma en que podría terminar encima de conseguir algo así como una violación de segmento o
el programa podría funcionar de maneras inesperadas.
Por lo tanto, este es asegurarse de que no lo hacemos buscar en lugares que no son válidos.
>> Ahora vamos a hacer lo mismo para todas las demás combinaciones posibles.
Así que aquí, estamos buscando por debajo del blanco para ver si ese es el azulejo.
Y también tenemos que asegurarnos de que estamos no en la fila inferior, o de lo contrario
no debe buscar el azulejo.
Aquí, vamos a mirar a la izquierda de el espacio en blanco para ver si se trata de la baldosa.
Y no debemos mirar hacia la izquierda si estamos en la columna de la izquierda.
Y aquí vamos a mirar hacia el derecho del espacio en blanco, y no debemos
mirar a la derecha si somos en la columna más a la derecha.
>> Así que, si ninguna de esas cosas fuera cierto, eso significa que el azulejo no era adyacente
a la pieza y podemos devolver false.
El movimiento no era válida.
Pero, si uno de ellos fuera cierto, entonces en este punto, sabemos que tile_i y
tile_j son iguales a la posición de la baldosa.
Y así, podemos actualizar la pensión en posiciones tile_i y tile_j.
Sabemos que el nuevo valor será el espacio en blanco y que la posición blank_i
blank_j, que era el original blanco - sabemos que el azulejo se va a
mudarse allí.
>> Nótese que en realidad no tenemos que hacer una intercambio real aquí, ya que sabemos que el
valores que necesitan ser insertado en esas posiciones.
No necesitamos un temporal variable de alrededor.
>> Por último, debemos recordar que Disponemos de variables globales que están
hacer el seguimiento de la posición de la pieza en bruto.
Así que queremos actualizar la posición de el espacio en blanco para estar donde el azulejo
originalmente era.
Por último, volvemos cierto ya el movimiento fue exitoso.
Intercambiamos con éxito el en blanco con el azulejo.
>> Muy bien, así que pasado necesitará comprobar won.
Así, ganó devuelve de manera similar un bool donde verdad va a indicar que el
usuario ha ganado la partida.
Y falso es lo que indica que el juego está todavía en curso.
El usuario no ha ganado.
Por lo tanto, esto va a ser más o menos lo contrario de init, donde init,
Recordemos, inicializamos el tablero a 15, 14, 13, 12, etc.
Considerando que el ganado, queremos comprobar si el Junta es 1, 2, 3, 4, 5, y así sucesivamente.
>> Por lo tanto, vamos a inicializar nuestra contrarrestar a 1 ya que eso es lo que la parte superior
izquierdo de la placa debe ser.
Y luego vamos a bucle sobre el foro entero.
Vamos a ignorar esta condición por un segundo.
Y esta condición es sólo va a cheque es el consejo en esta posición
igual a los recuentos actuales?
Si es así, incrementar el recuento de modo que el siguiente posición observamos es una mayor
que la posición que estamos en estos momentos.
>> Así es como se obtiene la arriba a la izquierda debe ser 1.
Incrementa el conteo de 2.
Mira la siguiente posición.
¿Es esto 2?
Si es así, incrementar la cuenta de 3.
Posición siguiente, ¿esto es 3?
Si es así, incrementar el recuento a 4, y así sucesivamente.
Así, si hay cualquier posición en la tablero que no es igual a nuestra cuenta,
entonces queremos devolver false ya que significa que hay alguna pieza que se va
no en la posición correcta.
>> Así que aquí, lo que hace de esta condición?
Bueno, recuerde que el blanco es supone ir en la parte inferior derecha.
Y el valor del blanco podría no necesariamente igual al valor de la
responden que va a ser alcanzado en la parte inferior derecha.
Así que específicamente queremos comprobar si i es igual a es igual a D menos 1 y j iguales
es igual a D menos 1 - que ya es decir si están buscando en la parte inferior derecha de
la junta - entonces sólo desea continuar.
Queremos saltar este particular, iteración del bucle para.
>> Y así, si logramos salir de esto anidado bucle, lo que significa que
no había baldosa que estaba en la posición incorrecta.
Y salimos de bucle y venimos aquí, donde podemos volver realidad.
Todos los azulejos estaban en las posiciones correctas y eso significa que el usuario tiene
ganado el juego.
Y eso es todo.
Mi nombre es Rob Bowden, y esto fue el 15.