Análise - WebMobile 15

Como prometi aqui, vamos à primeira análise de uma revista no mês (preciso fazer isso mais vezes com a EGM…), e desta vez, voltado para o público gamedev deste blog. A revista desta vez é a WebMobile 15, que adquiri há cerca de 1 semana.

Caso queira ver um resumo de cada matéria, visite a página da edição do site oficial.

A primeira coisa que eu fiz foi analisar a reportagem de capa sobre criação de games para celular, e uma das reportagens principais falava sobre JME, o Java para dispositivos móveis. Diferente da Java Magazine e da Mundo Java, que são revistas focadas numa linguagem (nem sempre isso ocorre. Já teve reportagens sobre o Groovy na Java Magazine), a WebMobile aborda várias linguagens diferentes. Isso é ruim já que eu não me interesso por .Net, e dificilmente vou me interessar. Mas é aquele negócio: se o meu serviço exigir que eu saiba, terei de estudar, mas a minha opção pessoal como fanboy de linguagem é o Java.

É a mesma coisa aqui no blog: como eu abordo várias vertentes de assunto, dificilmente todos vão gostar de todos os assuntos. Quem gosta só de games pode nem estar lendo este artigo. Continuemos.

Eu dei uma lida superficial no artigo que aborda o JME. O início do artigo explica que existem 3 tipos de jogos para celular:

  • Jogos embutidos - “são codificados no sistema do aparelho e são disponibilizados por ele”. Ou seja, são os games que vem como padrão no aparelho que você adquire.
  • Jogos de SMS - Jogos que utilizam SMS (mensagem de texto). A revista dá o exemplo de concursos e pesquisas ao vivo, e cada SMS tem um custo para o usuário.
  • Jogos de Navegador - Esse é, para mim, o que interessa. Neste caso, são games onde o usuário pode jogar conectado (o preço pode ficar elevado) ou mesmo baixar o game e jogar desconectado. Como eu me interesso por gamedev para celular, eu escolheria este tipo de distribuição de games: se o jogador se interessar, eu coloco o game para download e o jogador baixa para jogar. Aí o custo pode ser bem pequeno e o jogador não vai precisar baixar de novo o game (só se ele apagar e querer voltar a jogar).

A reportagem também cita os motivos de escolher Java como plataforma de criação de games para celular, tais como ele estar na maioria dos aparelhos, ela ser livre e aberta, ser portável (roda em diversas plataformas sem precisar recompilar o código), é otimizado para dispositivos leves e a plataforma MIDP 2.0 ter uma API apenas para desenvolvimento de games para celular.

A reportagem também cita as diferenças entre os MIDP 1.0 e 2.0 (o André Kishimoto também já falou uma das diferenças aqui) e segue com um artigo de um exemplo de um game onde um carro tem que se desviar de uma pista de obstáculos, onde ele explica partes do código.

A partir deste ponto achei o artigo um pouco confuso, e é necessário várias releituras para entender. O pior é que nas listagens de código na edição, quase não tem linhas de comentário. Considero isso uma falha grave, já que é bom a gente entender o que faz certo comando da linguagem. Se não tem as linhas, a gente tem que supor o que faz certa linha de código ou mesmo pesquisar o que faz certa função. Isso dificulta o aprendizado do leitor.

Analisando todos os artigos (dando uma folheada superficial), parece que os artigos .Net tem um cuidado maior do que nos artigos do Java. Até nas listagens de código as linhas são coloridas! Antes de me chamarem de frutinha, em linguagens de programação a coloração de certas linhas é essencial para entender o código (os comentários são mostrados com coloração verde, por exemplo). Tudo bem que a maioria dos programadores pega o código e abre numa IDE (e ela já colore as linhas de código), mas é interessante ter isto na revista, já que muitas vezes para estudar eu refaço o código e copio, com a revista no colo. Tudo bem que isso é frescura da minha parte, mas ajudaria bem o leitor (que algumas vezes lê o artigo longe do computador).

Eu não cheguei a analisar os outros artigos, mas outra coisa que faltou nos artigos desta edição é a seção de referências no final, com links de auxílio para o leitor (como o site oficial da API, por exemplo). Em apenas 1 artigo eu vi isso, e na Java Magazine isso tem em praticamente todos os artigos. Na WebMobile 13 (que adquiri há alguns meses atrás) a maioria dos artigos tem esta seção.

Por fim, para quem quer desenvolver games para celular usando Java, é interessante conferir a reportagem, e o início do artigo pode ser usado como argumento para outros desenvolvedores que acham que o Java é ruim para certas coisas. Se outras WebMobile tiver reportagens voltadas para gamedev, com certeza vou comprar (e analisar elas aqui no blog, caso tenha tempo), já que conhecimento nunca é demais, e como disse neste post, eu posso guardar as revistas e consultá-las caso precise.



Java 2D ou usando engine 3D?

Aviso importante: se você não é programador, você não vai entender este post. E se você for programador, mas não for programador Java, também não vai entender muito bem. Continuemos:

Surgiu o primeiro questionamento do Contest Pac-Man (confira também o segundo post da série) quanto à ferramenta que vou utilizar para criar este projeto: se eu vou fazer usando Java 2D ou se devo fazer usando uma engine 3D.

Peraí, você tá pensando em fazer um game em 3D? Na verdade não, mas eu iria tentar simular o estilo 2D do Pac-Man dentro da engine. Bizarro e insano, mas a idéia é essa.

Cheguei a este questionamento já que eu to na dúvida quanto à tela cheia. Ou seja, se eu simular num ambiente gráfico, fica mais fácil eu não depender da resolução do usuário (é…a gente tem que pensar nisso). Se eu fazer em Java 2D, com certeza vou colar alguma coisa (componente?) na interface do Swing. E a tela vai ter um tamanho fixo, e quem usar resoluções mais altas que a padrão vai jogar numa aplicação com parte da tela ocupada.

E como ainda estou na fase das idéias, to cogitando várias possibilidades para eu direcionar os meus estudos e analisar o melhor jeito de criar um game satisfatório.

Planejando os primeiros passos

Hora de começar a planejar a desenvolver o segundo game real (o primeiro foi um de forca que não deveria ser considerado jogo, mas, sei lá :P ), e desta vez tentar fazer alguma coisa. Apesar de ter 2 anos de experiência como programador, isso não quer dizer nada quanto a criar um game, já que eu só desenvolvi sistemas comerciais.

É claro que saber programação ajuda muito, mas para mim isso não é tão obrigatório, já que basta alguns tutoriais e um desenvolvedor iniciante começa a fazer alguma coisa simples. No meu caso, também, mas como eu já tenho muita noção da parte teórica de um game, como o tal do game design e saber como que um game é desenvolvido, pode ajudar um pouco. Então vou tentar seguir todos os passos básicos, e isso inclui o game design. Pode parecer bobagem fazer um game design de um game simples, mas planejar é sempre bom, e isso pode acabar gerando um artigo fixo na minha página, como documentação.

E por falar no Contest, vou deixar o código-fonte do mesmo disponível junto com os executáveis (no caso, arquivos .jar, mas isso explicarei adiante) na página do game que ainda vai ser criada.

Sobre o arquivo .jar que eu citei, no caso é um executável (nunca poderia chamar um jar de um executável, mas é só para você entender). O arquivo .jar é um conjunto de arquivos .class, que são os arquivos que a máquina virtual do Java lê para executar os programas.

Entendeu? Acho que não, mas para executar o meu pac-man (isso se o mesmo sair), você terá de instalar o Java no seu computador, e com isso você conseguirá executar o programa. A vantagem é que o meu joguinho será multi-plataforma. Ou seja, vai rodar em Windows, Linux, Solaris e etc. Basta ter a máquina virtual instalada para rodar. Só não garanto que vá rodar em celulares, já que o meu foco é um game simples para desktop (computador), mas nada impede de portar o game para J2ME (hoje a nomenclatura é JME, mas a engine 3D jMonkeyEngine também tem esta nomenclatura), o Java para celulares.

Com isso, vou tentar bolar o game usando multi-camadas: uma para a lógica do programa e outra para a parte gráfica. Assim, se eu quiser mandar o game pro celular, é só refazer a parte gráfica e chamar a lógica do programa por ela.

Mas qual será o diferencial do meu Pac-Man para ele não ficar igualzinho ao normal? Isso vai ficar pro próximo post da série, já que eu estou planejando o que posso fazer.



Contest de Pac-Man na UniDev

Como o Romulo já disse uma vês, as idéias podem estar bem debaixo do nosso nariz. Em outras palavras, as idéias podem surgir nos locais e situações incomuns, como a deste contest, que surgiu num tópico de um projeto de MMORPG (o pessoal deveria pensar bem antes de começar um!) e ganhou vida própria:

Unidev Pac-Man Contest

Como o nome já diz, o desenvolvedor deverá criar uma versão do Pac-Man (Come-Come), um dos jogos mais conhecidos de toda a história dos games. Apesar de parecer bizarro aparecer um monte de versões do mesmo game, o pessoal terá de ser criativo, pois a originalidade nesse tipo de contest é quase-zero.

Mas o mais importante é que isso também é um treino para quem quer desenvolver games. Muitos estudantes (que tem os pés no chão e não é como eu que tenta emplacar um projeto inviável) começam a desenvolver projetos pequenos para depois fazer algo mais complexo. Então decidi colocar os pés no chão e tentar participar desse Contest, e vou fazer em Java para desktop.

Primeiro que isso servirá de treino para caso queira fazer games simples em 2D, e também posso treinar um pouco de lógica e voltar a estudar o Java, já que faz muito tempo que eu não programo pra valer nesta linguagem (também, to num emprego que usa outra linguagem para desenvolver…).

E todos os passos que eu farei nesta competição eu vou postar aqui, tanto na forma de tutoriais (já que quero ajudar vocês) quanto na forma de posts estilo diário de desenvolvimento, É claro que dependendo da opinião de vocês posso alterar alguma coisa do projeto.

Desejo boa sorte a todos os competidores (mesmo que eu participe ou não) e vamos ver como que vai ser o resultado desta competição. Como ela ainda não começou, dá para pelo menos ir pesquisando material técnico para estudar.

Introdução ao Java

Muita gente me pergunta dicas e truques para o Java, e como tenho um conhecimento maior desta linguagem, sempre indico sites e livros. Consigo fazer, em Java, um sistema com Hibernate e JSF, gosto de Swing e de Java 3D. Também penso em estudar jMonkeyEngine… acredito que até aqui você não deve ter entendido (ou nem conhece) nenhuma destas siglas, mas não se desespere. Aos poucos você vai aprendendo, isso se você se interessar mesmo em estudar o tal do Java…

Mas o que é o Java? O Java é uma linguagem de programação altamente poderosa onde você poderá criar desde programas simples até páginas de internet e games. Uma das maiores vantagens do Java é que o mesmo é multi-plataforma (desde que você saiba desenvolver, já que se você tentar acessar um recurso nativo do sistema operacional, seu sistema poderá deixar de ser multi e você talvez deverá recompilar o software…) e totalmente gratuito, diferente de outras linguagens que a gente acaba vendo por aí.

Tá, mas onde que eu encontro informações desta linguagem? A seguir vou postar indicações de livros (não postarei material pirata aqui), indicações de blogs e sites para você começar. É claro que eu não vou postar neste post tutoriais avançados da linguagem, já que este post é focado para usuários iniciantes. Também vou, de vez em quando, postar tutoriais diversos sobre a linguagem.

Para programar nesta linguagem, você deverá instalar o JDK. Então acesse o site oficial e baixe o JDK mais atual (até o fechamento deste post é o JDK 6 Update 2). Para instalar, siga o tutorial Instalando o J2SE 5.0 JDK no Windows 2000/XP ou Instalando e configurando o JDK no Linux.

Tutoriais introdutórios

Livros

Desses três livros, recomendo o primeiro. Apesar de ter muito texto, a série de livros do Deitel é muito boa, aborda muita coisa da linguagem e explica direitinho cada pedaço de um programa. Agora, caso você queira tirar certificação, você pode comprar o livro SCJP: Certificação Sun para Programador Java 5 - Guia de Estudo da Kathy Sierra e estudar pelo livro ou pelo curso FJ-19 : Preparatório para Certificação Java da Caelum. Mas caso queira estudar pelo livro, você deverá ter alguma noção da linguagem.

Sites

Destes sites, acabo acessando mais o primeiro, que tem um fórum para os usuários tirarem dúvidas, uma seção excelente de artigos e os usuários sempre postam notícias atualizadas da área.

Blogs

Três blogs excelentes que sempre tem tutoriais e dicas sobre a linguagem (mas o Fragmental, do Phillip Calçado, é mais voltado à análise de projetos). Já no site da Caelum tem duas apostilas excelentes para quem quer começar (que são apostilas dos cursos da empresa):

IDEs

No começo, é recomendável que o usuário aprenda a compilar seus programas no bloco de notas, para depois ele escolher um ambiente de desenvolvimento, também chamada de IDE. As principais são:

Recomendo o Eclipse, já que é uma ferramenta excelente, é gratuito e tem o melhor editor de códigos-fonte que eu já vi. Até hoje nenhuma IDE (isso mesmo: nenhuma!) conseguiu superar o Eclipse em edição de código. O Netbeans está sendo muito utilizado, mas acho ele um pouco lento. Já o IntelliJ é pago, e não cheguei a usar, mas as críticas que eu vejo na internet são sempre muito positivas.

Revistas nacionais

A primeira é bimestral e a segunda é mensal. As duas sempre tem tutoriais e dicas para a linguagem. Algumas vezes a Java Magazine traz reportagens sobre eventos internacionais sobre o Java.

Tecnologias principais do Java

Atualmente, o Java se divide em várias tecnologias diferentes, como o J2SE, J2EE e J2ME. Para mais informações:

J2SE, J2EE e J2ME: uma breve explicação

Você poderá escolher uma das vertentes e focar seus estudos e softwares nelas. Se você pensa em ser um profissional Java, recomendo conhecer o J2EE (mas vai demorar um pouco para você aprender o J2EE, por ser mais complexo e difícil) e talvez o J2ME, mas vai depender do seu foco, ser você pena em desenvolver sistemas comerciais simples (J2SE usando Swing, ou mesmo usando JSP (páginas de internet) acessando um servidor local), aplicações complexas (J2EE) ou mesmo jogos para celular (J2ME).

Caso tenha outras dúvidas (ou queira complementar este post ou mesmo me corrigir), poste nos comentários que eu tentarei ajudar no que for possível (apesar de que eu não sei muito sobre o Java, mas gosto da linguagem e continuo estudando a mesma com afinco!).

Java Magazine 48 e a Mundo Java 24

A esperança é a última que morre! E consegui, com muita sorte, comprar aqui em Varginha (hoje cedo) as duas principais revistas de Java do Brasil: a Java Magazine e a Mundo Java. Ao analisar as duas (folheei elas apenas), vi que a Mundo Java está melhor do que a Java Magazine, mas o maior diferencial da Mundo Java neste mês é justamente a sua matéria sobre Jogos 3D.

Capas (clique nas imagens para aumentar):

Continue lendo »

Mundo Java - Edição 24, e um pequeno desabafo

Fato 1: eu compro revistas de tecnologia. Fato 2: Eu já fazia propaganda gratuita delas aqui no blog, sem ganhar nada com isso. Fato 3: eu parei de ler a Info, por ter mais propaganda do que matéria interessante (apesar de que, vendo o site agora, tem algumas reportagens interessantes). Fato 4: deixei de acompanhar notícias normais de TI para me focar em alguns assuntos específicos (games e 3D, por exemplo).

Problema 1: eu moro no interior, e com isso algumas revistas demoram para chegar. Não tenho nada contra o jornaleiro. São as distribuidoras que às vezes vacilam com a gente. Problema 2: Chega poucas edições das revistas aqui. E com isso posso perder a chance de comprar uma dessas revistas em um determinado mês.

Alguns podem achar besteira comprar revistas por causa da era da internet, mas muitas delas são essenciais, por trazer conhecimento de ponta em algumas áreas específicas, e conhecimento de qualidade. Duas dessas revistas são dedicadas ao Java: a Java Magazine e a Mundo Java.

Não vou dizer aqui qual é a melhor. As duas são boas, mas uma delas é bimestral e a outra é mensal. Além disso eu concordo com alguns usuários do Guj: eu compro as revistas para guardar as mesmas, já que pode acontecer de precisar de um tutorial sobre uma determinada tecnologia em algum momento da minha carreira profissional (para quem não sabe, eu sou programador de sistemas em Java). Eu nunca, até hoje, peguei uma delas e li do início até o fim. Não tem como, já que muitos tutoriais tem pré-requisitos para que o usuário entenda o mesmo. Por exemplo: eu posso ver que numa edição tem um tutorial sobre Ajax, mas eu precisaria ter noções de criação de páginas de internet para isto.

Continue lendo »

Eclipse

Finalmente, depois de 1 mês de espera e visitando o site oficial todos os dias, a os desenvolvedores lançaram a versão final do Eclipse 3.3. As primeiras modificações aparentes foi o tamanho do arquivo (aumentou 20 MB na versão clássica em comparação com a versão 3.2) e a página de downloads, que mudou de layout:

Eclipse Downloads

O Eclipse é uma IDE de programação. Antigamente os programadores poderiam falar que o Eclipse é uma IDE para programar em Java. Em parte, é considerada uma IDE, mas isso é assunto que gera controvérsia na comunidade. IDE é um ambiente de desenvolvimento integrado (tradução livre de Integrated Development Environment), mas o Eclipse, tecnicamente, é uma junção de diversos plugins, que são gerenciados por um núcleo interno. Essa é uma das maiores vantagens dessa ferramenta, já que outros desenvolvedores podem, se quiserem, criar novos plugins para o Eclipse. Sites como o Eclipse Plugin Central e o Eclipse Plugins tem centenas de plugins diferentes, como para programar em PHP e C++ (este último como um projeto interno da Fundação Eclipse, o grupo de pessoas responsável pela ferramenta).

Continue lendo »

Artigo realista sobre os games para celular

Saiu no IDG Now um artigo sobre os games para celular, com enfoque em negócios e faturamento:

Games em celular

Concordo com o autor do artigo: apesar do crescimento de games para celular ter sido elevado, comparando com o faturamento das grandes produtoras, é um faturamento minúsculo. E também o número de produtores que tentam desenvolver games é elevado e os games não rodam em todas as plataformas (diferente de um game para console, que roda em todos os aparelhos).

Mas tem que levar em consideração que o modelo de negócios para games de celular é promissor e o seu processo de desenvolvimento é mais fácil do que num game AAA (game comercial, como o Need For Speed Carbon, por exemplo) . Hoje as produtoras gastam milhões de dólares para criar um jogo de ponta e precisa vender muitos jogos para cobrir o investimento. Já um jogo para celular o gasto é menor (mas também a margem de lucro é menor, logicamente) e o tempo de criação de um game também (num jogo comum, pode demorar meses e até anos desenvolvendo um jogo, isso com uma equipe com 50 pessoas. Num jogo para celular, uma equipe pequena basta para desenvolver um).

Aqui no Brasil é um mercado interessante para ser explorado e o custo para montar uma empresa é menor. Eu quero desenvolver games, e uma das áreas é jogos para celular, já que eu posso usar JavaME e distribuir o jogo (comercialmente ou não). Mas aí eu teria uma concorrência enorme (como o autor citou no artigo) com muitos desenvolvedores (e na indústria normal também não é assim?), e tendo um retorno menor. Mas quem sabe no futuro a área se torne melhor e os celulares tenham tecnologia para bater de frente com os jogos para PC e consoles.

Resolvendo um problema no IReport

Hoje andei passando por uma tremenda dor de cabeça no meu serviço, e decidi postar aqui sobre o problema e sua solução, já que outros usuários podem passar pelo mesmo problema. Continue lendo »