Ir para conteúdo
Fórum Script Brasil
  • 0

Jogo Lights Out em C


AndG

Pergunta

Olá

Preciso de uma ajuda para resolver esse jogo.

Preciso implementar uma função de ajuda ao usuário. Essa função deve resolver o programa de todas as formas possíveis contabilizando-as e no final mostrar a solução com menor número de passos, caso essa solução exista.

Tentei fazer por força bruta mas sem sucesso.

O programa já pronto é este: http://www.ime.usp.br/~coelho/mac0122-2014/ep1/executavel/lightout-windows.exe

O código do que fiz até agora é o seguinte:

void resolvaTurtledorm(int nLin, int nCol, int tDorm[][MAX])
{
    int z = ACORDADO, numero_tapinhas = 1, numero_solucoes = 0, numero_tapinhas_solucao, execucao = 1, matrizteste[MAX][MAX], matrizsolucao[MAX][MAX], matrizaguarda[MAX][MAX];
    int a, b, c, d, e, f, g, h;
 
    /* 1 tapinha por vez */
 
    for (a = 0; a < nLin; a++) /* Percorrendo as linhas da matriz teste */
    {
        for (b = 0; b < nCol; b++) /* Percorrendo as colunas da matriz teste */
        {
            tapinhaTurtle(nLin, nCol, matrizteste, a, b); /* Da um tapinha */
            if (todosDormindo(nLin, nCol, matrizteste) == TRUE) /* Verificando se o tapinha resolveu */
            {
                numero_solucoes++; /* Se o tapinha resolveu, incrementa o numero de solucoes e */
                for (c = 0; c < nLin; c++)
                    for (d = 0; d < nCol; d++)
                        matrizsolucao[c][d] = matrizteste[c][d]; /* salva na matriz solucao essa solucao */
                matrizsolucao[a][b] = 2; /* Avisa para a mostreTurtle sobre a posicao que recebeu um tapinha */
                numero_tapinhas_solucao = numero_tapinhas; /* Salva o numero de tapinhas necessarios para resolver */
            }
            tapinhaTurtle(nLin, nCol, matrizteste, a, b); /* Desfaz o tapinha */
        }
    }
 
    /* 2 tapinhas por vez */
 
    for (a = 0; a < nLin; a++)
        for (b = 0; b < nCol; b++)
            matrizaguarda[a][b] = 0;
 
    while (numero_tapinhas <= (nLin * nCol)) /* Numero de vezes que tem que dar tapinhas */
    {
        while (execucao <= numero_tapinhas)
        {
            for (a = 0; a < nLin; a++) /* Percorrendo as linhas da matriz teste */
            {
                for (b = 0; b < nCol; b++) /* Percorrendo as colunas da matriz teste */
                {
                    tapinhaTurtle(nLin, nCol, matrizteste, a, b); /* Da um tapinha */
                    if (matrizteste[a][b] + matrizaguarda[a][b] == 2) /* Atualiza a matriz aguarda com o resultado do tapinha */
                        matrizaguarda[a][b] = 0;
                    else
                        if (matrizteste[a][b] + matrizaguarda[a][b] == 1)
                            matrizaguarda[a][b] = 1;
                        else
                            if (matrizteste[a][b] + matrizaguarda[a][b] == 0)
                                matrizaguarda[a][b] = 0;
                    if (todosDormindo(nLin, nCol, matrizaguarda) == TRUE) /* Verificando se o tapinha resolveu */
                    {
                        numero_solucoes++; /* Se o tapinha resolveu, incrementa o numero de solucoes e */
                        for (c = 0; c < nLin; c++)
                            for (d = 0; d < nCol; d++)
                                matrizsolucao[c][d] = matrizaguarda[c][d]; /* salva na matriz solucao essa solucao */
                        matrizsolucao[a][b] = 2; /* Avisa para a mostreTurtle sobre a posicao que recebeu um tapinha */
                        numero_tapinhas_solucao = numero_tapinhas; /* Salva o numero de tapinhas necessarios para resolver */
                    }
                }
            }
            execucao++;
        }
    }
 
    if (numero_solucoes != 0)
    {
        printf("\nSOLUCAO MENOS VIOLENTA\nForam encontrada(s) %d solucao(oes).\nO menor numero de tapinhas de uma solucao eh %d\n        ", numero_solucoes, numero_tapinhas_solucao);
        mostreTurtledorm(nLin, nCol, matrizsolucao, z);
    }
    else
        printf("Nao tem solucao!\n");
}
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...