sexta-feira, 17 de setembro de 2010

Prova de conceito - primeiras definições

Em nosso projeto, precisaremos fazer com que um objeto acompanhe o movimento da tag, identificar a região da tela em que certa tag está (futuramente cada região representará uma escolha da história), devolver uma ação conforme a região identificada por outra tag, apresentar uma opção dependendo da tag identificada e do contexto.

Para estudar a viabilidade de nosso projeto, tentaremos realizar as ações citadas acima utilizando a realidade aumentada.

Uma idéia é utilizar um modelo 3D (protagonista) para acompanhar o movimento da tag1, fixar regiões na tela e exibir uma legenda quando a tag1 passar sobre determinada região. Quando o usuário exibir a tag 4 na região fixada, o programa é encerrado. Haveria mais 2 tags: uma que representaria um modelo 3D (secundário) e faria aparecer uma nova opção na tela e outra que apenas exibiria um modelo 3D (figurante).

Um esboço do main do programa

{
Criar lista de opções;
Criar Personagem;
Criar TelaAR (opcoes, personagem) {Intancia regiões e personagem}
Exibir imagens (nossa biblioteca de AR);
Detecção das tags {
tag1 - exibir personagem, checar região, checar texto
tag2 - Confirmação - encerrar
}
}

Início da Primeira Fase

Com a reunião de hoje, damos início à primeira fase do projeto =)

Nessa fase, desenvolveremos:
- Prova de conceito
- Especificação melhorada do projeto
- Documento que irá compor o manual do usuário (como instalar e rodar o programa)
- Documento que irá compor o manual do desenvolvedor (explicar a estrutura da prova de conceito - classes utilizadas e interações entre elas - , como compilar o projeto, dificuldades encontradas).

Decisões

Prova de conceito
- Planejamos a prova de conceito.

Tela de AR do Livro Interativo
- A tela de AR ficou provisoriamente definida como a imagem da webcam com alguns elementos que representam as decisões em regiões pré-estabelecidas. Com uma tag o usuário leva a personagem até o elemento que representa uma decisão (uma legenda aparecerá quando o personagem estiver na região correspondente) e com outra tag o usuário confirmará sua escolha.

Novas classes foram definidas e outras modificadas.

Tarefas

Realidade Aumentada
- Testar: (todos) [p/ essa semana]
Identificação das tags
Identificação das posições das tags na tela.

Reuniões
Marcar próxima reunião

Próximas Tarefas
- Procurar imagens e modelos 3D para a prova de conceito
- Pensar em mais histórias (no banho, por exemplo! ahhahaha)
- Fazer especificação detalhada do projeto e manuais aos poucos
- Construir a prova de conceito logo após as provas dessa semana???

quinta-feira, 9 de setembro de 2010

Novas tarefas e decisões

SOBRE AS HISTÓRIAS

Pensar em mais histórias e em mais detalhes sobre as histórias já definidas (completar histórias). [todos]

SOBRE O CÓDIGO

Implementar classes já definidas: PagLivro [Su], Personagens [Samuel] e Usuarios [Cy]
Planejar nossa biblioteca de AR [todos]
Procurar modelos 3D [todos]

DECISÕES


ASSUNTOS A SEREM DISCUTIDOS NA PRÓXIMA REUNIÃO

Tela de AR.
Dia 17/09 (das 13h às 13:55h e das 16h às 19h)

Objetos iniciais

Personagem {
     imagem: String (path)
     nome: String
     id: int
     buscaPersonagemPorId(id){
         abre arquivo "personagens.txt"
        procura o id correspondente
            -> se existir, retorna o caminho da imagem
            -> se não, retorna null
     }
}

PaginaLivro {
    nome_arquivo: String
    texto: String
    prox_perg: String
    pagina: int

    buscaPagina(pagina){
        abre arquivo ("pagina" + pagina + ".txt")
            -> tratar existência
        popular objeto
        retorna PaginaLivro
    }
}

Usuario{
    login: String
    senha: String
    pagina_atual: int
    id: int
    decisoes: int[]
    qtd_decisoes: int

    cadastraNovoUsuario(login, senha){
        verifica se já existe login
            -> se sim, retorna false
        seta id (id do ultimo usuario + 1)
        cria arquivo ("usuario" + id + ".txt")
        grava login, senha, id, pagina_atual = 0, qtd_decisoes = 0
        retorna true, se tudo der certo
    }

    atualizaPaginaAtual(pagina_atual){
        this.pagina_atual = pagina_atual
        atualizar no arquivo do usuario
    }

    confirmaLogin(login, senha){
        abre arquivo "usuarios.txt"
        procura usuario pelo login
            -> se existir, pega o id do usuario
            -> se não, retorna número do erro de existencia para ser tratado
        abre arquivo ("usuario" + id + ".txt")
        verificar a senha
            -> se correto, retorna número correspondente à confirmação
            -> se não, retorna erro de senha
    }

    adicionaNovaDecisao(decisao){
        qtd_decisoes++
        decisoes[qtd_decisoes] = decisao
        gravar no arquivo do usuario
    }
}

domingo, 5 de setembro de 2010

Repositório criado!

Post curto só para avisar que criei o repositório do projeto. Chequem seus e-mails para aceitar o convite :)
O sistema de controle de versão, como combinado, é o SVN.

Aproveito pra deixar o link aqui para fácil acesso:
Ele não é público; para dar checkout ele pede o login e senha de uma conta autorizada.

Obs.: Ainda não tem nada lá. Quero colocar, em breve, algum exemplo com AR (o código da aula do dia 2, por exemplo) com um readme explicando como compilar e rodar no Eclipse.

Algumas idéias para as histórias do livro interativo

INTRODUÇÃO

"E viveram felizes para sempre": é como terminam muitos contos de fadas, segundo as versões mais famosas dos clássicos. Mas esses finais, aparentemente felizes, ocultam a insatisfação de muitos personagens com o rumo de suas histórias.
O mundo dos contos de fadas, incapaz de abrigar tamanha tristeza, abriu suas portas, esperando que alguém nele entrasse e recriasse as histórias a fim de acabar com o descontentamento geral.
Os personagens dos contos, esperançosos e confiantes na sensibilidade humana, deixaram seus pensamentos livres para serem lidos por quem fosse alterar o rumo de suas histórias, acreditando que, assim, suas vontades, sempre ocultas aos leitores dos clássicos, pudessem ser decifradas e satisfeitas.
A paz no mundo dos contos de fadas está em suas mãos. As portas estão abertas e os personagens aguardam ansiosamente a chegada do herói de suas histórias para, assim, viverem verdadeiramente "felizes para sempre".

ESBOÇANDO HISTÓRIAS

Personagens e suas decisões

  • Espelho - fala que a mais bela é a Branca de Neve, a Cinderela (come a maçã, deixa de ir ao baile e é salva pelo príncipe ou a irmã come a maçã e Cinderela foge assustada), a avó da Chapeuzinho Vermelho (a Bruxa deve escolher entre perseguir a chapeuzinho vermelho ou a Branca de neve), a Bruxa de "João e Maria" (o fato de a rainha saber que a bruxa foi escolhida como a mais bela pelo espelho pode interferir na história em que a Branca de Neve fica gorda).

  • Branca - Na floresta, escolhe o caminho para a casa dos anões, encontra chapeuzinho (lobo segue, descobre a bruxa e a engole) ou encontra a casa de doces e fica gorda (as bruxas ficam amigas e abrem um negócio de maçãs do amor). Rejeita a maçã (o que a rainha faz?), come a maçã ou faz uma torta com a maçã (todos adormecem - anões são resgatados por quem?).

  • Rainha - Quando Branca de Neve rejeita a maçã, a rainha vaga pela floresta irritada por seu plano ter falhado, vai pelo primeiro caminho (encontra a bruxa de João e Maria), vai pelo segundo caminho (encontra o lobo mau?) ou tenta matar a princesa de uma outra forma. Encontra Cinderela ou Zangado durante a escolha?

  • Cinderela : Aceita a maçã ou rejeita a maçã (acaba comendo por insistência da rainha). Se a irmã de Cinderela come a maçã, a irmã casa com um carpinteiro e Cinderela foge assustada (madrasta manda prender a rainha?). Na fuga, Cinderela encontra uma trilha de migalhas de pão: come as migalhas de pão (se tiver conhecido a Branca de Neve segue os passarinhos e encontra a casa de doces, caso contrário, os passarinhos comem o restante da trilha, Cinderela pára de seguir a trilha de pão e encontra Chapeuzinho Vermelho) ou não come as migalhas de pão (se tiver conhecido a Branca de Neve segue os passarinhos e encontra a Branca de Neve, caso contrário, segue a trilha de pão e encontra João e Maria ). Na casa de doces, a Cinderela e os dois irmãos sãos resgatados pelos ratos enviados pela fada madrinhas (na fuga da casa, eles são transformados em cavalos). A fada madrinha prende a bruxa na própria casa de doces e vai embora. Se a rainha estiver livre, encontra a bruxa, liberta-a e monta um negócio de maçã do amor com a bruxa.

  • Madrasta da Cinderela: Pensa que a rainha é uma bruxa se fingindo de rainha e manda prende-la ou acredita que a velha que ofereceu a maçã é a rainha do reino vizinho e a deixa fugir.
Personagens interativos

Na fuga da Branca de Neve:
- Personagens que ativam opções: Cinderela, Zangado
- Personagens que determinam a próxima página: Lobo

Na fuga da Cinderela
- Personagens que ativam opções: Branca de Neve, Zangado
- Personagens que determinam a próxima página: Lobo

DETALHAMENTO DAS HISTÓRIAS

No docs

sexta-feira, 3 de setembro de 2010

Algumas definições iniciais para o desenvolvimento do projeto estabelicidadas =)

SOBRE OS PADRÕES DO CÓDIGO

- Especificações

Idioma: Português
Nome das classes: primeira letra de cada palavra em maiúscula e as demais em minúscula. Ex: AlunoDaGraduacao.
Nome dos atributos e variáveis locais: separados por "_" em minúsculo.
Nome das funções/métodos: camelCase. Obs: Os nomes dos getters não terão a palavra "get" e serão a versão camelCase do nome do atributo correspondente. Já os setters terão "set" no nome.
Cabeçalho dos métodos: breve explicação (dependendo da informação que os valores de retorno dão sobre a função), parâmetros recebidos e valor de retorno.
Chamadas e declarações de funções: sem espaço antes de "(" e com espaço após (na declaração).
Posição das chaves: Na mesma linha do comando/declaração, com um espaço em branco entre o comando/declaração e a chave.
Seções: O código será organizado em seções. Por exemplo: "Bibliotecas", "Atributos", etc.
Subseções para métodos serão criadas de acordo com o nível de complexidade do código e de diversidade de métodos.
Espaçamentos: 1 tab = 4 espaços, pular 1 linha entre métodos e 2 linhas entre seções.

SOBRE OS MANUAIS

- Manual do usuário
1. Instalação (pré-requisitos, como compilar/rodar)
2. Como "jogar"?

- Manual do desenvolvedor
1. Estruturação do código
2. Detalhes sobre a implementação
3. Créditos

SOBRE O AMBIENTE DE DESENVOLVIMENTO

- Especificações

Plugin pare eclipse: utilizaremos o plugin indicado em aula (axdt).
Controle de versão: utilizaremos o SVN.

- Tarefas

1. Instalar o compilador e os pacotes do AS3. (todos)
2. Instalar plugin axdt no Eclipse. Obs.: Antes de instalar o axdt, os plugins do GEF (Graphical Editing Framework) devem ser instalados no Eclipse: help -> Install new software -> Add: http://download.eclipse.org/tools/gef/updates/releases/ (todos)
3. Definir repositório para o projeto, convidar os integrantes para o projeto criado no repositório. (Samuel)

SOBRE O DESENVOLVIMENTO

- Planejamento de algumas classes do projeto

Personagens {
imagem: String (path)
nome: String
id: int
}

pagLivro {
nome_arquivo: String
texto: String
prox_perg: String
int pg
}

- Tarefas

1. Criar nossa própria biblioteca de RA (Samuel)
2. Pensar nas histórias (Su)
3. Incrementar planejamento das classes (Cy)

quinta-feira, 2 de setembro de 2010

Proposta do Projeto

Nesse projeto, a proposta é desenvolver um livro interativo em que o usuário toma decisões para determinar o andamento da história. Para tanto, as páginas do livro serão exibidas na tela do computador e, ao final do trecho exibido, aparece a tela da realidade aumentada.
Nessa tela, há trechos específicos de imagem que correspondem às diversas opções que o usuário tem para continuar a história. Ele deverá, através das "tags", fazer sua decisão, levando um personagem até um dos possíveis locais da tela. Conforme sua decisão, será aberta uma nova página do livro.
Quanto à história,  a ideia é utilizar diversos clássicos da literatura infantil para criar diferentes cenários e contextos. Por isso, ainda não foram definidos os personagens principais que serão utilizados.
Como meio para auxiliar a documentação do projeto, foi criado um blog cujo nome é o título do programa que vamos desenvolver. Link para o blog: http://eraumanovavez.blogspot.com/

quarta-feira, 1 de setembro de 2010