domingo, julho 29

Atualização semanal

Trago a vocês mais um post de atualização semanal.
Durante a última semana, eis o que foi feito:
Ogawa:
- Término das telas de seleção e criação de salas, marcando o término do desenvolvimento das telas que não a do jogo em si. Mais detalhes no post de ontem.
- Início do trabalho no chat do jogo e persistência de dados.

Lucius (Victor):
- Tentativas de diminuir o consumo de memória do MapMaker e jogo. Sucesso moderado.

Felipe:
---

Henrique:
---

Adiciono também que a instabilidade do SVN afetou o progresso, em especial por atacar logo no início do fim de semana.

Por hoje é só, mais informações na próxima semana.

sábado, julho 28

O status do jogo... e o futuro

Caros leitores,


Esse será um post que foge um pouco ao usual "Pessoa fez isso, outro fez aquilo, mais um fez outra coisa e o último está de férias". Neste post apresentarei como está o jogo atualmente, adicionarei uma tradução do Changelog (mudanças feitas) que contem detalhadamente tudo o que foi feito no jogo e no servidor, desde o início do desenvolvimento (sim, será um longo post), e falarei sobre o que o futuro nos espera.
No presente, o nosso jogo não tem muitas características esperadas de um jogo. Você pode andar pelos mapas criados, e é basicamente isso que pode ser feito. Grande parte do trabalho feito até agora foi fora do jogo em si, nos menus. Agora, tudo o que não é o jogo em si foi finalizado, então o foco será na parte do jogo em si, ou seja, adição de inimigos, dano, itens, baús, missões, e assim por diante.
Mas, o que eu quero dizer por "o que não é o jogo em si", e por que tanta demora para essa parte ficar pronta?
As telas. A tela principal, a tela de opções gerais, a tela de mudança de controles, a tela de seleção de personagens, a tela de criação de personagens, a tela de login para o multiplayer, a tela de criação de contas para o multiplayer, a tela de seleção de salas para o multiplayer e a tela de criação de salas para o multiplayer, além das versões multiplayer das telas de criação e seleção de personagem. Fazer tudo isso funcionar não foi uma tarefa fácil, especialmente as partes que envolvem o servidor (multiplayer).
A primeira grande dificuldade é que não é agradável utilizar componentes Swing, como JTextBox, JLabel, JOptionPane, e seus companheiros. Para utilizá-los, teríamos de deixar as telas serem repintadas de forma normal, teríamos de fazer um mosaico de painéis, e, o maior problema, ficaríamos dependentes de um look and feel para as aparências. Os componentes Swing não combinam com um jogo. Portanto, tudo foi feito "na mão". Os componentes foram desenhados com Graphics2D, alinhados e dimensionados com uma míriade de cálculos matemáticos, e sua lógica de funcionamento foi feita do zero. Dessa forma, pudemos fazer tudo do jeito que queríamos, e de forma que a aparência ficasse agradável, e condizente com o tema do jogo, além de não perder funcionalidade em geral. Mas fazer tudo isso para tantas telas demanda tempo, especialmente quando várias telas tem algo diferente das outras, um componente novo, fazendo com que reaproveitamento seja difícil. 
A outra dificuldade é a comunicação entre cliente e servidor. Fazê-los conversar harmoniosamente com vários pacotes sendo enviados de um lado para o outro é complexo no início, até que se aprenda melhor como fazer a comunicação. Um problema enfrentado foi o de múltiplas tentativas de acesso às mesmas instâncias de objetos, devido às várias Threads utilizadas, causando erros de modificações concorrentes. Atualmente as soluções encontradas vêm funcionando, portanto este obstáculo em específico foi vencido.
Essas duas dificuldades foram as principais responsáveis pela demora na finalização dessa parte do jogo. De agora em diante, o desenvolvimento será voltado ao jogo em si, começando pela persistência de dados de jogadores, e adaptação do que já existe para o multiplayer, o que havia sido prometido para o mês de Junho, mas foi adiado até que todas as telas estivessem funcionando plenamente. 
Acreditamos que é possível que não tenhamos tempo para finalizar tudo o que foi prometido. O foco será nas funcionalidades do jogo, mas é provável que as "cinematics" feitas dentro do jogo sejam cortadas, e o modo história seja encurtado. Para compensar, cogitamos adicionar um modo de jogo infinito, em que o jogador começaria no nível 1 e lutaria por sua sobrevivência pelo máximo tempo que conseguisse, competindo contra outros jogadores para ver quem teria mais pontos, calculados de acordo com nível alcançado, qualidade de equipamentos e tempo de sobrevivência.
Bom, por enquanto é isso para este post de status. Anexarei traduções dos changelogs do jogo e do servidor, e amanhã teremos o usual post de atualização semanal.


Atenciosamente,
Grupo PE

Changelog do jogo
Changelog do servidor

domingo, julho 22

Atualização Semanal

Sobre esta semana cada membro fez:

Victor:
- Terminou a colisão dos mapas além de desenhar os tiles de acordo com sua layer.
- Está alterando o MapMaker para reduzir o uso de memória.

Ogawa:
- Mudou o redimensionamento dos componentes da interface, de forma que nada seja cortado nas resoluções mais comuns.
- A tela de seleção das salas está funcionando mas ainda precisa receber atualizações quando há modificações nas salas.

Felipe:
- Fez a tradução para PT-BR dos textos presentes nos menus do jogo.
- Parou por enquanto a confecção de mapas devido aos problemas de memória do MapMaker e a quantidade insuficiente de memória RAM em seu computador.

Henrique:
- Único aproveitando as férias. Ainda sem sinal de vida.

domingo, julho 15

Atualização Semanal

Ah, sim! Após duas longas semanas (como informamos, semana passada estávamos ocupados e não pudemos postar) estamos de volta, e trago-lhes agora mais uma atualização semanal:

Ogawa:
Continuou seu árduo trabalho no jogo.
- As telas de criação e deleção de personagens agora funcionam devidamente (tanto em singleplayer quanto em multiplayer), embora por enquanto tudo seja armazenado apenas em memória (nada é salvo eternamente). Além disso, quando em multiplayer, a lista de personagens já é requisitada ao servidor;
- A janela de login por padrão coloca foco no campo de email;
- Quando uma conta é criada com sucesso, o usuário automaticamente é redirecionado à tela de login;
- Quando em multiplayer, a janela do jogo é constantemente atualizada mesmo com o menu aberto, pois não há pausa no multiplayer;
- Sons foram adicionados e seus controles estão funcionais - mas por hora, temos apenas uma mesma música em um loop infinito.

Eu:
Finalmente terminei o MapMaker. Ao menos por hora. Conforme surgir a necessidade de alguma mudança, a mesma será implementada.
Basicamente, o que faltava ser feito era a parte de salvar e ler inimigos, baús e áreas em que os mesmos surgiriam - e foi isso que fiz.
Também foram realizadas duas pequenas alterações para melhorar a performance:
- Implementação do GZIP para salvar os mapas - um arquivo de um mapa 500x500 que antes tinha 25MB tem agora míseros 900KB e mapas levam menos tempo para serem abertos;
- Implementação de uma lista de minimapas para evitar que os mesmos fossem redesenhados por completo sempre que o mapa atual mudasse - para mudar de um mapa para outro nas dimensões 500x500 demorava até 5 segundos e agora é basicamente instantâneo.

Agora iniciei meu trabalho no jogo, para ajudar o Ogawa. Por hora, tudo que fiz foi que os mapas criados pelo MapMaker fossem lidos pelo jogo. A parte difícil (das entidades e afins) ainda está por vir...

Felipe:
Finalizou mais dois mapas para o jogo (o terceiro e o quarto).

Henrique:
java.lang.NullPointerException
Não entendeu? Tudo bem... basicamente a criança está desaparecida no momento então não sei dizer como está o progresso dos manuais, só sei que continua a trabalhar nos mesmos.

domingo, julho 1

Atualização Semanal

Chegamos ao final de mais uma semana e também ao fim do mês de Junho!!! Ou seja, já estamos na metade do caminho para a apresentação final do nosso projeto.
Temos as seguintes atualizações do projeto nesta semana:

Ogawa:

-Nenhuma tela é impossível de ser fechada;
- O cliente de jogo faz logoff propriamente, de forma que o servidor não continue tentando receber pacotes do cliente e feche a conexão;
- Classes que necessitam ser compartilhadas entre o cliente e servidor estão em um projeto a parte, referenciado pelos outros;
- O servidor agora checa a versão do jogo para evitar que um cliente de jogo com uma versão antiga consiga jogar no multiplayer;
- As caixas de texto agora só aceitam caracteres alfanuméricos e os caracteres especiais "!@#$%&";
- Adicionada a tela de seleção de personagens;
- Adicionada a tela de criação de conta para o multiplayer, já envia dados ao servidor que os cadastra, por enquanto apenas durante sua execução;
- Alterado o dialog de confirmação de saída do jogo para um dialog de opções que pode ser utilizado de mais modos;
- Agora há uma checagem de login real, sendo necessário criar a conta antes de ser possível fazer o login. Deve-se notar que como as contas ainda não são salvas em arquivos, a criação da conta precisa ser refeita sempre que o servidor é parado;
- Adicionada a tela de criação de personagens;
- Arrumados vários pequenos problemas, como a incapacidade de alternar entre caixas de texto com a tecla TAB, a falta da tela de seleção de personagens quando se escolhe a opção de jogo singleplayer, dentre outros;
- Terminará assim que possível o multiplayer simples do jogo, para assim entrar nas metas programadas para Julho.

Lucius:

- O código sofreu alterações no nome de algumas variáveis, para seguirem as boas práticas;
- A criação e edição de inimigos avançou e está perto de seu término;
- Foi adicionado um log usando commons-logging e log4j;
- A gravação e leitura de items, armas, armaduras e acessórios do MapMaker é feita agora por gzip para comprimir os arquivos;
- Foi adicionada uma base para salvar e ler inimigos;
- Foi criada uma classe a parte para abrir e salvar os projetos.

Felipe:

- Criou e concluiu o mapa da 2ª quest do 1º ato do jogo;
- Terá como objetivo a finalização de todos os mapas necessários para o término do 1º ato do jogo.

Henrique:

- Iniciará o manual do usuário do jogo;
- Iniciará o manual de sistema do MapMaker;

Por essa semana e só.
Infelizmente, na próxima semana não teremos uma atualização. Isso porque teremos um estudo de campo no fim de semana, impossibilitando a postagem. Mas não deixem de ficar ligados nas outras semanas do mês de Julho, pois este mês promete ser produtivo, considerando que entraremos de férias e teremos mais tempo para programar!