ZAMYLA CHAN: Vamos ter divertir com quinze. Quinze é o primeiro jogo que você obtenha para implementar e é interativo. Agora, não se preocupe. Você não tem que escrever o tudo mesmo. Verifique o código de distribuição, porque um muito da estrutura do jogo já está configurado para você. Ele aceita e analisa uma linha de comando argumento do usuário e cria uma placa com base nessa entrada. Ele verifica se o jogo está ganho e sai uma vez que o usuário do ganhou o jogo. E para ganhar o jogo, ele fica entrada do usuário e chama a função Move. Então, nós vamos estar implementando quatro funções para o jogo de quinze anos, init, desenhar, mover, e ganhou. Primeiro, vamos resolver o init. No init, para inicializar, representamos a placa em um array de inteiros 2D. E esta é uma variável global chamada placa com dimensões MAX e MAX, as dimensões máximas do conselho. Agora, a dimensão real do conselho é dada pelo utilizador, representada em o número inteiro d, o que poderia ser inferior a MAX. Mas, em C, você não pode redimensionar matrizes, então você está preso com essa dimensão máxima. Seu trabalho em init é preencher os valores do conselho com o valor correcto. Agora, temos visto matrizes 1D, mas como matrizes 2D funciona? Há um índice da linha, zerar indexados, como sempre, e depois também de a coluna. E você vai preencher sua grade em em descendente valores, assim como este. Grade, 0, 0, linha 0, coluna 0, 8 é, grade 0, 1 a 7. Isto é para um exemplo onde d, pouco d, é 3. Agora, o conselho em Quinze devem também conter uma telha em branco, se você já jogado com o jogo físico. Mas, o conselho é um array de inteiros, de modo todos os valores têm de ser números inteiros. Portanto, cabe a você decidir um inteiro valor para representar um azulejo branco. Para inicializar sua placa, você pode usar estruturas de loop para conter a estado inicial da placa, onde bordo i j representa o elemento em i linha e coluna j. Eles começam em ordem decrescente e, lembrar que, se o número de peças é estranho, então você vai ter que trocar a localização de 2 e de 1. Portanto, há, temos a nossa placa inicializado. Agora, que temos a nossa inicializado placa, é hora de desenhá-la. Sorteio irá imprimir o estado actual da placa, mas você precisa ter certeza de para imprimir azulejos na mesma ordem que você tenha inicializado eles. E você também precisa formatar seus números corretamente. Porque nós pode ter um dígito e dois dígitos, então você quer imprimir um espaço em branco antes todos os números de um dígito. Você usa isso usando o espaço reservado -. Mas lembre-se o nosso espaço em branco. Nós não queremos imprimir o número real que temos escolhido para representar que o espaço em branco na placa, mas também não quer imprimir nada. Então o que você pode fazer é definir um símbolo ou caracteres para representar o azulejo branco. Nos exemplos anteriores, eu escolhi um sublinhado, e então você apenas imprimir que sempre que você chegar ao branco espaço em sua função de empate. Então desenhar terá aninhados para loops. Algo parecido com isto. Para cada linha, em seguida, para cada valor de a linha, você está indo para imprimir o valor neste espaço. Depois de impresso todos os valores na linha, então você pode imprimir uma nova linha. Lembre-se que a ordem para o seu sorteio função deve ecoar ou espelhar a ordem na sua função inicializado. Agora que você inicializar a bordo e que você tenha desenhado isso, é hora de deixar o usuário editá-lo e fazer os seus movimentos. Assim, em função Fifteen.c, o programa leva a entrada do usuário e em seguida, chama a função de movimento, passando o número da telha que o usuário deseja mover. Agora, tome cuidado. Este é o número real da telha e não a sua posição real. Então, você precisa procurar a telha de posição de saber onde ele está. Agora, você só deve permitir que o usuário para fazer um movimento, se é legal. Um lance legal é qualquer peça que é adjacente ao azulejo branco. Isso significa que, acima e abaixo, para a esquerda e para a direita. Então, você vai precisar saber onde o azulejo branco é tão bem. Agora, para cada movimento que você está procurando a telha de usuários, mas é provavelmente não melhor para procurar o azulejo branco cada vez, porque você está fazendo isso cada vez que o usuário deseja mover. Então, em vez disso, é melhor se lembrar de onde o azulejo branco está usando algum bem nomeado variáveis. Então, quando você permitir que o usuário faça a sua movimentos, eles estão bem no seu maneira de ganhar o jogo dos Quinze. Para ganhar o jogo dos Quinze, as telhas tem que estar em uma ordem específica, e a função ganhou verifica se o jogo está ganho. Ele retorna True se o jogo está ganho e as telhas são na ordem correta, e False caso contrário. Então, para ganhar o jogo de quinze anos, telhas tem que ser por ordem crescente, com o azulejo branco no canto inferior direito. Assim como você verificar se o usuário mudou-se a placa no direito orientação? Bem, você vai interagir sobre a placa e verificar os valores para se certificar de que eles estão no lugar certo. Para fazer isso, você pode usar nested loops, tal como fez no sorteio e no init. Há um par de maneiras de verificar e validar se o conselho é correta e uma vencedora formação, no entanto. Se você vai da esquerda para a direita, começando a partir da linha de cima para baixo, em seguida, cada número deve ser maior que o anterior. Tenha cuidado com o que você tem valor escolheu para o seu azulejo branco embora. Ou você pode usar uma variável de contador para assegurar que cada valor é no lugar, caso você venha com algum tipo de fórmula para representar isso. Então divirta-se experimentando com a matemática. Uma vez que você chegar a uma maneira, o retorno É verdade, uma vez que o usuário ganhou o jogo. Mas se algum valor estiver incorreto, o retorno False, o usuário tem que continuar se movendo porque não ganhou o jogo. Depois de implementar esta verificação e, junto com initialize, desenhar e mover-se, você já terminou o jogo dos Quinze. Parabéns e se divertir jogando. Meu nome é Zamyla e este é CS50.