sexta-feira, 10 de dezembro de 2010

Resumo das próximas tarefas

Com as histórias atuais, devemos:
- Melhorar interface gráfica (imagens, planos de fundo, pensamentos, etc)
- Terminar de escrever os pensamentos

Com as próximas histórias, devemos:
- Escrever as histórias
- Procurar mais modelos 3D
- Guardar a relação de pessoas que se conhecem para alterar o andamento da história.
- Fazer a aparição de algum personagem determinar a próxima página.
- Fazer a aparição de algum personagem influenciar nos pensamentos.

terça-feira, 7 de dezembro de 2010

Assuntos discutidos na reunião de hoje

Sobre a consequência de uma opção

A consequência pode ser lançada no início da próxima págima ao invés de aparecer como popup.

Sobre os pensamentos

Especificação da classe

Pensamentos
Responsabilidades
Atribui um pensamento a um personagem de uma determinada página.
Atributos
TabelaDeSimbolos pensamentos_aleatorios
TabelaDeSimbolos pensamentos_determinados
LeitorDeXML leitor

Especificação do arquivo

Pensamentos aleatórios :
pensamentos_aleatorios
caracteristica
Lista de pensamentos:
pensamento

Lista de pensamentos determinados:
pensamento_determinado
chave
info

Sobre as histórias

"Lógica" das histórias

Para aumentar a interatividade, pensamos em fazer a aparição de um personagem, em um certo trecho da história, determine a próxima página diretamente. Isto é, basta um personagem aparecer junto ao personagem principal para mudar de página.

Pensamos também em guardar a relação dos personagens que se conhecem e o respectivo contexto em que se conheceram ou se viram pela última vez.

Uma ideia que talvez seja estudada mais para frente é estabelecer uma relação entre os pensamentos e aquilo que está interagindo com personagem na tela de realidade aumentada.

Ideias de histórias

Tivemos mais algumas ideias de histórias. Para ver uma síntese delas clique aqui.

domingo, 5 de dezembro de 2010

Decisões e idéias sobre interatividade

- Pensamentos

Decidimos que cada página conterá uma instância da classe Pensamentos(?).
Esse objeto contém os pensamentos dos personagens "relevantes" à respectiva passagem da história, e uma lista de pensamentos genéricos para outros personagens.
Tais pensamentos genéricos estão categorizados de acordo com a personalidade do personagem ao qual se atribuirá um pensamento aleatório.

Isso implica uma mudança na classe Personagem, que deverá ter um atributo "personalidade" ou algo similar.

Assim, se um personagem entra em cena e é importante nesse momento, terá atribuído a si um pensamento específico. Se não, terá um pensamento genérico correspondente a sua personalidade.

- Personagens que se conhecem

Esta é uma idéia de guardarmos quais os personagens que se conhecem, baseado em momentos em que eles apareceram juntos devido à intervenção do usuário. Isto é, se em algum momento o usuário fez a Cinderela e o Lenhador aparecerem na mesma cena, eles se conhecerão. Isto pode afetar o modo como a história se desenrola.

sábado, 4 de dezembro de 2010

Algumas ideias para a implementação dos pensamentos

Acreditamos que a exibição dos pensamentos dos personagens na tela de realidade aumentada será um aspecto importante na interatividade com o usuário.
Queremos criar um mecanismo que selecione os pensamentos a serem exibidos para casa personagem em um dado contexto.

Seguem algumas ideias para implementação desse mecanismo:
  • Cada personagem tem uma tabela de símbolos com o numero da página como chave e o pensamento que aparece nessa página como informação. Se a página atual não estiver na tabela, é sorteado um pensamento aleatório do personagem.
  • Cada página tem uma lista de pensamentos "úteis". Cada pensamento indica a que personagem ele pertence. (Poderíamos ter uma tabela de símbolos com o id do personagem como chave e o respectivo pensamento como informacao). Se um personagem colocado não conta na lista, então é sorteado um pensamento aleatório do personagem.
  • Criar uma classe "Pensamento" (pensamentos aleatórios, pensamentos do protagonista, pensamentos dos personagens interativos). Cada página teria um Pensamento. Quando a tag de um personagem aparece, o pensamento devolveria um texto que será mandado para o personagem. O personagem teria um balãozinho com o texto devolvido.

segunda-feira, 15 de novembro de 2010

Tarefas para a fase final do projeto

Resolvemos mudar a ênfase da próxima fase, que antes era a implementação da parte dos usuários, para o polimento da interface gráfica, das histórias e o aumento da interatividade (pensamentos e mais informações chave).

Antes da próxima reunião:
  • Pensar nas histórias [Su]
  • Ideias para melhorar a interface gráfica [Su]
  • Ideias sobre os pensamentos [Samu]
Assuntos para a próxima reunião
  • Discussão sobre como os pensamentos serão implementados (como o pensamento irá acompanhar o modelo?)
  • Discussão sobre como será a interface gráfica
  • Como organizar arquivos das páginas
Próximas Tarefas
  • Mudar o nome dos arquivos das opcoes (o número da página será indicado antes do número da opção)
Tarefas secundárias (talvez não sejam feitas até a entrega)

Usuários
  • Interface + implementação: botões (de cadastro e para salvar a história), campos para cadastro, carregar usuário, criar usuário, atualizar [Cy]
  • Salvar perfil XML (pesquisar como fazer para salvar um arquivo XML) [Su] [Cy]
  • Verificações de fluxo [Samu]
  • Deletar informações da história quando chegar ao fim[Cy] [Su]
  • Salvar a história [Su][Cy]
  • Carregar página inicial [Cy]
  • Passar página inicial e situação da história para o o construtor do Livro (utilizar parâmetros opcionais, implementar no arquivo Acoes.as) [Samu]
Assuntos secundários
  • Segurança dos dados (fazer senha para o usuário?)

sábado, 6 de novembro de 2010

Texto Justificado

Link com exemplo para justificar o texto em mxml:
http://livedocs.adobe.com/flex/3/html/help.html?content=textcontrols_04.html

Exemplo em AS3:
/* TextFormat fica no pacote flash.text */

//label1 is just a standard textfield
   label1.wordWrap = true;
   label1.multiline = true;
   var tmpFormat:TextFormat = label1.getTextFormat();
   tmpFormat.align = "justify";
   label1.defaultTextFormat = tmpFormat;

quinta-feira, 4 de novembro de 2010

Definições da interface - Segunda Fase

Conteúdo definido para as páginas dessa fase do projeto:
home: iniciar e sair
trecho do livro: trecho, sair, AR
tela AR: AR, sair, voltar para trecho

Tarefas finais da segunda fase do projeto

Refatoração (aplicar as mudanças necessárias para implementar o novo design das classes) - Su e Samu
Interface gráfica - Cy
Estudar como fazer pop-ups - Cy
Documentação do desenvolvedor (+ CRCs e UML) - Todos
Documentação do usuário (incrementar) - Todos
Modelos 3D - Todos
Histórias - Su

Novo design das nossas classes

Breve resumo do design das classes

Classes modificadas

Livro
Página atual
Identifica reação do personagem (manda exibir opção, manda exibir um texto de alguma opção, etc)
Trata confirmação de opção (vai pra próxima página - associa as opções às regiões)
Adiciona modelos 3D e imagens das opções ao Geranciador3D
Teria a função que atualiza a posição dos personagens a cada frame (chamaria uma função do gerenciador3D?)

Página (Guarda as Opções ao invés de guardar os ids das opções)
Carrega trecho do Livro
Indica protagonista
Personagens interativos e as respectivas opções a serem ativadas
Carrega as Opções (ArrayAssociativo de opções?)

MapaOpcoes (não mais se encarregaria da confirmação e exibição das opções)
Tem as regiões
Encontra a região ativa
Devolve opção correspondente à região ativa

RegiaoDaTela (não mais guardaria a Opção, a imagem e o texto)
Define área retangular
Diz se uma opção na está na área definida
Sabe o id da opção correspondente

Opcao (Guardaria a imagem e o textfield ao invés de guardar o endereço e o texto)
Visibilidade
Possíveis Próximas Páginas
Informação-chave

GerenciadorAR (não mais daria início ao ambiente 3D)
Inicializa e manipula ambiente AR
Detecta marcador
Informa marcador
Informa id do marcador

Novas classes

Gerenciador3D
Inicializa e manipula ambiente 3D
Exibe os elementos do ambiente 3D.

VisualizadorDePagina ??? (Falta pensar melhor)

terça-feira, 2 de novembro de 2010

MXML para interface gráfica

Ainda não decidimos se iremos utilizar o mxml para fazer a interface gráfica.
Mas aqui vai uma breve explicação do que fiz para testar o aplicativo mxml:

1. Instalei o programa designview para gerar o mxml com os componentes gráficos já configurados.

2. Alterei várias coisas do código gerado para poder usar as ferramentas (para trabalhar com múltiplas telas no programa) que encontrei na internet e criei os seguintes exemplos no nosso repositório:
"Exemplos/MXML - componentes gráficos, várias telas, integração com AS3"
"Exemplos/MXML - integração com as bibliotecas 3D e o FLARManager"

segunda-feira, 1 de novembro de 2010

Atualizando tarefas

Tarefas atualizadas: fazer ou continuar:

TODOS:
- Histórias
- Modelos 3D
- Interface gráfica

Classes:
- Livro (Su/Samuel)
- GerenciadorAR (Su/Samuel)
- GerenciadorRumo: situação, próximas possíveis páginas, próxima página. (Cindy)
- Main: event Listener para EnterFrame

sexta-feira, 29 de outubro de 2010

Mudança de ambiente de desenvolvimento

Testamos um outro plugin para trabalhar com AS3 no Eclipse que tem as ferramentas de que estávamos sentindo falta: autocompletar, compilação de arquivos com vetores, acesso fácil aos comentários das funções, exibição de traces no console, etc....

O nome do plugin é FB4Linux.

Para instalá-lo nós:

1. Tivemos que desinstalar os plugins do AXDT e do Flex para faze-lo funcionar corretamente (help -> Install New Software -> Already installed -> Selecionar os plugins desejados -> uninstall)

2. Baixamos os 4 arquivos FB4Linux aqui.

3. Depois seguimos essas instruções.

Para configurarmos as bibliotecas, acessamos as propriedades do projeto, fomos em "ActionScript Build Path" e colocamos a pasta src do FLARManager em "Source Path" e a pasta lib em "Library Path".
Nesta mesma janela, preenchemos o campo 'output folder" com "deploy" (para mantermos o mesmo diretório de antes).

Depois, fomos em "External Tools Configurations" e colocamos "/usr/bin/flashplayer" em "Location" e "endereço da pasta src do projeto/Main.swf" no campo "Arguments" para rodarmos nosso swf apenas clicando em "Run Main" (dessa forma os traces aparecem no console).

quarta-feira, 27 de outubro de 2010

Próximas tarefas

Na reunião de hoje decidimos também os próximos passos e algumas responsabilidades específicas.

  • Estudar como fazer interface: Todos
  • Escrever a história: Su
  • Fazer gerenciador de AR: Samuel
  • Pegar modelos 3D e imagens de opções conforme a história: Su e ajuda
  • Colocar as imagens atrás do modelo 3D (pesquisar): Todos
Além disso, precisamos implementar as classes:

  • Opcao (Cindy)
  • SituacaoHistoria (Su)
  • GerenciadorRumo (Samuel)
  • MapaOpcoes (Su)
  • Pagina (Samuel)
  • PossivelProximaPagina (Cindy)
  • PreRequisito (Cindy)
Tentaremos terminar essas coisas até a próxima reunião, ainda por ser marcada.

Decisões de design do projeto

Hoje decidimos algumas coisas referentes à estrutura do código do projeto para o que teremos que implementar a seguir.

Decidimos criar uma classe GerenciadorAR, responsável pelas tarefas relacionadas à realidade aumentada: inicialização, controle das tags, atualização por frame (talvez temporariamente), etc.

Criaremos também a classe MapaOpções, que lida com as regiões da tela durante a interação com o usuário.


Também discutimos a implementação da feature do programa de que certas decisões têm consequências a longo prazo, isto é, a "memória" do livro.

Nossa primeira idéia foi de que o programa guarde certas informações-chave para que, em certo momento da história, possa decidir se uma decisão desencadeia essa ou aquela reação.
(Exemplo: o que acontece se a Bela Adormecida vai para o castelo? Depende se ela casou com o príncipe, brigou com ele ou eles nem se conhecem)

Assim, poderíamos term uma tabela de hashing (vetor associativo?) em que as chaves são "perguntas" sobre a situação atual e os valores são as respostas.
Exemplo:
...
situacao["marido chapeuzinho"] = "Joao"
...

Com essa solução, precisamos que alguém decida, a cada decisão do usuário, qual das possíveis consequências será desencadeada, isto é, qual página será carregada.
Sugerimos, então, a criação da classe GerenciadorDeRumo.

A solução é um pouco mais difícil do que parece porque precisamos indicar essas informações de algum modo nos arquivos XML que descrevem as páginas e opções (que ainda não criamos).
O XML de cada opção deve indicar as páginas "candidatas" a serem a próxima e seus requisitos.
(Se a Branca de Neve fez amizade com a avó da Chapeuzinho em algum momento, esta opção nos leva à página 120).

sexta-feira, 15 de outubro de 2010

Tarefas finais para a prova de conceito

Documentação

Especificação melhorada do projeto
Como instalar e rodar o programa?
Estrutura da prova de conceito (classes e interações - sugestão: representar com diagramas UML)

Refatoração

Melhorar o nome das funções da classe Main
Terminar de comentar o código
Reorganizar o código de acordo com as últimas atualizações (falta integrar algumas partes)

Código novo

Implementar a parte que se encarrega pela confirmação de uma escolha.[falta testar]
Contar o num_frames que cada tag fica na tela para podermos identificar melhor a entrada e saída dos marcadores [Ajustar o número de frames que queremos que seja esperado]
Implementar a identificação da região em que a tag está e identificar o papel da tag.[ainda não está funcionando a identificação da região]

Estudar
Como fazer o modelo3D aparecer em cima das imagens

Imagens e modelos

Decidir quais serão as imagens do cenário
Decidir quais serão os modelos 3D



terça-feira, 12 de outubro de 2010

Documentação do Action Script

Estou postando uns sites legais que encontrei de documentação.

Action Script:
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

FLARManager:
http://transmote.com/flar/reference/
flarConfig.xml:
http://words.transmote.com/wp/flarmanager/flarmanager-documentation/

Papervision3D:
http://www.papervision3d.org/docs/as3/

quinta-feira, 7 de outubro de 2010

Decisões e tarefas para a prova de conceito

Decisões sobre a prova de conceito

- A prova de conceito foi reformulada.
- 3 opções a serem escolhidas através da tag (2 visíveis e 1 oculta)
- 1 personagem por tag
- 3 tipos de personagem: protagonista (faz as decisões), secundário (faz surgir nova(s) opção(ões)) e figurante (O que estou fazendo aqui?)

Tarefas

- Fazer telas de fim de apresentação (as telas aparecem com a tag de confirmação na prova de conceito) [Cindy]
- Controlar frames [Samuel]
- Identificar tags (confirmação, personagens) [Suzana]
- Pensar em: como exibir opções, identificação das regiões, reação ao identificar regiões [todos]

Próxima reunião

Dia: 13/10

O que deverá estar pronto
- Classes implementadas
- As tarefas que mencionamos acima
- Montagem dos arquivos

O que fazer?
Identificar reugiões

Próximos passos: (15/10) terminar a prova de conceito.

quarta-feira, 6 de outubro de 2010

Algumas especificações para os arquivos que irão descrever nossos objetos

Arquivo que descreve uma instância de "Opcao"

Nome: opcaoXXX_Y (XXX é o número da página e Y é o número da opção na página XXX)

Conteúdo:
caminho imagem
&
texto
List personagens (para as opções ocultas)

Arquivo que descreve uma instância de "Personagem"

Nome: personagemZZ (ZZ é o ID do personagem)

Conteúdo:
Caminho para a imagem

Arquivo que descreve uma instância de "PagLivro"

Nome: pagAA (AA é o ID da página)

Conteúdo:
List OpcoesVisiveis
List OpcoesOcultas
List Personagens (personagens secundários)
Protagonista

segunda-feira, 4 de outubro de 2010

Nova Proposta do Projeto

Para ampliar a interação com o usuário através da realidade aumentada, vimo-nos obrigados a alterar algumas coisas na tela de decisões de AR. Segue abaixo a nova proposta alterada:
"Era uma nova vez " é um livro interativo em que o usuário acessa sua conta e lê um trecho de uma história (página do livro) para, em seguida, tomar uma decisão sobre o seu rumo na tela de realidade aumentada. A decisão é tomada movendo-se o personagem principal, através da tag correspondente, para uma região da tela que está vinculada a uma escolha. Se o usuário, por meio de outras tags, inserir novos personagens na cena, podem surgir novas opções.
O programa é capaz de salvar o perfil de vários usuários, que contém informações relevantes para a continuidade da história (decisões-chave e página atual), bem como informações sobre o próprio usuário (login e senha).

Baseado nessa nova descrição da proposta, foram definidas algumas classes:
Classe Livro {
    -> abrir a página
    -> exibir a página
}

Classe Usuario {
    -> acessar a conta
    -> ler página
    -> tomar decisão
}

Classe Pagina {
    -> carregar trecho do livro
    -> carregar opção
    -> saber quais opções mostrar
    -> carregar pergunta

}

Classe Opcao{
    -> indicar próxima página
    -> carregar a descrição da opção
    -> carregar a imagem que representa a opção
}

Classe TelaAR {
    -> exibir as opções
    -> criar as regiões de escolha
    -> identificar tag
    -> identificar região da decisão
}

Classe Personagem{
    -> carregar imagem do personagem

}

Classe RegiaoDaTela {
    -> carregar posições (x_0, y_0, x_1, y_1)
    -> popular opções conforme as regiões
}

Classe Tag{
    -> implementar biblioteca de realidade aumentada, com tratamento de frames
}

Classe SituacaoDaHistoria {
    -> salvar decisões-chave
    -> salvar última página
    -> carregar decisões-chave
}

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