Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

jonymtfca

Ajuda com um trabalho da universidade - Cubo Mágico

Mensagens Recomendadas

jonymtfca    0
jonymtfca

Boas,

Peço desculpa por ser tão novo no forum e entrar logo a "rasgar", mas tenho de fazer um trabalho em c#,no qual ando às voltas à muito tempo :s.

O trabalho é o cubo de rubik, ou cubo mágico, e, simplesmente, não faço a minima ideia de como começar.

Até agora fiz o seguinte:

namespace Trabalho_Prático___Cubo_Mágico
{
    class Dados
    {
        public struct quadricula
        {
            char cor;
            int nalteracoes;
        }

        //Criação de 6 Arrays de registos para cada uma das faces do cubo
        public static quadricula[,] frente = new quadricula[3, 3];
        public static quadricula[,] tras = new quadricula[3, 3];
        public static quadricula[,] ld = new quadricula[3, 3];
        public static quadricula[,] le = new quadricula[3, 3];
        public static quadricula[,] cima = new quadricula[3, 3];
        public static quadricula[,] baixo = new quadricula[3, 3];

        //Geração aleartória do estado inicial do cubo 
        
        (fiquei preso nesta parte, e nao saio daqui xDD)   



    }
}

como é óbvio não espero que me façam o trabalho, mas que me vão dando umas luzes para o continuar...

Obrigado a todos..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Andrepereira9    4
Andrepereira9

Boas

Aqui há dias, também tive uma ideia de fazer um programa que resolvesse um cubo mágico, só que em VB.Net

Andei a pesquisar no Google, e o que encontrei, foi que para fazer os cálculos de todas as possibilidades era necessário um super-computador...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jonymtfca    0
jonymtfca

Ora bem, que grande desafio...

Estas a utilizar C# modo consola ou modo janela?

O professor dá-nos à escolha, mas preferia utilizar em modo gráfico, através de windows forms.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Diria que a maneira mais simples seria começar com um cubo no estado resolvido, ou seja, cada face uma cor.

Depois terias métodos para aplicar uma rotação (imagino que seria os mesmo métodos que o utilizador iria usar para resolver o cubo).

Para começar o desafio, pegavas num cubo já resolvido e aplicavas N movimentos (AKA baralhar o cubo).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jonymtfca    0
jonymtfca

Diria que a maneira mais simples seria começar com um cubo no estado resolvido, ou seja, cada face uma cor.

Depois terias métodos para aplicar uma rotação (imagino que seria os mesmo métodos que o utilizador iria usar para resolver o cubo).

Para começar o desafio, pegavas num cubo já resolvido e aplicavas N movimentos (AKA baralhar o cubo).

Pois, esqueci-me de referir que as cores do cubo têm de ser geradas de maneira aleatória. Cada vez que é iniciado um novo jogo, o cubo é gerado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Pois, esqueci-me de referir que as cores do cubo têm de ser geradas de maneira aleatória. Cada vez que é iniciado um novo jogo, o cubo é gerado.

Que foi o que eu disse... Pegas num cubo "resolvido" e baralhas de forma aleatória. Isto é, aplicas N movimentos, quantos mais movimentos, mais baralhado fica.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    61
taviroquai

Super interessante B)

Não esquecer pelo menos estas regras quando se gerar um cubo aleatório (e ajuda na elaboração de uma estrutura mais adequada para um algoritmo):

1. existem exactamente 6 cores no cubo

2. para cada cor existe exactamente 9 quadriculas

3. todas as quadriculas centrais das faces (aquela que não se move) teem cores diferentes; isto é optimo!

Não sei porque mas gosto de pensar nos movimentos do cubo como se fosse uma Slot Machine.

Por exemplo, se o cubo estiver completo e se {V, E, A, M, B, R} forem as cores, teria-se algo como:

V V V E E E A A A M M M
V V V E E E A A A M M M
V V V E E E A A A M M M

...e rodando o cubo 90 graus temos mais 3 linhas:

E E E B B B M M M R R R
E E E B B B M M M R R R
E E E B B B M M M R R R

Agora um movimento, se rodar a 1ª linha, o estado do cubo fica:

M M M V V V E E E A A A
V V V E E E A A A M M M
V V V E E E A A A M M M

E E V B B B M M A R R R
E E V B B B M M A R R R
E E V B B B M M A R R R

Isto gera um novo alinhamento que se pode facilmente comparar. Esta é uma estrutura a pensar nas cores e movimentos e não nas quadriculas 3x3x3.

Ainda de reparar que a matriz 3x3 no final das 3 primeiras linhas:

é apenas uma cópia ( e vice-versa ) da 3ª matrix nas outras 3 filas:

Ops... afinal são 2 matrizes que são cópia...  nas 2 filas :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jonymtfca    0
jonymtfca

Pessoal tenho boas e más noticias xP

Consegui criar o cubo, mas estou com um problema. Ao criar as cores aleatórias, ele gera certinho, so que não consigo que cada cor só apareça 9 vezes.

Ou seja, podem aparecer 10 brancos, 15 verdes , 6 azuis etc...

Alguem me pode ajudar ?


private char GetCorAleatoria()
        {
            int idxCor = -1;
            
            if (rand==null ) rand = new Random();
            idxCor = rand.Next(6);
            
            return Cores[idxCor];                      
        }


Supostamente tenho de fazer um ciclo, mas já tentei de tudo e não consigo limitar o programa de maneira a que cada cor só apareça 6 vezes :s

Agradeço ajuda...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Mete os resultados num array

{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, ...}

Escolhe uma posicao aleatoria do array (que vai diminuindo de tamanho) para ser o proximo aleatorio, e apaga essa posicao do array

Repete até o array ficar vazio.

Atenção: isto pode originar configurações do cubo que não podem ser resolvidas.

Atenção dois: isto pode originar configurações do cubo que não fazem sentido fisicamente.

Sugestão repetida (original de Betovksy): em vez de escolheres cores aleatórias, parte dum cubo resolvido e escolhe movimentos aleatórios.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1123
HappyHippyHippo

Já tinha estado na wikipédia, mas a nível de código não me dá grande ajuda... :s

que mania de as pessoas so andarem para a frente quando a papinha aparece feita !!!

se os algoritmos de resolução estão lá no wikipédia é só ler e aplicar !!!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jonymtfca    0
jonymtfca

que mania de as pessoas so andarem para a frente quando a papinha aparece feita !!!

se os algoritmos de resolução estão lá no wikipédia é só ler e aplicar !!!!

O que eu quis dizer é que os algoritmos que estão na wikipédia não me serviam para fazer o trabalho. Eu pedi ajuda com um problema, se não queres ajudar não vale a pena responderes com isso, passas ao lado!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade