1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[JAVA] Projecto Simulação de Tráfego sem GUI

Discussão em 'Programação' iniciada por skitch, 31 de Março de 2009. (Respostas: 11; Visualizações: 2152)

  1. skitch

    skitch What is folding?

    boas...
    com este tópico pretendo relatar o meu progresso na realização de um projecto de programação em Java e também expor aqui as minhas dúvidas para que possa resolver...

    Este projecto consiste em simular um sistema de gestão de tráfego rodoviário... eu considero isto como um tycoon...

    Nota:
    Numa 1ª fase este projecto não terá Interface Gráfica...

    Teremos um mapa com células hexagonais nos juntos formando um mapa. Estes podem ser vazios, cidades ou células-estradas. Depois nas cidades temos diversos edifícios de serviços aos transportes de mercadorias. Neste projecto iremos simular uma região, monitorizar os serviços de emergência, controlar o tráfego e ser capaz de provocar acidentes...

    ------------------------
    Início: 31 de Março de 2009
    Fim: 25 de Abril de 2009

    Este projecto será realizado em pares e será usado o BlueJ.
    Se quiserem para vosso passatempo :p poderei fornecer o enunciado.

    -----------------------
    EDIT - Diário de Bordo :p

    31-03-09 - Dia 1 - 1ª visualização do projecto. Brainstorming e Mind Map. 1º Obstáculo - O mapa e o hexágono.
    01-04-09 - Dia 2 - Resolvido 1º Obstáculo. Pronto para teclar a respectiva classe.
     
    Última edição: 2 de Abril de 2009
  2. skitch

    skitch What is folding?

    apesar de já ter começado por fazer o planeamento, tenho uma dúvida em relação ao mapa.
    Sendo um mapa, presume-se que cada hexágono tenha a sua coordenada e irei implementar as coordenadas neste formato [x,y], mas o problema é que não sei como por cada região a saber quais são os hexágonos adjacentes principalmente aqueles que estão no meio...

    podem dar umas luzes???

    esta é a imagem em que me estou a basear
    [​IMG]
     
    Última edição: 2 de Abril de 2009
  3. Yumon

    Yumon Power Member

    Usa uma matriz que ficas com toda a informação organizada e ainda ficas com as coordenadas do tipo:

    [-,a,b,c,d]
    [e,f,g,h,-]
    [-,i,j,l,m ]

    Onde o '-' compensa o facto dos hexágonos encaixarem uns entre os outros!

    EDIT: Se quizeres coordenadas normais em vez dos hifens usa letras!
     
  4. CrazyBomber

    CrazyBomber Power Member

    Pelo que deduzo, cada hexágono (nas coordenadas X,Y) consegue "comunicar" com os hexágonos (vou por os casos todos):
    X-1,Y-1
    X-1,Y
    X,Y-1
    X+1,Y
    X,Y+1
    X+1,Y+1

    "programaticamente" não parece ser complicado :)
     
  5. bmpv666

    bmpv666 Power Member

    porque não criar uma espécie de lista ligada? isto é, tens uma entidade hexágono, a qual tem referências para outras entidades hexágono, e por aí fora...assim, a partir de um único hexágono consegues ir a qualquer ponto do mapa, e mais importante voltar ao ponto de partida.
    podes ainda, basear-te nos pontos cardeais para identificar os hexágonos que estão ao redor do haxágono actual: Nordeste, Noroeste, Sudeste, Sudoeste, Este e Oeste por exemplo.
     
  6. skitch

    skitch What is folding?

    tendo em conta os meus conhecimentos que tenho agora penso que é um pouco complicado e ver assim é um pouco confuso. mas já deu para eliminar possibilidades da minha cabeça... :p

    hoje tive todo o dia com essa ideia que para já penso que é a melhor mas também tens que prestar mais atenção ao mapa de preferência grande. Eu fiz há pouco um mapa hexagonal 11x11 para ver se encontrava algum padrão, o que acabou por acontecer...

    para mostrar isso peguei na imagem de cima e recortei em 2 partes...
    [​IMG][​IMG]

    Vamos considerar que as coordenadas são [x,y]:

    Para os dois casos, há partida sabes que se fizeres x+1 ou x-1 vais para a direita ou esquerda respectivamente. Se fizeres y-1 ou y+1 vais para cima ou para baixo da coluna em questão respectivamente.


    Agora vem a parte específica aos hexágonos com y par. Toma o exemplo do [2,2].

    • Para chegares ao [1,1] fazes x-1 e y-1
    • Para chegares ao [1,3] fazes x-1 e y+1
    Para os hexágonos com y impar. Toma o exemplo do [1,1].

    • Para chegares ao [2,2] fazes x+1 e y+1
    • Para chegares ao [2,0] fazes x+1 e y-1
    E assim fica os casos todos... Obrigado pela tua ideia e ainda eliminaste uma das futuras barreiras que era como restringir a usar numeros positivos incluindo o zero, assim posso usar o plano todo...
    Obrigado.


    Ontem pensei na rosa dos Ventos aplicando ao jogo do Tetravex em que tem que se casar os numeros iguais, mas aqui aplicava-se de maneira ligeiramente diferente fazendo mais 6 campos em que numerava de 1 a 6... mas penso que ficava muito confuso...


    ----------------------------------
    O 1º obstáculo, o mapa hexagonal foi ultrapassado. Amanhã concluo a respectiva classe [já que o sono aperta]

    Agradecia que dessem opiniões em relação ao projecto, o meu raciocínio na resolução dos problemas... já que estou a aprender...

    Até agora, obrigado.

    cumps,

    skitch
     
  7. bmpv666

    bmpv666 Power Member

    por acaso acho que essa solução é a mais complicada...

    o que eu te estava a falar, trata-se de uma arquitectura puramente orientada a OO, o que te vai facilitar a vida lá mais para a frente. falo com conhecimento...
     
  8. skitch

    skitch What is folding?

    isso é com arrayLists??? podes meter um extrato de código exemplo sff??

    é que como disseste quanto à complicação é mesmo verdade...
     
  9. bmpv666

    bmpv666 Power Member

    aqui vai um esboço de código:

    Código:
    public class Celula {
    
      //contem as celulas vizinhas desta
      private HashMap<Celula> neighbours;
    
      //contem o conteudo da celula.
      private Object content;
    
      //tendo como base os pontos cardeais, podes obter a celula a Norte (N), Sul (S), Este (E), Oeste (O), Sudeste (SE), Sudoeste (SO), Nordeste (NE), Noroeste (NO)
     //desta forma, facilmente representas hexagonos, quadrados, octágonos, etc...depende do numero de celulas que estiverem no HashMap. Os pontos cardeais apenas servem para facilitar, mais simples que usar numeros.
      public Celula get(String pontoCardeal) {
        return this.neighbours.get(pontoCardeal);
      }
    
      //metodo para adicionar
      public void add(String pontoCardeal, Celula newCel) {
       this.neighbours.add(pontoCardeal, newCel);
     }
    
      //a partir daqui, podes criar metodos faclitadores. Por exemplo:
      public Celula travelNorth() {
        return this.get("N");
      }
    }
    
    aí fica o exemplo.
    a partir daqui, o céu é o limite. podes adicionar métodos que penses que ajudem a abstrair mais o conceito de célula, podes criar toda uma hierarquia para os objectos que a célula pode conter, etc...
    uma cena porreira poderia ser definir todo o mapa em XML, e depois conseguires carregar tudo isso com esta estrutura em memória!
     
  10. skitch

    skitch What is folding?

    eu mostrei o esboço que fiz num papel no mapa e ela disse que podia fazer num array bi-dimensional... nao será melhor???

    será que nesse array poderei ter por exemplo um acesso a um apontador que aponte para uma cidade????
     
  11. skitch..tambem és aluno de LTSI ?: )
     
  12. skitch

    skitch What is folding?

Partilhar esta Página