Anúncios

Minecraft, O Software

por Danilo Viana

Minecraft é um sucesso completo no reino Indie e um fenômeno de vendas. O jogo criado por Markus Persson hoje é sinônimo de sandbox e prova que uma boa idéia — mesmo uma não original — quando bem implementada pode render não dois, mas centenas de milhares de minutos de fama.

Para os dois de vocês que sequer ouviram falar do jogo, Minecraft é um jogo tipo sandbox onde, utilizando cubos, é possível moldar completamente um mundo infinito, totalmente seu. É dado ao jogador total liberdade para destruir, recriar e reposicionar tais blocos criando praticamente qualquer coisa. Além disso, é possível criar centenas de itens — picaretas, espadas, cercas, portas — tudo a partir de materiais minerados no ambiente do próprio jogo e um curioso sistema de construção (chamado de Crafting) que é fácil de entender e divertidíssimo de experimentar.

O jogo começou a ser desenvolvido em 2009, tendo sua primeira versão “final” em 18 de novembro de 2011. Escrevo “final” entre aspas porque Minecraft é jogado por milhões de pessoas desde sua primeira versão preliminar, tendo faturado milhões antes mesmo de ser oficialmente lançado.

Para entender melhor do que se trata, vale uma espiada no vídeo que apresenta o trailer oficial. Tem apenas um minutinho e é bem bonito.

Verdade seja dita: existem milhões de sites e blogs que escrevem sobre Minecraft, apresentando reviews, dicas, guias, mods e pacotes de texturas. Com o objetivo de agregar algo novo para o leitor do Cosmic Effect, gostaria de trazer a ótica de um desenvolvedor de sistemas nesta abordagem. Se você não tem o mínimo interesse em programação e nenhuma curiosidade para saber como jogos funcionam, talvez essa leitura não seja para você — mesmo assim convido todos a me acompanharem nesta análise um pouquinho mais técnica, pois tenho certeza que encontrarão algo interessante para refletirmos juntos.

Um verdadeiro Sandbox

Esqueça GTA, Assassin’s Creed ou qualquer outro “sandbox” por aí. Em Minecraft você pode REALMENTE fazer o que quiser. A premissa do jogo chega a ser ridícula quando você diz em voz alta: um jogo sem objetivos, sem missões e sem NPCs (eles até existem, mas são meramente decorativos). Os inimigos estão lá apenas para criar um desafio, você não precisa enfrentá-los e se nem quiser vê-los existe um “modo criativo”, sem a presença de oponentes. O único objetivo fixo do é minerar e construir o que você deseja, tudo isso no tal mundo infinito — não é “virtualmente” infinito, como em “é tão grande que poucos acham o final” — é realmente infinito pois se você tomar uma direção e sair andando o jogo vai criando mais terreno eternamente, até literalmente o espaço em seu disco rígido acabar.

Ao refletir um pouco mais profundamente esta premissa, pode-se concluir que Minecraft tem um paralelo no mundo real: Lego. Não estou falando dos Legos atuais, temáticos e praticamente sem necessidade de montar nada; lembre-se do Lego tradicional, um balde de peças encaixáveis onde você constrói o que quiser e tiver tempo (e peças) para fazer. A diferença é que neste jogo virtual as peças são infinitas; você só precisa de tempo.

Como isto é possível? Jogos como Battlefield 3 e Skyrim criaram mundos gigantes, mas eles esbarram na barreira do espaço de armazenamento, memória; como um “joguinho” com download de 200 KB e que depois de instalado ocupa “só” 100MB consegue ter um mundo infinito? A resposta é simples: use blocos.

A primeira vez que vi Minecraft os gráficos chamaram a atenção: exatamente o que imaginava se de uma versão FPS de Final Fantasy (o primeirão, de NES), com seu cenário quadrado e construções apenas com ângulos de 90 graus. Bacana o estilo, como um tapa na cara de todos os fanáticos por gráficos, mostrando mais uma vez que eles não são tudo.

Ao jogá-lo mais um pouco, percebi que não se tratava apenas do estilo gráfico. Claro, cada textura tem apenas 16 pixels de altura e o programador poderia ter feito melhor se assim desejasse — de fato existem mods que permitem trocar as texturas por versões de 32, 64 e até 128 pixels — mas a ideia aqui não era apenas seguir um estilo gráfico. Era o nascimento da receita para mundos infinitos.

Cada vez que se inicia um novo mundo em Minecraft, um algoritmo estabelece um mundo aleatório, mas relativamente coeso. Existem zonas com florestas, outras com lagoas e após uma certa profundidade são encontradas cavernas e até algumas vilas de NPCs. Claro, o algoritmo comete alguns erros: vilas com casas cujas portas dão para a parede, mas como você pode mudar tudo, não é nada que um pouco de boa vontade e trabalho não conserte rapidamente.

Para que esse algoritmo funcione, os blocos são fundamentais. Já que o mundo é apenas um bando de cubos reunidos, tudo que se precisa é de um conhecimento prévio acerca das regras de cada bloco — blocos de grama e areia vão na superfície, blocos de água preenchem buracos nos de grama, blocos de pedra e minério vão no subsolo — e o mundo infinito está pronto para ser criado.

É uma ideia simples que define todo o estilo de Minecraft — aqui não existem fases ou mapas que necessitem de um level designer, tampouco houve necessidade de visitar locais icônicos para capturar texturas realistas. Ao tornar o mundo um conjunto de blocos com uma função simples, todo o trabalho de moldá-lo foi entregue ao jogador e chamado de gameplay. E ele agradece por isso.

Minecraft, o software de computador

Algo que, particularmente havia me surpreendido em Minecraft é o fato de ter sido desenvolvido na linguagem de programação Java. Para os não iniciados, a curiosidade está no fato de que Java nunca realmente emplacou como linguagem de programação para jogos eletrônicos. Os fantásticos títulos para consoles e PCs em sua gigantesca maioria são criados na linguagem C++ e , mais recentemente, a Microsoft conseguiu emplacar o C# (pronuncia-se Cê Sharp) através de seu framework XNA e o Xbox 360.

Java sempre foi uma daquelas linguagens que alguns tentavam provar que servia para jogos, mas ninguém dava a mínima — quando algo um pouco mais audacioso era criado, o programador gritava aos quatro ventos que usou Java e isso acabava servindo mais para desmotivar do que para promover. (Nota para os amigos da área: estou ignorando que os jogos para Android são em Java; para todos os efeitos, refiro-me ao Java que rodam nos computadores pessoais).

Eis que Minecraft surge e ninguém faz alarde algum acerca de como ele foi criado. Você faz o download, executa-o como faria com qualquer outro programa e, na remota possibilidade de você não ter o Java instalado, ele reclama e te direciona à instalação. Até esta reclamação é discreta, como se esse tal de Java fosse uma coisa que você deveria ter, como o DirectX que é embutido no Windows. Em momento algum o jogo informa que é um aplicativo em Java, você nem lembrará disso depois.

Esta sutil postura da rotina de instalação despertou meu interesse de imediato. Sabe quando você oferece uma lanche a amigo e somente depois comenta que é feito de repolho, a coisa que ele mais odeia no mundo? Mesma coisa.

E o que fica diferente por Minecraft ser feito em Java? Fora o fato que ele roda em qualquer plataforma que tenha a máquina virtual Java, absolutamente nada. Trata-se de um jogo muito bem construído e de ótima performance, inclusive com muitos mods que melhoram gráficos, adicionam recursos e até novos inimigos. Pois bem: para todos aqueles que defendiam a inabilidade da linguagem em alcançar o desempenho de jogos desenvolvidos em outras linguagens, Minecraft é um verdadeiro tapa com luva de pelica.

O ciclo de desenvolvimento também é bastante interessante. Nas palavras do próprio autor:

(…) my only true design decision is to keep it fun and accessible. There’s no design document, but there are two lists; one for bugs, and one for features I want to add but think I might forget.”

Em uma tradução livre, significa que ao invés de vastos documentos e incontáveis artes conceituais, o autor dá um passo de cada vez e adiciona apenas aquilo que acha interessante e divertido, ou que conserta eventuais bugs. Se após implementar algo, ele (ou os jogadores nos fóruns) achar algo sem graça, simplesmente vai lá e remove. Esta decisão significa que a equipe de desenvolvimento não tem medo de tentar um novo recurso que possa parecer interessante. Eles tentam; e removem em seguida caso não funcione bem. Não , você não precisa comprar DLC nem pagar assinatura; se você tiver comprado o jogo uma vez, terá eternamente a versão mais nova.

Jogo de criança… NOT

Minecraft é um jogo sobre coleta de recursos e construção utilizando estes recursos. À primeira vista, parece que a “construção” é meramente o reposicionamento dos blocos em uma forma diferente — como seria com Lego — mas o jogo conta com um recurso mais poderoso: a obtenção de novos itens combinando matérias primas.

Quer uma espada? Combine duas barras de ferro com uma vara de madeira; um machado ou uma picareta? Use três barras de ferro, ao invés de duas.

Como faço para diferenciar um machado de uma picareta, dois itens que usam os mesmos materiais e na mesma quantidade? Mantendo a filosofia da construção por blocos, Minecraft conta com um sistema de construção onde você “desenha” o item que quer; para obter uma espada, não basta fornecer duas unidades de ferro e uma de madeira: é preciso posicioná-los na tela de construção, na posição correta para formar uma espada. Imagine comigo: duas barras de ferro, uma abaixo da outra na vertical; logo abaixo, a peça de madeira.

A construção do mundo, a criação de itens montando a matéria prima… tudo isso torna Minecraft uma experiência recomendadíssima para crianças. Nada de violência e o aspecto de construção estimula muito a imaginação, não precisa nem dizer. Mesmo assim, é incrível o número de adolescentes e adultos jogando. Incontáveis vídeos, fóruns, páginas de wiki e blogs — todos com pessoas crescidas mostrando suas criações.

E como elas são fantásticas. Desde casas simples mas bem decoradas até reproduções fiéis de monumentos mundiais, como o Coliseu e a Estátua da Liberdade.

Além disso, o jogo conta com um interessante material chamado Redstone. Ele serve de fonte de energia elétrica no mundo do jogo. Esta fonte de energia pode ser combinada com pisos móveis, alavancas, portas lógicas, trilhos de trem e outros materiais, tornando possível a construção de verdadeiras masmorras, com direito a armadilhas, sistemas de defesas e até golens ativados apenas quando inimigos entram no recinto.

Jogadores criativos utilizam estes recursos para criar sistemas totalmente auto-suficientes, com carros de mineração que levam recursos minerados para casa do jogador e voltam com ferramentas novas (as ferramentas em Minecraft têm duração limitada), otimizando ao máximo a coleta de matéria prima.

Com todos estes elementos, Minecraft tem se tornado o símbolo do jogo para todas as idades. Qualquer um vai encontrar algo que gosta, seja a criança que quer apenas brincar com a montagem de blocos, passando pelo jogador casual que quer investir em seu pequeno “mundo tamagochi” um pouco a cada dia até os hardcores que implementam sistemas autômatos e mundos coesos dignos de MMORPGs.

Com isso, voltamos ao princípio básico de desenvolvimento de Minecraft — sem documentos, apenas desenvolvendo algo em cima da premissa “se for divertido”. É incrível ver como um método simples e até “desorganizado” como este gerou um jogo muito mais completo que produções multi-milionárias como Skyrim, World of Warcraft ou Call of Duty: jogos que seguiram modelos mais tradicionais de desenvolvimentos e que gastaram pelo menos metade de seu ciclo sem digitar uma única linha de código, apenas criando documentos para determinar ainda seria criado.

E finalmente concluímos

Minecraft não é para todos — o jogador que gosta de ser guiado e sente-se perdido na ausência de objetivos claros, provavelmente não vai gostar do título. Viciados em gráficos podem também achá-lo difícil de digerir, já será necessária  uma dose de imaginação talvez rivalizada apenas por jogos da era Atari. Mesmo assim, Minecraft é um dos jogos atuais que melhor representa o ato de jogar videogame. Desprender-se da realidade e interagir com um mundo fictício, tudo em nome da diversão.

Uma idéia como esta, alguns anos atrás, poderia causar risos na sala de reunião ou até a demissão de alguém. Um cético diria que não temos poder computacional suficiente para representar um mundo tão rico e dinâmico. Tudo que bastou foi um programador solitário e criativo se perguntar “e se os gráficos não precisarem ser bons? E se o jogador aceita-los até mesmo… terríveis?”. O que o levou à ideia básica: “e se usarmos blocos? Lego fez isso por anos, por que em um computador não daria certo?”

O sucesso de Minecraft é prova suficiente que, pensar fora da caixa, pode trazer excelentes resultados… 

* * *

Anúncios

39 Respostas

  1. “… o jogador que gosta de ser guiado e sente-se perdido na ausência de objetivos claros, provavelmente não vai gostar do título.”

    Bom, esse sou eu! =D Posso até dar uma chance ao Minecraft, mas a minha experiência em jogos “sandbox’ clássicos não foi das melhores.

    Mesmo assim o artigo é bem interessante, especialmente pela visão que você dá, Danilo, que vai além da tradicional. É interessante como um sistema, até certo ponto, bem simples, pode esconder por trás uma complexidade enorme, tudo dependendo da criatividade do jogo e da inteligência do código.

    Curtir

  2. Excelente post Danilo!

    “uma dose de imaginação talvez rivalizada apenas por jogos da era Atari.”

    Sempre observei Minecraft mas ainda sem confiança pra explorar o jogo. Meu interesse inicial foram os detalhes e possibilidades das texturas e a nitidez estilo Atari das cores.
    Tenho algumas ideias e em breve tento materializa-las e combinar com outros mundos de games. Certamente vou te perguntar as duvidas que certamente serao muitas.
    Ideia muito criativa e e creio que logo havera algo pra PSN ou similares.

    Muito legal.

    Valeu.

    Curtir

  3. Dancovich

    Postei no GUJ este artigo ( Maior fórum de usuários Java) e compartilhei no face.
    http://www.guj.com.br/java/267324-engine-para-criacao-de-jogos-brasileira-em-java—parallax/3#1401996

    Como é algo sobre um Jogo em Java com excelente relevância para meu site, poderia postar lá este artigo (Não se preocupe, pode por o link para o original, este aqui) ou me de permissão para fazer isto.

    Normalmente só postaria o link apontado para cá, com uma introdução, como fiz, mas neste caso abro uma ressalva, por ser um artigo que pretendia fazer e leste minha mente mas ficou muito, mas muito bom mesmo u.u” (E é perfeito para o tipo de artigo que se encaixa em meu projeto).

    Curtir

  4. @A.L.A.S
    Uma das características de Minecraft é que a urgência é controlada por você, então dá para ir explorando aos poucos enquanto aprende. Já que ele não tem história nem cutscene nem quests, você pode jogar um pouco a cada dia. Por isso eu recomendo até quem não gosta do estilo tentar (a versão grátis do site, é claro).

    @Andrey
    Andrey meu filho, a quanto tempo rapaz! Eric me passou que você está “preparando surpresas”, rs. To aqui ansioso pra saber o que vai sair dessa manga, hehehe. Abração.

    @michelpmontenegro
    Obrigado pela referência meu velho. Conheço muito bem o GUJ, uma de minhas fontes mais confiáveis para matar um leão por dia lá no trabalho. Não mencionei no post mas trabalho com Java já tem uns bons anos e por isso mesmo Minecraft me chamou a atenção.
    Se você acredita que o post vai servir por mim pode postar sim, só faz o favor de manter o link pra cá.

    Só mais um detalhe, olhando o post que você linkou vi a discussão sobre linguagens para jogos lá. Isso não está no post mas Minecraft usa algumas bibliotecas de bindings sim, principalmente com OpenGL (lwjgl) e DirectInput (jinput), mas como são bindings bem difundidos e com versões para muitas plataformas, acaba não influenciando muito o suporte a multiplataforma do jogo.

    Curtir

  5. Rapaz da uma olhada no meu projeto “Parallax”
    http://www.einformacao.com.br/parallax/

    Tem até um artigo sobre ele aqui no CosmicEffect
    https://cosmiceffect.com.br/bem-vindo-ao-cosmic-effect/

    De uma olhada, vai gostar bastante.

    Curtir

    • Sim, vi seu artigo e fiquei muito interessado no Parallax, a idéia de um RPGMaker em Java muito me interessa já que meus conhecimentos de Ruby não são lá grade coisa.

      Não sei se você conhece o projeto libGDX: http://code.google.com/p/libgdx/

      É um framework Java para criação de jogos 2D e 3D, o interessante dele é que sua proposta é ter uma base única de código para desenvolver jogos para PC e Android. Dá uma olhada nele, quem sabe um dia não vemos jogos feitos no Parallax rodando tanto no PC quanto no Android?

      Abraços.

      Curtir

  6. Pombas, Danilo, eu tô fugindo do Minecraft que nem o Diabo foge da cruz desde que o jogo saiu e você faz um post desses aqui no Cosmic Effect? Assim não dá! Assim não pode!

    No instante em que vi as primeiras fotos do Minecraft, senti que ia virar um vício. Justamente por isso não comprei e nunca joguei; sei que vou viciar, temo pela saúde do meu casamento.

    Muito legal o post, achei ótimo o rumo que você deu. Dose é que agora fiquei tentado a ir comprar…

    Curtir

    • Hahaha, não resista Gagá. Tire um fim de semana de folga, deixe a patroa com os passarinhos na casa da avó e passe um fim de semana no jogo, hehehe.

      Olha eu aqui deixando prova da minha corrupção de senhores de idade! Tenho que tomar cuidado com isso senão vira prova contra mim.

      Grande abraço, caso se renda aos encantos do jogo tamos sempre aqui pra trocar figurinhas.

      Curtir

  7. Excelente artigo.

    É justamente pelo fato de usar bindings, que mantenho meu argumento de que o Java ainda é uma linguagem que não funciona para jogos.

    Por que minecraft seria um tapa de luva de pelica? O game foi obrigado a recorrer à LWJGL, como você citou, porque a plataforma Java, sozinha, não dá conta do recado. Não se pode comemorar o sucesso da plataforma, se justamente o núcleo gráfico do game não não pode usá-la.

    Assim, a afirmação de seu artigo deixa de ser verdadeira. Não basta ter uma VM java para rodar Minecraft. Você tem que ter a LWJGL também. A sorte é que ela é portada para Windows, Linux e Mac (mas não Solaris), mas se amanhã a Nintendo resolver suportar uma VM Java, teremos que esperar a boa vontade do pessoal da LWJGL para portar a lib também.

    Outra crítica a plataforma Java é o fato de não existir no mercado de consoles. O Notch portou o game para C++ para entrar no mercado móvel e, num artigo que publicou na época, deixou uma frase enigmática que essa versão “serviria para levar o Minecraft a outras plataformas onde hoje ele não existe”. Será que com isso ele sairá do domínio dos PCs? Se sair, não será com Java.

    Curtir

    • Opa Vinicius obrigado pelos comentários.

      Não acredito que usar bindings invalide Java como plataforma para jogos, a máquina virtual Java em sí é escrita em C++ e opera com bindings para chamadas do sistema operacional e nem por isso ela deixa de ter boa performance se o aplicativo for bem escrito. O próprio XNA da Microsoft nada mais é que uma coleção de bindings para o DirectX e nem por isso deixa de ter desempenho mais que adequado.

      Dito isso e apesar do que disse no artigo, acredito que Java realmente não é uma plataforma adequada para jogos. Não creio que o motivo seja tecnológico, a Google conseguiu criar uma máquina virtual baseada em Java com boa performance para jogos em sua plataforma Android, mas no PC simplesmente nunca foi o foco da Sun e agora da Oracle.

      Se fosse o desejo da Sun/Oracle investir neste mercado, os bindings para OpenGL e outras APIs direcionadas a jogos fariam parte da API oficial da plataforma assim como eles fazem parte no Android, mas nunca fez nenhum sentido comercial para a Sun tentar brigar em um mercado que a Microsoft já dominava, então o que ela pode fazer foi dar o suporte para a comunidade criar os bindings necessários, uma manobra sem nenhum risco ou custo para ela.

      No artigo quis chamar a atenção para o fato de Minecraft ter sucesso independente de ser escrito em Java. O jogo vende bem porque é divertido e daria certo qualquer que fosse a linguagem usada para desenvolve-lo e acredito que este foi o tapa com luva de pelica, o fato que se o jogo é divertido as pessoas não ligam muito para como ele foi feito.

      Curtir

      • Fato! :)
        Uma boa ideia, vale mais do que mil tecnologias ( Java, flesh, c++, etc…), tudo é “ferramenta”, se a ideia é boa ela vinga de todo jeito, depois ela tende a ser melhorada e evoluida como sempre ocorre com quase tudo.

        Dancovich, o que achou do projeto Parallax?

        Curtir

        • Achei muito interessante mesmo. Infelizmente não tive tempo de baixar e estudar eu mesmo (nem meus próprios projetos to conseguindo tocar!) mas com certeza vou ficar de olho e usa-lo assim que possível.

          O que eu quero mesmo é ter tempo de ajudar no projeto. Deu uma olhada no LibGDX que te passei o link?

          Curtir

      • Pense bem no que você me falou. Ser *obrigado* a usar uma API de *terceiros* que roda *fora* da VM para fazer os recurssos essenciais de renderização gráfica, som e entrada de dados, não invalida java como plataforma para games?

        O problema dos bindings não é performance, mas garantia. A LWJGL não é mantida ou garantida pela Oracle. Não é atualizada pelo processo das JSRs. Não há qualquer garantia de que ela existirá nas plataformas que uma VM java existir. Não passa pelo mesmo processo de qualidade que o Java passa. E, claro, não há garantias de que os terceiros que a produzem se manterão no mercado pelo tempo que a Oracle se mantiver.

        É claro que a plataforma Java recorrerá a código nativo cedo ou tarde. Mas a diferença está justamente na integração que um código Java oficial tem com a VM e no fato de haver uma preocupação do *fabricante* de ter tudo funcionando, onde ele quer que se proponha a fazer a plataforma rodar e enquanto a plataforma existir.

        Essa garantia existe no XNA, na Unity, na SDL e em outras plataformas mais adequadas para games. Mas não existe em Java.

        Olha, eu sou louco para ver a Oracle dar a boa notícia de que a LWJGL passou a ser parte do Java, ou mesmo anunciar uma API 3D similar que rode realmente bem, dentro da VM java. Voto em todas as JSRs nesse sentido. Postaria imediatamente no Ponto V que finalmente o Java tornou-se adequado para jogos desktop e alardearia aos quatro ventos. Entretanto, para nossa infelicidade, a sinalização da fabricante é justamente a oposta. Basta ver pelos projetos abandonados: DarkStar, Java3D, JMF, entre outros.

        Enquanto formos obrigados a recorrer a código não Java para fazer games, não podemos falar que a plataforma, por si só, é completa para jogos. Enquanto a maioria dos bindings forem feitos por grupos de pessoas físicas e enquanto a própria Oracle negar que o mercado de games é interessante (e nem tentar fazer parcerias com empresas de consoles, por exemplo), o Java se manterá como uma plataforma não atrativa para a indústria de games AAA como um todo. Teremos exceções surgindo, como o próprio Minecraft, mas não o investimento maciço de empresas como a EA.

        Não estou falando que seja impossível fazer bons games usando esses bindings, nem que hoje essa combinação não criam uma ótima plataforma para games desktop. A minha crítica continua única e exclusivamente no fato de noticiarmos que o Java, sozinho, dá conta do recado.

        Também estou mostrando quais são os argumentos técnicos que espantam a indústria e os investidores e por que existe a alegação de que a plataforma, por si só, é inadequada para games.

        Deve-se lembrar que esses problemas não existem na concorrência.

        Curtir

        • Apesar do uso de biblioteca de terceiros carregar consigo o problema da garantia citada, isso não é de forma alguma um problema exclusivo do Java.

          Enquanto algumas pessoas hoje em dia criam jogos do zero, isso não é produtivo e a maioria das pessoas vai recorrer a diversos frameworks para facilitar as tarefas. Seja física, input, gráficos, som, o que for; muito raramente um jogo usará a plataforma nativa para todos esses recursos, sem o uso de nenhuma biblioteca de terceiros.

          Se formos procurar uma plataforma completa para jogos, uma que não requer absolutamente nada de terceiros para funcionar, acho que ficaremos a ver navios. C e C++ por si só tem APIs padrões limitadas, suas bibliotecas padrões não tem condições de possibilitar a criação de jogos sem custos gigantescos. OpenGL, OpenAL, DirectX, Box2D, Havoc, todas essas são bibliotecas de terceiros se formos pensar apenas na API “standard” da linguagem, a diferença sendo apenas que muitas dessas bibliotecas tem o suporte de grandes organizações enquanto as bibliotecas citadas do Java são mantidas pela comunidade. DirectX não é mais “oficial” em relação ao ANSI C do que LWJGL em relação ao JAVA.

          Achei interessante você incluir SDL como uma plataforma adequada e com garantias, visto que da mesma forma que LWJGL, SDL é uma biblioteca mantida pela comunidade e possui binding para várias linguagens, incluindo Java, todos mantidos por esta mesma comunidade.

          Onde concordamos é que Java não é adequado para jogos e que não houve um investimento por parte da Oracle na área, mas a Google investiu na linguagem (mesmo desenvolvendo sua própria VM) e hoje vemos jogos exclusivos para o Xperia Play, incluindo ports de Playstation, e a qualquer momento podemos ver consoles portáteis (e quem sabe caseiros) exclusívos baseados em Android. Apenas não acredito que existem razões técnicas para isso não ter acontecido ainda, as razões até o momento foram todas comerciais.

          Curtir

          • Sim, estou falando da plataforma Java, não da linguagem Java. Acho que isso devemos deixar claro nessa discussão. A linguagem Java na plataforma Android é bastante adequada para jogos. E, inclusive, já despertou o interesse da indústria pesada.

            No caso do C++, a linguagem não dá garantias de multiplataforma. Aliás, não dá garantias de quase nada, e não se posiciona como uma plataforma. Portanto, você deve mesmo recorrer a uma API de terceiros, que será sua plataforma de games.

            Mas note que citei a SDL como plataforma, e não o C ou o C++. Como o C é uma linguagem padronizada e produzida por vários fabricantes, há poucas preocupações quanto a sua continuidade, você se preocupa mesmo é com a plataforma que colocar sobre ele. E, ao final, você diz que produziu seu game em “SDL”, em “Allegro” e em “UDK”.

            Da mesma forma, quando desenvolvemos em Unity, dizemos que o jogo roda na plataforma Unity, e não em JavaScript, ou C#, ou seja lá qual for a linguagem que optamos por criar na Unity.

            Minha crítica é única e exclusivamente dizermos que a plataforma Java padrão é capaz de rodar games hardcore. A plataforma não é, faça você o game em Java, Groovy, Ruby ou qualquer outra linguagem que rode sobre a plataforma. Você sempre precisará de algo além da VM, pois a plataforma simplesmente não dá esse suporte.

            Nem o Minecraft e nem o Taikodom são escritos em Java padrão. São escritos em Java+LWJGL. Entretanto, matérias sobre esses games muitas vezes levam a crer basta ter uma VM java para rodá-los. Que nenhum binding foi usado, e que o Java padrão está dando conta do recado.

            O java padrão dá suporte apenas a games 2D simples, operados com mouse e teclado (obviamente, já é suficiente para explorar o Java em sites como miniclip, como já ocorre hoje), e aos browser games (aqueles, que se assemelham mais a páginas HTML), mas não a games 3D, ou games 2D com controles. Infelizmente, o Java padrão também está presente em poucos sistemas operacionais e dispositivos, se comparado a outras alternativas.

            É lógico que o mercado que sobra, o de games em PCs, é enorme e que essa combinação (Java+LWJGL) mostra que é possível programadores Java explorá-lo, nem que seja para usar como porta de entrada ou para manter um estúdio de médio porte. Não vejo o Notch reclamando e, certamente, o Minecraft não deixou ele pobre.

            Mas a indústria AAA cada vez foca nos consoles, e no maior número possível de dispositivos, onde muitas vezes a presença do Java é nula – e, infelizmente, a Oracle não faz nada para mudar esse quadro.

            Curtir

            • É mais ou menos isso que me chamou a atenção no Minecraft, o Notch não chamou a atenção para o fato do jogo ser feito em Java, outras pessoas chamaram a atenção e foram perguntar a ele.

              Ninguém se preocupa muito em que plataforma jogos em C++ foram feitos, quem desenvolve assume por padrão que uma centena de bibliotecas foram necessárias e ninguém se preocupa muito com isso, mas por algum motivo em Java existe essa preocupação, se foi “feito em Java puro”. Qualquer que seja a linguagem escolhida é claro que haverão centenas de bindings, bibliotecas externas, programação de shaders e outras coisas envolvidas, hoje em dia a indústria não requer nem se preocupa com nenhuma forma de purismo de plataforma, ela quer resultados.

              Fora quem nem toda plataforma de programação é própria para toda plataforma de hardware. No PC o SDL pode ser uma boa pedida, mas não tenho tanta certeza nos consoles (que eu saiba nenhum console hoje suporta oficialmente desenvolvimento em SDL). O XNA é muito interessante para desenvolver jogos para Xbox, mas apesar dele suportar Windows perfeitamente a maioria dos jogos Indie da MS fica no Xbox mesmo.

              Por isso também não me preocupo com o fato de Java não servir para jogos de console. Muitas plataformas de programação não suportam os consoles, principalmente se considerar que consoles são ambientes fechados e você deve seguir as regras dos fabricantes. É extremamente comum que as softhouses façam o que Notch precisou fazer com Minecraft, portar um jogo de uma plataforma para outra para suportar mais hardwares. Algumas softhouses contam com plataformas integradas que funcionam por exemplo tanto para Xbox quanto para PS3, mas nem sempre os resultados são adequados. Procure por exemplo o caso Bayonetta no 360 VS PS3, um clássico caso de péssimo port.

              Curtir

              • Sim e, no caso o Notch sempre deixou claro que usava LWJGL.

                Entretanto, o seu artigo não deixa isso claro (e nem o Michel, quando fala da Parallax). Aliás, bem pelo contrário, você diz claramente que ” ele roda em qualquer plataforma que tenha a máquina virtual Java “.

                Eu também concordo com você. Pouco importa onde o game tenha sido desenvolvido, contanto que funcione, e que deixe seus jogadores satisfeitos. A LWJGL é um ótimo binding, tem sido mantido com responsabilidade e é um grande exemplo da capacidade empreendedora da comunidade.

                Mas a argumentação que geralmente vejo é sobre a *plataforma Java* como ferramenta completa para jogos. Muitas vezes os fãs de java vêem games como Minecraft e Taikodom, e passam a anunciar que a plataforma está pronta, ou, como você falou, que está dando um “tapa de luvas” nos descrentes. Mas isso simplesmente ignora o fato de que o núcleo básico desses games não está rodando em Java, e não é suportado pela Oracle. Na minha opinião, uma plataforma só pode se dizer completa, se os desenvolvedores desses games não tiveram a necessidade de recorrer a código nativo.

                É fato que o comunidade Java pode contar com bindings e APIs, fora da plataforma e de excelente qualidade. Mas por melhor que sejam a qualidade desses bindings, eles só existem para preencher um gap, onde a plataforma não dá qualquer suporte.

                Finalmente, sobre o que você disse de somente em Java ter a preocupação de ser em “java puro”, e em C++ não. Na verdade, em Java existe essa preocupação pois só código Java puro roda sobre a VM, e dá as garantias de multiplataforma. E essa é a principal promessa da plataforma Java. “Code once, run everywhere”. Enfim, só código “java puro” pode ser usado para justificar se a “plataforma java” é completa ou não.

                Então, o resumo da opera é:
                – A plataforma Java dá suporte total a games? Não. Falta-lhe acesso a bibliotecas gráficas como OpenGL e DirectX, suporte a controles e a audio 3D. A Oracle também não dá a mínima para esse mercado.
                – A comunidade já fez ferramentas externas, para preender esse vazio onde o java não cobre? Sim, já fez, e são de excelente qualidade.
                – Você pode usar essas ferramentas para, pelo menos no que tange seu código, usar a linguagem java em 100% do desenvolvimento e fazer um game de qualidade? Sim.
                – O produto final será 100% java? Não. Será Java + bindings nativos. Para que rode num sistema operacional, será necessário a máquina java + esses bindings portados. O códigos dos bindigs são código C++ e estão sujeitos a problemas de códigos C++, que tipicamente não ocorrem em Java.
                – Isso é ruim? Não necessariamente. Felizmente, os muitos bindings hoje são bem escritos, cobrem a maior parte das plataformas relevantes onde o Java está e, no final, o jogador acaba não notando a diferença.
                – Há outras opções melhores? Para a grande indústria, há. Entretanto, se sua equipe já tem domínio do Java, e você ainda não sabe se seu jogo será um grande sucesso, pode ser melhor investir nessa arquitetura do que na curva de aprendizado de outras linguagens.

                Curtir

                • Concordei sobre o item 1 e 2, dito acima!

                  Se programo utilizando a linguagem Java, rodo sobre a JVM, uso um binding para acesso a algumas bibliotecas nativas, onde o binding foi criado por terceiros usando a linguagem Java (Código Java para acesso aos bindings “JNI”) para poder ter acesso a algo que calhou que a JVM não tem suporte nativo, no final não dizer que usei Java é tenso, é como acessar um banco de dados usando ODBC via VB, Delphi ou qualquer outro e dizer que não programei em Delphi/VB/etc. Mas realmente não estou fazendo 100% uso da plataforma, justamente pela JVM não me da suporte a alguns recursos, forçando o uso de binding).

                  * Quanto a funcionar em qualquer lugar que rode uma JVM, é legal termos algumas informações:

                  – Quais sistemas operacionais existem bindings para (Windows 32/64, Linux 32/64, MacOSX, Solaris), disponíveis pela própria LWGL e atualizados.

                  – Para Android, o slick esta com um projeto de ter uma versão dele para Android, e esta sendo trabalhado e evoluído (Ando acompanhando, e estou bem empolgado com seu avanço).

                  Curiosidade: Existe o projeto “LibGDX”, uma lib para desenvolvimento Desktop e Android usa opcionalmente LWJGL, feito usando a linguagem Java e o Slick esta analizando e pelo visto usando para agilizar esta compatibilidade.
                  http://code.google.com/p/libgdx/

                  – Quanto a Symbian LWJGL também atua neste ambiente.

                  No site http://www.einformacao.com.br/parallax/introducao
                  Procure: “Tecnologias envolvidas”
                  – Vai ver que não deixo uma tecnologia importante de fora, das que uso, além da linguagem Java, não deixo quem vem no site do projeto ficar no escuro, pelo contrario quanto mais eles souberem melhor, se não fica difícil até eles ajudarem caso queiram contribuir.

                  Curtir

              • PS: Eu só quero deixar claro que para mim é bem claro a distinção entre:
                1. Ser possível fazer games de alta qualidade usando o Java, mesmo que recorrendo a bindings;
                2. Ser o java uma plataforma completa para games;

                Enquanto o #1 é inegavelmente possível e o Minecraft está aí para provar isso, o #2 não é uma afirmação verdadeira (e boa parte, por desinteresse da própria Oracle, como já concordamos).

                Espero que fique claro que as duas argumentações são completamente diferentes. E que as minhas críticas se baseiam SOMENTE na segunda.

                Curtir

                • Quanto a minha afirmação de “roda em qualquer plataforma que suporte Java”, de fato ela não é verdadeira devido a necessidade de bindings. Infelizmente para escrever este post no Cosmic Effect, que é um blog gamer, tive que constantemente me preocupar com a quantidade de informação técnica presente, para não afastar o público que não se interessa por programação. Felizmente a sessão de comentários é para isso mesmo, para nesse papo legal quem se interessar mais poder se aprofundar no assunto.

                  Quanto a sua divisão de argumentações, quis passar no artigo mais a primeira situação mesmo. Para mim é claro que Java não é uma plataforma otimizada para jogos, talvez um dia ela “chegue lá”, mas hoje o máximo que podemos fazer é criar nossos jogos pessoais nela por ser a que conhecemos mais, mesmo tendo outras plataformas com muito mais ferramentas.

                  Não acho nem um pouco válida a afirmação que Java é uma plataforma completa para jogos, ela nunca vai ser, assim como C++ ANSI, C#, Ruby, etc. não são. Plataformas para criar jogos são Unity, Unreal, XNA, etc., plataformas que complementam a linguagem em que são baseadas com APIs completas para desenvolver jogos. É possível que um dia surja um Unity for Java ou algo similar, enquanto isso não acontecer Java não terá ampla aceitação comercial.

                  Curtir

              • (continuando a outra discussão).

                E quem sabe a JMonkeyEngine já não é uma sinalização nesse sentido. Sempre fico boquiaberto com a engine. E gostaria muito de vê-la se tornando mais popular na indústria. :)

                Curtir

                • JMonkeyEngine realmente me surpreendeu quando vi, mas não entendi porque ela não esta mais popular. Fiquei pasmo na epoca quando vi o NiftyGui sendo usada no JME.

                  Acho que pelo fato do ambiente não ser tão amistoso, ela não tenha ficado popular.

                  Curtir

  8. Vi essas imagens dos mapas meio que de perspectiva e me lembrei de ter conseguido adulterar os valores da angulação dessa envergação “Mode-7” dos campos do Final Fantasy VI no SNES (http://2.bp.blogspot.com/_quMb14PjuqI/TKxc0325qJI/AAAAAAAABXg/Jtb9GchAjW4/s1600/Final_Fantasy_6+0001.png). Inclusive deixar no natural (Sem valor algum). É bom pra quem gostaria de capturar elementos dos mapas.

    Curtir

  9. Danilo postou antes de mim, rsrsrs…
    Fiz um comentario extra acima deem uma lida.

    Mas gostei da conversa, aqui e no GUJ, estão sendo otimas.

    Espero que possam dar uma olhada com carinho no projeto Parallax depois, divulgar e até contribuir, seja de que forma for.

    Curtir

  10. Danilo é MUITO BOM ver você por aqui de novo!!!
    :)

    Quando você disse “para os dois de vocês que sequer ouviram falar do jogo”,pois é,eu sou um desses dois…ha ha ha!
    Sério,eu conhecia de nome,mas nunca fui buscar saber o que realmente era esse tal de Minecraft,agora,e somente agora,com seu texto,é que tomei verdadeiro conhecimento do tema.E antes que você pense que sou retrogamer que só joga Atari,nada disso,adoro PS3,XBox e…ok,também curto WII,que seja,ha ha haha! Estou ligado nos lançamentos que giram este mercado global,mas em especial Minecraft,sei lá,nunca me chamou atenção,até agora ha ha ha!

    A questão dos gráficos mais uma vez vem à tona,não é mesmo?É claro que gráficos são importantes mas em determinados estilos eles podem ser colocados em segundo ou terceiro plano.Mesmo correndo o risco de ser taxado de antiquado e velho babão,eu diria que os gráficos competem diretamente com a imaginação,quando mal empregados.
    Eu muitas vezes sou radical e afirmo que um bom jogo está invariavelmente submetido a um ótimo gameplay e um sistema sonoro decente só depois o gráfico aparece.Claro que existem variações para determinados estilos,mas no geral é isso.

    Este conjunto de blocos com funções simples parece que parte da mesma premissa do citado clássico LEGO,isto é,qualquer um pode brincar,montar e se divertir.Aliás a empresa LEGO tem origem na Dinamarca,fui verificar na Wiki,o programador de Minecraft é da Suécia,seria aquela região propícia a exportação de pecinhas e bloquinhos que se montam?Ha ha ha!
    A maleabilidade de Minecraft que você descreveu Danilo,torna o jogo imbatível no quesito diversão e criatividade,porque renova-se sempre e por demanda do próprio player.

    Ha ha ha ri muito quando você comparou o Java com repolho…parece que o usuário é praticamente induzido a instalá-lo sem conhecimento do que está fazendo…

    Na segunda foto que você diz:”Humm,deu até vontade de jogar…”
    eu na verdade fiquei com vontade foi de comer aquilo!Ha ha ha,putz ficou parecendo aqueles bolos temáticos de aniversário,ha ha ha ha!!!

    Ótimo post Danilo!!!Minecraft é sem dúvida divertido e provavelmente viciante…mas eu em particular ainda prefiro ter metas,caminhos ou estar estar submetido a regras e missões,essa liberdade que o jogo propõe é um bem que eu jamais saberia usar.

    Curtir

    • “….que um bom jogo está invariavelmente submetido a um ótimo gameplay e um sistema sonoro decente, só depois o gráfico aparece.Claro que existem variações para determinados estilos,mas no geral é isso.”

      Onde é que assina? :)

      Curtir

  11. Joguei um pouco da versão mobile do Minecraft, gostei bastante e talz, mas na época só havia o modo de jogo sem monstros e talz, então não conheci tudo do jogo. Mas sem dúvida alguma é uma grande idéia.
    Agora… PERAÍ! O QUE? MINECRAFT FOI FEITO EM JAVA?????? Cara, sério, eu não sabia disso. Eu sou programador Java e vivo usando a desculpa de que não aprendo a fazer jogos pq não é a melhor linguagem pra desenvolver esse tipo de coisa (e não é mesmo), mas saber disso já muda um pouco a minha cabeça em relação a que linguagem usar pra aprender isto. Estava até considerando usar C# (Cê Xarope… hehehe). Até pq, apesar da moda de jogos de celulares, minha vontade é desenvolver alguma coisa pra PC mesmo.
    Tenho medo de jogar esse jogo, ele parece ser um sugador de tempo sem igual. Aquele que vc começa e nunca mais acaba, pq vc sempre vai tendo idéias, e vai abandonando pq teve outras e nunca para de jogar. Mas que ele é uma idéia genial, isso ele é.
    E gostaria que todos os desenvolvedores mantessem essa premissa para seus jogos: fazer com que eles sejam acima de tudo “divertidos”. Infelizmente isso vem sendo esquecido na maioria esmagadora dos jogos atuais.
    Cara, gostei muito da sua análise técnica sobre o jogo, é um ponto de vista realmente diferente dos demais reviews.
    Abraços

    Curtir

  12. Graaande Danilo! Adorei seu artigo!

    Me pareceu um tipo de Little Big Planet esse jogo, ou estou errado?

    Eu sou daqueles que somente “ouviram falar” de MineCraft e fiquei surpreso de saber que foi feito em JAVA. Eu sou de uma geração de programadores anteriores ao JAVA. Na minha época a O.O.(Orientação a Objetos) era ensinada na faculdade em C++ mesmo. Ninguém usava JAVA, acho que nem existia ainda, por isso meu perfil profissional foi todo se moldando nas plataformas da Microsoft (VB, ASP).

    Sempre tive horror àquelas trocentas configurações de ambiente que precisavam ser feitas para uma aplicação JAVA rodar. Vejo o pessoal lá do trabalho que mexe com isso perder a paciência preparando os ambientes, aqueles trocentos componentes (bindinds como vc chama né?) que precisam ser configurados, XML pra cá, XML pra lá.

    Eu como sempre fui muito prático, gosto de instalar e já começar a usar. Penso que não se deve perder tempo com a tecnologia, mas a com o negócio, nesse caso o jogo em sí (gameplay, enredo e etc). A tecnologia está ai pra ser uma ferramenta, não uma dor de cabeça. O fato da maioria dos comentários deste post se referirem a problemas de tecnologia no uso do JAVA corrobora com o que eu penso a respeito.

    No mais, concordo com todos quando dizem que o que importa é que o jogo seja divertido. Afinal de contas, nós gostamos é de jogar né? rs

    Forte abraço colega!

    Curtir

    • Fala Euler, blz.

      Rapaz, é engraçado você comentar sobre sua experiência com C++ e Java, comigo foi ao contrário. Como aprendi OO com Java, hoje acho C++ confuso. Já entendo que é só limitação minha, que se eu me dedicasse iria ver que é fácil, mas hoje não consigo entender vários códigos que encontro em C++.

      Só pra esclarecer, os bindings a que estamos nos referindo são as chamadas a bibliotecas nativas, normalmente feitas em C++. Quando o Java não possui algum recurso (por exemplo, acesso ao OpenGL) você pode usar um recurso chamado JNI para mapear as funções contidas em uma biblioteca nativa para métodos Java, assim você continua programando em Java mas as chamadas de método são repassadas para a biblioteca em tempo de execução.

      Agora, as configurações necessárias em Java (normalmente em sistemas WEB) as vezes são um saco mesmo. Não tem jeito, o ambiente é mais aberto daí cada fabricante de framework adota sua solução. Os ambientes MS normalmente são mais fechados, com boa parte dos frameworks desenvolvidos pela própria MS e por isso mesmo as configurações são mais simples e integradas.

      Curtir

  13. Eu me junto à turma que não sabia nada sobre Minecraft, ênfase no “sabia”, pois agora sei. Achava bonitas as imagens, mas bonitas mesmo e parecia ser uma modinha, com tanta gente fazendo vídeo no youtube. Era estranho, gente nova, muito nova e gente velha, velhaco retrogamer mesmo também na onda. Danilo abriu os olhos de muitos com este post — claro que o assunto avançou pro lado tecnológico como ele propôs — mas o artigo tem bastante peso também para nós que não programamos.

    Pelo seu texto, a gente vê que Minecraft é mesmo único, não é nem indie, nem é “um mod”; Não é exatamente um jogo, mas “se torna um jogo”. É, Danilo, experimentar esse minecraft.zip aqui imediatamente e deixar de conversa fiada…

    Todos nós agradecemos pela iluminação cósmica provida por este artigo :)

    Curtir

  14. Republicou isso em Minecraft 18.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: